openmodule 16.0.0__tar.gz → 16.0.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.
- {openmodule-16.0.0 → openmodule-16.0.1}/PKG-INFO +1 -1
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/models/base.py +7 -6
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/rpc/server.py +2 -2
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule.egg-info/PKG-INFO +1 -1
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_utils_eventlog.py +2 -10
- {openmodule-16.0.0 → openmodule-16.0.1}/LICENSE +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/README.md +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/__init__.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/alert.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/config.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/connection_status.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/core.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/database/__init__.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/database/custom_types.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/database/database.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/database/env.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/database/migration.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/dispatcher.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/health.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/logging.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/messaging.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/models/__init__.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/models/access_service.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/models/alert.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/models/io.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/models/kv_store.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/models/presence.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/models/privacy.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/models/rpc.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/models/settings.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/models/signals.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/models/validation.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/models/vehicle.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/rpc/__init__.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/rpc/client.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/rpc/common.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/sentry.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/threading.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/__init__.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/access_service.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/charset.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/cleanup.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/csv_export.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/databox.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/db_helper.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/eventlog.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/io.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/kv_store.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/matching.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/misc_functions.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/package_reader.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/presence.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/schedule.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/settings.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/signal_listener.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/translation.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule/utils/validation.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule.egg-info/SOURCES.txt +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule.egg-info/dependency_links.txt +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule.egg-info/not-zip-safe +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule.egg-info/requires.txt +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/openmodule.egg-info/top_level.txt +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/setup.cfg +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/setup.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_alembic_migrations.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_alert.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_checks.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_config.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_connection_status.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_core.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_database.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_dispatcher.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_health.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_interrupt.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_io_listen.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_logging.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_messaging.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_mockrpcclient.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_model.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_rpc.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_sentry.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_test_alert.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_test_gate.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_test_zeromq.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_utils_access_service.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_utils_charset.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_utils_cleanup.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_utils_csv_export.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_utils_databox.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_utils_kv_store.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_utils_kv_store_multiple.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_utils_matching.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_utils_misc_functions.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_utils_package_reader.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_utils_presence.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_utils_schedule.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_utils_settings.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_utils_signal.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_utils_validation.py +0 -0
- {openmodule-16.0.0 → openmodule-16.0.1}/tests/test_utils_vehicle.py +0 -0
|
@@ -5,7 +5,7 @@ from datetime import datetime
|
|
|
5
5
|
from decimal import Decimal
|
|
6
6
|
from enum import StrEnum
|
|
7
7
|
from json.encoder import ESCAPE_ASCII
|
|
8
|
-
from typing import Annotated, Optional, Any, Self
|
|
8
|
+
from typing import Annotated, Optional, Any, Self, ClassVar
|
|
9
9
|
|
|
10
10
|
import orjson
|
|
11
11
|
from pydantic_core import PydanticUndefined
|
|
@@ -158,10 +158,11 @@ def datetime_to_timestamp(dt: datetime):
|
|
|
158
158
|
|
|
159
159
|
|
|
160
160
|
class ZMQMessage(OpenModuleModel):
|
|
161
|
-
_ALLOW_CUSTOM_TIMESTAMP: bool =
|
|
162
|
-
_using_default_timestamp: bool = PrivateAttr()
|
|
161
|
+
_ALLOW_CUSTOM_TIMESTAMP: ClassVar[bool] = False # set to true for tools scripts, where you need to set the timestamp manually
|
|
163
162
|
|
|
164
163
|
timestamp: Datetime = Field(default_factory=lambda: utcnow())
|
|
164
|
+
_using_default_timestamp: bool = PrivateAttr()
|
|
165
|
+
|
|
165
166
|
name: str = Field(default_factory=lambda: settings.NAME)
|
|
166
167
|
type: str
|
|
167
168
|
baggage: str | None = None
|
|
@@ -196,9 +197,9 @@ class ZMQMessage(OpenModuleModel):
|
|
|
196
197
|
@field_validator("timestamp", mode="before")
|
|
197
198
|
@classmethod
|
|
198
199
|
def check_custom_timestamp(cls, v, info):
|
|
199
|
-
from_model_validate = (info.context or {}).get("from_model_validate", False)
|
|
200
|
-
using_default_timestamp = cls._using_default_timestamp
|
|
201
|
-
custom_constructor_timestamp_allowed = cls._ALLOW_CUSTOM_TIMESTAMP
|
|
200
|
+
from_model_validate = (info.context or {}).get("from_model_validate", False) is True
|
|
201
|
+
using_default_timestamp = cls._using_default_timestamp is True
|
|
202
|
+
custom_constructor_timestamp_allowed = cls._ALLOW_CUSTOM_TIMESTAMP is True
|
|
202
203
|
|
|
203
204
|
if not using_default_timestamp and not custom_constructor_timestamp_allowed and not from_model_validate:
|
|
204
205
|
raise ValueError("timestamp must not be set manually")
|
|
@@ -185,7 +185,7 @@ class RPCServer(object):
|
|
|
185
185
|
handler: HandlerEntry = self.find_handler(channel, message.type)
|
|
186
186
|
if handler:
|
|
187
187
|
try:
|
|
188
|
-
request = handler.request_class(
|
|
188
|
+
request = handler.request_class.model_validate(message.request)
|
|
189
189
|
except ValidationError as e:
|
|
190
190
|
self.log.exception("exception in parsing request. request not processed and error returned")
|
|
191
191
|
return {"status": RPCServerError.validation_error, "exception": e.json()}
|
|
@@ -225,7 +225,7 @@ class RPCServer(object):
|
|
|
225
225
|
return
|
|
226
226
|
|
|
227
227
|
try:
|
|
228
|
-
message = RPCRequest(
|
|
228
|
+
message = RPCRequest.model_validate(message)
|
|
229
229
|
message_type = message.type
|
|
230
230
|
rpc_id = message.rpc_id
|
|
231
231
|
except ValidationError as e:
|
|
@@ -9,14 +9,6 @@ from openmodule_test.core import OpenModuleCoreTestMixin
|
|
|
9
9
|
class TestEvents(OpenModuleCoreTestMixin):
|
|
10
10
|
topics = ["eventlog"]
|
|
11
11
|
|
|
12
|
-
def setUp(self):
|
|
13
|
-
ZMQMessage._ALLOW_CUSTOM_TIMESTAMP = True
|
|
14
|
-
return super().setUp()
|
|
15
|
-
|
|
16
|
-
def tearDown(self):
|
|
17
|
-
ZMQMessage._ALLOW_CUSTOM_TIMESTAMP = False
|
|
18
|
-
return super().tearDown()
|
|
19
|
-
|
|
20
12
|
def test_event_generation(self):
|
|
21
13
|
with self.assertLogs("Eventlog") as cm:
|
|
22
14
|
send_event(
|
|
@@ -28,7 +20,7 @@ class TestEvents(OpenModuleCoreTestMixin):
|
|
|
28
20
|
self.assertIn("INFO:Eventlog:Sending event at gate1: LPR plate='G ARIVO 1' country='A': "
|
|
29
21
|
"customer Test User, medium QR1, price 1", cm.output)
|
|
30
22
|
|
|
31
|
-
msg = EventlogMessage(
|
|
23
|
+
msg = EventlogMessage.model_validate(self.zmq_client.wait_for_message_on_topic("eventlog"))
|
|
32
24
|
self.assertEqual(msg.event.infos.type, "test_1")
|
|
33
25
|
self.assertEqual(msg.event.infos.timestamp, datetime.min)
|
|
34
26
|
self.assertEqual(msg.event.infos.gate, "gate1")
|
|
@@ -56,5 +48,5 @@ class TestEvents(OpenModuleCoreTestMixin):
|
|
|
56
48
|
with self.assertLogs("Eventlog") as cm:
|
|
57
49
|
send_event(EventInfo.create("test_1"), "test")
|
|
58
50
|
self.assertIn("INFO:Eventlog:Sending event: test", cm.output)
|
|
59
|
-
msg = EventlogMessage(
|
|
51
|
+
msg = EventlogMessage.model_validate(self.zmq_client.wait_for_message_on_topic("eventlog"))
|
|
60
52
|
self.assertIsNotNone(msg.event.infos.timestamp)
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|