learning-loop-node 0.11.0__tar.gz → 0.11.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.

Files changed (96) hide show
  1. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/PKG-INFO +1 -1
  2. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/data_classes/image_metadata.py +1 -1
  3. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/detector/detector_node.py +3 -2
  4. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/detector/outbox.py +8 -5
  5. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/loop_communication.py +3 -3
  6. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/pyproject.toml +1 -1
  7. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/README.md +0 -0
  8. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/__init__.py +0 -0
  9. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/annotation/__init__.py +0 -0
  10. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/annotation/annotator_logic.py +0 -0
  11. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/annotation/annotator_node.py +0 -0
  12. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/data_classes/__init__.py +0 -0
  13. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/data_classes/annotations.py +0 -0
  14. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/data_classes/detections.py +0 -0
  15. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/data_classes/general.py +0 -0
  16. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/data_classes/socket_response.py +0 -0
  17. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/data_classes/training.py +0 -0
  18. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/data_exchanger.py +0 -0
  19. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/detector/__init__.py +0 -0
  20. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/detector/detector_logic.py +0 -0
  21. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/detector/inbox_filter/__init__.py +0 -0
  22. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/detector/inbox_filter/cam_observation_history.py +0 -0
  23. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/detector/inbox_filter/relevance_filter.py +0 -0
  24. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/detector/rest/__init__.py +0 -0
  25. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/detector/rest/about.py +0 -0
  26. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/detector/rest/backdoor_controls.py +0 -0
  27. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/detector/rest/detect.py +0 -0
  28. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/detector/rest/model_version_control.py +0 -0
  29. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/detector/rest/operation_mode.py +0 -0
  30. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/detector/rest/outbox_mode.py +0 -0
  31. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/detector/rest/upload.py +0 -0
  32. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/examples/novelty_score_updater.py +0 -0
  33. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/globals.py +0 -0
  34. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/helpers/__init__.py +0 -0
  35. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/helpers/environment_reader.py +0 -0
  36. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/helpers/gdrive_downloader.py +0 -0
  37. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/helpers/log_conf.py +0 -0
  38. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/helpers/misc.py +0 -0
  39. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/node.py +0 -0
  40. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/py.typed +0 -0
  41. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/rest.py +0 -0
  42. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/__init__.py +0 -0
  43. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/annotator/__init__.py +0 -0
  44. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/annotator/conftest.py +0 -0
  45. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/annotator/pytest.ini +0 -0
  46. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/annotator/test_annotator_node.py +0 -0
  47. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/detector/__init__.py +0 -0
  48. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/detector/conftest.py +0 -0
  49. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/detector/inbox_filter/__init__.py +0 -0
  50. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/detector/inbox_filter/test_observation.py +0 -0
  51. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/detector/inbox_filter/test_relevance_group.py +0 -0
  52. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/detector/inbox_filter/test_unexpected_observations_count.py +0 -0
  53. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/detector/pytest.ini +0 -0
  54. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/detector/test.jpg +0 -0
  55. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/detector/test_client_communication.py +0 -0
  56. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/detector/test_detector_node.py +0 -0
  57. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/detector/test_outbox.py +0 -0
  58. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/detector/test_relevance_filter.py +0 -0
  59. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/detector/testing_detector.py +0 -0
  60. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/general/__init__.py +0 -0
  61. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/general/conftest.py +0 -0
  62. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/general/pytest.ini +0 -0
  63. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/general/test_data/file_1.txt +0 -0
  64. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/general/test_data/file_2.txt +0 -0
  65. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/general/test_data/model.json +0 -0
  66. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/general/test_data_classes.py +0 -0
  67. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/general/test_downloader.py +0 -0
  68. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/general/test_learning_loop_node.py +0 -0
  69. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/test_helper.py +0 -0
  70. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/trainer/__init__.py +0 -0
  71. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/trainer/conftest.py +0 -0
  72. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/trainer/pytest.ini +0 -0
  73. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/trainer/state_helper.py +0 -0
  74. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/trainer/states/__init__.py +0 -0
  75. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/trainer/states/test_state_cleanup.py +0 -0
  76. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/trainer/states/test_state_detecting.py +0 -0
  77. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/trainer/states/test_state_download_train_model.py +0 -0
  78. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/trainer/states/test_state_prepare.py +0 -0
  79. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/trainer/states/test_state_sync_confusion_matrix.py +0 -0
  80. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/trainer/states/test_state_train.py +0 -0
  81. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/trainer/states/test_state_upload_detections.py +0 -0
  82. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/trainer/states/test_state_upload_model.py +0 -0
  83. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/trainer/test_errors.py +0 -0
  84. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/trainer/test_trainer_states.py +0 -0
  85. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/tests/trainer/testing_trainer_logic.py +0 -0
  86. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/trainer/__init__.py +0 -0
  87. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/trainer/downloader.py +0 -0
  88. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/trainer/exceptions.py +0 -0
  89. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/trainer/executor.py +0 -0
  90. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/trainer/io_helpers.py +0 -0
  91. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/trainer/rest/__init__.py +0 -0
  92. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/trainer/rest/backdoor_controls.py +0 -0
  93. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/trainer/test_executor.py +0 -0
  94. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/trainer/trainer_logic.py +0 -0
  95. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/learning_loop_node/trainer/trainer_logic_generic.py +0 -0
  96. {learning_loop_node-0.11.0 → learning_loop_node-0.11.1}/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.11.0
3
+ Version: 0.11.1
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
@@ -28,7 +28,7 @@ class ImageMetadata():
28
28
  tags: List[str] = field(default_factory=list, metadata={
29
29
  'description': 'List of tags'})
30
30
 
31
- date: Optional[str] = field(default_factory=current_datetime, metadata={
31
+ created: Optional[str] = field(default_factory=current_datetime, metadata={
32
32
  'description': 'Creation date of the image'})
33
33
  source: Optional[str] = field(default=None, metadata={
34
34
  'description': 'Source of the image'})
@@ -140,7 +140,6 @@ class DetectorNode(Node):
140
140
 
141
141
  @self.sio.event
142
142
  async def detect(sid, data: Dict) -> Dict:
143
- self.log.debug('running detect via socketio')
144
143
  try:
145
144
  np_image = np.frombuffer(data['image'], np.uint8)
146
145
  det = await self.get_detections(
@@ -153,7 +152,6 @@ class DetectorNode(Node):
153
152
  if det is None:
154
153
  return {'error': 'no model loaded'}
155
154
  detection_dict = jsonable_encoder(asdict(det))
156
- self.log.debug('detect via socketio finished')
157
155
  return detection_dict
158
156
  except Exception as e:
159
157
  self.log.exception('could not detect via socketio')
@@ -188,6 +186,9 @@ class DetectorNode(Node):
188
186
  source = data.get('source', None)
189
187
  creation_date = data.get('creation_date', None)
190
188
 
189
+ self.log.debug('running upload via socketio. tags: %s, source: %s, creation_date: %s',
190
+ tags, source, creation_date)
191
+
191
192
  loop = asyncio.get_event_loop()
192
193
  try:
193
194
  await loop.run_in_executor(None, self.outbox.save, data['image'], image_metadata, tags, source, creation_date)
@@ -76,10 +76,11 @@ class Outbox():
76
76
  return
77
77
  tmp = f'{GLOBALS.data_folder}/tmp/{identifier}'
78
78
  image_metadata.tags = tags
79
- if creation_date and self._is_valid_isoformat(creation_date):
80
- image_metadata.date = creation_date
79
+ if self._is_valid_isoformat(creation_date):
80
+ image_metadata.created = creation_date
81
81
  else:
82
- image_metadata.date = identifier
82
+ image_metadata.created = identifier
83
+
83
84
  image_metadata.source = source or 'unknown'
84
85
  os.makedirs(tmp, exist_ok=True)
85
86
 
@@ -94,7 +95,9 @@ class Outbox():
94
95
  else:
95
96
  self.log.error('Could not rename %s to %s', tmp, self.path + '/' + identifier)
96
97
 
97
- def _is_valid_isoformat(self, date: str) -> bool:
98
+ def _is_valid_isoformat(self, date: Optional[str]) -> bool:
99
+ if date is None:
100
+ return False
98
101
  try:
99
102
  datetime.fromisoformat(date)
100
103
  return True
@@ -153,7 +156,7 @@ class Outbox():
153
156
  self.log.exception('Could not upload images')
154
157
  return
155
158
  finally:
156
- self.log.info('Closing files')
159
+ self.log.debug('Closing files')
157
160
  for _, file in data:
158
161
  file.close()
159
162
 
@@ -35,7 +35,7 @@ class LoopCommunicator():
35
35
  else:
36
36
  self.async_client = httpx.AsyncClient(base_url=self.base_url, timeout=Timeout(60.0))
37
37
 
38
- logging.info(f'Loop interface initialized with base_url: {self.base_url} / user: {self.username}')
38
+ logging.info('Loop interface initialized with base_url: %s / user: %s', self.base_url, self.username)
39
39
 
40
40
  def websocket_url(self) -> str:
41
41
  return f'ws{"s" if "learning-loop.ai" in self.host else ""}://' + self.host
@@ -48,7 +48,7 @@ class LoopCommunicator():
48
48
  self.async_client.cookies.clear()
49
49
  response = await self.async_client.post('/api/login', data={'username': self.username, 'password': self.password})
50
50
  if response.status_code != 200:
51
- logging.info(f'Login failed with response: {response}')
51
+ logging.info('Login failed with response: %s', response)
52
52
  raise LoopCommunicationException('Login failed with response: ' + str(response))
53
53
  self.async_client.cookies.update(response.cookies)
54
54
 
@@ -57,7 +57,7 @@ class LoopCommunicator():
57
57
 
58
58
  response = await self.async_client.post('/api/logout')
59
59
  if response.status_code != 200:
60
- logging.info(f'Logout failed with response: {response}')
60
+ logging.info('Logout failed with response: %s', response)
61
61
  raise LoopCommunicationException('Logout failed with response: ' + str(response))
62
62
  self.async_client.cookies.clear()
63
63
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "learning_loop_node"
3
- version = "v0.11.0"
3
+ version = "v0.11.1"
4
4
  description = "Python Library for Nodes which connect to the Zauberzeug Learning Loop"
5
5
  authors = ["Zauberzeug GmbH <info@zauberzeug.com>"]
6
6
  license = "MIT"