plexus-python-common 1.0.47__tar.gz → 1.0.48__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 (92) hide show
  1. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/PKG-INFO +1 -1
  2. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/utils/ormutils.py +9 -9
  3. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/utils/s3utils.py +1 -1
  4. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus_python_common.egg-info/PKG-INFO +1 -1
  5. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/common/utils/ormutils_test.py +83 -0
  6. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/.editorconfig +0 -0
  7. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/.github/workflows/pr.yml +0 -0
  8. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/.github/workflows/push.yml +0 -0
  9. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/.gitignore +0 -0
  10. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/MANIFEST.in +0 -0
  11. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/README.md +0 -0
  12. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/VERSION +0 -0
  13. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/pyproject.toml +0 -0
  14. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/jsonutils/dummy.0.jsonl +0 -0
  15. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/jsonutils/dummy.1.jsonl +0 -0
  16. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/jsonutils/dummy.2.jsonl +0 -0
  17. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/pathutils/0-dummy +0 -0
  18. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/pathutils/1-dummy +0 -0
  19. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/pathutils/2-dummy +0 -0
  20. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/pathutils/dummy.0.0.jsonl +0 -0
  21. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/pathutils/dummy.0.0.vol-0.jsonl +0 -0
  22. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/pathutils/dummy.0.jsonl +0 -0
  23. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/pathutils/dummy.1.1.jsonl +0 -0
  24. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/pathutils/dummy.1.1.vol-1.jsonl +0 -0
  25. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/pathutils/dummy.1.jsonl +0 -0
  26. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/pathutils/dummy.2.2.jsonl +0 -0
  27. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/pathutils/dummy.2.2.vol-2.jsonl +0 -0
  28. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/pathutils/dummy.2.jsonl +0 -0
  29. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/pathutils/dummy.csv.part0 +0 -0
  30. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/pathutils/dummy.csv.part1 +0 -0
  31. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/pathutils/dummy.csv.part2 +0 -0
  32. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/pathutils/dummy.txt +0 -0
  33. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/s3utils/dir.baz/file.bar.baz +0 -0
  34. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/s3utils/dir.baz/file.foo.bar +0 -0
  35. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/s3utils/dir.baz/file.foo.baz +0 -0
  36. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/s3utils/dir.foo/dir.foo.bar/dir.foo.bar.baz/file.foo.bar.baz +0 -0
  37. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/s3utils/dir.foo/dir.foo.bar/file.bar.baz +0 -0
  38. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/s3utils/dir.foo/dir.foo.bar/file.foo.bar +0 -0
  39. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/s3utils/dir.foo/dir.foo.bar/file.foo.baz +0 -0
  40. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/s3utils/dir.foo/file.bar +0 -0
  41. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/s3utils/dir.foo/file.baz +0 -0
  42. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/s3utils/dir.foo/file.foo +0 -0
  43. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/s3utils_archive/archive.compressed.zip +0 -0
  44. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/resources/unittest/s3utils_archive/archive.uncompressed.zip +0 -0
  45. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/setup.cfg +0 -0
  46. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/setup.py +0 -0
  47. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/__init__.py +0 -0
  48. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/carto/OSMFile.py +0 -0
  49. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/carto/OSMNode.py +0 -0
  50. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/carto/OSMTags.py +0 -0
  51. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/carto/OSMWay.py +0 -0
  52. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/carto/__init__.py +0 -0
  53. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/pose.py +0 -0
  54. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/proj.py +0 -0
  55. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/resources/__init__.py +0 -0
  56. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/resources/tags/__init__.py +0 -0
  57. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/resources/tags/universal.tagset.yaml +0 -0
  58. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/utils/__init__.py +0 -0
  59. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/utils/apiutils.py +0 -0
  60. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/utils/bagutils.py +0 -0
  61. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/utils/config.py +0 -0
  62. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/utils/datautils.py +0 -0
  63. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/utils/dockerutils.py +0 -0
  64. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/utils/jsonutils.py +0 -0
  65. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/utils/pathutils.py +0 -0
  66. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/utils/sqlutils.py +0 -0
  67. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/utils/strutils.py +0 -0
  68. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/utils/tagutils.py +0 -0
  69. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus/common/utils/testutils.py +0 -0
  70. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus_python_common.egg-info/SOURCES.txt +0 -0
  71. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus_python_common.egg-info/dependency_links.txt +0 -0
  72. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus_python_common.egg-info/not-zip-safe +0 -0
  73. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus_python_common.egg-info/requires.txt +0 -0
  74. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/src/plexus_python_common.egg-info/top_level.txt +0 -0
  75. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/__init__.py +0 -0
  76. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/common/__init__.py +0 -0
  77. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/common/carto/__init__.py +0 -0
  78. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/common/carto/osm_file_test.py +0 -0
  79. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/common/carto/osm_tags_test.py +0 -0
  80. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/common/pose_test.py +0 -0
  81. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/common/proj_test.py +0 -0
  82. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/common/utils/__init__.py +0 -0
  83. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/common/utils/bagutils_test.py +0 -0
  84. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/common/utils/datautils_test.py +0 -0
  85. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/common/utils/dockerutils_test.py +0 -0
  86. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/common/utils/jsonutils_test.py +0 -0
  87. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/common/utils/pathutils_test.py +0 -0
  88. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/common/utils/s3utils_test.py +0 -0
  89. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/common/utils/strutils_test.py +0 -0
  90. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/common/utils/tagutils_test.py +0 -0
  91. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/test/plexus_tests/common/utils/testutils_test.py +0 -0
  92. {plexus_python_common-1.0.47 → plexus_python_common-1.0.48}/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.47
3
+ Version: 1.0.48
4
4
  Classifier: Programming Language :: Python :: 3
5
5
  Classifier: Programming Language :: Python :: 3.12
6
6
  Classifier: Programming Language :: Python :: 3.13
@@ -1146,7 +1146,7 @@ def db_read_active_snapshot_model_of_record[SnapshotModelT: SnapshotModelMixin](
1146
1146
  ) -> SnapshotModelT:
1147
1147
  db_instance = db.query(model).where(model.record_sqn == record_sqn, model.expired_at.is_(None)).one_or_none()
1148
1148
  if db_instance is None:
1149
- raise sa_exc.NoResultFound(f"Active '{model_name_of(model)}' of specified record_sqn '{record_sqn}' not found")
1149
+ raise sa_exc.NoResultFound(f"active '{model_name_of(model)}' of specified record_sqn '{record_sqn}' not found")
1150
1150
 
1151
1151
  return db_instance
1152
1152
 
@@ -1218,7 +1218,7 @@ def db_update_snapshot_model[SnapshotModelT: SnapshotModelMixin](
1218
1218
  ) -> SnapshotModelT:
1219
1219
  db_instance = db.query(model).where(model.record_sqn == record_sqn, model.expired_at.is_(None)).one_or_none()
1220
1220
  if db_instance is None:
1221
- raise sa_exc.NoResultFound(f"Active '{model_name_of(model)}' of specified record_sqn '{record_sqn}' not found")
1221
+ raise sa_exc.NoResultFound(f"active '{model_name_of(model)}' of specified record_sqn '{record_sqn}' not found")
1222
1222
 
1223
1223
  db_instance.expired_at = updated_at
1224
1224
  db_instance = clone_snapshot_model_instance(model, db_instance, clear_meta_fields=False, inplace=True)
@@ -1247,7 +1247,7 @@ def db_expire_snapshot_model[SnapshotModelT: SnapshotModelMixin](
1247
1247
  .one_or_none()
1248
1248
  )
1249
1249
  if db_instance is None:
1250
- raise sa_exc.NoResultFound(f"Active '{model_name_of(model)}' of specified record_sqn '{record_sqn}' not found")
1250
+ raise sa_exc.NoResultFound(f"active '{model_name_of(model)}' of specified record_sqn '{record_sqn}' not found")
1251
1251
 
1252
1252
  db_instance.expired_at = updated_at
1253
1253
  db_instance = clone_snapshot_model_instance(model, db_instance, clear_meta_fields=False, inplace=True)
@@ -1275,7 +1275,7 @@ def db_activate_snapshot_model[SnapshotModelT: SnapshotModelMixin](
1275
1275
  .first()
1276
1276
  )
1277
1277
  if db_instance is None:
1278
- raise sa_exc.NoResultFound(f"Expired '{model_name_of(model)}' of specified record_sqn '{record_sqn}' not found")
1278
+ raise sa_exc.NoResultFound(f"expired '{model_name_of(model)}' of specified record_sqn '{record_sqn}' not found")
1279
1279
 
1280
1280
  db_new_instance = clone_snapshot_model_instance(model, db_instance)
1281
1281
  db_new_instance.record_sqn = record_sqn
@@ -1371,7 +1371,7 @@ def db_read_active_revision_model_of_record[RevisionModelT: RevisionModelMixin](
1371
1371
  ) -> RevisionModelT:
1372
1372
  db_instance = db.query(model).where(model.record_sqn == record_sqn, model.expired_at.is_(None)).one_or_none()
1373
1373
  if db_instance is None:
1374
- raise sa_exc.NoResultFound(f"Active '{model_name_of(model)}' of specified record_sqn '{record_sqn}' not found")
1374
+ raise sa_exc.NoResultFound(f"active '{model_name_of(model)}' of specified record_sqn '{record_sqn}' not found")
1375
1375
 
1376
1376
  return db_instance
1377
1377
 
@@ -1443,7 +1443,7 @@ def db_update_revision_model[RevisionModelT: RevisionModelMixin](
1443
1443
  ) -> RevisionModelT:
1444
1444
  db_instance = db.query(model).where(model.record_sqn == record_sqn, model.expired_at.is_(None)).one_or_none()
1445
1445
  if db_instance is None:
1446
- raise sa_exc.NoResultFound(f"Active '{model_name_of(model)}' of specified record_sqn '{record_sqn}' not found")
1446
+ raise sa_exc.NoResultFound(f"active '{model_name_of(model)}' of specified record_sqn '{record_sqn}' not found")
1447
1447
 
1448
1448
  db_instance.expired_at = updated_at
1449
1449
  db_instance = clone_revision_model_instance(model, db_instance, clear_meta_fields=False, inplace=True)
@@ -1474,7 +1474,7 @@ def db_expire_revision_model[RevisionModelT: RevisionModelMixin](
1474
1474
  .one_or_none()
1475
1475
  )
1476
1476
  if db_instance is None:
1477
- raise sa_exc.NoResultFound(f"Active '{model_name_of(model)}' of specified record_sqn '{record_sqn}' not found")
1477
+ raise sa_exc.NoResultFound(f"active '{model_name_of(model)}' of specified record_sqn '{record_sqn}' not found")
1478
1478
 
1479
1479
  db_instance.expired_at = updated_at
1480
1480
  db_instance = clone_revision_model_instance(model, db_instance, clear_meta_fields=False, inplace=True)
@@ -1492,7 +1492,7 @@ def db_activate_revision_model[RevisionModelT: RevisionModelMixin](
1492
1492
  db_instance = db.query(model).where(model.record_sqn == record_sqn, model.expired_at.is_(None)).one_or_none()
1493
1493
  if db_instance is not None:
1494
1494
  raise sa_exc.MultipleResultsFound(
1495
- f"Active '{model_name_of(model)}' of specified record_sqn '{record_sqn}' already exists")
1495
+ f"active '{model_name_of(model)}' of specified record_sqn '{record_sqn}' already exists")
1496
1496
 
1497
1497
  db_instance = (
1498
1498
  db
@@ -1502,7 +1502,7 @@ def db_activate_revision_model[RevisionModelT: RevisionModelMixin](
1502
1502
  .first()
1503
1503
  )
1504
1504
  if db_instance is None:
1505
- raise sa_exc.NoResultFound(f"Expired '{model_name_of(model)}' of specified record_sqn '{record_sqn}' not found")
1505
+ raise sa_exc.NoResultFound(f"expired '{model_name_of(model)}' of specified record_sqn '{record_sqn}' not found")
1506
1506
 
1507
1507
  db_new_instance = clone_revision_model_instance(model, db_instance)
1508
1508
  db_new_instance.record_sqn = record_sqn
@@ -843,7 +843,7 @@ def s3_archive_open_members(
843
843
 
844
844
  archive_size, member_zip_infos, missed_members = s3_archive_list_files(client, bucket, key, members)
845
845
  if missed_members:
846
- raise FileNotFoundError(f"Archive members not found: {', '.join(missed_members)}")
846
+ raise FileNotFoundError(f"archive members not found: {', '.join(missed_members)}")
847
847
 
848
848
  if callable(use_ranged_requests):
849
849
  use_ranged_requests = use_ranged_requests(archive_size, member_zip_infos)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plexus-python-common
3
- Version: 1.0.47
3
+ Version: 1.0.48
4
4
  Classifier: Programming Language :: Python :: 3
5
5
  Classifier: Programming Language :: Python :: 3.12
6
6
  Classifier: Programming Language :: Python :: 3.13
@@ -30,9 +30,13 @@ from plexus.common.utils.ormutils import (
30
30
  db_activate_revision_model,
31
31
  db_activate_snapshot_model,
32
32
  db_create_changing_model,
33
+ db_create_changing_models,
33
34
  db_create_revision_model,
35
+ db_create_revision_models,
34
36
  db_create_sequence_model,
37
+ db_create_sequence_models,
35
38
  db_create_snapshot_model,
39
+ db_create_snapshot_models,
36
40
  db_delete_sequence_model,
37
41
  db_expire_revision_model,
38
42
  db_expire_snapshot_model,
@@ -223,6 +227,21 @@ def test_db_sequence_model_crud(fixture_postgresql_test_proc, fixture_postgresql
223
227
  results = db_read_sequence_models(session, DummySequenceModel, 0, 200)
224
228
  assert len(results) == 0
225
229
 
230
+ create_records = [random_record() for _ in range(0, 100)]
231
+
232
+ results = db_create_sequence_models(session, DummySequenceModel, create_records)
233
+ assert len(results) == len(create_records)
234
+
235
+ for i, result in zip(range(0, 100), results):
236
+ assert result.sqn == i + 101
237
+ assert result.dummy_uuid == create_records[i].dummy_uuid
238
+ assert result.dummy_int == create_records[i].dummy_int
239
+ assert result.dummy_str == create_records[i].dummy_str
240
+ assert result.dummy_float == create_records[i].dummy_float
241
+ assert result.dummy_bool == create_records[i].dummy_bool
242
+ assert result.dummy_array == create_records[i].dummy_array
243
+ assert result.dummy_json == create_records[i].dummy_json
244
+
226
245
 
227
246
  def test_db_changing_model_crud(fixture_postgresql_test_proc, fixture_postgresql_test):
228
247
  scheme = make_scheme(Dialects.postgresql, Drivers.psycopg)
@@ -359,6 +378,26 @@ def test_db_changing_model_crud(fixture_postgresql_test_proc, fixture_postgresql
359
378
  results = db_read_sequence_models(session, DummyChangingModel, 0, 200)
360
379
  assert len(results) == 0
361
380
 
381
+ create_records = [random_record() for _ in range(0, 100)]
382
+
383
+ results = db_create_changing_models(session,
384
+ DummyChangingModel,
385
+ create_records,
386
+ dt_parse_iso("2024-01-01T00:00:00+00:00"))
387
+ assert len(results) == len(create_records)
388
+
389
+ for i, result in zip(range(0, 100), results):
390
+ assert result.sqn == i + 101
391
+ assert result.created_at == dt_parse_iso("2024-01-01T00:00:00+00:00")
392
+ assert result.updated_at == dt_parse_iso("2024-01-01T00:00:00+00:00")
393
+ assert result.dummy_uuid == create_records[i].dummy_uuid
394
+ assert result.dummy_int == create_records[i].dummy_int
395
+ assert result.dummy_str == create_records[i].dummy_str
396
+ assert result.dummy_float == create_records[i].dummy_float
397
+ assert result.dummy_bool == create_records[i].dummy_bool
398
+ assert result.dummy_array == create_records[i].dummy_array
399
+ assert result.dummy_json == create_records[i].dummy_json
400
+
362
401
 
363
402
  def test_db_snapshot_model_crud(fixture_postgresql_test_proc, fixture_postgresql_test):
364
403
  scheme = make_scheme(Dialects.postgresql, Drivers.psycopg)
@@ -644,6 +683,27 @@ def test_db_snapshot_model_crud(fixture_postgresql_test_proc, fixture_postgresql
644
683
  assert result.dummy_array == update_records[i].dummy_array
645
684
  assert result.dummy_json == update_records[i].dummy_json
646
685
 
686
+ create_records = [random_record() for _ in range(0, 100)]
687
+
688
+ results = db_create_snapshot_models(session,
689
+ DummySnapshotModel,
690
+ create_records,
691
+ dt_parse_iso("2024-01-01T00:00:00+00:00"))
692
+ assert len(results) == len(create_records)
693
+
694
+ for i, result in zip(range(0, 100), results):
695
+ assert result.sqn == i + 301
696
+ assert result.record_sqn == i + 301
697
+ assert result.created_at == dt_parse_iso("2024-01-01T00:00:00+00:00")
698
+ assert result.expired_at is None
699
+ assert result.dummy_uuid == create_records[i].dummy_uuid
700
+ assert result.dummy_int == create_records[i].dummy_int
701
+ assert result.dummy_str == create_records[i].dummy_str
702
+ assert result.dummy_float == create_records[i].dummy_float
703
+ assert result.dummy_bool == create_records[i].dummy_bool
704
+ assert result.dummy_array == create_records[i].dummy_array
705
+ assert result.dummy_json == create_records[i].dummy_json
706
+
647
707
 
648
708
  def test_db_revision_model_crud(fixture_postgresql_test_proc, fixture_postgresql_test):
649
709
  scheme = make_scheme(Dialects.postgresql, Drivers.psycopg)
@@ -957,6 +1017,29 @@ def test_db_revision_model_crud(fixture_postgresql_test_proc, fixture_postgresql
957
1017
  assert result.dummy_array == update_records[i].dummy_array
958
1018
  assert result.dummy_json == update_records[i].dummy_json
959
1019
 
1020
+ create_records = [random_record() for _ in range(0, 100)]
1021
+
1022
+ results = db_create_revision_models(session,
1023
+ DummyRevisionModel,
1024
+ create_records,
1025
+ dt_parse_iso("2024-01-01T00:00:00+00:00"))
1026
+ assert len(results) == len(create_records)
1027
+
1028
+ for i, result in zip(range(0, 100), results):
1029
+ assert result.sqn == i + 301
1030
+ assert result.record_sqn == i + 301
1031
+ assert result.revision == 1
1032
+ assert result.created_at == dt_parse_iso("2024-01-01T00:00:00+00:00")
1033
+ assert result.updated_at == dt_parse_iso("2024-01-01T00:00:00+00:00")
1034
+ assert result.expired_at is None
1035
+ assert result.dummy_uuid == create_records[i].dummy_uuid
1036
+ assert result.dummy_int == create_records[i].dummy_int
1037
+ assert result.dummy_str == create_records[i].dummy_str
1038
+ assert result.dummy_float == create_records[i].dummy_float
1039
+ assert result.dummy_bool == create_records[i].dummy_bool
1040
+ assert result.dummy_array == create_records[i].dummy_array
1041
+ assert result.dummy_json == create_records[i].dummy_json
1042
+
960
1043
 
961
1044
  def test_make_snapshot_model_trigger(fixture_postgresql_test_proc, fixture_postgresql_test):
962
1045
  scheme = make_scheme(Dialects.postgresql, Drivers.psycopg)