otdf-python 0.4.0__py3-none-any.whl → 0.4.2__py3-none-any.whl

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 (96) hide show
  1. otdf_python/__init__.py +1 -2
  2. otdf_python/__main__.py +1 -2
  3. otdf_python/address_normalizer.py +8 -10
  4. otdf_python/aesgcm.py +8 -0
  5. otdf_python/assertion_config.py +21 -0
  6. otdf_python/asym_crypto.py +18 -22
  7. otdf_python/auth_headers.py +7 -6
  8. otdf_python/autoconfigure_utils.py +21 -7
  9. otdf_python/cli.py +5 -5
  10. otdf_python/collection_store.py +13 -1
  11. otdf_python/collection_store_impl.py +5 -0
  12. otdf_python/config.py +13 -0
  13. otdf_python/connect_client.py +1 -0
  14. otdf_python/constants.py +2 -0
  15. otdf_python/crypto_utils.py +4 -0
  16. otdf_python/dpop.py +3 -5
  17. otdf_python/ecc_constants.py +12 -14
  18. otdf_python/ecc_mode.py +7 -2
  19. otdf_python/ecdh.py +24 -31
  20. otdf_python/eckeypair.py +5 -0
  21. otdf_python/header.py +5 -0
  22. otdf_python/invalid_zip_exception.py +6 -2
  23. otdf_python/kas_client.py +66 -55
  24. otdf_python/kas_connect_rpc_client.py +75 -38
  25. otdf_python/kas_info.py +4 -3
  26. otdf_python/kas_key_cache.py +10 -9
  27. otdf_python/key_type.py +4 -0
  28. otdf_python/key_type_constants.py +4 -11
  29. otdf_python/manifest.py +24 -0
  30. otdf_python/nanotdf.py +30 -28
  31. otdf_python/nanotdf_ecdsa_struct.py +5 -11
  32. otdf_python/nanotdf_type.py +13 -1
  33. otdf_python/policy_binding_serializer.py +6 -4
  34. otdf_python/policy_info.py +6 -0
  35. otdf_python/policy_object.py +8 -0
  36. otdf_python/policy_stub.py +2 -0
  37. otdf_python/resource_locator.py +22 -13
  38. otdf_python/sdk.py +51 -73
  39. otdf_python/sdk_builder.py +60 -47
  40. otdf_python/sdk_exceptions.py +11 -1
  41. otdf_python/symmetric_and_payload_config.py +6 -0
  42. otdf_python/tdf.py +47 -10
  43. otdf_python/tdf_reader.py +10 -13
  44. otdf_python/tdf_writer.py +5 -0
  45. otdf_python/token_source.py +4 -3
  46. otdf_python/version.py +5 -0
  47. otdf_python/zip_reader.py +10 -2
  48. otdf_python/zip_writer.py +11 -0
  49. {otdf_python-0.4.0.dist-info → otdf_python-0.4.2.dist-info}/METADATA +3 -2
  50. {otdf_python-0.4.0.dist-info → otdf_python-0.4.2.dist-info}/RECORD +81 -72
  51. {otdf_python-0.4.0.dist-info → otdf_python-0.4.2.dist-info}/WHEEL +1 -1
  52. otdf_python_proto/__init__.py +2 -6
  53. otdf_python_proto/authorization/__init__.py +10 -0
  54. otdf_python_proto/authorization/authorization_connect.py +250 -0
  55. otdf_python_proto/authorization/v2/authorization_connect.py +315 -0
  56. otdf_python_proto/entityresolution/__init__.py +10 -0
  57. otdf_python_proto/entityresolution/entity_resolution_connect.py +185 -0
  58. otdf_python_proto/entityresolution/v2/entity_resolution_connect.py +185 -0
  59. otdf_python_proto/kas/__init__.py +2 -2
  60. otdf_python_proto/kas/kas_connect.py +259 -0
  61. otdf_python_proto/policy/actions/__init__.py +11 -0
  62. otdf_python_proto/policy/actions/actions_connect.py +380 -0
  63. otdf_python_proto/policy/attributes/__init__.py +11 -0
  64. otdf_python_proto/policy/attributes/attributes_connect.py +1310 -0
  65. otdf_python_proto/policy/kasregistry/__init__.py +11 -0
  66. otdf_python_proto/policy/kasregistry/key_access_server_registry_connect.py +912 -0
  67. otdf_python_proto/policy/keymanagement/__init__.py +11 -0
  68. otdf_python_proto/policy/keymanagement/key_management_connect.py +380 -0
  69. otdf_python_proto/policy/namespaces/__init__.py +11 -0
  70. otdf_python_proto/policy/namespaces/namespaces_connect.py +648 -0
  71. otdf_python_proto/policy/registeredresources/__init__.py +11 -0
  72. otdf_python_proto/policy/registeredresources/registered_resources_connect.py +770 -0
  73. otdf_python_proto/policy/resourcemapping/__init__.py +11 -0
  74. otdf_python_proto/policy/resourcemapping/resource_mapping_connect.py +790 -0
  75. otdf_python_proto/policy/subjectmapping/__init__.py +11 -0
  76. otdf_python_proto/policy/subjectmapping/subject_mapping_connect.py +851 -0
  77. otdf_python_proto/policy/unsafe/__init__.py +11 -0
  78. otdf_python_proto/policy/unsafe/unsafe_connect.py +705 -0
  79. otdf_python_proto/wellknownconfiguration/__init__.py +10 -0
  80. otdf_python_proto/wellknownconfiguration/wellknown_configuration_connect.py +124 -0
  81. otdf_python_proto/authorization/authorization_pb2_connect.py +0 -191
  82. otdf_python_proto/authorization/v2/authorization_pb2_connect.py +0 -233
  83. otdf_python_proto/entityresolution/entity_resolution_pb2_connect.py +0 -149
  84. otdf_python_proto/entityresolution/v2/entity_resolution_pb2_connect.py +0 -149
  85. otdf_python_proto/kas/kas_pb2_connect.py +0 -192
  86. otdf_python_proto/policy/actions/actions_pb2_connect.py +0 -275
  87. otdf_python_proto/policy/attributes/attributes_pb2_connect.py +0 -863
  88. otdf_python_proto/policy/kasregistry/key_access_server_registry_pb2_connect.py +0 -611
  89. otdf_python_proto/policy/keymanagement/key_management_pb2_connect.py +0 -275
  90. otdf_python_proto/policy/namespaces/namespaces_pb2_connect.py +0 -443
  91. otdf_python_proto/policy/registeredresources/registered_resources_pb2_connect.py +0 -527
  92. otdf_python_proto/policy/resourcemapping/resource_mapping_pb2_connect.py +0 -527
  93. otdf_python_proto/policy/subjectmapping/subject_mapping_pb2_connect.py +0 -569
  94. otdf_python_proto/policy/unsafe/unsafe_pb2_connect.py +0 -485
  95. otdf_python_proto/wellknownconfiguration/wellknown_configuration_pb2_connect.py +0 -107
  96. {otdf_python-0.4.0.dist-info → otdf_python-0.4.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,10 +1,16 @@
1
+ """Symmetric encryption and payload configuration."""
2
+
3
+
1
4
  class SymmetricAndPayloadConfig:
5
+ """Symmetric and payload configuration."""
6
+
2
7
  def __init__(
3
8
  self,
4
9
  cipher_type: int = 0,
5
10
  signature_ecc_mode: int = 0,
6
11
  has_signature: bool = True,
7
12
  ):
13
+ """Initialize symmetric and payload configuration."""
8
14
  self.cipher_type = cipher_type
9
15
  self.signature_ecc_mode = signature_ecc_mode
10
16
  self.has_signature = has_signature
otdf_python/tdf.py CHANGED
@@ -1,3 +1,5 @@
1
+ """TDF reader and writer functionality for OpenTDF platform."""
2
+
1
3
  import base64
2
4
  import hashlib
3
5
  import hmac
@@ -31,17 +33,23 @@ from otdf_python.tdf_writer import TDFWriter
31
33
 
32
34
  @dataclass
33
35
  class TDFReader:
36
+ """Container for TDF payload and manifest after reading."""
37
+
34
38
  payload: bytes
35
39
  manifest: Manifest
36
40
 
37
41
 
38
42
  @dataclass
39
43
  class TDFReaderConfig:
44
+ """Configuration for TDF reader operations."""
45
+
40
46
  kas_private_key: str | None = None
41
47
  attributes: list[str] | None = None
42
48
 
43
49
 
44
50
  class TDF:
51
+ """TDF reader and writer for handling TDF encryption and decryption."""
52
+
45
53
  MAX_TDF_INPUT_SIZE = 68719476736
46
54
  GCM_KEY_SIZE = 32
47
55
  GCM_IV_SIZE = 12
@@ -53,6 +61,13 @@ class TDF:
53
61
  GLOBAL_KEY_SALT = b"TDF-Session-Key"
54
62
 
55
63
  def __init__(self, services=None, maximum_size: int | None = None):
64
+ """Initialize TDF reader/writer.
65
+
66
+ Args:
67
+ services: SDK services for KAS operations
68
+ maximum_size: Maximum size allowed for TDF operations
69
+
70
+ """
56
71
  self.services = services
57
72
  self.maximum_size = maximum_size or self.MAX_TDF_INPUT_SIZE
58
73
 
@@ -74,7 +89,7 @@ class TDF:
74
89
  except Exception as e:
75
90
  raise ValueError(
76
91
  f"Failed to fetch public key for KAS {kas.url}: {e}"
77
- )
92
+ ) from e
78
93
  else:
79
94
  raise ValueError(
80
95
  "Each KAS info must have a public_key, or SDK services must be available to fetch it"
@@ -162,7 +177,7 @@ class TDF:
162
177
  return _json.dumps(policy, default=self._serialize_policy_object)
163
178
 
164
179
  def _serialize_policy_object(self, obj):
165
- """Custom TDF serializer to convert to compatible JSON format."""
180
+ """Serialize policy object to compatible JSON format."""
166
181
  from otdf_python.policy_object import AttributeObject, PolicyBody
167
182
 
168
183
  if isinstance(obj, PolicyBody):
@@ -185,9 +200,7 @@ class TDF:
185
200
  return obj.__dict__
186
201
 
187
202
  def _unwrap_key(self, key_access_objs, private_key_pem):
188
- """
189
- Unwraps the key locally using a provided private key (used for testing)
190
- """
203
+ """Unwrap the key locally using provided private key (used for testing)."""
191
204
  from .asym_crypto import AsymDecryption
192
205
 
193
206
  key = None
@@ -204,9 +217,7 @@ class TDF:
204
217
  return key
205
218
 
206
219
  def _unwrap_key_with_kas(self, key_access_objs, policy_b64) -> bytes:
207
- """
208
- Unwraps the key using the KAS service (production method)
209
- """
220
+ """Unwrap the key using the KAS service (production method)."""
210
221
  # Get KAS client from services
211
222
  if not self.services:
212
223
  raise ValueError("SDK services required for KAS operations")
@@ -281,6 +292,17 @@ class TDF:
281
292
  config: TDFConfig,
282
293
  output_stream: io.BytesIO | None = None,
283
294
  ):
295
+ """Create a TDF with the provided payload and configuration.
296
+
297
+ Args:
298
+ payload: The payload data as bytes or BinaryIO
299
+ config: TDFConfig for encryption settings
300
+ output_stream: Optional output stream, creates new BytesIO if not provided
301
+
302
+ Returns:
303
+ Tuple of (manifest, size, output_stream)
304
+
305
+ """
284
306
  if output_stream is None:
285
307
  output_stream = io.BytesIO()
286
308
  writer = TDFWriter(output_stream)
@@ -380,6 +402,16 @@ class TDF:
380
402
  def load_tdf(
381
403
  self, tdf_data: bytes | io.BytesIO, config: TDFReaderConfig
382
404
  ) -> TDFReader:
405
+ """Load and decrypt a TDF from the provided data.
406
+
407
+ Args:
408
+ tdf_data: The TDF data as bytes or BytesIO
409
+ config: TDFReaderConfig with optional private key for local unwrapping
410
+
411
+ Returns:
412
+ TDFReader containing payload and manifest
413
+
414
+ """
383
415
  # Extract manifest, unwrap payload key using KAS client
384
416
  # Handle both bytes and BinaryIO input
385
417
  tdf_bytes_io = io.BytesIO(tdf_data) if isinstance(tdf_data, bytes) else tdf_data
@@ -423,8 +455,13 @@ class TDF:
423
455
  def read_payload(
424
456
  self, tdf_bytes: bytes, config: dict, output_stream: BinaryIO
425
457
  ) -> None:
426
- """
427
- Reads and verifies TDF segments, decrypts if needed, and writes the payload to output_stream.
458
+ """Read and verify TDF segments, decrypt if needed, and write the payload.
459
+
460
+ Args:
461
+ tdf_bytes: The TDF data as bytes
462
+ config: Configuration dictionary for reading
463
+ output_stream: The output stream to write the payload to
464
+
428
465
  """
429
466
  import base64
430
467
  import zipfile
otdf_python/tdf_reader.py CHANGED
@@ -1,6 +1,4 @@
1
- """
2
- TDFReader is responsible for reading and processing Trusted Data Format (TDF) files.
3
- """
1
+ """TDFReader is responsible for reading and processing Trusted Data Format (TDF) files."""
4
2
 
5
3
  from .manifest import Manifest
6
4
  from .policy_object import PolicyObject
@@ -13,15 +11,13 @@ TDF_PAYLOAD_FILE_NAME = "0.payload"
13
11
 
14
12
 
15
13
  class TDFReader:
16
- """
17
- TDFReader is responsible for reading and processing Trusted Data Format (TDF) files.
14
+ """TDFReader is responsible for reading and processing Trusted Data Format (TDF) files.
18
15
  The class initializes with a TDF file channel, extracts the manifest and payload entries,
19
16
  and provides methods to retrieve the manifest content, read payload bytes, and read policy objects.
20
17
  """
21
18
 
22
19
  def __init__(self, tdf):
23
- """
24
- Initialize a TDFReader with a TDF file channel.
20
+ """Initialize a TDFReader with a TDF file channel.
25
21
 
26
22
  Args:
27
23
  tdf: A file-like object containing the TDF data
@@ -29,6 +25,7 @@ class TDFReader:
29
25
  Raises:
30
26
  SDKException: If there's an error reading the TDF
31
27
  ValueError: If the TDF doesn't contain a manifest or payload
28
+
32
29
  """
33
30
  try:
34
31
  self._zip_reader = ZipReader(tdf)
@@ -48,14 +45,14 @@ class TDFReader:
48
45
  raise SDKException("Error initializing TDFReader") from e
49
46
 
50
47
  def manifest(self) -> str:
51
- """
52
- Get the manifest content as a string.
48
+ """Get the manifest content as a string.
53
49
 
54
50
  Returns:
55
51
  The manifest content as a UTF-8 encoded string
56
52
 
57
53
  Raises:
58
54
  SDKException: If there's an error retrieving the manifest
55
+
59
56
  """
60
57
  try:
61
58
  manifest_data = self._zip_reader.read(self._manifest_name)
@@ -64,8 +61,7 @@ class TDFReader:
64
61
  raise SDKException("Error retrieving manifest from zip file") from e
65
62
 
66
63
  def read_payload_bytes(self, buf: bytearray) -> int:
67
- """
68
- Read bytes from the payload into a buffer.
64
+ """Read bytes from the payload into a buffer.
69
65
 
70
66
  Args:
71
67
  buf: A bytearray buffer to read into
@@ -75,6 +71,7 @@ class TDFReader:
75
71
 
76
72
  Raises:
77
73
  SDKException: If there's an error reading from the payload
74
+
78
75
  """
79
76
  try:
80
77
  # Read the entire payload
@@ -89,14 +86,14 @@ class TDFReader:
89
86
  raise SDKException("Error reading from payload in TDF") from e
90
87
 
91
88
  def read_policy_object(self) -> PolicyObject:
92
- """
93
- Read the policy object from the manifest.
89
+ """Read the policy object from the manifest.
94
90
 
95
91
  Returns:
96
92
  The PolicyObject
97
93
 
98
94
  Raises:
99
95
  SDKException: If there's an error reading the policy object
96
+
100
97
  """
101
98
  try:
102
99
  manifest_text = self.manifest()
otdf_python/tdf_writer.py CHANGED
@@ -1,13 +1,18 @@
1
+ """TDF writer for creating encrypted TDF files."""
2
+
1
3
  import io
2
4
 
3
5
  from otdf_python.zip_writer import ZipWriter
4
6
 
5
7
 
6
8
  class TDFWriter:
9
+ """TDF file writer for creating encrypted TDF packages."""
10
+
7
11
  TDF_PAYLOAD_FILE_NAME = "0.payload"
8
12
  TDF_MANIFEST_FILE_NAME = "0.manifest.json"
9
13
 
10
14
  def __init__(self, out_stream: io.BytesIO | None = None):
15
+ """Initialize TDF writer."""
11
16
  self._zip_writer = ZipWriter(out_stream)
12
17
 
13
18
  def append_manifest(self, manifest: str):
@@ -1,6 +1,4 @@
1
- """
2
- TokenSource: Handles OAuth2 token acquisition and caching.
3
- """
1
+ """TokenSource: Handles OAuth2 token acquisition and caching."""
4
2
 
5
3
  import time
6
4
 
@@ -8,7 +6,10 @@ import httpx
8
6
 
9
7
 
10
8
  class TokenSource:
9
+ """OAuth2 token source for authentication."""
10
+
11
11
  def __init__(self, token_url, client_id, client_secret):
12
+ """Initialize token source."""
12
13
  self.token_url = token_url
13
14
  self.client_id = client_id
14
15
  self.client_secret = client_secret
otdf_python/version.py CHANGED
@@ -1,9 +1,13 @@
1
+ """SDK version information."""
2
+
1
3
  import re
2
4
  from functools import total_ordering
3
5
 
4
6
 
5
7
  @total_ordering
6
8
  class Version:
9
+ """Semantic version representation."""
10
+
7
11
  SEMVER_PATTERN = re.compile(
8
12
  r"^(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)(?P<prereleaseAndMetadata>\D.*)?$"
9
13
  )
@@ -15,6 +19,7 @@ class Version:
15
19
  patch=None,
16
20
  prerelease_and_metadata: str | None = None,
17
21
  ):
22
+ """Initialize semantic version."""
18
23
  if minor is None and patch is None:
19
24
  # Parse from string
20
25
  m = self.SEMVER_PATTERN.match(semver_or_major)
otdf_python/zip_reader.py CHANGED
@@ -1,3 +1,5 @@
1
+ """ZIP file reader for TDF operations."""
2
+
1
3
  import io
2
4
  import zipfile
3
5
 
@@ -5,8 +7,13 @@ from otdf_python.invalid_zip_exception import InvalidZipException
5
7
 
6
8
 
7
9
  class ZipReader:
10
+ """ZIP file reader for reading TDF packages."""
11
+
8
12
  class Entry:
13
+ """ZIP file entry with data access."""
14
+
9
15
  def __init__(self, zipfile_obj, zipinfo):
16
+ """Initialize ZIP entry."""
10
17
  self._zipfile = zipfile_obj
11
18
  self._zipinfo = zipinfo
12
19
 
@@ -17,9 +24,10 @@ class ZipReader:
17
24
  try:
18
25
  return self._zipfile.read(self._zipinfo)
19
26
  except Exception as e:
20
- raise InvalidZipException(f"Error reading entry data: {e}")
27
+ raise InvalidZipException(f"Error reading entry data: {e}") from e
21
28
 
22
29
  def __init__(self, in_stream: io.BytesIO | bytes | None = None):
30
+ """Initialize ZIP reader."""
23
31
  try:
24
32
  if isinstance(in_stream, bytes):
25
33
  in_stream = io.BytesIO(in_stream)
@@ -29,7 +37,7 @@ class ZipReader:
29
37
  self.Entry(self.zipfile, zi) for zi in self.zipfile.infolist()
30
38
  ]
31
39
  except zipfile.BadZipFile as e:
32
- raise InvalidZipException(f"Invalid ZIP file: {e}")
40
+ raise InvalidZipException(f"Invalid ZIP file: {e}") from e
33
41
 
34
42
  def get_entries(self) -> list:
35
43
  return self.entries
otdf_python/zip_writer.py CHANGED
@@ -1,10 +1,15 @@
1
+ """ZIP file writer for TDF operations."""
2
+
1
3
  import io
2
4
  import zipfile
3
5
  import zlib
4
6
 
5
7
 
6
8
  class FileInfo:
9
+ """ZIP file metadata information."""
10
+
7
11
  def __init__(self, name: str, crc: int, size: int, offset: int):
12
+ """Initialize file info."""
8
13
  self.name = name
9
14
  self.crc = crc
10
15
  self.size = size
@@ -12,7 +17,10 @@ class FileInfo:
12
17
 
13
18
 
14
19
  class ZipWriter:
20
+ """ZIP file writer for creating TDF packages."""
21
+
15
22
  def __init__(self, out_stream: io.BytesIO | None = None):
23
+ """Initialize ZIP writer."""
16
24
  self.out_stream = out_stream or io.BytesIO()
17
25
  self.zipfile = zipfile.ZipFile(
18
26
  self.out_stream, mode="w", compression=zipfile.ZIP_STORED
@@ -45,7 +53,10 @@ class ZipWriter:
45
53
 
46
54
 
47
55
  class _TrackingWriter(io.RawIOBase):
56
+ """Internal ZIP stream writer with offset tracking."""
57
+
48
58
  def __init__(self, zip_writer: ZipWriter, name: str, offset: int):
59
+ """Initialize tracking writer."""
49
60
  self._zip_writer = zip_writer
50
61
  self._name = name
51
62
  self._offset = offset
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: otdf-python
3
- Version: 0.4.0
3
+ Version: 0.4.2
4
4
  Summary: Unofficial OpenTDF SDK for Python
5
5
  Project-URL: Homepage, https://github.com/b-long/opentdf-python-sdk
6
6
  Project-URL: Repository, https://github.com/b-long/opentdf-python-sdk
@@ -22,13 +22,14 @@ Classifier: Topic :: Security :: Cryptography
22
22
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
23
23
  Classifier: Typing :: Typed
24
24
  Requires-Python: >=3.10
25
- Requires-Dist: connect-python[compiler]<0.5,>=0.4.2
25
+ Requires-Dist: connect-python<0.7,>=0.6.0
26
26
  Requires-Dist: cryptography>=45.0.4
27
27
  Requires-Dist: grpcio-status>=1.74.0
28
28
  Requires-Dist: grpcio-tools>=1.74.0
29
29
  Requires-Dist: grpcio>=1.74.0
30
30
  Requires-Dist: httpx>=0.28.1
31
31
  Requires-Dist: protobuf>=6.31.1
32
+ Requires-Dist: protoc-gen-connect-python<0.7,>=0.6.0
32
33
  Requires-Dist: protoc-gen-openapiv2>=0.0.1
33
34
  Requires-Dist: pyjwt>=2.10.1
34
35
  Requires-Dist: typing-extensions>=4.14.1
@@ -1,76 +1,76 @@
1
- otdf_python/__init__.py,sha256=oTB1bue61KAwDNJ1ITtvIv7YqF3fgXtpha1WztQnvHE,542
2
- otdf_python/__main__.py,sha256=V9cmvhX9Ht2wpPOHGrw_onBogStJnuWTx9eyiezEDsQ,276
3
- otdf_python/address_normalizer.py,sha256=pv7RoG4Dwac6so7NK1zCsVZBNFCcQK3cj_4iW6FPnRw,2815
4
- otdf_python/aesgcm.py,sha256=KhMabIUYxxp1gUwdwNLiwD-SvmJPqW2PunbgeguMEh8,1666
5
- otdf_python/assertion_config.py,sha256=P2Pc1OxMk9Ln6bvp1ZI8j66Q7uoZoYB7oMB6WLG38Y8,1763
6
- otdf_python/asym_crypto.py,sha256=dwx3lUxUt3e8JA9z2lQrpsOBA3x36DN07bQbcVGZBvI,7251
7
- otdf_python/auth_headers.py,sha256=a0TQD36QKXO1G4swume2wx3Sk9zQsSWEAQJnST2DlH0,966
8
- otdf_python/autoconfigure_utils.py,sha256=NiNtbapBoIO-6kM59HRvX3Kj_Z0IRMrTkFlXjwuNfPc,3236
9
- otdf_python/cli.py,sha256=0wXan-QrKQllIlSCnXDsFAT1EQpH7gv7g6TZKIVGI8E,19883
10
- otdf_python/collection_store.py,sha256=MH1RxlevRVFj5lBS_6DN3zz5ZgOhBjD0P7AYBLBqS0o,1004
11
- otdf_python/collection_store_impl.py,sha256=g3YeSwMeXr1BNmwmFr75fv9ptPjieC36Bhct-Jf1trw,613
12
- otdf_python/config.py,sha256=uGYVByTWl7pWcKRER41ef-ay5VevIbOyUAEd6BIArVg,2185
13
- otdf_python/connect_client.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- otdf_python/constants.py,sha256=SFGjrzB1GK4CkSZgNlEUIAZMY37MelTxgc8ajXIAhoc,53
15
- otdf_python/crypto_utils.py,sha256=KsNss9EC-wHs1nCiKivDnxJSMv0uxGlWLDcCowadcV8,2837
16
- otdf_python/dpop.py,sha256=ssKXTGydJS--rBTCqX9Y8qy-c5Um4pIZPG3DZcj0rWU,2301
17
- otdf_python/ecc_constants.py,sha256=uZkYeuhSnqCLjnrINOsaQQhdCKUTKLwL0t2Cswou4BA,5892
18
- otdf_python/ecc_mode.py,sha256=8q-R_XR9WWmuzwI0gI6RQpsEzK8PD8Hi8uuDCvSsGXY,3077
19
- otdf_python/ecdh.py,sha256=D8jHIZHYeQwCGCtjd3FJLXqIXnnYeEqSRLiWoiHZm1k,10233
20
- otdf_python/eckeypair.py,sha256=4uZfdJaqSxW605FhU58Gko06mixSNoDOGBgVpP5VlSQ,2324
21
- otdf_python/header.py,sha256=0p259_GNO9aumUg0KOBZkiawKZTdFzoYVcyHaMCMVC8,7045
22
- otdf_python/invalid_zip_exception.py,sha256=YEU20hM5_yE-RWJncPZobcqj4a90RAuahB54VjAS2SU,213
23
- otdf_python/kas_client.py,sha256=NP8T6G5SWuciJbYnX0QNrGGlpMhqTYbcjED2tfiTr8U,25938
24
- otdf_python/kas_connect_rpc_client.py,sha256=LRhdFF6d8qz_BDFN4WMu0Kn-ZynvKMEWmuHYPj09A6Q,7862
25
- otdf_python/kas_info.py,sha256=STnyPo-Vu_rzVQRdQl8mUGPK8eZE2vY4oPkI-PqrZJM,687
26
- otdf_python/kas_key_cache.py,sha256=Ems2NyKC_3yh_xs8k4_n2gA3Jb-9nCeRRjIdz1LRC9I,1472
27
- otdf_python/key_type.py,sha256=cwhlh6DOFG5C8JlCxFqXYi0SJDlOLUkxceg7L8arFNk,816
28
- otdf_python/key_type_constants.py,sha256=ghridYdhFMLKDa_9Q5cplrl8DqdEgApd--20bJ-MBtA,1001
29
- otdf_python/manifest.py,sha256=Uv-Hvo9hOPLrSPTeKQpDvNeHzq7qSmJ5HYtkgGwVppE,6419
30
- otdf_python/nanotdf.py,sha256=3pQ5Lip_pExhdfj2wqm58RS1Tb7A9f7dcxGIzVXSDuQ,33828
31
- otdf_python/nanotdf_ecdsa_struct.py,sha256=nRScIJLeNcbxBBE9DlG15I7EXGTkH0ITib1ra-C1-uQ,4100
32
- otdf_python/nanotdf_type.py,sha256=40PyDd62iDwcfmS7rhUeQE2B0W6FYIeCpi5cDmMO7d4,819
33
- otdf_python/policy_binding_serializer.py,sha256=8d9MizhLTdy14ghdAvhXRBA8KzKt6Nf9kmmU9hoWhrQ,1169
34
- otdf_python/policy_info.py,sha256=HGAOkxyB1I0N8_nHpnFkJXYJaycYsetqvWFNTxwwPi0,1951
35
- otdf_python/policy_object.py,sha256=zzwHk6jhZwpiX2BWxTJ1kDl3cgFijQfQrKJP3OqI35Q,380
36
- otdf_python/policy_stub.py,sha256=BQn06Ye5MwCu9feJZFPmO_UTfhugtiQa539iBkSQwhQ,117
37
- otdf_python/resource_locator.py,sha256=vrTWtkIh82Ba4KRS6k6Pm92lQG5KazIQ18xX4VoX86Y,6050
38
- otdf_python/sdk.py,sha256=7KKsjlUXL8_rUFVKoHFW37jvzS9Pi8Cww86NPyp3Kjw,14207
39
- otdf_python/sdk_builder.py,sha256=jgswTxnAfKXDGqEOIQwEiE3S0Jh0w5HMtPxHwUFIu-U,14655
40
- otdf_python/sdk_exceptions.py,sha256=L_bYkkyF-hnEBFXfjT5C41i5lM-t8OJB5mU_1zYvfP8,479
41
- otdf_python/symmetric_and_payload_config.py,sha256=D_LArhk1gA5-tpUiaUZTTM90ZKdc3DCq1a6X8etCir8,992
42
- otdf_python/tdf.py,sha256=WYfCVn7BAEBKTVEPT0SSYuCI0S6S_TgYB3C3FbHProU,19612
43
- otdf_python/tdf_reader.py,sha256=XQ3CuIXSOVRuBMYv2YIYlyaY-tHQA85HHHqNBoXNH9o,5267
44
- otdf_python/tdf_writer.py,sha256=DVEGEl8pyBm1JK2K-9BJKmT2TqvQXokPkthAQMwgCkk,645
45
- otdf_python/token_source.py,sha256=tfHWcIpPQ3FR45DUDiKz6q_vBaHH_HNifnnIpDVbMD8,923
46
- otdf_python/version.py,sha256=-MUAI4rKLCv3eGkVtEhBzqpyZOT7hZDWdzqJhfnS_BQ,1906
47
- otdf_python/zip_reader.py,sha256=GuE4hMDJfeFx6UtCUeFLmsZCJiK4RFNyyzlERA8T6Uw,1470
48
- otdf_python/zip_writer.py,sha256=UizpXBvqnl7v1mQvIr-vBIF50NwGFU0YWI-I4Y1XNW0,2091
49
- otdf_python_proto/__init__.py,sha256=2MVQMcsELGYF8NyXU8OFFQdXM1_WTKpdA9MUqiMazE8,931
50
- otdf_python_proto/authorization/__init__.py,sha256=hDpCNPxPswsfkcrCiv3Y78nqAQ_FxE9uDrYqeIqKipg,42
1
+ otdf_python/__init__.py,sha256=q93tKt2r5-_244iKPeJf4ja1ftlmOmdRQnXWAZsxISI,542
2
+ otdf_python/__main__.py,sha256=VuImcvrzCHTYOwQ-yS9HQwKmF2O6lORf1psmOkdZIh0,275
3
+ otdf_python/address_normalizer.py,sha256=7gigfxFIFnDILi8BGQipuLl-Cr71pwi5vE72hbpLdmI,2850
4
+ otdf_python/aesgcm.py,sha256=jQgVSEeKM6MJuH2tvlClXIzvg11a5O_GEY9Sh56CrxE,1947
5
+ otdf_python/assertion_config.py,sha256=rw0SIB3xG-nAeb5r_liuxLphU4tcj-zlq8rVvXncX-Y,2317
6
+ otdf_python/asym_crypto.py,sha256=EYkMNhZJP5khH0IvICTOG2bMg_TMvd6wXDu5zW0jpj4,7234
7
+ otdf_python/auth_headers.py,sha256=uOLflFunBCw59nwk23rdiFQWOFrS19HugQXuQPGv3xE,986
8
+ otdf_python/autoconfigure_utils.py,sha256=W5aJ0tC7HWfGb_1Mva_oxgduUzSpPoyDeaq0rPwgPAs,3689
9
+ otdf_python/cli.py,sha256=HKIzuIXIW2sBwW3jy9sGq8WVFlxlKrdKac9MjJig88Y,19940
10
+ otdf_python/collection_store.py,sha256=sYL6VMFDBfHfCCLk14iybeC_qoUlpJFB0wOMt1bdwpY,1429
11
+ otdf_python/collection_store_impl.py,sha256=3RqO3rvDCosajKpuls5DiO2_SWYsNQul9_9L7n-lQ68,758
12
+ otdf_python/config.py,sha256=l1Ykg1gFUrFZTnd6bwMI6oi_clR5uCZ_Y1qH7QKtW90,2523
13
+ otdf_python/connect_client.py,sha256=TpHpcU2t19pSqWn30cqzfM48nDG590BfNTlDPgUu054,45
14
+ otdf_python/constants.py,sha256=ArVgY9OF2fkVM7dg0-9N3xs0xmKy0DWDUlVcO0_n9PQ,102
15
+ otdf_python/crypto_utils.py,sha256=x0cEltQDVW8bxJ9L555KQKJU4_dI5Uw2h7j9oQGNT38,2933
16
+ otdf_python/dpop.py,sha256=-76xjKz9Alf529StB_jQWhr-gCAOBkpssaSYQw2EH1A,2295
17
+ otdf_python/ecc_constants.py,sha256=rCVZCWZ9zhyq2sqnUGFadiZ1CwXXe5T9olDtFYCJCIs,5846
18
+ otdf_python/ecc_mode.py,sha256=aEAISAZpXcS72gXRUlYgH8n8EJP7zIpOeSVPxUJdAG8,3163
19
+ otdf_python/ecdh.py,sha256=fwxE80qFSIkfJeUz3GNhEndRKkZrBN06FE1gnvwUHHI,10201
20
+ otdf_python/eckeypair.py,sha256=qcPKv0OS1lYxRICj9dhAW_eMz32anFBtpI8EJfXxpX0,2470
21
+ otdf_python/header.py,sha256=peG14kE_KAUCW4fY82sqcWF5zTAVAnJfFXCHtC8Z0iQ,7189
22
+ otdf_python/invalid_zip_exception.py,sha256=M_bAiXEjJdxPfA178YH-uHGRwMrNBKzjQzlQ54aDP2w,292
23
+ otdf_python/kas_client.py,sha256=6q61WHUPAaDdLET0EkFbIpGMy9hHFCJoA3gs4xbd9FE,26542
24
+ otdf_python/kas_connect_rpc_client.py,sha256=cB3cBomCClmu-InUpw8R35cLyJQ8X0PoEsFvYSH0RUM,8950
25
+ otdf_python/kas_info.py,sha256=V-5om8k4RKbhE0h1CS1Rxb18TYcHKvq_hEPP6ah8K_o,738
26
+ otdf_python/kas_key_cache.py,sha256=6hfzRAg9o_IfRErWSe-_gGTG9kRyYENMizMY1Shkmfk,1548
27
+ otdf_python/key_type.py,sha256=2gQlXOj35J3ISCcWjU3sGYUxmlZR47BMq6Xr2yoKA8k,928
28
+ otdf_python/key_type_constants.py,sha256=MV2Dsea3A6nnnYztoD0N1QxhrbQXZfaXaqCr2rI6sqo,954
29
+ otdf_python/manifest.py,sha256=aglGw9EdtZZIxmwqy82sV5wum_mKkjzew4brSgxmJjc,7047
30
+ otdf_python/nanotdf.py,sha256=lJgO7Go6qhdvQ8TTvglMBkxn0fg2VTDkPNgcfOhJabY,34033
31
+ otdf_python/nanotdf_ecdsa_struct.py,sha256=jTQKFAicTfMfN9CxJZYQcnEYGmtfAQoDOhz8ta-pGAQ,4066
32
+ otdf_python/nanotdf_type.py,sha256=3MQzT6lJ3WJKMICFyyYZXX2_cFYcZ5G4m1uif-l9Nxo,1112
33
+ otdf_python/policy_binding_serializer.py,sha256=oOcGBYOISPTzHRtk8JszwLTraY_F2OoevOf0a53jGHA,1271
34
+ otdf_python/policy_info.py,sha256=aq74dZg9PhTZ6cMkZyFsu3D754C5YijFMiuoYEL-1bY,2076
35
+ otdf_python/policy_object.py,sha256=LikIsahPkKr-iYA0lhgQitCbh8CsmxUBYyBs6VYfmxY,512
36
+ otdf_python/policy_stub.py,sha256=RfU_fICqsAOnTXOHpKhtKC0RJ3KoWhDxO0XecZWM548,159
37
+ otdf_python/resource_locator.py,sha256=bjK935XcfNq-PyqidHNq8eIiPeZEStYdQvmQ9B9GY20,6290
38
+ otdf_python/sdk.py,sha256=4aIdIDhx2dMPRMfp9U8gzpwiqSeBf7SrEewb2BjB6PM,14012
39
+ otdf_python/sdk_builder.py,sha256=ltnFZD7ClVVwhGwu6ew4WNiNj0NB3n2Xn_MTEcbIMxo,14497
40
+ otdf_python/sdk_exceptions.py,sha256=2GElGyM5LKN8Uh_lAiT6Ho4oNRWYRQsMNOK5s2jiv28,687
41
+ otdf_python/symmetric_and_payload_config.py,sha256=iPHeZSeY9BjsQ-wkvdm6-FIR7773EgGiaIvSG-ICOHw,1158
42
+ otdf_python/tdf.py,sha256=PtVBY_vAPIGz1I4gUlHPLPxa1gCCsd2nlRm0SrbaoJA,20840
43
+ otdf_python/tdf_reader.py,sha256=WMetzX4CIKJ15f4J_zyFGtObQO6bQ33KC_ykIonH9ik,5228
44
+ otdf_python/tdf_writer.py,sha256=FLm1P26J4p6WPyKsjOb7QLYJqDIMDsBONqBW_JuFxyw,798
45
+ otdf_python/token_source.py,sha256=YHbP7deSSXo1CvzVGJX7DkOuBgqwfP_Ockm8CE-MN0o,1011
46
+ otdf_python/version.py,sha256=uDKJKsSQoaEH-JlqAwiXDxceLRX9hkG4I3NVLEfDCHA,2025
47
+ otdf_python/zip_reader.py,sha256=qrHv-ecs09tz99ZKdOMiWaciYf2XsQOUTiXy1JHjuEY,1705
48
+ otdf_python/zip_writer.py,sha256=5-KChgEXCf4TKAAML-R8cqpAiap85ur1l2lJCCac6BE,2405
49
+ otdf_python_proto/__init__.py,sha256=nZXR7jFOxpw52PahIE5PzTm5xEmH01xphIq5PTH_Qhc,925
50
+ otdf_python_proto/authorization/__init__.py,sha256=PQ8pNK86JNhOg7rcvbOQzAx5nm0hdjQqj-xIwDD4izY,237
51
+ otdf_python_proto/authorization/authorization_connect.py,sha256=Z4Xnz39cc9Dp74HBWc4uM-3aKRdSD0fcBoz2OCNbppw,12287
51
52
  otdf_python_proto/authorization/authorization_pb2.py,sha256=VxRCF1popd01Po0uC-H3Uz85Z6y39ICuzwjFuRWkDoE,9085
52
53
  otdf_python_proto/authorization/authorization_pb2.pyi,sha256=43mV-jbbgxjvzuKkJE-tcLg4JrqtqoQwB5WT9k4j3Ew,8927
53
- otdf_python_proto/authorization/authorization_pb2_connect.py,sha256=PrbEg9mUSMA6Bwh5pCtwkIHEQ-phcd1vW0uIizBwqis,10162
54
+ otdf_python_proto/authorization/v2/authorization_connect.py,sha256=K5yRvu3JfA9ljtbTsXJ3KMx9GAUypLpqiI8IPPgiIZs,16310
54
55
  otdf_python_proto/authorization/v2/authorization_pb2.py,sha256=pz5GE1cBmcyWHCG3ba46_We-ywY7dx2oxZwHgvtJJtA,12998
55
56
  otdf_python_proto/authorization/v2/authorization_pb2.pyi,sha256=0azk9XIOxBU5u0b8_PnHnfaGM13tQPBgN4i42oRSI2Q,7497
56
- otdf_python_proto/authorization/v2/authorization_pb2_connect.py,sha256=UdsbFiFW2_yDIKsUlhgM4mUWzZaZ8J8rfxqVwWFjMYY,13129
57
57
  otdf_python_proto/common/__init__.py,sha256=cJlVANj7I0xoLUerst-2su60AFtywyrFHPOIKIzS65Q,35
58
58
  otdf_python_proto/common/common_pb2.py,sha256=F2Ap8Lf-LJGnk_-BsrAfoidYtkkTsc24OvZgikBigDs,3599
59
59
  otdf_python_proto/common/common_pb2.pyi,sha256=iitFFATcqvxfhdgAGlPFmYeyHeLSyBKKzvSNgm8kioM,2860
60
60
  otdf_python_proto/entity/__init__.py,sha256=Q5bx_n1hD8DQR8f78iflJzw90RJZLeIj--Q6YaHqJ_4,35
61
61
  otdf_python_proto/entity/entity_pb2.py,sha256=LpdkNpqn-L808SfYI6JWATfmud_9oYRpHbnX02qXQB8,3178
62
62
  otdf_python_proto/entity/entity_pb2.pyi,sha256=vkQau-BYeQvGV_Sr0YqqPDgiLuecErOey_Dn0zpHTN4,2423
63
- otdf_python_proto/entityresolution/__init__.py,sha256=YAlVbWPddWxz9U5ldGLwFxs1VvvM9x7c8_JalKwXa4U,45
63
+ otdf_python_proto/entityresolution/__init__.py,sha256=ehWfHEQ42uXht7gxRIr4jlwGq-OcYZUDLqwyhDo9-oI,228
64
+ otdf_python_proto/entityresolution/entity_resolution_connect.py,sha256=XniXuD9UVp44ZNt8DE7DEp4Y75sYjLYFvpikzN8uavU,9547
64
65
  otdf_python_proto/entityresolution/entity_resolution_pb2.py,sha256=XrPNnZ7GvHE0w0iHharpSte30l_DjhDlNE__mJigWTg,5032
65
66
  otdf_python_proto/entityresolution/entity_resolution_pb2.pyi,sha256=Yn8snkOsfkYPb4CngTMJcTe75RdOJUT_Yo4rk-mMTaM,3001
66
- otdf_python_proto/entityresolution/entity_resolution_pb2_connect.py,sha256=7NFAV7cx27R8b__2eM0MAiwPaT8E3TEmm-QrhauW3nE,7972
67
+ otdf_python_proto/entityresolution/v2/entity_resolution_connect.py,sha256=VCu9jytqWuF__a08LX5iIo_kFbJEbXfkYsuAu_xoaik,9948
67
68
  otdf_python_proto/entityresolution/v2/entity_resolution_pb2.py,sha256=G_CHQ76xCYAV6hfY1-tbncOCu7FqtdLH2FzOwO0vlvM,4680
68
69
  otdf_python_proto/entityresolution/v2/entity_resolution_pb2.pyi,sha256=wRcDT1bcKvyjMgPi8-MrQYLUDEaWjy2MY0YbsxF3Gjo,2942
69
- otdf_python_proto/entityresolution/v2/entity_resolution_pb2_connect.py,sha256=mnj_IuaBr_AjAGtvIc4QZzcHgG2UuYFnbA7cEH-f8RQ,8178
70
- otdf_python_proto/kas/__init__.py,sha256=8gcnDu9Hr7l0iJa3tVUjZruOjnewelau1Vt124Ln1n4,226
70
+ otdf_python_proto/kas/__init__.py,sha256=k72BA06RTfm0yGAL-H6dDkQFBUiZJXT3RHnIQIRpwhs,220
71
+ otdf_python_proto/kas/kas_connect.py,sha256=aBPlxHUcB_XAPgLi4ElXyrefdnrrrYKFb_PbDw9Yg_w,10860
71
72
  otdf_python_proto/kas/kas_pb2.py,sha256=FuWeaQYjICzKFmovm1sqdAPCcDn-tariNUs4CHHNUV8,11431
72
73
  otdf_python_proto/kas/kas_pb2.pyi,sha256=w-S-AoFOZn3jn39iLyLFW4Sw4bKxr0GA8OSVF-SnR-s,8594
73
- otdf_python_proto/kas/kas_pb2_connect.py,sha256=kFOs0mwynx-lutAqNp5m3HvEQyVCCAjHtj4JcJ8Q-Yo,8664
74
74
  otdf_python_proto/legacy_grpc/__init__.py,sha256=zpWWFl-aIfDdJqBnMFk6lDSzsKfZ4pjkp2LYxGE1S9c,40
75
75
  otdf_python_proto/legacy_grpc/authorization/authorization_pb2_grpc.py,sha256=Xn_jbL7EyOKolHp_0wxOqN3Eqm0eWjb4meB6X8xJPM0,6922
76
76
  otdf_python_proto/legacy_grpc/authorization/v2/authorization_pb2_grpc.py,sha256=i6SlVNT3uRfKr11hIZGGwPmmCZag-28kUzJjj8h_Zy0,9109
@@ -100,38 +100,47 @@ otdf_python_proto/policy/objects_pb2.py,sha256=4izyxIYyD_9q6Bj3hff5cfjgvYIGW6ewZ
100
100
  otdf_python_proto/policy/objects_pb2.pyi,sha256=nuK89_2Z1R6I1xE0EokL2lUdEIEuzVFne0IqykpC7uI,24523
101
101
  otdf_python_proto/policy/selectors_pb2.py,sha256=uqgIS0DtfOYDqzJ6WNq9D9aLa-RnTpN9a5o7YGMF7xM,5301
102
102
  otdf_python_proto/policy/selectors_pb2.pyi,sha256=FdC8ZLkgBBspwdjA1JlaeSgPo3R2qUIDws-9vNRXAUs,5162
103
+ otdf_python_proto/policy/actions/__init__.py,sha256=GPRrOk6_i6Jgj9PrWX8tCdqYoVKdJJp7ucu1XtY3iFU,208
104
+ otdf_python_proto/policy/actions/actions_connect.py,sha256=jdmPjw8LdyaEACeHVsU075FUqV39vmGs8tIxF151Uj8,18087
103
105
  otdf_python_proto/policy/actions/actions_pb2.py,sha256=QRcrBnuu1iDWjVQLl0dWHCwuOwnLguzn4w9f2201xjM,8858
104
106
  otdf_python_proto/policy/actions/actions_pb2.pyi,sha256=ZBgv2xtG4PW7vXUJkzbfvMPaKUmztVw6_FG5iN0Ph-I,4298
105
- otdf_python_proto/policy/actions/actions_pb2_connect.py,sha256=u6M1o9T8lWtkLSp2sMG7mQwxNPMixK2VxZ3IVVyfAAM,14472
107
+ otdf_python_proto/policy/attributes/__init__.py,sha256=3lHYfbXDGAuuhfSwb1YJfVJJWPvTtcoshyhLOi_hIr0,226
108
+ otdf_python_proto/policy/attributes/attributes_connect.py,sha256=r-_r5pqiFr_CCQ05UnzbEcYld2KOY4nY5q0s2cYxnp4,72451
106
109
  otdf_python_proto/policy/attributes/attributes_pb2.py,sha256=wnK1qsuOVOePneFfDGtBDxiyvP9S8XA48mMTexybYBE,33029
107
110
  otdf_python_proto/policy/attributes/attributes_pb2.pyi,sha256=lpxvoxiRhSn1LEupx1fOcBc6pOdWcrTXAx_boHvGFZY,16259
108
- otdf_python_proto/policy/attributes/attributes_pb2_connect.py,sha256=M57-dw9vfiDJuwmCxLHlZhBxrXXPULbyyiopykh_xkU,56796
111
+ otdf_python_proto/policy/kasregistry/__init__.py,sha256=zj_8G65KIhOSiOeMkyMEZFomWYkfD9E5aWASgwV4n3M,295
112
+ otdf_python_proto/policy/kasregistry/key_access_server_registry_connect.py,sha256=L5r5ZAMnM8gfEdPXZiQ61MrCxtlzvpaxjJGZj5MsEQk,52727
109
113
  otdf_python_proto/policy/kasregistry/key_access_server_registry_pb2.py,sha256=5RRqC6MsfBM9TEmPedRZYKMjdVWptMXXTUolUU4FPXI,45921
110
114
  otdf_python_proto/policy/kasregistry/key_access_server_registry_pb2.pyi,sha256=hpIgoFXZtY6HsjfHPi_Ybxm0CddK_AYy8YTlfdzR1Jk,24030
111
- otdf_python_proto/policy/kasregistry/key_access_server_registry_pb2_connect.py,sha256=R2hkmB9X_Utg3C5fIWSGcTYZB9X3dJVy8gGaxkq6RFE,40328
115
+ otdf_python_proto/policy/keymanagement/__init__.py,sha256=baBSBdjBbaErAIjjn0GxUPfYYRq7R4MfsrvpK02uews,245
116
+ otdf_python_proto/policy/keymanagement/key_management_connect.py,sha256=-e1fc4S3-xJ_Tdy9T0JMMTXIFhMeN7qx0sls-gMUjeM,20883
112
117
  otdf_python_proto/policy/keymanagement/key_management_pb2.py,sha256=MVAJKkR_B2nqN9jqWg7JLWByKFFfoi4unj1hbToByCE,8129
113
118
  otdf_python_proto/policy/keymanagement/key_management_pb2.pyi,sha256=9HoPHqEKIO8jhx9TpkwFJWSHiInpkq04LiNPUCYeDU4,4381
114
- otdf_python_proto/policy/keymanagement/key_management_pb2_connect.py,sha256=_ghDKFEFCaofp2j4U9mQ8RgizFHAN2XSJQsSHRBH_Zg,16662
119
+ otdf_python_proto/policy/namespaces/__init__.py,sha256=JIdic8yq55x9BrQzaJtgEp3J7AcnOZ1c0eiTXd2iDpw,222
120
+ otdf_python_proto/policy/namespaces/namespaces_connect.py,sha256=gJmN8r8bCDX9KTyEJc7X5RnvgxPiANfRvTTFNom06wk,35163
115
121
  otdf_python_proto/policy/namespaces/namespaces_pb2.py,sha256=NTdUbii-WF0VNiVvM29ZmAni7W4dgmNkOGq2ytP31pk,15222
116
122
  otdf_python_proto/policy/namespaces/namespaces_pb2.pyi,sha256=plOpaSBszfi7p71XKZvTg1e1nJUhvoz1wrcYDX9cByQ,7148
117
- otdf_python_proto/policy/namespaces/namespaces_pb2_connect.py,sha256=mXn8N0hmguejlkbL-IwwSYl-nXGdrfGPLQ0XMEKCXLM,27828
123
+ otdf_python_proto/policy/registeredresources/__init__.py,sha256=U6A5CRMFUhwjxOdxaRpgfIBx9bJZ7KcnBNKPQouSaeI,281
124
+ otdf_python_proto/policy/registeredresources/registered_resources_connect.py,sha256=FVJPkbH7vO_oUiJRW6qW2nkJhmomO_9YQ1yDCEYYhQ8,48569
118
125
  otdf_python_proto/policy/registeredresources/registered_resources_pb2.py,sha256=5pb4vm0SEOG-U8FORKa9Z1Fe2tbgcWEEJworZE_LS00,23112
119
126
  otdf_python_proto/policy/registeredresources/registered_resources_pb2.pyi,sha256=MsFkcXQbdvu7JQGeS-HYFHB7V3yWtpAPEmhoARjDvMI,10132
120
- otdf_python_proto/policy/registeredresources/registered_resources_pb2_connect.py,sha256=KI17dRxTVL71j_qHlwEs1MZPVtayt-Ay5xwZgfmizq0,38350
127
+ otdf_python_proto/policy/resourcemapping/__init__.py,sha256=9_It9dJRLAOIf1y9n3LxEQa7-WI51B_E3OfhKBNuFw4,257
128
+ otdf_python_proto/policy/resourcemapping/resource_mapping_connect.py,sha256=RdhIMj6FLUxFNsCL2edVJRRJPefEe9enkWpsU2Y9djo,46405
121
129
  otdf_python_proto/policy/resourcemapping/resource_mapping_pb2.py,sha256=vnMJu2jEr3NHH5aUx5hquQAyHlUwtgh2lL9YdXil2bs,21745
122
130
  otdf_python_proto/policy/resourcemapping/resource_mapping_pb2.pyi,sha256=B4I6nj1bHNI8VZImfuBeXJ6S_-tovN0DbwfncTujUw4,10380
123
- otdf_python_proto/policy/resourcemapping/resource_mapping_pb2_connect.py,sha256=wuqKoDgpdGr0mo_JQ_MO2vshdXLDKVs1x_-9Ou4SchU,36062
131
+ otdf_python_proto/policy/subjectmapping/__init__.py,sha256=Cyaic3XmuOOqIWOVO31JJvafc-YQMoLCcohzoeZU6Yc,251
132
+ otdf_python_proto/policy/subjectmapping/subject_mapping_connect.py,sha256=lMcaLSAs_N6245as4-Wdp746LyjKwldeDdD_QQiwr_Q,49436
124
133
  otdf_python_proto/policy/subjectmapping/subject_mapping_pb2.py,sha256=iNZp_sHDLXtSUdMNayWHJyZl0050Ag5v-naq0r2FmUM,18093
125
134
  otdf_python_proto/policy/subjectmapping/subject_mapping_pb2.pyi,sha256=kPkRm8xw3KiEu9LiUmKCbouHVryeEFWyk19Eo6L6rus,10903
126
- otdf_python_proto/policy/subjectmapping/subject_mapping_pb2_connect.py,sha256=tn9Ib6TPWoYKQ7B-RKL2cliSPAC6DYLatXO6Ao2Ys7I,38548
135
+ otdf_python_proto/policy/unsafe/__init__.py,sha256=1TYTtYZyHxNQ2HaMCONHJ1U9dZDp3ZoZv19wZ78NhBI,202
136
+ otdf_python_proto/policy/unsafe/unsafe_connect.py,sha256=f-WA7NClXBfxs9wkdSVKUf7LwvK5WfDGkNsqboZ2k2g,37202
127
137
  otdf_python_proto/policy/unsafe/unsafe_pb2.py,sha256=j8J3FGM6nL6VDJvZUdrq6MAQ0GvHCDRH1q3-Djw5NfE,14936
128
138
  otdf_python_proto/policy/unsafe/unsafe_pb2.pyi,sha256=Pu72GtZTZWdD_L9SqqyeV8SQu9VXdVEEAGECrzHFmWs,5879
129
- otdf_python_proto/policy/unsafe/unsafe_pb2_connect.py,sha256=OqKigFTTVPKQkL4TOMLqnEUKBc2zUp8qSSOk2TKP6U8,29839
130
- otdf_python_proto/wellknownconfiguration/__init__.py,sha256=X3GeZJ1mG_N1MViryjkqUU099f2qzR6bnoDQXGWhKpc,51
139
+ otdf_python_proto/wellknownconfiguration/__init__.py,sha256=xK8XUrwCL9elWuMTx6vVgWdWdcACugoF0b5OYsFclj4,240
140
+ otdf_python_proto/wellknownconfiguration/wellknown_configuration_connect.py,sha256=fVQfo4OsTK8e63ytmiGyMe1AxgirktNqI_O3rQ6o6Nc,6342
131
141
  otdf_python_proto/wellknownconfiguration/wellknown_configuration_pb2.py,sha256=g9xSm9TxX0IPMqiFCaridJvI2TrL8PrXVFPgu8tX9VM,3863
132
142
  otdf_python_proto/wellknownconfiguration/wellknown_configuration_pb2.pyi,sha256=Zw4vROvTgomnFqsalJrYda632ojXH0FVXSzTXxerybw,1490
133
- otdf_python_proto/wellknownconfiguration/wellknown_configuration_pb2_connect.py,sha256=i9rGG2mgQZfk6xGCp1ywu4QqKWSiwpuLoNKGUwl43t8,5346
134
- otdf_python-0.4.0.dist-info/METADATA,sha256=Hpm2WiRbzRfr38wswo45o8X-p-R2Nlt8AAap09WxKiQ,5132
135
- otdf_python-0.4.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
136
- otdf_python-0.4.0.dist-info/licenses/LICENSE,sha256=DPrPHdI6tfZcqk9kzQ37vh1Ftk7LJYdMrUtwKl7L3Pw,1074
137
- otdf_python-0.4.0.dist-info/RECORD,,
143
+ otdf_python-0.4.2.dist-info/METADATA,sha256=bbTfB1zZ1j7iv1lUmw01ZzHIGpfBhSlI78l8bN2UuXE,5175
144
+ otdf_python-0.4.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
145
+ otdf_python-0.4.2.dist-info/licenses/LICENSE,sha256=DPrPHdI6tfZcqk9kzQ37vh1Ftk7LJYdMrUtwKl7L3Pw,1074
146
+ otdf_python-0.4.2.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -13,25 +13,21 @@ except metadata.PackageNotFoundError:
13
13
  __version__ = "0.0.0"
14
14
 
15
15
  # Import submodules to make them available
16
- from . import authorization
16
+ # Note: authorization, entityresolution, wellknownconfiguration and policy subdirectories
17
+ # are imported lazily to avoid import errors from generated protobuf files
17
18
  from . import common
18
19
  from . import entity
19
- from . import entityresolution
20
20
  from . import kas
21
21
  from . import legacy_grpc
22
22
  from . import logger
23
23
  from . import policy
24
- from . import wellknownconfiguration
25
24
 
26
25
  # Export main module categories
27
26
  __all__ = [
28
- "authorization",
29
27
  "common",
30
28
  "entity",
31
- "entityresolution",
32
29
  "kas",
33
30
  "legacy_grpc",
34
31
  "logger",
35
32
  "policy",
36
- "wellknownconfiguration",
37
33
  ]