learning-loop-node 0.12.0__tar.gz → 0.12.1__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.12.0 → learning_loop_node-0.12.1}/PKG-INFO +1 -1
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/data_exchanger.py +0 -3
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/loop_communication.py +21 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/pyproject.toml +1 -1
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/README.md +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/__init__.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/annotation/__init__.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/annotation/annotator_logic.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/annotation/annotator_node.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/data_classes/__init__.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/data_classes/annotations.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/data_classes/detections.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/data_classes/general.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/data_classes/image_metadata.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/data_classes/socket_response.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/data_classes/training.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/__init__.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/detector_logic.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/detector_node.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/inbox_filter/__init__.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/inbox_filter/cam_observation_history.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/inbox_filter/relevance_filter.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/outbox.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/rest/__init__.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/rest/about.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/rest/backdoor_controls.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/rest/detect.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/rest/model_version_control.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/rest/operation_mode.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/rest/outbox_mode.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/rest/upload.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/examples/novelty_score_updater.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/globals.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/helpers/__init__.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/helpers/environment_reader.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/helpers/gdrive_downloader.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/helpers/log_conf.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/helpers/misc.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/node.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/py.typed +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/rest.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/__init__.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/annotator/__init__.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/annotator/conftest.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/annotator/pytest.ini +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/annotator/test_annotator_node.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/detector/__init__.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/detector/conftest.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/detector/inbox_filter/__init__.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/detector/inbox_filter/test_observation.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/detector/inbox_filter/test_relevance_group.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/detector/inbox_filter/test_unexpected_observations_count.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/detector/pytest.ini +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/detector/test.jpg +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/detector/test_client_communication.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/detector/test_detector_node.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/detector/test_outbox.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/detector/test_relevance_filter.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/detector/testing_detector.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/general/__init__.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/general/conftest.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/general/pytest.ini +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/general/test_data/file_1.txt +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/general/test_data/file_2.txt +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/general/test_data/model.json +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/general/test_data_classes.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/general/test_downloader.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/general/test_learning_loop_node.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/test_helper.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/__init__.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/conftest.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/pytest.ini +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/state_helper.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/states/__init__.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/states/test_state_cleanup.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/states/test_state_detecting.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/states/test_state_download_train_model.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/states/test_state_prepare.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/states/test_state_sync_confusion_matrix.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/states/test_state_train.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/states/test_state_upload_detections.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/states/test_state_upload_model.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/test_errors.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/test_trainer_states.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/testing_trainer_logic.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/__init__.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/downloader.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/exceptions.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/executor.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/io_helpers.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/rest/__init__.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/rest/backdoor_controls.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/test_executor.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/trainer_logic.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/trainer_logic_generic.py +0 -0
- {learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/trainer_node.py +0 -0
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/data_exchanger.py
RENAMED
|
@@ -124,9 +124,6 @@ class DataExchanger():
|
|
|
124
124
|
|
|
125
125
|
async def _download_one_image(self, path: str, image_id: str, image_folder: str) -> None:
|
|
126
126
|
response = await self.loop_communicator.get(path)
|
|
127
|
-
if response.status_code == 429:
|
|
128
|
-
await asyncio.sleep(1)
|
|
129
|
-
response = await self.loop_communicator.get(path)
|
|
130
127
|
if response.status_code != HTTPStatus.OK:
|
|
131
128
|
logging.error('bad status code %s for %s. Details: %s', response.status_code, path, response.text)
|
|
132
129
|
return
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/loop_communication.py
RENAMED
|
@@ -10,6 +10,23 @@ from .helpers import environment_reader
|
|
|
10
10
|
|
|
11
11
|
logging.basicConfig(level=logging.INFO)
|
|
12
12
|
|
|
13
|
+
SLEEP_TIME_ON_429 = 5
|
|
14
|
+
MAX_RETRIES_ON_429 = 20
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def retry_on_429(func: Callable[..., Awaitable]) -> Callable[..., Awaitable]:
|
|
18
|
+
"""Decorator that retries requests that receive a 429 status code."""
|
|
19
|
+
async def wrapper(*args, **kwargs) -> httpx.Response:
|
|
20
|
+
for _ in range(MAX_RETRIES_ON_429):
|
|
21
|
+
response = await func(*args, **kwargs)
|
|
22
|
+
if response.status_code != 429:
|
|
23
|
+
return response
|
|
24
|
+
|
|
25
|
+
await asyncio.sleep(SLEEP_TIME_ON_429)
|
|
26
|
+
|
|
27
|
+
return response
|
|
28
|
+
return wrapper
|
|
29
|
+
|
|
13
30
|
|
|
14
31
|
class LoopCommunicationException(Exception):
|
|
15
32
|
"""Raised when there's an unexpected answer from the learning loop."""
|
|
@@ -96,6 +113,7 @@ class LoopCommunicator():
|
|
|
96
113
|
return await self.retry_on_401(self._get, path, api_prefix)
|
|
97
114
|
return await self._get(path, api_prefix)
|
|
98
115
|
|
|
116
|
+
@retry_on_429
|
|
99
117
|
async def _get(self, path: str, api_prefix: str) -> httpx.Response:
|
|
100
118
|
return await self.async_client.get(api_prefix+path)
|
|
101
119
|
|
|
@@ -105,6 +123,7 @@ class LoopCommunicator():
|
|
|
105
123
|
return await self.retry_on_401(self._put, path, files, api_prefix, **kwargs)
|
|
106
124
|
return await self._put(path, files, api_prefix, **kwargs)
|
|
107
125
|
|
|
126
|
+
@retry_on_429
|
|
108
127
|
async def _put(self, path: str, files: Optional[List[str]], api_prefix: str, **kwargs) -> httpx.Response:
|
|
109
128
|
if files is None:
|
|
110
129
|
return await self.async_client.put(api_prefix+path, **kwargs)
|
|
@@ -133,6 +152,7 @@ class LoopCommunicator():
|
|
|
133
152
|
return await self.retry_on_401(self._post, path, api_prefix, **kwargs)
|
|
134
153
|
return await self._post(path, api_prefix, **kwargs)
|
|
135
154
|
|
|
155
|
+
@retry_on_429
|
|
136
156
|
async def _post(self, path, api_prefix='/api', **kwargs) -> httpx.Response:
|
|
137
157
|
return await self.async_client.post(api_prefix+path, **kwargs)
|
|
138
158
|
|
|
@@ -142,5 +162,6 @@ class LoopCommunicator():
|
|
|
142
162
|
return await self.retry_on_401(self._delete, path, api_prefix, **kwargs)
|
|
143
163
|
return await self._delete(path, api_prefix, **kwargs)
|
|
144
164
|
|
|
165
|
+
@retry_on_429
|
|
145
166
|
async def _delete(self, path, api_prefix, **kwargs) -> httpx.Response:
|
|
146
167
|
return await self.async_client.delete(api_prefix+path, **kwargs)
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/annotation/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/data_classes/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/data_classes/general.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/data_classes/training.py
RENAMED
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/detector_node.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/outbox.py
RENAMED
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/rest/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/rest/about.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/rest/detect.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/detector/rest/upload.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/helpers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/helpers/log_conf.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/__init__.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
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/detector/pytest.ini
RENAMED
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/detector/test.jpg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/general/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/general/conftest.py
RENAMED
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/general/pytest.ini
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.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/test_helper.py
RENAMED
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/conftest.py
RENAMED
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/tests/trainer/pytest.ini
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.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/downloader.py
RENAMED
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/exceptions.py
RENAMED
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/executor.py
RENAMED
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/io_helpers.py
RENAMED
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/rest/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/test_executor.py
RENAMED
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/trainer_logic.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.12.0 → learning_loop_node-0.12.1}/learning_loop_node/trainer/trainer_node.py
RENAMED
|
File without changes
|