otdf-python 0.4.3__tar.gz → 0.5.0__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 (305) hide show
  1. otdf_python-0.5.0/.gemini/config.yaml +4 -0
  2. {otdf_python-0.4.3 → otdf_python-0.5.0}/.github/workflows/test-suite.yaml +23 -3
  3. {otdf_python-0.4.3 → otdf_python-0.5.0}/.pre-commit-config.yaml +3 -3
  4. otdf_python-0.5.0/.release-please-manifest.json +3 -0
  5. {otdf_python-0.4.3 → otdf_python-0.5.0}/CHANGELOG.md +14 -0
  6. {otdf_python-0.4.3 → otdf_python-0.5.0}/PKG-INFO +1 -1
  7. {otdf_python-0.4.3 → otdf_python-0.5.0}/docs/DEVELOPING.md +1 -1
  8. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/README.md +1 -1
  9. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/authorization/v2/authorization.proto +18 -9
  10. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/policy/kasregistry/key_access_server_registry.proto +36 -4
  11. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/policy/objects.proto +45 -1
  12. otdf_python-0.5.0/otdf-python-proto/proto-files/policy/obligations/obligations.proto +260 -0
  13. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/policy/unsafe/unsafe.proto +8 -1
  14. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/pyproject.toml +7 -2
  15. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/scripts/build_connect_proto.sh +13 -17
  16. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/scripts/generate_connect_proto.py +46 -34
  17. otdf_python-0.5.0/otdf-python-proto/scripts/setup_connect_rpc.py +26 -0
  18. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/__init__.py +83 -0
  19. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/authorization/authorization_connect.py +1 -1
  20. otdf_python-0.4.3/otdf-python-proto/scripts/setup_connect_rpc.py → otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/authorization/v2/__init__.py +0 -0
  21. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_pb2.py +107 -0
  22. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_connect.py +1 -1
  23. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/kas/kas_connect.py +1 -1
  24. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/authorization/__init__.py +0 -0
  25. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/authorization/v2/__init__.py +0 -0
  26. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/common/__init__.py +0 -0
  27. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entity/__init__.py +0 -0
  28. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entityresolution/__init__.py +0 -0
  29. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entityresolution/v2/__init__.py +0 -0
  30. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/kas/__init__.py +0 -0
  31. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/logger/__init__.py +0 -0
  32. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/logger/audit/__init__.py +0 -0
  33. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/__init__.py +0 -0
  34. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/actions/__init__.py +0 -0
  35. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/attributes/__init__.py +0 -0
  36. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/kasregistry/__init__.py +0 -0
  37. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/kasregistry/key_access_server_registry_pb2_grpc.py +44 -0
  38. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/keymanagement/__init__.py +0 -0
  39. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/namespaces/__init__.py +0 -0
  40. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/obligations/__init__.py +0 -0
  41. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/obligations/obligations_pb2_grpc.py +680 -0
  42. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/registeredresources/__init__.py +0 -0
  43. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/resourcemapping/__init__.py +0 -0
  44. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/subjectmapping/__init__.py +0 -0
  45. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/unsafe/__init__.py +0 -0
  46. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/wellknownconfiguration/__init__.py +0 -0
  47. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/logger/audit/__init__.py +0 -0
  48. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_connect.py +65 -0
  49. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_pb2.py +53 -41
  50. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_pb2.pyi +40 -0
  51. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/objects_pb2.py +33 -27
  52. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/objects_pb2.pyi +40 -0
  53. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/policy/obligations/__init__.py +0 -0
  54. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/policy/obligations/obligations_connect.py +920 -0
  55. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/policy/obligations/obligations_pb2.py +110 -0
  56. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/policy/obligations/obligations_pb2.pyi +224 -0
  57. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_pb2.py +10 -6
  58. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_pb2.pyi +8 -4
  59. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_connect.py +1 -1
  60. otdf_python-0.5.0/otdf-python-proto/tests/__init__.py +0 -0
  61. otdf_python-0.5.0/otdf-python-proto/tests/test_generate_connect_proto.py +355 -0
  62. otdf_python-0.5.0/otdf-python-proto/tests/test_package_imports.py +66 -0
  63. otdf_python-0.5.0/otdf-python-proto/uv.lock +465 -0
  64. {otdf_python-0.4.3 → otdf_python-0.5.0}/pyproject.toml +1 -1
  65. otdf_python-0.5.0/tests/integration/test_data/empty_file.txt +0 -0
  66. otdf_python-0.5.0/uv.lock +849 -0
  67. otdf_python-0.4.3/.release-please-manifest.json +0 -3
  68. otdf_python-0.4.3/otdf-python-proto/src/otdf_python_proto/__init__.py +0 -33
  69. otdf_python-0.4.3/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_pb2.py +0 -105
  70. otdf_python-0.4.3/otdf-python-proto/uv.lock +0 -932
  71. otdf_python-0.4.3/uv.lock +0 -849
  72. {otdf_python-0.4.3 → otdf_python-0.5.0}/.github/check_entitlements.sh +0 -0
  73. {otdf_python-0.4.3 → otdf_python-0.5.0}/.github/start_opentdf_docker.sh +0 -0
  74. {otdf_python-0.4.3 → otdf_python-0.5.0}/.github/workflows/build-python.yaml +0 -0
  75. {otdf_python-0.4.3 → otdf_python-0.5.0}/.github/workflows/platform-integration-test.yaml +0 -0
  76. {otdf_python-0.4.3 → otdf_python-0.5.0}/.github/workflows/release-please.yaml +0 -0
  77. {otdf_python-0.4.3 → otdf_python-0.5.0}/.gitignore +0 -0
  78. {otdf_python-0.4.3 → otdf_python-0.5.0}/.release-please-config-develop.json +0 -0
  79. {otdf_python-0.4.3 → otdf_python-0.5.0}/.release-please-config.json +0 -0
  80. {otdf_python-0.4.3 → otdf_python-0.5.0}/.release-please-manifest-develop.json +0 -0
  81. {otdf_python-0.4.3 → otdf_python-0.5.0}/.vscode/extensions.json +0 -0
  82. {otdf_python-0.4.3 → otdf_python-0.5.0}/.vscode/settings.json +0 -0
  83. {otdf_python-0.4.3 → otdf_python-0.5.0}/LICENSE +0 -0
  84. {otdf_python-0.4.3 → otdf_python-0.5.0}/README.md +0 -0
  85. {otdf_python-0.4.3 → otdf_python-0.5.0}/conftest.py +0 -0
  86. {otdf_python-0.4.3 → otdf_python-0.5.0}/docs/CONNECT_RPC.md +0 -0
  87. {otdf_python-0.4.3 → otdf_python-0.5.0}/docs/LEGACY_VERSION.md +0 -0
  88. {otdf_python-0.4.3 → otdf_python-0.5.0}/docs/RELEASES.md +0 -0
  89. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/buf.gen.yaml +0 -0
  90. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/buf.lock +0 -0
  91. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/buf.yaml +0 -0
  92. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/generated/__init__.py +0 -0
  93. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/authorization/authorization.proto +0 -0
  94. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/common/common.proto +0 -0
  95. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/entity/entity.proto +0 -0
  96. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/entityresolution/entity_resolution.proto +0 -0
  97. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/entityresolution/v2/entity_resolution.proto +0 -0
  98. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/kas/kas.proto +0 -0
  99. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/logger/audit/test.proto +0 -0
  100. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/policy/actions/actions.proto +0 -0
  101. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/policy/attributes/attributes.proto +0 -0
  102. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/policy/keymanagement/key_management.proto +0 -0
  103. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/policy/namespaces/namespaces.proto +0 -0
  104. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/policy/registeredresources/registered_resources.proto +0 -0
  105. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/policy/resourcemapping/resource_mapping.proto +0 -0
  106. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/policy/selectors.proto +0 -0
  107. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/policy/subjectmapping/subject_mapping.proto +0 -0
  108. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/proto-files/wellknownconfiguration/wellknown_configuration.proto +0 -0
  109. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/authorization/__init__.py +0 -0
  110. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/authorization/authorization_pb2.py +0 -0
  111. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/authorization/authorization_pb2.pyi +0 -0
  112. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_connect.py +0 -0
  113. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_pb2.pyi +0 -0
  114. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/common/__init__.py +0 -0
  115. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/common/common_pb2.py +0 -0
  116. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/common/common_pb2.pyi +0 -0
  117. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/entity/__init__.py +0 -0
  118. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/entity/entity_pb2.py +0 -0
  119. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/entity/entity_pb2.pyi +0 -0
  120. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/__init__.py +0 -0
  121. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_pb2.py +0 -0
  122. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_pb2.pyi +0 -0
  123. /otdf_python-0.4.3/tests/integration/test_data/empty_file.txt → /otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/__init__.py +0 -0
  124. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_connect.py +0 -0
  125. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_pb2.py +0 -0
  126. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_pb2.pyi +0 -0
  127. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/kas/__init__.py +0 -0
  128. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/kas/kas_pb2.py +0 -0
  129. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/kas/kas_pb2.pyi +0 -0
  130. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/__init__.py +0 -0
  131. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/authorization/authorization_pb2_grpc.py +0 -0
  132. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/authorization/v2/authorization_pb2_grpc.py +0 -0
  133. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/common/common_pb2_grpc.py +0 -0
  134. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entity/entity_pb2_grpc.py +0 -0
  135. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entityresolution/entity_resolution_pb2_grpc.py +0 -0
  136. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entityresolution/v2/entity_resolution_pb2_grpc.py +0 -0
  137. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/kas/kas_pb2_grpc.py +0 -0
  138. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/logger/audit/test_pb2_grpc.py +0 -0
  139. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/actions/actions_pb2_grpc.py +0 -0
  140. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/attributes/attributes_pb2_grpc.py +0 -0
  141. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/keymanagement/key_management_pb2_grpc.py +0 -0
  142. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/namespaces/namespaces_pb2_grpc.py +0 -0
  143. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/objects_pb2_grpc.py +0 -0
  144. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/registeredresources/registered_resources_pb2_grpc.py +0 -0
  145. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/resourcemapping/resource_mapping_pb2_grpc.py +0 -0
  146. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/selectors_pb2_grpc.py +0 -0
  147. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/subjectmapping/subject_mapping_pb2_grpc.py +0 -0
  148. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/unsafe/unsafe_pb2_grpc.py +0 -0
  149. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/wellknownconfiguration/wellknown_configuration_pb2_grpc.py +0 -0
  150. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/logger/__init__.py +0 -0
  151. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/logger/audit/test_pb2.py +0 -0
  152. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/logger/audit/test_pb2.pyi +0 -0
  153. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/__init__.py +0 -0
  154. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/actions/__init__.py +0 -0
  155. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_connect.py +0 -0
  156. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_pb2.py +0 -0
  157. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_pb2.pyi +0 -0
  158. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/attributes/__init__.py +0 -0
  159. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_connect.py +0 -0
  160. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_pb2.py +0 -0
  161. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_pb2.pyi +0 -0
  162. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/__init__.py +0 -0
  163. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/__init__.py +0 -0
  164. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_connect.py +0 -0
  165. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_pb2.py +0 -0
  166. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_pb2.pyi +0 -0
  167. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/namespaces/__init__.py +0 -0
  168. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_connect.py +0 -0
  169. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_pb2.py +0 -0
  170. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_pb2.pyi +0 -0
  171. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/__init__.py +0 -0
  172. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_connect.py +0 -0
  173. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_pb2.py +0 -0
  174. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_pb2.pyi +0 -0
  175. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/__init__.py +0 -0
  176. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_connect.py +0 -0
  177. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_pb2.py +0 -0
  178. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_pb2.pyi +0 -0
  179. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/selectors_pb2.py +0 -0
  180. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/selectors_pb2.pyi +0 -0
  181. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/__init__.py +0 -0
  182. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_connect.py +0 -0
  183. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_pb2.py +0 -0
  184. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_pb2.pyi +0 -0
  185. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/unsafe/__init__.py +0 -0
  186. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_connect.py +0 -0
  187. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/__init__.py +0 -0
  188. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_pb2.py +0 -0
  189. {otdf_python-0.4.3 → otdf_python-0.5.0}/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_pb2.pyi +0 -0
  190. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/__init__.py +0 -0
  191. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/__main__.py +0 -0
  192. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/address_normalizer.py +0 -0
  193. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/aesgcm.py +0 -0
  194. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/assertion_config.py +0 -0
  195. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/asym_crypto.py +0 -0
  196. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/auth_headers.py +0 -0
  197. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/autoconfigure_utils.py +0 -0
  198. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/cli.py +0 -0
  199. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/collection_store.py +0 -0
  200. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/collection_store_impl.py +0 -0
  201. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/config.py +0 -0
  202. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/connect_client.py +0 -0
  203. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/constants.py +0 -0
  204. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/crypto_utils.py +0 -0
  205. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/dpop.py +0 -0
  206. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/ecc_constants.py +0 -0
  207. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/ecc_mode.py +0 -0
  208. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/ecdh.py +0 -0
  209. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/eckeypair.py +0 -0
  210. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/header.py +0 -0
  211. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/invalid_zip_exception.py +0 -0
  212. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/kas_allowlist.py +0 -0
  213. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/kas_client.py +0 -0
  214. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/kas_connect_rpc_client.py +0 -0
  215. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/kas_info.py +0 -0
  216. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/kas_key_cache.py +0 -0
  217. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/key_type.py +0 -0
  218. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/key_type_constants.py +0 -0
  219. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/manifest.py +0 -0
  220. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/nanotdf.py +0 -0
  221. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/nanotdf_ecdsa_struct.py +0 -0
  222. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/nanotdf_type.py +0 -0
  223. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/policy_binding_serializer.py +0 -0
  224. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/policy_info.py +0 -0
  225. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/policy_object.py +0 -0
  226. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/policy_stub.py +0 -0
  227. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/resource_locator.py +0 -0
  228. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/sdk.py +0 -0
  229. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/sdk_builder.py +0 -0
  230. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/sdk_exceptions.py +0 -0
  231. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/symmetric_and_payload_config.py +0 -0
  232. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/tdf.py +0 -0
  233. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/tdf_reader.py +0 -0
  234. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/tdf_writer.py +0 -0
  235. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/token_source.py +0 -0
  236. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/version.py +0 -0
  237. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/zip_reader.py +0 -0
  238. {otdf_python-0.4.3 → otdf_python-0.5.0}/src/otdf_python/zip_writer.py +0 -0
  239. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/__init__.py +0 -0
  240. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/config_pydantic.py +0 -0
  241. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/integration/conftest.py +0 -0
  242. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/integration/otdfctl_only/test_otdfctl_generated_fixtures.py +0 -0
  243. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/integration/otdfctl_to_python/test_cli_comparison.py +0 -0
  244. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/integration/otdfctl_to_python/test_cli_decrypt.py +0 -0
  245. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/integration/otdfctl_to_python/test_cli_inspect.py +0 -0
  246. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/integration/otdfctl_to_python/test_nanotdf_cli_comparison.py +0 -0
  247. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/integration/otdfctl_to_python/test_python_nanotdf_only.py +0 -0
  248. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/integration/otdfctl_to_python/test_tdf_reader_integration.py +0 -0
  249. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/integration/python_only/test_kas_client_integration.py +0 -0
  250. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/integration/support_sdk.py +0 -0
  251. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/integration/test_cli_integration.py +0 -0
  252. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/integration/test_cli_tdf_validation.py +0 -0
  253. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/integration/test_data/sample_binary.png +0 -0
  254. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/integration/test_data/sample_text.txt +0 -0
  255. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/integration/test_data/sample_with_attributes.txt +0 -0
  256. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/integration/test_pe_interaction.py +0 -0
  257. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/mock_crypto.py +0 -0
  258. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/server_logs.py +0 -0
  259. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/support_cli_args.py +0 -0
  260. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/support_common.py +0 -0
  261. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/support_otdfctl.py +0 -0
  262. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/support_otdfctl_args.py +0 -0
  263. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_address_normalizer.py +0 -0
  264. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_aesgcm.py +0 -0
  265. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_assertion_config.py +0 -0
  266. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_asym_encryption.py +0 -0
  267. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_autoconfigure_utils.py +0 -0
  268. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_cli.py +0 -0
  269. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_collection_store.py +0 -0
  270. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_config.py +0 -0
  271. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_crypto_utils.py +0 -0
  272. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_ecdh.py +0 -0
  273. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_eckeypair.py +0 -0
  274. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_header.py +0 -0
  275. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_inner_classes.py +0 -0
  276. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_kas_allowlist.py +0 -0
  277. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_kas_client.py +0 -0
  278. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_kas_key_cache.py +0 -0
  279. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_kas_key_management.py +0 -0
  280. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_key_type.py +0 -0
  281. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_log_collection.py +0 -0
  282. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_manifest.py +0 -0
  283. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_manifest_format.py +0 -0
  284. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_nanotdf.py +0 -0
  285. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_nanotdf_ecdh.py +0 -0
  286. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_nanotdf_ecdsa_struct.py +0 -0
  287. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_nanotdf_integration.py +0 -0
  288. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_nanotdf_type.py +0 -0
  289. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_policy_object.py +0 -0
  290. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_sdk.py +0 -0
  291. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_sdk_builder.py +0 -0
  292. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_sdk_exceptions.py +0 -0
  293. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_sdk_mock.py +0 -0
  294. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_sdk_tdf_integration.py +0 -0
  295. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_tdf.py +0 -0
  296. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_tdf_key_management.py +0 -0
  297. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_tdf_reader.py +0 -0
  298. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_tdf_writer.py +0 -0
  299. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_token_source.py +0 -0
  300. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_url_normalization.py +0 -0
  301. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_use_plaintext_flow.py +0 -0
  302. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_validate_otdf_python.py +0 -0
  303. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_version.py +0 -0
  304. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_zip_reader.py +0 -0
  305. {otdf_python-0.4.3 → otdf_python-0.5.0}/tests/test_zip_writer.py +0 -0
@@ -0,0 +1,4 @@
1
+ code_review:
2
+ ignore_patterns:
3
+ - "otdf-python-proto/proto-files/**/*"
4
+ - "otdf-python-proto/src/otdf_python_proto/**/*"
@@ -32,7 +32,26 @@ jobs:
32
32
  uv run ruff check
33
33
  uv run ruff format --check
34
34
 
35
- # Step 2: Build (only after linting passes)
35
+ # Step 2a: Proto sub-project unit tests (runs in parallel with build)
36
+ proto-unit-tests:
37
+ runs-on: ubuntu-22.04
38
+ needs: lint-check
39
+ steps:
40
+ - uses: actions/checkout@v4
41
+
42
+ - name: Set up uv
43
+ uses: astral-sh/setup-uv@v6
44
+ with:
45
+ enable-cache: true
46
+ cache-dependency-glob: "otdf-python-proto/uv.lock"
47
+
48
+ - name: Run otdf-python-proto unit tests
49
+ working-directory: otdf-python-proto
50
+ run: |
51
+ uv sync --frozen --group dev
52
+ uv run pytest --tb=short -v tests/
53
+
54
+ # Step 2b: Build (only after linting passes)
36
55
  build:
37
56
  runs-on: ubuntu-22.04
38
57
  needs: lint-check
@@ -99,7 +118,7 @@ jobs:
99
118
 
100
119
  report:
101
120
  runs-on: ubuntu-22.04
102
- needs: [lint-check, build, unit-tests, integration-tests]
121
+ needs: [lint-check, proto-unit-tests, build, unit-tests, integration-tests]
103
122
  if: always()
104
123
  outputs:
105
124
  success: ${{ steps.check.outputs.success }}
@@ -107,13 +126,14 @@ jobs:
107
126
  - name: Check all jobs succeeded
108
127
  id: check
109
128
  run: |
110
- if [[ "${{ needs.lint-check.result }}" == "success" && "${{ needs.build.result }}" == "success" && "${{ needs.unit-tests.result }}" == "success" && "${{ needs.integration-tests.result }}" == "success" ]]; then
129
+ if [[ "${{ needs.lint-check.result }}" == "success" && "${{ needs.proto-unit-tests.result }}" == "success" && "${{ needs.build.result }}" == "success" && "${{ needs.unit-tests.result }}" == "success" && "${{ needs.integration-tests.result }}" == "success" ]]; then
111
130
  echo "success=true" >> $GITHUB_OUTPUT
112
131
  echo "✅ All tests passed!"
113
132
  else
114
133
  echo "success=false" >> $GITHUB_OUTPUT
115
134
  echo "❌ Some tests failed:"
116
135
  echo " Lint Check: ${{ needs.lint-check.result }}"
136
+ echo " Proto Unit Tests: ${{ needs.proto-unit-tests.result }}"
117
137
  echo " Build: ${{ needs.build.result }}"
118
138
  echo " Unit Tests: ${{ needs.unit-tests.result }}"
119
139
  echo " Integration Tests: ${{ needs.integration-tests.result }}"
@@ -22,7 +22,7 @@ repos:
22
22
  - id: end-of-file-fixer
23
23
  - id: trailing-whitespace
24
24
  - repo: https://github.com/codespell-project/codespell
25
- rev: v2.4.1
25
+ rev: v2.4.2
26
26
  hooks:
27
27
  - id: codespell
28
28
  args:
@@ -34,14 +34,14 @@ repos:
34
34
 
35
35
  - repo: https://github.com/astral-sh/ruff-pre-commit
36
36
  # Ruff version.
37
- rev: v0.15.0
37
+ rev: v0.15.12
38
38
  hooks:
39
39
  # Run the linter.
40
40
  - id: ruff-check
41
41
  # Run the formatter.
42
42
  - id: ruff-format
43
43
  - repo: https://github.com/compilerla/conventional-pre-commit
44
- rev: v4.3.0
44
+ rev: v4.4.0
45
45
  hooks:
46
46
  - id: conventional-pre-commit
47
47
  stages: [commit-msg]
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.5.0"
3
+ }
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.5.0](https://github.com/b-long/opentdf-python-sdk/compare/otdf-python-v0.4.4...otdf-python-v0.5.0) (2026-05-08)
4
+
5
+
6
+ ### Features
7
+
8
+ * **main:** update proto GIT_TAG to service/v0.8.0 ([#137](https://github.com/b-long/opentdf-python-sdk/issues/137)) ([05ea9a4](https://github.com/b-long/opentdf-python-sdk/commit/05ea9a4c2dcf23d2a709e421802f45ddb89d2ace))
9
+
10
+ ## [0.4.4](https://github.com/b-long/opentdf-python-sdk/compare/otdf-python-v0.4.3...otdf-python-v0.4.4) (2026-04-30)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **proto-gen:** fix buf plugin path replacement, GIT_TAG, and generated_dir ([#135](https://github.com/b-long/opentdf-python-sdk/issues/135)) ([88d227d](https://github.com/b-long/opentdf-python-sdk/commit/88d227d83eb5e1903e5a2ef86dc38ea016885f60))
16
+
3
17
  ## [0.4.3](https://github.com/b-long/opentdf-python-sdk/compare/otdf-python-v0.4.2...otdf-python-v0.4.3) (2026-02-05)
4
18
 
5
19
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: otdf-python
3
- Version: 0.4.3
3
+ Version: 0.5.0
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
@@ -92,4 +92,4 @@ cd otdf-python-proto
92
92
  uv run python scripts/generate_connect_proto.py
93
93
  ```
94
94
 
95
- See [`otdf-python-proto/README.md`](../otdf-python-proto/README.md) and [`PROTOBUF_SETUP.md`](./PROTOBUF_SETUP.md) for details.
95
+ See [`otdf-python-proto/README.md`](../otdf-python-proto/README.md) and [`CONNECT_RPC.md`](./CONNECT_RPC.md) for details.
@@ -170,7 +170,7 @@ If you're migrating from traditional gRPC clients to Connect RPC:
170
170
  Install buf: `brew install bufbuild/buf/buf`
171
171
 
172
172
  ### "protoc-gen-connect_python not found"
173
- Install with compiler support: `uv add connect-python[compiler]`
173
+ Run the setup script: `uv run python scripts/setup_connect_rpc.py`
174
174
 
175
175
  ### Import errors after generation
176
176
  Ensure `__init__.py` files exist in otdf_python_proto directories
@@ -21,11 +21,11 @@ message EntityIdentifier {
21
21
  oneof identifier {
22
22
  option (buf.validate.oneof).required = true;
23
23
 
24
- // chain of one or more entities
24
+ // chain of one or more entities and at most 10
25
25
  entity.EntityChain entity_chain = 1 [(buf.validate.field).cel = {
26
26
  id: "entity_chain_required"
27
- message: "entities must be provided"
28
- expression: "has(this.entities) && this.entities.size() > 0"
27
+ message: "entities must be provided and between 1 and 10 in count"
28
+ expression: "has(this.entities) && this.entities.size() > 0 && this.entities.size() <= 10"
29
29
  }];
30
30
 
31
31
  // fully qualified name of the registered resource value stored in platform policy, where in
@@ -65,11 +65,13 @@ message Resource {
65
65
  }
66
66
 
67
67
  oneof resource {
68
+ // a set of attribute value FQNs, such as those on a TDF, between 1 and 20 in count
68
69
  AttributeValues attribute_values = 2 [(buf.validate.field).cel = {
69
70
  id: "attribute_values_required"
70
- message: "if provided, resource.attribute_values must not be empty"
71
- expression: "this.fqns.size() > 0 && this.fqns.all(item, item.isUri())"
71
+ message: "if provided, resource.attribute_values must be between 1 and 20 in count with all valid FQNs"
72
+ expression: "this.fqns.size() > 0 && this.fqns.size() <= 20 && this.fqns.all(item, item.isUri())"
72
73
  }];
74
+ // fully qualified name of the registered resource value stored in platform policy
73
75
  string registered_resource_value_fqn = 3 [(buf.validate.field).string = {
74
76
  min_len: 1
75
77
  uri: true
@@ -112,15 +114,17 @@ message GetDecisionResponse {
112
114
  // 1. one entity reference (actor)
113
115
  // 2. one action
114
116
  // 3. multiple resources
115
- // Note: this is a more performant bulk request for multiple resource decisions
117
+ // Note: this is a more performant bulk request for multiple resource decisions, up to 1000 per request
116
118
  message GetDecisionMultiResourceRequest {
117
119
  // an entity must be identified for authorization decisioning
118
120
  EntityIdentifier entity_identifier = 1 [(buf.validate.field).required = true];
119
121
  // name on action is required
120
122
  policy.Action action = 2 [(buf.validate.field).required = true];
121
123
  repeated Resource resources = 3 [
122
- (buf.validate.field).required = true,
123
- (buf.validate.field).repeated = {min_items: 1}
124
+ (buf.validate.field).repeated = {
125
+ min_items: 1
126
+ max_items: 1000
127
+ }
124
128
  ];
125
129
 
126
130
  option (buf.validate.message).cel = {
@@ -141,7 +145,12 @@ message GetDecisionMultiResourceResponse {
141
145
  // This is a more performant bulk request for complex decisioning (i.e. multiple entity chains or actions on
142
146
  // multiple resources)
143
147
  message GetDecisionBulkRequest {
144
- repeated GetDecisionMultiResourceRequest decision_requests = 1;
148
+ repeated GetDecisionMultiResourceRequest decision_requests = 1 [
149
+ (buf.validate.field).repeated = {
150
+ min_items: 1
151
+ max_items: 200
152
+ }
153
+ ];
145
154
  }
146
155
  message GetDecisionBulkResponse {
147
156
  repeated GetDecisionMultiResourceResponse decision_responses = 1;
@@ -403,7 +403,7 @@ message CreateKeyRequest {
403
403
  Algorithm key_algorithm = 3 [(buf.validate.field).cel = {
404
404
  id: "key_algorithm_defined"
405
405
  message: "The key_algorithm must be one of the defined values."
406
- expression: "this in [1, 2, 3, 4]" // Allow ALGORITHM_EC_P256, ALGORITHM_RSA_2048, ALGORITHM_X25519, ALGORITHM_AES_256_GCM
406
+ expression: "this in [1, 2, 3, 4, 5]" // Allow ALGORITHM_RSA_2048, ALGORITHM_RSA_4096, ALGORITHM_EC_P256, ALGORITHM_EC_P384, ALGORITHM_EC_P521
407
407
  }]; // The algorithm to be used for the key
408
408
  // Required
409
409
  KeyMode key_mode = 4 [(buf.validate.field).cel = {
@@ -445,7 +445,7 @@ message ListKeysRequest {
445
445
  Algorithm key_algorithm = 1 [(buf.validate.field).cel = {
446
446
  id: "key_algorithm_defined"
447
447
  message: "The key_algorithm must be one of the defined values."
448
- expression: "this in [0, 1, 2, 3, 4]" // Allow ALGORITHM_EC_P256, ALGORITHM_RSA_2048, ALGORITHM_X25519, ALGORITHM_AES_256_GCM
448
+ expression: "this in [0, 1, 2, 3, 4, 5]" // Allow unspecified and object.Algorithm values for currently supported RSA bit sizes and EC curve types
449
449
  }]; // Filter keys by algorithm
450
450
 
451
451
  oneof kas_filter {
@@ -545,7 +545,7 @@ message RotateKeyRequest {
545
545
  Algorithm algorithm = 2 [(buf.validate.field).cel = {
546
546
  id: "key_algorithm_defined"
547
547
  message: "The key_algorithm must be one of the defined values."
548
- expression: "this in [1, 2, 3, 4]" // Allow ALGORITHM_EC_P256, ALGORITHM_RSA_2048, ALGORITHM_X25519, ALGORITHM_AES_256_GCM
548
+ expression: "this in [1, 2, 3, 4, 5]" // Allow ALGORITHM_RSA_2048, ALGORITHM_RSA_4096, ALGORITHM_EC_P256, ALGORITHM_EC_P384, ALGORITHM_EC_P521
549
549
  }];
550
550
  // Required
551
551
  KeyMode key_mode = 3 [
@@ -553,7 +553,7 @@ message RotateKeyRequest {
553
553
  (buf.validate.field).cel = {
554
554
  id: "new_key_mode_defined"
555
555
  message: "The new key_mode must be one of the defined values (1-4)."
556
- expression: "this in [1, 2, 3, 4]" // Allow all defined modes
556
+ expression: "this in [1, 2, 3, 4]" // Allow modes CONFIG_ROOT_KEY, PROVIDER_ROOT_KEY, REMOTE, PUBLIC_KEY_ONLY
557
557
  }
558
558
  ];
559
559
  // Required
@@ -617,6 +617,35 @@ message SetBaseKeyResponse {
617
617
  SimpleKasKey previous_base_key = 2; // The previous base key, if any
618
618
  }
619
619
 
620
+ message MappedPolicyObject {
621
+ string id = 1; // The unique identifier of the policy object
622
+ string fqn = 2; // The fully qualified name of the policy object
623
+ }
624
+
625
+ message KeyMapping {
626
+ string kid = 1;
627
+ string kas_uri = 2;
628
+ repeated MappedPolicyObject namespace_mappings = 3; // List of namespaces mapped to the key
629
+ repeated MappedPolicyObject attribute_mappings = 4; // List of attribute definitions mapped to the key
630
+ repeated MappedPolicyObject value_mappings = 5; // List of attribute values mapped to the key
631
+ }
632
+
633
+ message ListKeyMappingsRequest {
634
+ oneof identifier {
635
+ option (buf.validate.oneof).required = false;
636
+ string id = 2 [(buf.validate.field).string.uuid = true]; // The unique identifier of the key to retrieve
637
+ KasKeyIdentifier key = 3;
638
+ }
639
+
640
+ policy.PageRequest pagination = 10; // Pagination request for the list of keys
641
+ }
642
+
643
+ message ListKeyMappingsResponse {
644
+ repeated KeyMapping key_mappings = 1; // The list of key mappings
645
+
646
+ policy.PageResponse pagination = 10; // Pagination response for the list of keys
647
+ }
648
+
620
649
  service KeyAccessServerRegistryService {
621
650
  rpc ListKeyAccessServers(ListKeyAccessServersRequest) returns (ListKeyAccessServersResponse) {
622
651
  option (google.api.http) = {get: "/key-access-servers"};
@@ -660,4 +689,7 @@ service KeyAccessServerRegistryService {
660
689
 
661
690
  // Get Default kas keys
662
691
  rpc GetBaseKey(GetBaseKeyRequest) returns (GetBaseKeyResponse) {}
692
+
693
+ // Request to list key mappings in the Key Access Service.
694
+ rpc ListKeyMappings(ListKeyMappingsRequest) returns (ListKeyMappingsResponse) {}
663
695
  }
@@ -5,6 +5,7 @@ package policy;
5
5
  import "buf/validate/validate.proto";
6
6
  import "common/common.proto";
7
7
  import "google/protobuf/wrappers.proto";
8
+ // import "google/protobuf/struct.proto";
8
9
 
9
10
  message SimpleKasPublicKey {
10
11
  Algorithm algorithm = 1;
@@ -447,7 +448,6 @@ message RegisteredResourceValue {
447
448
  // Common metadata
448
449
  common.Metadata metadata = 100;
449
450
  }
450
-
451
451
  string id = 1;
452
452
 
453
453
  string value = 2;
@@ -460,6 +460,50 @@ message RegisteredResourceValue {
460
460
  common.Metadata metadata = 100;
461
461
  }
462
462
 
463
+ message Obligation {
464
+ string id = 1;
465
+
466
+ Namespace namespace = 2;
467
+
468
+ string name = 3;
469
+
470
+ repeated ObligationValue values = 4;
471
+
472
+ common.Metadata metadata = 100;
473
+ }
474
+
475
+ message ObligationValue {
476
+ string id = 1;
477
+
478
+ Obligation obligation = 2;
479
+
480
+ string value = 3;
481
+
482
+ common.Metadata metadata = 100;
483
+ }
484
+
485
+ message ObligationTrigger {
486
+ string id = 1;
487
+
488
+ ObligationValue obligation_value = 2;
489
+
490
+ Action action = 3;
491
+
492
+ Value attribute_value = 4;
493
+
494
+ common.Metadata metadata = 100;
495
+ }
496
+
497
+ // message ObligationFulfiller {
498
+ // string id = 1;
499
+
500
+ // ObligationValue obligation_value = 2;
501
+
502
+ // google.protobuf.Struct conditionals = 3;
503
+
504
+ // common.Metadata metadata = 100;
505
+ // }
506
+
463
507
  // Supported key algorithms.
464
508
  enum Algorithm {
465
509
  ALGORITHM_UNSPECIFIED = 0;
@@ -0,0 +1,260 @@
1
+ syntax = "proto3";
2
+
3
+ package policy.obligations;
4
+
5
+ import "common/common.proto";
6
+ import "policy/objects.proto";
7
+ import "policy/selectors.proto";
8
+ // import "google/protobuf/struct.proto";
9
+
10
+ ///
11
+ /// Obligation
12
+ ///
13
+
14
+ // Definitions
15
+ message GetObligationRequest {
16
+ oneof identifier {
17
+ string id = 1;
18
+ string fqn = 2;
19
+ }
20
+ }
21
+
22
+ message GetObligationResponse {
23
+ policy.Obligation obligation = 1;
24
+ }
25
+
26
+ message GetObligationsByFQNsRequest {
27
+ repeated string fqns = 1;
28
+ }
29
+
30
+ message GetObligationsByFQNsResponse {
31
+ map<string, policy.Obligation> fqn_obligation_map = 1;
32
+ }
33
+
34
+ message CreateObligationRequest {
35
+ // Required
36
+ oneof namespace_identifier {
37
+ string id = 1;
38
+ string fqn = 2;
39
+ }
40
+ string name = 3;
41
+ // Optional
42
+ // Common metadata
43
+ common.MetadataMutable metadata = 100;
44
+ }
45
+
46
+ message CreateObligationResponse {
47
+ policy.Obligation obligation = 1;
48
+ }
49
+
50
+ message UpdateObligationRequest {
51
+ // Required
52
+ string id = 1;
53
+
54
+ // Optional
55
+ string name = 2;
56
+ common.MetadataMutable metadata = 100;
57
+ common.MetadataUpdateEnum metadata_update_behavior = 101;
58
+ }
59
+
60
+ message UpdateObligationResponse {
61
+ policy.Obligation obligation = 1;
62
+ }
63
+
64
+ message DeleteObligationRequest {
65
+ oneof identifier {
66
+ string id = 1;
67
+ string fqn = 2;
68
+ }
69
+ }
70
+
71
+ message DeleteObligationResponse {
72
+ policy.Obligation obligation = 1;
73
+ }
74
+
75
+ message ListObligationsRequest {
76
+ // Optional
77
+ // Namespace ID or FQN
78
+ oneof namespace_identifier {
79
+ string id = 1;
80
+ string fqn = 2;
81
+ }
82
+
83
+ // Optional
84
+ policy.PageRequest pagination = 10;
85
+ }
86
+
87
+ message ListObligationsResponse {
88
+ repeated policy.Obligation obligations = 1;
89
+
90
+ policy.PageResponse pagination = 10;
91
+ }
92
+
93
+ // Values
94
+ message GetObligationValueRequest {
95
+ oneof identifier {
96
+ string id = 1;
97
+ string fqn = 2;
98
+ }
99
+ }
100
+
101
+ message GetObligationValueResponse {
102
+ policy.ObligationValue value = 1;
103
+ }
104
+
105
+ message GetObligationValuesByFQNsRequest {
106
+ repeated string fqns = 1;
107
+ }
108
+
109
+ message GetObligationValuesByFQNsResponse {
110
+ map<string, policy.ObligationValue> fqn_value_map = 1;
111
+ }
112
+
113
+ message CreateObligationValueRequest {
114
+ // Required
115
+ oneof obligation_identifier {
116
+ string id = 1;
117
+ string fqn = 2;
118
+ }
119
+ string value = 3;
120
+
121
+ // Optional
122
+ // Common metadata
123
+ common.MetadataMutable metadata = 100;
124
+ }
125
+
126
+ message CreateObligationValueResponse {
127
+ policy.ObligationValue value = 1;
128
+ }
129
+
130
+ message UpdateObligationValueRequest {
131
+ // Required
132
+ string id = 1;
133
+
134
+ // Optional
135
+ string value = 2;
136
+ common.MetadataMutable metadata = 100;
137
+ common.MetadataUpdateEnum metadata_update_behavior = 101;
138
+ }
139
+
140
+ message UpdateObligationValueResponse {
141
+ policy.ObligationValue value = 1;
142
+ }
143
+
144
+ message DeleteObligationValueRequest {
145
+ oneof identifier {
146
+ string id = 1;
147
+ string fqn = 2;
148
+ }
149
+ }
150
+
151
+ message DeleteObligationValueResponse {
152
+ policy.ObligationValue value = 1;
153
+ }
154
+
155
+ // Triggers
156
+ message AddObligationTriggerRequest {
157
+ // Required
158
+ string obligation_value_id = 1;
159
+ string action_id = 2;
160
+ string attribute_value_id = 3;
161
+ // Optional
162
+ // Common metadata
163
+ common.MetadataMutable metadata = 100;
164
+ }
165
+
166
+ message AddObligationTriggerResponse {
167
+ policy.ObligationTrigger trigger = 1;
168
+ }
169
+
170
+ message RemoveObligationTriggerRequest {
171
+ string id = 1;
172
+ }
173
+
174
+ message RemoveObligationTriggerResponse {
175
+ policy.ObligationTrigger trigger = 1;
176
+ }
177
+
178
+ // Fulfillers
179
+ // message AddObligationFulfillerRequest {
180
+ // // Required
181
+ // string obligation_value_id = 1;
182
+ // google.protobuf.Struct conditionals = 2;
183
+ // // Optional
184
+ // // Common metadata
185
+ // common.MetadataMutable metadata = 100;
186
+ // }
187
+
188
+ // message AddObligationFulfillerResponse {
189
+ // policy.ObligationFulfiller fulfiller = 1;
190
+ // }
191
+
192
+ // message RemoveObligationFulfillerRequest {
193
+ // string id = 1;
194
+ // }
195
+
196
+ // message RemoveObligationFulfillerResponse {
197
+ // policy.ObligationFulfiller fulfiller = 1;
198
+ // }
199
+
200
+ ///
201
+ /// Obligation Service
202
+ ///
203
+ service Service {
204
+
205
+ /*--------------------------------------*
206
+ * Obligation RPCs
207
+ *--------------------------------------*/
208
+
209
+ rpc ListObligations(ListObligationsRequest) returns (ListObligationsResponse) {
210
+ option idempotency_level = NO_SIDE_EFFECTS;
211
+ }
212
+
213
+ rpc GetObligation(GetObligationRequest) returns (GetObligationResponse) {
214
+ option idempotency_level = NO_SIDE_EFFECTS;
215
+ }
216
+
217
+ rpc GetObligationsByFQNs(GetObligationsByFQNsRequest) returns (GetObligationsByFQNsResponse) {
218
+ option idempotency_level = NO_SIDE_EFFECTS;
219
+ }
220
+
221
+ rpc CreateObligation(CreateObligationRequest) returns (CreateObligationResponse) {}
222
+
223
+ rpc UpdateObligation(UpdateObligationRequest) returns (UpdateObligationResponse) {}
224
+
225
+ rpc DeleteObligation(DeleteObligationRequest) returns (DeleteObligationResponse) {}
226
+
227
+ /*--------------------------------------*
228
+ * Value RPCs
229
+ *--------------------------------------*/
230
+
231
+ rpc GetObligationValue(GetObligationValueRequest) returns (GetObligationValueResponse) {
232
+ option idempotency_level = NO_SIDE_EFFECTS;
233
+ }
234
+
235
+ rpc GetObligationValuesByFQNs(GetObligationValuesByFQNsRequest) returns (GetObligationValuesByFQNsResponse) {
236
+ option idempotency_level = NO_SIDE_EFFECTS;
237
+ }
238
+
239
+ rpc CreateObligationValue(CreateObligationValueRequest) returns (CreateObligationValueResponse) {}
240
+
241
+ rpc UpdateObligationValue(UpdateObligationValueRequest) returns (UpdateObligationValueResponse) {}
242
+
243
+ rpc DeleteObligationValue(DeleteObligationValueRequest) returns (DeleteObligationValueResponse) {}
244
+
245
+ /*--------------------------------------*
246
+ * Trigger RPCs
247
+ *--------------------------------------*/
248
+
249
+ rpc AddObligationTrigger(AddObligationTriggerRequest) returns (AddObligationTriggerResponse) {}
250
+
251
+ rpc RemoveObligationTrigger(RemoveObligationTriggerRequest) returns (RemoveObligationTriggerResponse) {}
252
+
253
+ /*--------------------------------------*
254
+ * Fulfiller RPCs
255
+ *--------------------------------------*/
256
+
257
+ // rpc AddObligationFulfiller(AddObligationFulfillerRequest) returns (AddObligationFulfillerResponse) {}
258
+
259
+ // rpc RemoveObligationFulfiller(RemoveObligationFulfillerRequest) returns (RemoveObligationFulfillerResponse) {}
260
+ }
@@ -167,14 +167,21 @@ message UnsafeDeleteAttributeValueResponse {
167
167
  }
168
168
 
169
169
  // WARNING!!
170
+ // Deleting a key will make it so that ANY TDF that was encrypted with this key cannot be decrypted by the platform.
170
171
  message UnsafeDeleteKasKeyRequest {
171
172
  // Required
172
173
  // UUID of the Key
173
174
  string id = 1 [(buf.validate.field).string.uuid = true];
175
+ // Required
176
+ // The key id assigned to this key (Ex: "key-1")
177
+ string kid = 2 [(buf.validate.field).required = true];
178
+ // Required
179
+ // The kas uri for which this key belongs (Ex: "https://kas.example.com:8080")
180
+ string kas_uri = 3 [(buf.validate.field).required = true];
174
181
  }
175
182
 
176
183
  message UnsafeDeleteKasKeyResponse {
177
- policy.Key key = 1;
184
+ policy.KasKey key = 1;
178
185
  }
179
186
 
180
187
  ///
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "otdf-python-proto"
3
- version = "0.4.3"
3
+ version = "0.5.0"
4
4
  description = "Generated protobuf files for OpenTDF Python SDK"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -8,9 +8,10 @@ authors = [
8
8
  ]
9
9
  requires-python = ">=3.10"
10
10
  dependencies = [
11
- "connect-python[compiler]>=0.4.2,<0.5",
11
+ "connect-python>=0.6.0",
12
12
  "protobuf>=6.31.1",
13
13
  "googleapis-common-protos>=1.66.0",
14
+ "protoc-gen-openapiv2>=0.0.1",
14
15
  # Legacy gRPC support (may be removed in future versions)
15
16
  "grpcio>=1.74.0",
16
17
  "grpcio-tools>=1.74.0",
@@ -23,8 +24,12 @@ build-backend = "hatchling.build"
23
24
  [dependency-groups]
24
25
  dev = [
25
26
  "mypy-protobuf>=3.6.0",
27
+ "pytest>=8.0.0",
26
28
  ]
27
29
 
30
+ [tool.pytest.ini_options]
31
+ testpaths = ["tests"]
32
+
28
33
  [tool.hatch.build.targets.wheel]
29
34
  packages = ["src/otdf_python_proto"]
30
35