learning-loop-node 0.10.2__tar.gz → 0.10.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of learning-loop-node might be problematic. Click here for more details.
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/PKG-INFO +2 -1
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/README.md +1 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/loop_communication.py +6 -5
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/node.py +15 -2
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/pyproject.toml +1 -1
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/__init__.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/annotation/__init__.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/annotation/annotator_logic.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/annotation/annotator_node.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/annotation/tests/test_annotator_node.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/conftest.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/data_classes/__init__.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/data_classes/annotations.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/data_classes/detections.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/data_classes/general.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/data_classes/socket_response.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/data_classes/training.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/data_exchanger.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/__init__.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/detector_logic.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/detector_node.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/inbox_filter/__init__.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/inbox_filter/cam_observation_history.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/inbox_filter/relevance_filter.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/inbox_filter/tests/test_observation.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/inbox_filter/tests/test_relevance_group.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/inbox_filter/tests/test_unexpected_observations_count.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/outbox.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/rest/__init__.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/rest/about.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/rest/backdoor_controls.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/rest/detect.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/rest/operation_mode.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/rest/upload.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/tests/__init__.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/tests/conftest.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/tests/test.jpg +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/tests/test_client_communication.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/tests/test_outbox.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/tests/test_relevance_filter.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/tests/testing_detector.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/examples/novelty_score_updater.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/globals.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/helpers/__init__.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/helpers/environment_reader.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/helpers/gdrive_downloader.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/helpers/log_conf.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/helpers/misc.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/py.typed +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/pytest.ini +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/tests/__init__.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/tests/conftest.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/tests/test_data/file_1.txt +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/tests/test_data/file_2.txt +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/tests/test_data/model.json +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/tests/test_data_classes.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/tests/test_downloader.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/tests/test_executor.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/tests/test_helper.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/tests/test_learning_loop_node.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/__init__.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/downloader.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/executor.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/io_helpers.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/rest/__init__.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/rest/backdoor_controls.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/rest/controls.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/tests/__init__.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/tests/conftest.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/tests/state_helper.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/tests/states/__init__.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/tests/states/test_state_cleanup.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/tests/states/test_state_detecting.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/tests/states/test_state_download_train_model.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/tests/states/test_state_prepare.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/tests/states/test_state_sync_confusion_matrix.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/tests/states/test_state_train.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/tests/states/test_state_upload_detections.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/tests/states/test_state_upload_model.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/tests/test_errors.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/tests/test_trainer_states.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/tests/testing_trainer_logic.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/trainer_logic.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/trainer_logic_generic.py +0 -0
- {learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/trainer_node.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: learning-loop-node
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.3
|
|
4
4
|
Summary: Python Library for Nodes which connect to the Zauberzeug Learning Loop
|
|
5
5
|
Home-page: https://github.com/zauberzeug/learning_loop_node
|
|
6
6
|
License: MIT
|
|
@@ -62,6 +62,7 @@ You can configure connection to our Learning Loop by specifying the following en
|
|
|
62
62
|
| LOOP_HOST | HOST | Learning Loop address (e.g. learning-loop.ai) | all |
|
|
63
63
|
| LOOP_USERNAME | USERNAME | Learning Loop user name | all besides Detector |
|
|
64
64
|
| LOOP_PASSWORD | PASSWORD | Learning Loop password | all besides Detector |
|
|
65
|
+
| LOOP_SSL_CERT_PATH | - | Path to the SSL certificate | all (opt.) |
|
|
65
66
|
| LOOP_ORGANIZATION | ORGANIZATION | Organization name | Detector |
|
|
66
67
|
| LOOP_PROJECT | PROJECT | Project name | Detector |
|
|
67
68
|
| MIN_UNCERTAIN_THRESHOLD | PROJECT | smallest confidence (float) at which auto-upload will happen | Detector |
|
|
@@ -22,6 +22,7 @@ You can configure connection to our Learning Loop by specifying the following en
|
|
|
22
22
|
| LOOP_HOST | HOST | Learning Loop address (e.g. learning-loop.ai) | all |
|
|
23
23
|
| LOOP_USERNAME | USERNAME | Learning Loop user name | all besides Detector |
|
|
24
24
|
| LOOP_PASSWORD | PASSWORD | Learning Loop password | all besides Detector |
|
|
25
|
+
| LOOP_SSL_CERT_PATH | - | Path to the SSL certificate | all (opt.) |
|
|
25
26
|
| LOOP_ORGANIZATION | ORGANIZATION | Organization name | Detector |
|
|
26
27
|
| LOOP_PROJECT | PROJECT | Project name | Detector |
|
|
27
28
|
| MIN_UNCERTAIN_THRESHOLD | PROJECT | smallest confidence (float) at which auto-upload will happen | Detector |
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/loop_communication.py
RENAMED
|
@@ -17,9 +17,9 @@ class LoopCommunicationException(Exception):
|
|
|
17
17
|
class LoopCommunicator():
|
|
18
18
|
def __init__(self) -> None:
|
|
19
19
|
host: str = environment_reader.host(default='learning-loop.ai')
|
|
20
|
-
ssl_cert_path = environment_reader.ssl_certificate_path()
|
|
21
|
-
if ssl_cert_path:
|
|
22
|
-
logging.info('Using SSL certificate at %s', ssl_cert_path)
|
|
20
|
+
self.ssl_cert_path = environment_reader.ssl_certificate_path()
|
|
21
|
+
if self.ssl_cert_path:
|
|
22
|
+
logging.info('Using SSL certificate at %s', self.ssl_cert_path)
|
|
23
23
|
else:
|
|
24
24
|
logging.info('No SSL certificate path set')
|
|
25
25
|
self.host: str = host
|
|
@@ -28,8 +28,9 @@ class LoopCommunicator():
|
|
|
28
28
|
self.organization: str = environment_reader.organization() # used by mock_detector
|
|
29
29
|
self.project: str = environment_reader.project() # used by mock_detector
|
|
30
30
|
self.base_url: str = f'http{"s" if "learning-loop.ai" in host else ""}://' + host
|
|
31
|
-
if ssl_cert_path:
|
|
32
|
-
self.async_client = httpx.AsyncClient(
|
|
31
|
+
if self.ssl_cert_path:
|
|
32
|
+
self.async_client = httpx.AsyncClient(
|
|
33
|
+
base_url=self.base_url, timeout=Timeout(60.0), verify=self.ssl_cert_path)
|
|
33
34
|
else:
|
|
34
35
|
self.async_client = httpx.AsyncClient(base_url=self.base_url, timeout=Timeout(60.0))
|
|
35
36
|
self.async_client.cookies.clear()
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import logging
|
|
3
|
+
import ssl
|
|
3
4
|
import sys
|
|
4
5
|
from abc import abstractmethod
|
|
5
6
|
from contextlib import asynccontextmanager
|
|
@@ -8,6 +9,7 @@ from typing import Any, Optional
|
|
|
8
9
|
|
|
9
10
|
import aiohttp
|
|
10
11
|
import socketio
|
|
12
|
+
from aiohttp import TCPConnector
|
|
11
13
|
from fastapi import FastAPI
|
|
12
14
|
from socketio import AsyncClient
|
|
13
15
|
|
|
@@ -122,8 +124,19 @@ class Node(FastAPI):
|
|
|
122
124
|
"""Create a socket.io client that communicates with the learning loop and register the events.
|
|
123
125
|
Note: The method is called in startup and soft restart of detector, so the _sio_client should always be available."""
|
|
124
126
|
|
|
125
|
-
self.
|
|
126
|
-
|
|
127
|
+
if self.loop_communicator.ssl_cert_path:
|
|
128
|
+
logging.info(f'SIO using SSL certificate path: {self.loop_communicator.ssl_cert_path}')
|
|
129
|
+
ssl_context = ssl.create_default_context(cafile=self.loop_communicator.ssl_cert_path)
|
|
130
|
+
ssl_context.check_hostname = False
|
|
131
|
+
ssl_context.verify_mode = ssl.CERT_REQUIRED
|
|
132
|
+
connector = TCPConnector(ssl=ssl_context)
|
|
133
|
+
self._sio_client = AsyncClient(request_timeout=20,
|
|
134
|
+
http_session=aiohttp.ClientSession(cookies=self.loop_communicator.get_cookies(),
|
|
135
|
+
connector=connector))
|
|
136
|
+
|
|
137
|
+
else:
|
|
138
|
+
self._sio_client = AsyncClient(request_timeout=20,
|
|
139
|
+
http_session=aiohttp.ClientSession(cookies=self.loop_communicator.get_cookies()))
|
|
127
140
|
|
|
128
141
|
# pylint: disable=protected-access
|
|
129
142
|
self.sio_client._trigger_event = ensure_socket_response(self.sio_client._trigger_event)
|
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/annotation/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/data_classes/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/data_classes/general.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/data_classes/training.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/data_exchanger.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/detector_node.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/outbox.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/rest/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/rest/about.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/rest/detect.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/rest/upload.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/detector/tests/test.jpg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/helpers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/helpers/log_conf.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/tests/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/tests/conftest.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/tests/test_downloader.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/tests/test_executor.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/tests/test_helper.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/downloader.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/executor.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/io_helpers.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/rest/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/rest/controls.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/tests/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/tests/conftest.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/trainer_logic.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.2 → learning_loop_node-0.10.3}/learning_loop_node/trainer/trainer_node.py
RENAMED
|
File without changes
|