datamasque-python 1.0.1__tar.gz → 1.0.2__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 (73) hide show
  1. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/HISTORY.rst +5 -0
  2. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/PKG-INFO +1 -1
  3. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/__init__.py +2 -0
  4. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/models/connection.py +9 -0
  5. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/pyproject.toml +1 -1
  6. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/setup.cfg +1 -1
  7. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/tests/test_connections.py +60 -0
  8. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/uv.lock +1 -1
  9. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/.editorconfig +0 -0
  10. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/.github/workflows/ci.yml +0 -0
  11. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/.github/workflows/release-testpypi.yml +0 -0
  12. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/.github/workflows/release.yml +0 -0
  13. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/.gitignore +0 -0
  14. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/.readthedocs.yaml +0 -0
  15. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/CONTRIBUTING.rst +0 -0
  16. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/LICENSE +0 -0
  17. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/MANIFEST.in +0 -0
  18. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/Makefile +0 -0
  19. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/NOTICE +0 -0
  20. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/README.rst +0 -0
  21. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/base.py +0 -0
  22. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/connections.py +0 -0
  23. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/discovery.py +0 -0
  24. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/dmclient.py +0 -0
  25. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/exceptions.py +0 -0
  26. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/files.py +0 -0
  27. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/ifm.py +0 -0
  28. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/license.py +0 -0
  29. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/models/__init__.py +0 -0
  30. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/models/data_selection.py +0 -0
  31. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/models/discovery.py +0 -0
  32. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/models/dm_instance.py +0 -0
  33. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/models/files.py +0 -0
  34. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/models/ifm.py +0 -0
  35. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/models/license.py +0 -0
  36. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/models/pagination.py +0 -0
  37. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/models/ruleset.py +0 -0
  38. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/models/ruleset_library.py +0 -0
  39. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/models/runs.py +0 -0
  40. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/models/status.py +0 -0
  41. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/models/user.py +0 -0
  42. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/py.typed +0 -0
  43. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/ruleset_libraries.py +0 -0
  44. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/rulesets.py +0 -0
  45. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/runs.py +0 -0
  46. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/settings.py +0 -0
  47. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/datamasque/client/users.py +0 -0
  48. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/docs/Makefile +0 -0
  49. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/docs/client.models.rst +0 -0
  50. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/docs/client.rst +0 -0
  51. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/docs/conf.py +0 -0
  52. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/docs/contributing.rst +0 -0
  53. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/docs/history.rst +0 -0
  54. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/docs/index.rst +0 -0
  55. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/docs/installation.rst +0 -0
  56. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/docs/make.bat +0 -0
  57. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/docs/modules.rst +0 -0
  58. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/docs/readme.rst +0 -0
  59. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/docs/usage.rst +0 -0
  60. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/tests/__init__.py +0 -0
  61. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/tests/conftest.py +0 -0
  62. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/tests/helpers.py +0 -0
  63. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/tests/test_base.py +0 -0
  64. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/tests/test_discovery.py +0 -0
  65. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/tests/test_files.py +0 -0
  66. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/tests/test_ifm.py +0 -0
  67. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/tests/test_license.py +0 -0
  68. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/tests/test_pagination.py +0 -0
  69. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/tests/test_ruleset_library.py +0 -0
  70. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/tests/test_rulesets.py +0 -0
  71. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/tests/test_runs.py +0 -0
  72. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/tests/test_settings.py +0 -0
  73. {datamasque_python-1.0.1 → datamasque_python-1.0.2}/tests/test_users.py +0 -0
@@ -2,6 +2,11 @@
2
2
  History
3
3
  =======
4
4
 
5
+ 1.0.2 (2026-05-14)
6
+ ------------------
7
+
8
+ * Added ``DatabricksDeltaS3ConnectionConfig`` for Databricks Delta tables stored in S3.
9
+
5
10
  1.0.1 (2026-05-11)
6
11
  ------------------
7
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datamasque-python
3
- Version: 1.0.1
3
+ Version: 1.0.2
4
4
  Summary: Official Python client for the DataMasque data-masking API.
5
5
  Project-URL: Homepage, https://datamasque.com/
6
6
  Project-URL: Documentation, https://datamasque-python.readthedocs.io/
@@ -30,6 +30,7 @@ from datamasque.client.models.connection import (
30
30
  ConnectionId,
31
31
  DatabaseConnectionConfig,
32
32
  DatabaseType,
33
+ DatabricksDeltaS3ConnectionConfig,
33
34
  DynamoConnectionConfig,
34
35
  FileConnectionConfig,
35
36
  MongoConnectionConfig,
@@ -128,6 +129,7 @@ __all__ = [
128
129
  "DataMasqueUserError",
129
130
  "DatabaseConnectionConfig",
130
131
  "DatabaseType",
132
+ "DatabricksDeltaS3ConnectionConfig",
131
133
  "DiscoveryMatch",
132
134
  "DynamoConnectionConfig",
133
135
  "FailedToStartError",
@@ -391,10 +391,19 @@ class MountedShareConnectionConfig(FileConnectionConfig):
391
391
  type: Literal["mounted_share_connection"] = "mounted_share_connection"
392
392
 
393
393
 
394
+ class DatabricksDeltaS3ConnectionConfig(FileConnectionConfig):
395
+ """Connection configuration for Databricks Delta tables stored in S3."""
396
+
397
+ type: Literal["databricks_delta_s3_connection"] = "databricks_delta_s3_connection"
398
+ bucket: str = ""
399
+ iam_role_arn: Optional[str] = None
400
+
401
+
394
402
  FILE_TYPE_MAP: dict[str, type[FileConnectionConfig]] = {
395
403
  "s3_connection": S3ConnectionConfig,
396
404
  "azure_blob_connection": AzureConnectionConfig,
397
405
  "mounted_share_connection": MountedShareConnectionConfig,
406
+ "databricks_delta_s3_connection": DatabricksDeltaS3ConnectionConfig,
398
407
  }
399
408
 
400
409
  DB_TYPE_MAP: dict[str, type[ConnectionConfig]] = {
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "datamasque-python"
3
- version = "1.0.1"
3
+ version = "1.0.2"
4
4
  description = "Official Python client for the DataMasque data-masking API."
5
5
  authors = [
6
6
  { name = "DataMasque Ltd" },
@@ -1,5 +1,5 @@
1
1
  [bumpversion]
2
- current_version = 1.0.1
2
+ current_version = 1.0.2
3
3
  commit = True
4
4
  tag = True
5
5
 
@@ -9,6 +9,7 @@ from datamasque.client.models.connection import (
9
9
  ConnectionId,
10
10
  DatabaseConnectionConfig,
11
11
  DatabaseType,
12
+ DatabricksDeltaS3ConnectionConfig,
12
13
  DynamoConnectionConfig,
13
14
  MongoConnectionConfig,
14
15
  MountedShareConnectionConfig,
@@ -695,6 +696,65 @@ def test_s3_connection_model_validate_no_iam_role():
695
696
  assert conn.iam_role_arn is None
696
697
 
697
698
 
699
+ def test_databricks_delta_s3_connection_model_validate():
700
+ payload = {
701
+ "id": "11223344-5566-7788-99aa-bbccddeeff00",
702
+ "name": "delta_s3",
703
+ "mask_type": "file",
704
+ "type": "databricks_delta_s3_connection",
705
+ "base_directory": "delta/",
706
+ "is_file_mask_source": True,
707
+ "is_file_mask_destination": False,
708
+ "bucket": "my-delta-bucket",
709
+ "iam_role_arn": "arn:aws:iam::111122223333:role/delta-role",
710
+ }
711
+
712
+ conn = DatabricksDeltaS3ConnectionConfig.model_validate(payload)
713
+
714
+ assert isinstance(conn, DatabricksDeltaS3ConnectionConfig)
715
+ assert conn.id == "11223344-5566-7788-99aa-bbccddeeff00"
716
+ assert conn.name == "delta_s3"
717
+ assert conn.bucket == "my-delta-bucket"
718
+ assert conn.base_directory == "delta/"
719
+ assert conn.is_file_mask_source is True
720
+ assert conn.is_file_mask_destination is False
721
+ assert conn.iam_role_arn == "arn:aws:iam::111122223333:role/delta-role"
722
+
723
+
724
+ def test_databricks_delta_s3_connection_model_validate_no_iam_role():
725
+ payload = {
726
+ "id": "id-delta",
727
+ "name": "delta_s3",
728
+ "mask_type": "file",
729
+ "type": "databricks_delta_s3_connection",
730
+ "base_directory": "",
731
+ "is_file_mask_source": True,
732
+ "is_file_mask_destination": False,
733
+ "bucket": "my-delta-bucket",
734
+ }
735
+
736
+ conn = DatabricksDeltaS3ConnectionConfig.model_validate(payload)
737
+ assert conn.iam_role_arn is None
738
+
739
+
740
+ def test_validate_connection_dispatches_databricks_delta_s3():
741
+ payload = {
742
+ "id": "aabb-ccdd",
743
+ "name": "delta",
744
+ "mask_type": "file",
745
+ "type": "databricks_delta_s3_connection",
746
+ "base_directory": "",
747
+ "is_file_mask_source": False,
748
+ "is_file_mask_destination": True,
749
+ "bucket": "delta-bucket",
750
+ }
751
+
752
+ conn = validate_connection(payload)
753
+
754
+ assert isinstance(conn, DatabricksDeltaS3ConnectionConfig)
755
+ assert conn.bucket == "delta-bucket"
756
+
757
+
698
758
  def test_azure_connection_model_validate_blanks_encrypted_connection_string():
699
759
  payload = {
700
760
  "id": "490502e5-5bf6-4abb-b67b-c6091d40ecf0",
@@ -428,7 +428,7 @@ toml = [
428
428
 
429
429
  [[package]]
430
430
  name = "datamasque-python"
431
- version = "1.0.1"
431
+ version = "1.0.2"
432
432
  source = { editable = "." }
433
433
  dependencies = [
434
434
  { name = "pydantic" },