otdf-python 0.4.3__tar.gz → 0.4.4__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.
- {otdf_python-0.4.3 → otdf_python-0.4.4}/.github/workflows/test-suite.yaml +23 -3
- {otdf_python-0.4.3 → otdf_python-0.4.4}/.pre-commit-config.yaml +3 -3
- otdf_python-0.4.4/.release-please-manifest.json +3 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/CHANGELOG.md +7 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/PKG-INFO +1 -1
- {otdf_python-0.4.3 → otdf_python-0.4.4}/docs/DEVELOPING.md +1 -1
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/README.md +1 -1
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/pyproject.toml +5 -1
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/scripts/build_connect_proto.sh +13 -17
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/scripts/generate_connect_proto.py +29 -22
- otdf_python-0.4.4/otdf-python-proto/scripts/setup_connect_rpc.py +26 -0
- otdf_python-0.4.3/otdf-python-proto/scripts/setup_connect_rpc.py → otdf_python-0.4.4/otdf-python-proto/tests/__init__.py +0 -0
- otdf_python-0.4.4/otdf-python-proto/tests/test_generate_connect_proto.py +355 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/uv.lock +135 -2
- {otdf_python-0.4.3 → otdf_python-0.4.4}/pyproject.toml +1 -1
- otdf_python-0.4.4/uv.lock +849 -0
- otdf_python-0.4.3/.release-please-manifest.json +0 -3
- otdf_python-0.4.3/uv.lock +0 -849
- {otdf_python-0.4.3 → otdf_python-0.4.4}/.github/check_entitlements.sh +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/.github/start_opentdf_docker.sh +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/.github/workflows/build-python.yaml +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/.github/workflows/platform-integration-test.yaml +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/.github/workflows/release-please.yaml +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/.gitignore +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/.release-please-config-develop.json +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/.release-please-config.json +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/.release-please-manifest-develop.json +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/.vscode/extensions.json +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/.vscode/settings.json +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/LICENSE +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/README.md +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/conftest.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/docs/CONNECT_RPC.md +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/docs/LEGACY_VERSION.md +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/docs/RELEASES.md +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/buf.gen.yaml +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/buf.lock +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/buf.yaml +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/generated/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/authorization/authorization.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/authorization/v2/authorization.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/common/common.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/entity/entity.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/entityresolution/entity_resolution.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/entityresolution/v2/entity_resolution.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/kas/kas.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/logger/audit/test.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/policy/actions/actions.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/policy/attributes/attributes.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/policy/kasregistry/key_access_server_registry.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/policy/keymanagement/key_management.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/policy/namespaces/namespaces.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/policy/objects.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/policy/registeredresources/registered_resources.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/policy/resourcemapping/resource_mapping.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/policy/selectors.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/policy/subjectmapping/subject_mapping.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/policy/unsafe/unsafe.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/proto-files/wellknownconfiguration/wellknown_configuration.proto +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/authorization/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/authorization/authorization_connect.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/authorization/authorization_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/authorization/authorization_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_connect.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/common/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/common/common_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/common/common_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/entity/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/entity/entity_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/entity/entity_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/entityresolution/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_connect.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_connect.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/kas/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/kas/kas_connect.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/kas/kas_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/kas/kas_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/authorization/authorization_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/authorization/v2/authorization_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/common/common_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entity/entity_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entityresolution/entity_resolution_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entityresolution/v2/entity_resolution_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/kas/kas_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/logger/audit/test_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/actions/actions_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/attributes/attributes_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/kasregistry/key_access_server_registry_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/keymanagement/key_management_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/namespaces/namespaces_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/objects_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/registeredresources/registered_resources_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/resourcemapping/resource_mapping_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/selectors_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/subjectmapping/subject_mapping_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/unsafe/unsafe_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/wellknownconfiguration/wellknown_configuration_pb2_grpc.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/logger/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/logger/audit/test_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/logger/audit/test_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/actions/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_connect.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/attributes/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_connect.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_connect.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_connect.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/namespaces/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_connect.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/objects_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/objects_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_connect.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_connect.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/selectors_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/selectors_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_connect.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/unsafe/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_connect.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_connect.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_pb2.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_pb2.pyi +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/__main__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/address_normalizer.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/aesgcm.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/assertion_config.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/asym_crypto.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/auth_headers.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/autoconfigure_utils.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/cli.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/collection_store.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/collection_store_impl.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/config.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/connect_client.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/constants.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/crypto_utils.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/dpop.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/ecc_constants.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/ecc_mode.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/ecdh.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/eckeypair.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/header.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/invalid_zip_exception.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/kas_allowlist.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/kas_client.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/kas_connect_rpc_client.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/kas_info.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/kas_key_cache.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/key_type.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/key_type_constants.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/manifest.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/nanotdf.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/nanotdf_ecdsa_struct.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/nanotdf_type.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/policy_binding_serializer.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/policy_info.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/policy_object.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/policy_stub.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/resource_locator.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/sdk.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/sdk_builder.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/sdk_exceptions.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/symmetric_and_payload_config.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/tdf.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/tdf_reader.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/tdf_writer.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/token_source.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/version.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/zip_reader.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/src/otdf_python/zip_writer.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/__init__.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/config_pydantic.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/integration/conftest.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/integration/otdfctl_only/test_otdfctl_generated_fixtures.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/integration/otdfctl_to_python/test_cli_comparison.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/integration/otdfctl_to_python/test_cli_decrypt.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/integration/otdfctl_to_python/test_cli_inspect.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/integration/otdfctl_to_python/test_nanotdf_cli_comparison.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/integration/otdfctl_to_python/test_python_nanotdf_only.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/integration/otdfctl_to_python/test_tdf_reader_integration.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/integration/python_only/test_kas_client_integration.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/integration/support_sdk.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/integration/test_cli_integration.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/integration/test_cli_tdf_validation.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/integration/test_data/empty_file.txt +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/integration/test_data/sample_binary.png +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/integration/test_data/sample_text.txt +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/integration/test_data/sample_with_attributes.txt +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/integration/test_pe_interaction.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/mock_crypto.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/server_logs.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/support_cli_args.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/support_common.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/support_otdfctl.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/support_otdfctl_args.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_address_normalizer.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_aesgcm.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_assertion_config.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_asym_encryption.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_autoconfigure_utils.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_cli.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_collection_store.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_config.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_crypto_utils.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_ecdh.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_eckeypair.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_header.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_inner_classes.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_kas_allowlist.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_kas_client.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_kas_key_cache.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_kas_key_management.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_key_type.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_log_collection.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_manifest.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_manifest_format.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_nanotdf.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_nanotdf_ecdh.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_nanotdf_ecdsa_struct.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_nanotdf_integration.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_nanotdf_type.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_policy_object.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_sdk.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_sdk_builder.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_sdk_exceptions.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_sdk_mock.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_sdk_tdf_integration.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_tdf.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_tdf_key_management.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_tdf_reader.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_tdf_writer.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_token_source.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_url_normalization.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_use_plaintext_flow.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_validate_otdf_python.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_version.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_zip_reader.py +0 -0
- {otdf_python-0.4.3 → otdf_python-0.4.4}/tests/test_zip_writer.py +0 -0
|
@@ -32,7 +32,26 @@ jobs:
|
|
|
32
32
|
uv run ruff check
|
|
33
33
|
uv run ruff format --check
|
|
34
34
|
|
|
35
|
-
# Step
|
|
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.
|
|
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.
|
|
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.
|
|
44
|
+
rev: v4.4.0
|
|
45
45
|
hooks:
|
|
46
46
|
- id: conventional-pre-commit
|
|
47
47
|
stages: [commit-msg]
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [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)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **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))
|
|
9
|
+
|
|
3
10
|
## [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
11
|
|
|
5
12
|
|
|
@@ -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 [`
|
|
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
|
-
|
|
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "otdf-python-proto"
|
|
3
|
-
version = "0.4.
|
|
3
|
+
version = "0.4.4"
|
|
4
4
|
description = "Generated protobuf files for OpenTDF Python SDK"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = [
|
|
@@ -23,8 +23,12 @@ build-backend = "hatchling.build"
|
|
|
23
23
|
[dependency-groups]
|
|
24
24
|
dev = [
|
|
25
25
|
"mypy-protobuf>=3.6.0",
|
|
26
|
+
"pytest>=8.0.0",
|
|
26
27
|
]
|
|
27
28
|
|
|
29
|
+
[tool.pytest.ini_options]
|
|
30
|
+
testpaths = ["tests"]
|
|
31
|
+
|
|
28
32
|
[tool.hatch.build.targets.wheel]
|
|
29
33
|
packages = ["src/otdf_python_proto"]
|
|
30
34
|
|
|
@@ -44,28 +44,28 @@ fi
|
|
|
44
44
|
|
|
45
45
|
echo "✓ uv is available"
|
|
46
46
|
|
|
47
|
-
# Install dependencies
|
|
47
|
+
# Install dependencies
|
|
48
48
|
echo "Installing/updating dependencies..."
|
|
49
49
|
cd "$PROTO_GEN_DIR"
|
|
50
|
-
uv sync
|
|
50
|
+
uv sync
|
|
51
51
|
|
|
52
52
|
# Check if connect-python is available
|
|
53
53
|
if ! uv run python -c "import connectrpc" 2>/dev/null; then
|
|
54
|
-
echo "
|
|
55
|
-
uv
|
|
54
|
+
echo "Error: connect-python is not in the installed dependencies."
|
|
55
|
+
echo "It may need to be added first. Run: uv run python scripts/setup_connect_rpc.py"
|
|
56
|
+
echo "Then re-run this script."
|
|
57
|
+
exit 1
|
|
56
58
|
fi
|
|
57
59
|
|
|
58
60
|
echo "✓ connect-python is available"
|
|
59
61
|
|
|
60
62
|
# Clean up previous generated files
|
|
63
|
+
OUTPUT_DIR="$PROTO_GEN_DIR/src/otdf_python_proto"
|
|
61
64
|
echo "Cleaning up previous generated files..."
|
|
62
|
-
if [[ -d "
|
|
63
|
-
rm -rf
|
|
65
|
+
if [[ -d "$OUTPUT_DIR" ]]; then
|
|
66
|
+
rm -rf "${OUTPUT_DIR:?}"/*
|
|
64
67
|
fi
|
|
65
68
|
|
|
66
|
-
# Create generated directory
|
|
67
|
-
mkdir -p generated
|
|
68
|
-
|
|
69
69
|
# Run the generation
|
|
70
70
|
echo "Generating Connect RPC protobuf files..."
|
|
71
71
|
uv run python scripts/generate_connect_proto.py "$@"
|
|
@@ -75,16 +75,12 @@ if [[ $? -eq 0 ]]; then
|
|
|
75
75
|
echo "✓ Connect RPC generation complete!"
|
|
76
76
|
echo ""
|
|
77
77
|
echo "Generated files:"
|
|
78
|
-
echo " -
|
|
79
|
-
echo " -
|
|
80
|
-
echo " -
|
|
78
|
+
echo " - src/otdf_python_proto/**/*_pb2.py (Protobuf message classes)"
|
|
79
|
+
echo " - src/otdf_python_proto/**/*_pb2.pyi (Type stubs)"
|
|
80
|
+
echo " - src/otdf_python_proto/**/*_connect.py (Connect RPC clients)"
|
|
81
81
|
echo ""
|
|
82
82
|
echo "Legacy gRPC files (if generated):"
|
|
83
|
-
echo " -
|
|
84
|
-
echo ""
|
|
85
|
-
echo "Usage examples:"
|
|
86
|
-
echo " cd .."
|
|
87
|
-
echo " python examples/connect_rpc_client_example.py"
|
|
83
|
+
echo " - src/otdf_python_proto/legacy_grpc/**/*_pb2_grpc.py (gRPC stubs)"
|
|
88
84
|
echo ""
|
|
89
85
|
echo "For more information, see:"
|
|
90
86
|
echo " - docs/CONNECT_RPC.md"
|
|
@@ -8,6 +8,9 @@ This script:
|
|
|
8
8
|
4. Optionally generates legacy gRPC clients for backward compatibility
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
|
+
import argparse
|
|
12
|
+
import re
|
|
13
|
+
import shutil
|
|
11
14
|
import subprocess
|
|
12
15
|
import sys
|
|
13
16
|
from pathlib import Path
|
|
@@ -43,9 +46,9 @@ def check_dependencies() -> bool:
|
|
|
43
46
|
return True
|
|
44
47
|
|
|
45
48
|
|
|
46
|
-
def copy_opentdf_proto_files(proto_gen_dir: Path) -> bool:
|
|
49
|
+
def copy_opentdf_proto_files(proto_gen_dir: Path, git_tag: str | None = None) -> bool:
|
|
47
50
|
"""Clone OpenTDF platform repository and copy all proto files."""
|
|
48
|
-
GIT_TAG = "service/v0.7.2"
|
|
51
|
+
GIT_TAG = git_tag or "service/v0.7.2"
|
|
49
52
|
REPO_URL = "https://github.com/opentdf/platform.git"
|
|
50
53
|
|
|
51
54
|
temp_repo_dir = proto_gen_dir / "temp_platform_repo"
|
|
@@ -57,7 +60,7 @@ def copy_opentdf_proto_files(proto_gen_dir: Path) -> bool:
|
|
|
57
60
|
try:
|
|
58
61
|
# Remove existing temp directory if it exists
|
|
59
62
|
if temp_repo_dir.exists():
|
|
60
|
-
|
|
63
|
+
shutil.rmtree(temp_repo_dir)
|
|
61
64
|
|
|
62
65
|
print(f"Cloning OpenTDF platform repository (tag: {GIT_TAG})...")
|
|
63
66
|
|
|
@@ -120,17 +123,15 @@ def copy_opentdf_proto_files(proto_gen_dir: Path) -> bool:
|
|
|
120
123
|
finally:
|
|
121
124
|
# Clean up temp directory
|
|
122
125
|
if temp_repo_dir.exists():
|
|
123
|
-
|
|
126
|
+
shutil.rmtree(temp_repo_dir)
|
|
124
127
|
|
|
125
|
-
return False
|
|
126
128
|
|
|
127
|
-
|
|
128
|
-
def download_proto_files(proto_gen_dir: Path) -> bool:
|
|
129
|
+
def download_proto_files(proto_gen_dir: Path, git_tag: str | None = None) -> bool:
|
|
129
130
|
"""Download proto files from OpenTDF platform."""
|
|
130
131
|
print("Copying proto files from OpenTDF platform...")
|
|
131
132
|
|
|
132
133
|
try:
|
|
133
|
-
return copy_opentdf_proto_files(proto_gen_dir)
|
|
134
|
+
return copy_opentdf_proto_files(proto_gen_dir, git_tag=git_tag)
|
|
134
135
|
except Exception as e:
|
|
135
136
|
print(f"Error getting proto files: {e}")
|
|
136
137
|
return False
|
|
@@ -152,14 +153,15 @@ def run_buf_generate(proto_gen_dir: Path) -> bool:
|
|
|
152
153
|
connect_plugin_path = result.stdout.strip()
|
|
153
154
|
print(f"Using Connect plugin at: {connect_plugin_path}")
|
|
154
155
|
|
|
155
|
-
# Update buf.gen.yaml with the correct path
|
|
156
|
+
# Update buf.gen.yaml with the correct absolute path for the local plugin
|
|
156
157
|
buf_gen_path = proto_gen_dir / "buf.gen.yaml"
|
|
157
158
|
with buf_gen_path.open() as f:
|
|
158
159
|
content = f.read()
|
|
159
160
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
161
|
+
updated_content = re.sub(
|
|
162
|
+
r"- local:\s+\S*protoc-gen-connect[_-]python\S*",
|
|
163
|
+
lambda _: f"- local: {connect_plugin_path}",
|
|
164
|
+
content,
|
|
163
165
|
)
|
|
164
166
|
|
|
165
167
|
with buf_gen_path.open("w") as f:
|
|
@@ -189,13 +191,9 @@ def run_buf_generate(proto_gen_dir: Path) -> bool:
|
|
|
189
191
|
|
|
190
192
|
def create_init_files(generated_dir: Path) -> None:
|
|
191
193
|
"""Create __init__.py files in generated directories."""
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
# Create __init__.py files in any subdirectories
|
|
196
|
-
for subdir in generated_dir.iterdir():
|
|
197
|
-
if subdir.is_dir():
|
|
198
|
-
(subdir / "__init__.py").touch()
|
|
194
|
+
for dirpath in [generated_dir, *generated_dir.rglob("*")]:
|
|
195
|
+
if dirpath.is_dir():
|
|
196
|
+
(dirpath / "__init__.py").touch()
|
|
199
197
|
|
|
200
198
|
|
|
201
199
|
def _fix_ignore_if_default_value(proto_files_dir):
|
|
@@ -245,7 +243,7 @@ def main():
|
|
|
245
243
|
# Get the proto-gen directory (parent of scripts)
|
|
246
244
|
proto_gen_dir = Path(__file__).parent.parent
|
|
247
245
|
proto_files_dir = proto_gen_dir / "proto-files"
|
|
248
|
-
generated_dir = proto_gen_dir / "
|
|
246
|
+
generated_dir = proto_gen_dir / "src" / "otdf_python_proto"
|
|
249
247
|
|
|
250
248
|
# Check dependencies
|
|
251
249
|
if not check_dependencies():
|
|
@@ -255,10 +253,19 @@ def main():
|
|
|
255
253
|
proto_files_dir.mkdir(exist_ok=True)
|
|
256
254
|
generated_dir.mkdir(exist_ok=True)
|
|
257
255
|
|
|
256
|
+
# Parse arguments
|
|
257
|
+
parser = argparse.ArgumentParser(description="OpenTDF Connect RPC Client Generator")
|
|
258
|
+
parser.add_argument("--tag", help="Git tag to use for OpenTDF platform")
|
|
259
|
+
parser.add_argument(
|
|
260
|
+
"--download", action="store_true", help="Force download of proto files"
|
|
261
|
+
)
|
|
262
|
+
args = parser.parse_args()
|
|
263
|
+
git_tag = args.tag
|
|
264
|
+
|
|
258
265
|
# Download proto files (optional - can use existing files)
|
|
259
266
|
if (
|
|
260
|
-
|
|
261
|
-
) and not download_proto_files(proto_gen_dir):
|
|
267
|
+
args.download or not any(proto_files_dir.glob("**/*.proto"))
|
|
268
|
+
) and not download_proto_files(proto_gen_dir, git_tag=git_tag):
|
|
262
269
|
return 1
|
|
263
270
|
|
|
264
271
|
# Check if we have any proto files
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Setup script for Connect RPC dependencies.
|
|
3
|
+
|
|
4
|
+
Run this script once to install the required tools before generating proto files:
|
|
5
|
+
|
|
6
|
+
uv run python scripts/setup_connect_rpc.py
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import subprocess
|
|
10
|
+
import sys
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def main():
|
|
14
|
+
"""Install Connect RPC compiler dependencies."""
|
|
15
|
+
print("Installing Connect RPC dependencies...")
|
|
16
|
+
subprocess.run(
|
|
17
|
+
["uv", "sync"],
|
|
18
|
+
check=True,
|
|
19
|
+
)
|
|
20
|
+
print("✓ Connect RPC dependencies installed.")
|
|
21
|
+
print(" Run 'uv run python scripts/generate_connect_proto.py' to generate files.")
|
|
22
|
+
return 0
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
if __name__ == "__main__":
|
|
26
|
+
sys.exit(main())
|