plexus-python-common 1.0.60__tar.gz → 1.0.62__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.
Files changed (93) hide show
  1. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/PKG-INFO +1 -1
  2. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/utils/ormutils.py +28 -1
  3. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/utils/tagutils.py +5 -5
  4. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus_python_common.egg-info/PKG-INFO +1 -1
  5. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/common/utils/tagutils_test.py +26 -0
  6. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/.editorconfig +0 -0
  7. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/.github/workflows/pr.yml +0 -0
  8. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/.github/workflows/push.yml +0 -0
  9. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/.gitignore +0 -0
  10. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/MANIFEST.in +0 -0
  11. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/README.md +0 -0
  12. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/VERSION +0 -0
  13. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/pyproject.toml +0 -0
  14. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/jsonutils/dummy.0.jsonl +0 -0
  15. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/jsonutils/dummy.1.jsonl +0 -0
  16. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/jsonutils/dummy.2.jsonl +0 -0
  17. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/pathutils/0-dummy +0 -0
  18. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/pathutils/1-dummy +0 -0
  19. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/pathutils/2-dummy +0 -0
  20. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/pathutils/dummy.0.0.jsonl +0 -0
  21. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/pathutils/dummy.0.0.vol-0.jsonl +0 -0
  22. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/pathutils/dummy.0.jsonl +0 -0
  23. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/pathutils/dummy.1.1.jsonl +0 -0
  24. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/pathutils/dummy.1.1.vol-1.jsonl +0 -0
  25. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/pathutils/dummy.1.jsonl +0 -0
  26. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/pathutils/dummy.2.2.jsonl +0 -0
  27. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/pathutils/dummy.2.2.vol-2.jsonl +0 -0
  28. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/pathutils/dummy.2.jsonl +0 -0
  29. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/pathutils/dummy.csv.part0 +0 -0
  30. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/pathutils/dummy.csv.part1 +0 -0
  31. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/pathutils/dummy.csv.part2 +0 -0
  32. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/pathutils/dummy.txt +0 -0
  33. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/s3utils/dir.baz/file.bar.baz +0 -0
  34. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/s3utils/dir.baz/file.foo.bar +0 -0
  35. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/s3utils/dir.baz/file.foo.baz +0 -0
  36. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/s3utils/dir.foo/dir.foo.bar/dir.foo.bar.baz/file.foo.bar.baz +0 -0
  37. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/s3utils/dir.foo/dir.foo.bar/file.bar.baz +0 -0
  38. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/s3utils/dir.foo/dir.foo.bar/file.foo.bar +0 -0
  39. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/s3utils/dir.foo/dir.foo.bar/file.foo.baz +0 -0
  40. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/s3utils/dir.foo/file.bar +0 -0
  41. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/s3utils/dir.foo/file.baz +0 -0
  42. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/s3utils/dir.foo/file.foo +0 -0
  43. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/s3utils_archive/archive.compressed.zip +0 -0
  44. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/resources/unittest/s3utils_archive/archive.uncompressed.zip +0 -0
  45. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/setup.cfg +0 -0
  46. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/setup.py +0 -0
  47. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/__init__.py +0 -0
  48. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/carto/OSMFile.py +0 -0
  49. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/carto/OSMNode.py +0 -0
  50. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/carto/OSMTags.py +0 -0
  51. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/carto/OSMWay.py +0 -0
  52. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/carto/__init__.py +0 -0
  53. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/pose.py +0 -0
  54. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/proj.py +0 -0
  55. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/resources/__init__.py +0 -0
  56. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/resources/tags/__init__.py +0 -0
  57. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/resources/tags/unittest-1.0.0.tagset.yaml +0 -0
  58. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/resources/tags/universal-1.0.0.tagset.yaml +0 -0
  59. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/utils/__init__.py +0 -0
  60. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/utils/apiutils.py +0 -0
  61. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/utils/bagutils.py +0 -0
  62. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/utils/config.py +0 -0
  63. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/utils/datautils.py +0 -0
  64. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/utils/dockerutils.py +0 -0
  65. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/utils/jsonutils.py +0 -0
  66. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/utils/pathutils.py +0 -0
  67. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/utils/s3utils.py +0 -0
  68. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/utils/sqlutils.py +0 -0
  69. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/utils/strutils.py +0 -0
  70. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus/common/utils/testutils.py +0 -0
  71. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus_python_common.egg-info/SOURCES.txt +0 -0
  72. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus_python_common.egg-info/dependency_links.txt +0 -0
  73. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus_python_common.egg-info/not-zip-safe +0 -0
  74. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus_python_common.egg-info/requires.txt +0 -0
  75. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/src/plexus_python_common.egg-info/top_level.txt +0 -0
  76. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/__init__.py +0 -0
  77. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/common/__init__.py +0 -0
  78. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/common/carto/__init__.py +0 -0
  79. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/common/carto/osm_file_test.py +0 -0
  80. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/common/carto/osm_tags_test.py +0 -0
  81. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/common/pose_test.py +0 -0
  82. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/common/proj_test.py +0 -0
  83. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/common/utils/__init__.py +0 -0
  84. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/common/utils/bagutils_test.py +0 -0
  85. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/common/utils/datautils_test.py +0 -0
  86. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/common/utils/dockerutils_test.py +0 -0
  87. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/common/utils/jsonutils_test.py +0 -0
  88. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/common/utils/ormutils_test.py +0 -0
  89. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/common/utils/pathutils_test.py +0 -0
  90. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/common/utils/s3utils_test.py +0 -0
  91. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/common/utils/strutils_test.py +0 -0
  92. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/plexus_tests/common/utils/testutils_test.py +0 -0
  93. {plexus_python_common-1.0.60 → plexus_python_common-1.0.62}/test/testenv.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plexus-python-common
3
- Version: 1.0.60
3
+ Version: 1.0.62
4
4
  Classifier: Programming Language :: Python :: 3
5
5
  Classifier: Programming Language :: Python :: 3.12
6
6
  Classifier: Programming Language :: Python :: 3.13
@@ -250,7 +250,6 @@ def make_base_model() -> type[SQLModel]:
250
250
 
251
251
  class BaseModel(SQLModel):
252
252
  metadata = sa.MetaData()
253
- model_config = pdt.ConfigDict(json_encoders={datetime.datetime: json_datetime_encoder})
254
253
 
255
254
  return BaseModel
256
255
 
@@ -515,6 +514,14 @@ def make_changing_model_mixin(dialect: str | None = None) -> type[ChangingModelM
515
514
  raise ValueError(f"create time '{self.created_at}' is greater than update time '{self.updated_at}'")
516
515
  return self
517
516
 
517
+ @pdt.field_serializer("created_at", mode="plain")
518
+ def serialize_created_at(self, v: datetime.datetime | None) -> str | None:
519
+ return json_datetime_encoder(v) if v is not None else None
520
+
521
+ @pdt.field_serializer("updated_at", mode="plain")
522
+ def serialize_updated_at(self, v: datetime.datetime | None) -> str | None:
523
+ return json_datetime_encoder(v) if v is not None else None
524
+
518
525
  @classmethod
519
526
  def make_index_created_at(cls, index_name: str) -> sa.Index:
520
527
  return sa.Index(index_name, "created_at")
@@ -582,6 +589,14 @@ def make_snapshot_model_mixin(dialect: str | None = None) -> type[SnapshotModelM
582
589
  raise ValueError(f"create time '{self.created_at}' is greater than expire time '{self.expired_at}'")
583
590
  return self
584
591
 
592
+ @pdt.field_serializer("created_at", mode="plain")
593
+ def serialize_created_at(self, v: datetime.datetime | None) -> str | None:
594
+ return json_datetime_encoder(v) if v is not None else None
595
+
596
+ @pdt.field_serializer("expired_at", mode="plain")
597
+ def serialize_expired_at(self, v: datetime.datetime | None) -> str | None:
598
+ return json_datetime_encoder(v) if v is not None else None
599
+
585
600
  @classmethod
586
601
  def make_index_created_at_expired_at(cls, index_name: str) -> sa.Index:
587
602
  return sa.Index(index_name, "created_at", "expired_at")
@@ -703,6 +718,18 @@ def make_revision_model_mixin(dialect: str | None = None) -> type[RevisionModelM
703
718
  raise ValueError(f"update time '{self.updated_at}' is greater than expire time '{self.expired_at}'")
704
719
  return self
705
720
 
721
+ @pdt.field_serializer("created_at", mode="plain")
722
+ def serialize_created_at(self, v: datetime.datetime | None) -> str | None:
723
+ return json_datetime_encoder(v) if v is not None else None
724
+
725
+ @pdt.field_serializer("updated_at", mode="plain")
726
+ def serialize_updated_at(self, v: datetime.datetime | None) -> str | None:
727
+ return json_datetime_encoder(v) if v is not None else None
728
+
729
+ @pdt.field_serializer("expired_at", mode="plain")
730
+ def serialize_expired_at(self, v: datetime.datetime | None) -> str | None:
731
+ return json_datetime_encoder(v) if v is not None else None
732
+
706
733
  @classmethod
707
734
  def make_index_created_at_updated_at_expired_at(cls, index_name: str) -> sa.Index:
708
735
  return sa.Index(index_name, "created_at", "updated_at", "expired_at")
@@ -382,11 +382,11 @@ class TagTarget(BaseModel):
382
382
  description="Name of the tagger that generates the tag records for the target",
383
383
  )
384
384
  tagger_version: str = Field(
385
- sa_column=sa.Column(sa_sqlite.VARCHAR(64), nullable=False),
385
+ sa_column=sa.Column(sa_sqlite.VARCHAR(32), nullable=False),
386
386
  description="Version of the tagger that generates the tag records for the target",
387
387
  )
388
388
  vehicle_name: str = Field(
389
- sa_column=sa.Column(sa_sqlite.TEXT, nullable=False),
389
+ sa_column=sa.Column(sa_sqlite.VARCHAR(128), nullable=False),
390
390
  description="Vehicle name associated with the tag record",
391
391
  )
392
392
  begin_dt: datetime.datetime = Field(
@@ -455,12 +455,12 @@ class TagRecord(BaseModel):
455
455
  description="End datetime of the tag record",
456
456
  )
457
457
  tagset_namespace: str | None = Field(
458
- sa_column=sa.Column(sa_sqlite.VARCHAR(128), nullable=True),
458
+ sa_column=sa.Column(sa_sqlite.VARCHAR(64), nullable=True),
459
459
  default=None,
460
460
  description="Namespace of the tagset that the tag belongs to",
461
461
  )
462
462
  tagset_version: str | None = Field(
463
- sa_column=sa.Column(sa_sqlite.VARCHAR(64), nullable=True),
463
+ sa_column=sa.Column(sa_sqlite.VARCHAR(32), nullable=True),
464
464
  default=None,
465
465
  description="Version of the tagset that the tag belongs to",
466
466
  )
@@ -469,7 +469,7 @@ class TagRecord(BaseModel):
469
469
  description="Tag name",
470
470
  )
471
471
  props: JsonType | None = Field(
472
- sa_column=sa.Column(sa_sqlite.TEXT, nullable=True),
472
+ sa_column=sa.Column(sa_sqlite.JSON, nullable=True),
473
473
  default=None,
474
474
  description="Additional properties of the tag record in JSON format",
475
475
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plexus-python-common
3
- Version: 1.0.60
3
+ Version: 1.0.62
4
4
  Classifier: Programming Language :: Python :: 3
5
5
  Classifier: Programming Language :: Python :: 3.12
6
6
  Classifier: Programming Language :: Python :: 3.13
@@ -133,6 +133,19 @@ class TagUtilsTest(unittest.TestCase):
133
133
  dt_parse_iso("2020-01-01T00:00:00+00:00") + datetime.timedelta(seconds=i),
134
134
  dt_parse_iso("2020-01-02T00:00:00+00:00") + datetime.timedelta(seconds=i + 1),
135
135
  tag,
136
+ props={
137
+ "dummy_int": 1,
138
+ "dummy_float": 1.0e-1,
139
+ "dummy_bool": True,
140
+ "dummy_str": "dummy_string",
141
+ "dummy_list": [1, 1.0e-1, True, "dummy_string"],
142
+ "dummy_dict": {
143
+ "dummy_int": 1,
144
+ "dummy_float": 1.0e-1,
145
+ "dummy_bool": True,
146
+ "dummy_str": "dummy_string",
147
+ },
148
+ },
136
149
  )
137
150
 
138
151
  self.assertEqual(len(list(target_cache.iter_tags())), tag_records_count)
@@ -271,6 +284,19 @@ class TagUtilsTest(unittest.TestCase):
271
284
  dt_parse_iso("2020-01-01T00:00:00+00:00") + datetime.timedelta(seconds=i),
272
285
  dt_parse_iso("2020-01-02T00:00:00+00:00") + datetime.timedelta(seconds=i + 1),
273
286
  tag,
287
+ props={
288
+ "dummy_int": 1,
289
+ "dummy_float": 1.0e-1,
290
+ "dummy_bool": True,
291
+ "dummy_str": "dummy_string",
292
+ "dummy_list": [1, 1.0e-1, True, "dummy_string"],
293
+ "dummy_dict": {
294
+ "dummy_int": 1,
295
+ "dummy_float": 1.0e-1,
296
+ "dummy_bool": True,
297
+ "dummy_str": "dummy_string",
298
+ },
299
+ },
274
300
  )
275
301
 
276
302
  threads = [threading.Thread(target=worker, args=(tid,)) for tid in range(total_threads_count)]