learning-loop-node 0.13.4__tar.gz → 0.13.6__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.13.4 → learning_loop_node-0.13.6}/PKG-INFO +1 -1
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/detector_logic.py +18 -21
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/detector_node.py +30 -13
- learning_loop_node-0.13.6/learning_loop_node/detector/exceptions.py +7 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/node.py +2 -1
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/detector/conftest.py +0 -4
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/detector/test_client_communication.py +0 -3
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/pyproject.toml +1 -1
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/README.md +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/__init__.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/annotation/__init__.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/annotation/annotator_logic.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/annotation/annotator_node.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/data_classes/__init__.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/data_classes/annotations.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/data_classes/detections.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/data_classes/general.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/data_classes/image_metadata.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/data_classes/socket_response.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/data_classes/training.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/data_exchanger.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/__init__.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/inbox_filter/__init__.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/inbox_filter/cam_observation_history.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/inbox_filter/relevance_filter.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/outbox.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/rest/__init__.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/rest/about.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/rest/backdoor_controls.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/rest/detect.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/rest/model_version_control.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/rest/operation_mode.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/rest/outbox_mode.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/rest/upload.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/enums/__init__.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/enums/annotator.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/enums/detector.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/enums/general.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/enums/trainer.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/examples/novelty_score_updater.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/globals.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/helpers/__init__.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/helpers/environment_reader.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/helpers/gdrive_downloader.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/helpers/log_conf.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/helpers/misc.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/loop_communication.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/py.typed +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/rest.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/__init__.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/annotator/__init__.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/annotator/conftest.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/annotator/pytest.ini +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/annotator/test_annotator_node.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/detector/__init__.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/detector/inbox_filter/__init__.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/detector/inbox_filter/test_observation.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/detector/inbox_filter/test_relevance_group.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/detector/inbox_filter/test_unexpected_observations_count.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/detector/pytest.ini +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/detector/test.jpg +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/detector/test_detector_node.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/detector/test_outbox.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/detector/test_relevance_filter.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/detector/testing_detector.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/general/__init__.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/general/conftest.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/general/pytest.ini +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/general/test_data/file_1.txt +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/general/test_data/file_2.txt +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/general/test_data/model.json +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/general/test_data_classes.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/general/test_downloader.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/general/test_learning_loop_node.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/test_helper.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/__init__.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/conftest.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/pytest.ini +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/state_helper.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/states/__init__.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/states/test_state_cleanup.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/states/test_state_detecting.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/states/test_state_download_train_model.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/states/test_state_prepare.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/states/test_state_sync_confusion_matrix.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/states/test_state_train.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/states/test_state_upload_detections.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/states/test_state_upload_model.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/test_errors.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/test_trainer_states.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/testing_trainer_logic.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/__init__.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/downloader.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/exceptions.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/executor.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/io_helpers.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/rest/__init__.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/rest/backdoor_controls.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/test_executor.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/trainer_logic.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/trainer_logic_generic.py +0 -0
- {learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/trainer_node.py +0 -0
|
@@ -6,41 +6,38 @@ import numpy as np
|
|
|
6
6
|
|
|
7
7
|
from ..data_classes import ImageMetadata, ModelInformation
|
|
8
8
|
from ..globals import GLOBALS
|
|
9
|
+
from .exceptions import NodeNeedsRestartError
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
class DetectorLogic():
|
|
12
13
|
|
|
13
14
|
def __init__(self, model_format: str) -> None:
|
|
14
15
|
self.model_format: str = model_format
|
|
15
|
-
self.
|
|
16
|
+
self.model_info: Optional[ModelInformation] = None
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
self._model_info = None
|
|
19
|
-
|
|
20
|
-
@property
|
|
21
|
-
def model_info(self) -> ModelInformation:
|
|
22
|
-
if self._model_info is None:
|
|
23
|
-
raise Exception('Model not loaded')
|
|
24
|
-
return self._model_info
|
|
18
|
+
self._remaining_init_attempts: int = 2
|
|
25
19
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return self._model_info is not None
|
|
20
|
+
async def soft_reload(self):
|
|
21
|
+
self.model_info = None
|
|
29
22
|
|
|
30
|
-
def
|
|
23
|
+
def load_model_info_and_init_model(self):
|
|
31
24
|
logging.info('Loading model from %s', GLOBALS.data_folder)
|
|
32
|
-
model_info = ModelInformation.load_from_disk(f'{GLOBALS.data_folder}/model')
|
|
33
|
-
if model_info is None:
|
|
25
|
+
self.model_info = ModelInformation.load_from_disk(f'{GLOBALS.data_folder}/model')
|
|
26
|
+
if self.model_info is None:
|
|
34
27
|
logging.error('No model found')
|
|
35
|
-
self.
|
|
36
|
-
|
|
28
|
+
self.model_info = None
|
|
29
|
+
return
|
|
30
|
+
|
|
37
31
|
try:
|
|
38
|
-
self._model_info = model_info
|
|
39
32
|
self.init()
|
|
40
|
-
logging.info('Successfully loaded model %s', self.
|
|
33
|
+
logging.info('Successfully loaded model %s', self.model_info)
|
|
34
|
+
self._remaining_init_attempts = 2
|
|
41
35
|
except Exception:
|
|
42
|
-
self.
|
|
43
|
-
|
|
36
|
+
self._remaining_init_attempts -= 1
|
|
37
|
+
self.model_info = None
|
|
38
|
+
logging.error('Could not init model %s. Retries left: %s', self.model_info, self._remaining_init_attempts)
|
|
39
|
+
if self._remaining_init_attempts == 0:
|
|
40
|
+
raise NodeNeedsRestartError('Could not init model') from None
|
|
44
41
|
raise
|
|
45
42
|
|
|
46
43
|
@abstractmethod
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/detector_node.py
RENAMED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import contextlib
|
|
3
|
+
import math
|
|
3
4
|
import os
|
|
4
5
|
import shutil
|
|
5
6
|
import subprocess
|
|
7
|
+
import sys
|
|
6
8
|
from dataclasses import asdict
|
|
7
9
|
from datetime import datetime
|
|
8
10
|
from threading import Thread
|
|
@@ -14,8 +16,16 @@ from dacite import from_dict
|
|
|
14
16
|
from fastapi.encoders import jsonable_encoder
|
|
15
17
|
from socketio import AsyncClient
|
|
16
18
|
|
|
17
|
-
from ..data_classes import (
|
|
18
|
-
|
|
19
|
+
from ..data_classes import (
|
|
20
|
+
AboutResponse,
|
|
21
|
+
Category,
|
|
22
|
+
Context,
|
|
23
|
+
DetectionStatus,
|
|
24
|
+
ImageMetadata,
|
|
25
|
+
ModelInformation,
|
|
26
|
+
ModelVersionResponse,
|
|
27
|
+
Shape,
|
|
28
|
+
)
|
|
19
29
|
from ..data_classes.socket_response import SocketResponse
|
|
20
30
|
from ..data_exchanger import DataExchanger, DownloadError
|
|
21
31
|
from ..enums import OperationMode, VersionMode
|
|
@@ -23,6 +33,7 @@ from ..globals import GLOBALS
|
|
|
23
33
|
from ..helpers import environment_reader
|
|
24
34
|
from ..node import Node
|
|
25
35
|
from .detector_logic import DetectorLogic
|
|
36
|
+
from .exceptions import NodeNeedsRestartError
|
|
26
37
|
from .inbox_filter.relevance_filter import RelevanceFilter
|
|
27
38
|
from .outbox import Outbox
|
|
28
39
|
from .rest import about as rest_about
|
|
@@ -80,13 +91,13 @@ class DetectorNode(Node):
|
|
|
80
91
|
return AboutResponse(
|
|
81
92
|
operation_mode=self.operation_mode.value,
|
|
82
93
|
state=self.status.state,
|
|
83
|
-
model_info=self.detector_logic.
|
|
94
|
+
model_info=self.detector_logic.model_info, # pylint: disable=protected-access
|
|
84
95
|
target_model=self.target_model.version if self.target_model else None,
|
|
85
96
|
version_control=self.version_control.value
|
|
86
97
|
)
|
|
87
98
|
|
|
88
99
|
def get_model_version_response(self) -> ModelVersionResponse:
|
|
89
|
-
current_version = self.detector_logic.
|
|
100
|
+
current_version = self.detector_logic.model_info.version if self.detector_logic.model_info is not None else 'None' # pylint: disable=protected-access
|
|
90
101
|
target_version = self.target_model.version if self.target_model is not None else 'None'
|
|
91
102
|
loop_version = self.loop_deployment_target.version if self.loop_deployment_target is not None else 'None'
|
|
92
103
|
|
|
@@ -170,13 +181,13 @@ class DetectorNode(Node):
|
|
|
170
181
|
|
|
171
182
|
# simulate startup
|
|
172
183
|
await self.detector_logic.soft_reload()
|
|
173
|
-
self.detector_logic.
|
|
184
|
+
self.detector_logic.load_model_info_and_init_model()
|
|
174
185
|
self.operation_mode = OperationMode.Idle
|
|
175
186
|
|
|
176
187
|
async def on_startup(self) -> None:
|
|
177
188
|
try:
|
|
178
189
|
self.outbox.ensure_continuous_upload()
|
|
179
|
-
self.detector_logic.
|
|
190
|
+
self.detector_logic.load_model_info_and_init_model()
|
|
180
191
|
except Exception:
|
|
181
192
|
self.log.exception("error during 'startup'")
|
|
182
193
|
self.operation_mode = OperationMode.Idle
|
|
@@ -235,7 +246,7 @@ class DetectorNode(Node):
|
|
|
235
246
|
|
|
236
247
|
@self.sio.event
|
|
237
248
|
async def info(sid) -> Dict:
|
|
238
|
-
if self.detector_logic.
|
|
249
|
+
if self.detector_logic.model_info is not None:
|
|
239
250
|
return asdict(self.detector_logic.model_info)
|
|
240
251
|
return {"status": "No model loaded"}
|
|
241
252
|
|
|
@@ -272,7 +283,7 @@ class DetectorNode(Node):
|
|
|
272
283
|
'''upload an image with detections'''
|
|
273
284
|
|
|
274
285
|
detection_data = data.get('detections', {})
|
|
275
|
-
if detection_data and self.detector_logic.
|
|
286
|
+
if detection_data and self.detector_logic.model_info is not None:
|
|
276
287
|
try:
|
|
277
288
|
image_metadata = from_dict(data_class=ImageMetadata, data=detection_data)
|
|
278
289
|
except Exception as e:
|
|
@@ -321,9 +332,12 @@ class DetectorNode(Node):
|
|
|
321
332
|
self.log.debug('not checking for updates; no target model selected')
|
|
322
333
|
return
|
|
323
334
|
|
|
324
|
-
|
|
335
|
+
if self.detector_logic.model_info is not None:
|
|
336
|
+
current_version = self.detector_logic.model_info.version
|
|
337
|
+
else:
|
|
338
|
+
current_version = None
|
|
325
339
|
|
|
326
|
-
if
|
|
340
|
+
if current_version != self.target_model.version:
|
|
327
341
|
self.log.info('Current model "%s" needs to be updated to %s',
|
|
328
342
|
current_version or "-", self.target_model.version)
|
|
329
343
|
|
|
@@ -349,7 +363,10 @@ class DetectorNode(Node):
|
|
|
349
363
|
self.log.info('Updated symlink for model to %s', os.readlink(model_symlink))
|
|
350
364
|
|
|
351
365
|
try:
|
|
352
|
-
self.detector_logic.
|
|
366
|
+
self.detector_logic.load_model_info_and_init_model()
|
|
367
|
+
except NodeNeedsRestartError:
|
|
368
|
+
self.log.error('Node needs restart')
|
|
369
|
+
sys.exit(0)
|
|
353
370
|
except Exception:
|
|
354
371
|
self.log.exception('Could not load model, will retry download on next check')
|
|
355
372
|
shutil.rmtree(target_model_folder, ignore_errors=True)
|
|
@@ -383,9 +400,9 @@ class DetectorNode(Node):
|
|
|
383
400
|
self.log.info('Status sync failed: not connected')
|
|
384
401
|
raise Exception('Status sync failed: not connected')
|
|
385
402
|
|
|
386
|
-
|
|
403
|
+
if self.detector_logic.model_info is not None:
|
|
387
404
|
current_model = self.detector_logic.model_info.version
|
|
388
|
-
|
|
405
|
+
else:
|
|
389
406
|
current_model = None
|
|
390
407
|
|
|
391
408
|
target_model_version = self.target_model.version if self.target_model else None
|
|
@@ -74,6 +74,7 @@ class Node(FastAPI):
|
|
|
74
74
|
self.repeat_loop_lock = asyncio.Lock()
|
|
75
75
|
|
|
76
76
|
self.previous_state: Optional[str] = None
|
|
77
|
+
self.repeat_loop_cycle_sec = 5
|
|
77
78
|
|
|
78
79
|
def log_status_on_change(self, current_state_str: str, full_status: Any):
|
|
79
80
|
if self.previous_state != current_state_str:
|
|
@@ -146,7 +147,7 @@ class Node(FastAPI):
|
|
|
146
147
|
except Exception:
|
|
147
148
|
self.log.exception('error in repeat loop')
|
|
148
149
|
|
|
149
|
-
await asyncio.sleep(
|
|
150
|
+
await asyncio.sleep(self.repeat_loop_cycle_sec)
|
|
150
151
|
|
|
151
152
|
async def _ensure_sio_connection(self):
|
|
152
153
|
if self.socket_connection_broken or self._sio_client is None or not self.sio_client.connected:
|
|
@@ -129,10 +129,6 @@ class MockDetectorLogic(DetectorLogic): # pylint: disable=abstract-method
|
|
|
129
129
|
model_name="mock",
|
|
130
130
|
)])
|
|
131
131
|
|
|
132
|
-
@property
|
|
133
|
-
def is_initialized(self):
|
|
134
|
-
return True
|
|
135
|
-
|
|
136
132
|
def evaluate_with_all_info(self, image: np.ndarray, tags: List[str], source: Optional[str] = None, creation_date: Optional[str] = None):
|
|
137
133
|
return self.image_metadata
|
|
138
134
|
|
|
@@ -51,9 +51,6 @@ def test_rest_detect(test_detector_node: DetectorNode, grouping_key: str):
|
|
|
51
51
|
headers = {grouping_key: '0:0:0:0', 'tags': 'some_tag'}
|
|
52
52
|
|
|
53
53
|
assert isinstance(test_detector_node.detector_logic, TestingDetectorLogic)
|
|
54
|
-
# test_detector_node.detector_logic.mock_is_initialized = True
|
|
55
|
-
# print(test_detector_node.detector_logic.mock_is_initialized)
|
|
56
|
-
# print(test_detector_node.detector_logic.is_initialized)
|
|
57
54
|
response = requests.post(f'http://localhost:{GLOBALS.detector_port}/detect',
|
|
58
55
|
files=image, headers=headers, timeout=30)
|
|
59
56
|
assert response.status_code == 200
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/annotation/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/data_classes/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/data_classes/general.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/data_classes/training.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/data_exchanger.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/outbox.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/rest/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/rest/about.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/rest/detect.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/detector/rest/upload.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/enums/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/enums/annotator.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/enums/detector.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/helpers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/helpers/log_conf.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/loop_communication.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/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
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/detector/pytest.ini
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/detector/test.jpg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/general/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/general/conftest.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/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.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/test_helper.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/tests/trainer/conftest.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/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.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/downloader.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/exceptions.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/executor.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/io_helpers.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/rest/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/test_executor.py
RENAMED
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/trainer_logic.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.13.4 → learning_loop_node-0.13.6}/learning_loop_node/trainer/trainer_node.py
RENAMED
|
File without changes
|