From cf5383cc10a88c71079cd4f592adc0d86a3e23f4 Mon Sep 17 00:00:00 2001 From: zeevdr Date: Fri, 19 Jun 2026 10:31:41 +0300 Subject: [PATCH] feat: regenerate stubs for decree v0.12.0-alpha.3, bump to 0.4.0a1 Regenerate Python proto stubs against the decree v0.12.0-alpha.3 proto (additive: new fields and RPCs across audit/config/schema). Bump to 0.4.0a1. Co-Authored-By: Claude Opus 4.8 --- sdk/pyproject.toml | 2 +- .../centralconfig/v1/audit_service_pb2.py | 20 +- .../centralconfig/v1/audit_service_pb2.pyi | 105 ++++++++- .../v1/audit_service_pb2_grpc.py | 53 ++++- .../v1/audit_service_pb2_grpc.pyi | 18 ++ .../centralconfig/v1/config_service_pb2.py | 92 ++++---- .../centralconfig/v1/config_service_pb2.pyi | 200 +++++++++++++++++- .../v1/config_service_pb2_grpc.py | 68 +++++- .../v1/config_service_pb2_grpc.pyi | 63 +++++- .../centralconfig/v1/schema_service_pb2.py | 34 +-- .../centralconfig/v1/schema_service_pb2.pyi | 96 ++++++++- .../v1/schema_service_pb2_grpc.py | 8 +- .../centralconfig/v1/server_service_pb2.py | 6 +- .../centralconfig/v1/server_service_pb2.pyi | 17 +- .../v1/server_service_pb2_grpc.py | 8 +- .../_generated/centralconfig/v1/types_pb2.py | 94 ++++---- .../_generated/centralconfig/v1/types_pb2.pyi | 97 ++++++++- .../centralconfig/v1/types_pb2_grpc.py | 2 +- 18 files changed, 816 insertions(+), 167 deletions(-) diff --git a/sdk/pyproject.toml b/sdk/pyproject.toml index e7174ec..f72d7d0 100644 --- a/sdk/pyproject.toml +++ b/sdk/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "opendecree" -version = "0.3.0a1" +version = "0.4.0a1" description = "Python SDK for OpenDecree — schema-driven configuration management (alpha)" readme = "README.md" license = "Apache-2.0" diff --git a/sdk/src/opendecree/_generated/centralconfig/v1/audit_service_pb2.py b/sdk/src/opendecree/_generated/centralconfig/v1/audit_service_pb2.py index e916012..c19a153 100644 --- a/sdk/src/opendecree/_generated/centralconfig/v1/audit_service_pb2.py +++ b/sdk/src/opendecree/_generated/centralconfig/v1/audit_service_pb2.py @@ -2,7 +2,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE # source: centralconfig/v1/audit_service.proto -# Protobuf Python Version: 6.31.1 +# Protobuf Python Version: 6.33.5 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -12,8 +12,8 @@ _runtime_version.ValidateProtobufRuntimeVersion( _runtime_version.Domain.PUBLIC, 6, - 31, - 1, + 33, + 5, '', 'centralconfig/v1/audit_service.proto' ) @@ -27,7 +27,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$centralconfig/v1/audit_service.proto\x12\x10\x63\x65ntralconfig.v1\x1a\x1c\x63\x65ntralconfig/v1/types.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xad\x02\n\x14QueryWriteLogRequest\x12\x16\n\ttenant_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05\x61\x63tor\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nfield_path\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x33\n\nstart_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x03\x88\x01\x01\x12\x31\n\x08\x65nd_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x04\x88\x01\x01\x12\x11\n\tpage_size\x18\x06 \x01(\x05\x12\x12\n\npage_token\x18\x07 \x01(\tB\x0c\n\n_tenant_idB\x08\n\x06_actorB\r\n\x0b_field_pathB\r\n\x0b_start_timeB\x0b\n\t_end_time\"_\n\x15QueryWriteLogResponse\x12-\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x1c.centralconfig.v1.AuditEntry\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"\xc1\x01\n\x14GetFieldUsageRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x12\n\nfield_path\x18\x02 \x01(\t\x12\x33\n\nstart_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x88\x01\x01\x12\x31\n\x08\x65nd_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01\x88\x01\x01\x42\r\n\x0b_start_timeB\x0b\n\t_end_time\"D\n\x15GetFieldUsageResponse\x12+\n\x05stats\x18\x01 \x01(\x0b\x32\x1c.centralconfig.v1.UsageStats\"\xae\x01\n\x15GetTenantUsageRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x33\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x88\x01\x01\x12\x31\n\x08\x65nd_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01\x88\x01\x01\x42\r\n\x0b_start_timeB\x0b\n\t_end_time\"K\n\x16GetTenantUsageResponse\x12\x31\n\x0b\x66ield_stats\x18\x01 \x03(\x0b\x32\x1c.centralconfig.v1.UsageStats\"V\n\x16GetUnusedFieldsRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12)\n\x05since\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\".\n\x17GetUnusedFieldsResponse\x12\x13\n\x0b\x66ield_paths\x18\x01 \x03(\t2\xc4\x04\n\x0c\x41uditService\x12x\n\rQueryWriteLog\x12&.centralconfig.v1.QueryWriteLogRequest\x1a\'.centralconfig.v1.QueryWriteLogResponse\"\x16\x82\xd3\xe4\x93\x02\x10\x12\x0e/v1/audit/logs\x12\x94\x01\n\rGetFieldUsage\x12&.centralconfig.v1.GetFieldUsageRequest\x1a\'.centralconfig.v1.GetFieldUsageResponse\"2\x82\xd3\xe4\x93\x02,\x12*/v1/tenants/{tenant_id}/usage/{field_path}\x12\x8a\x01\n\x0eGetTenantUsage\x12\'.centralconfig.v1.GetTenantUsageRequest\x1a(.centralconfig.v1.GetTenantUsageResponse\"%\x82\xd3\xe4\x93\x02\x1f\x12\x1d/v1/tenants/{tenant_id}/usage\x12\x95\x01\n\x0fGetUnusedFields\x12(.centralconfig.v1.GetUnusedFieldsRequest\x1a).centralconfig.v1.GetUnusedFieldsResponse\"-\x82\xd3\xe4\x93\x02\'\x12%/v1/tenants/{tenant_id}/unused-fieldsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$centralconfig/v1/audit_service.proto\x12\x10\x63\x65ntralconfig.v1\x1a\x1c\x63\x65ntralconfig/v1/types.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xad\x02\n\x14QueryWriteLogRequest\x12\x16\n\ttenant_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05\x61\x63tor\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nfield_path\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x33\n\nstart_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x03\x88\x01\x01\x12\x31\n\x08\x65nd_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x04\x88\x01\x01\x12\x11\n\tpage_size\x18\x06 \x01(\x05\x12\x12\n\npage_token\x18\x07 \x01(\tB\x0c\n\n_tenant_idB\x08\n\x06_actorB\r\n\x0b_field_pathB\r\n\x0b_start_timeB\x0b\n\t_end_time\"_\n\x15QueryWriteLogResponse\x12-\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x1c.centralconfig.v1.AuditEntry\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"\xc1\x01\n\x14GetFieldUsageRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x12\n\nfield_path\x18\x02 \x01(\t\x12\x33\n\nstart_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x88\x01\x01\x12\x31\n\x08\x65nd_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01\x88\x01\x01\x42\r\n\x0b_start_timeB\x0b\n\t_end_time\"D\n\x15GetFieldUsageResponse\x12+\n\x05stats\x18\x01 \x01(\x0b\x32\x1c.centralconfig.v1.UsageStats\"\xae\x01\n\x15GetTenantUsageRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x33\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x88\x01\x01\x12\x31\n\x08\x65nd_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01\x88\x01\x01\x42\r\n\x0b_start_timeB\x0b\n\t_end_time\"K\n\x16GetTenantUsageResponse\x12\x31\n\x0b\x66ield_stats\x18\x01 \x03(\x0b\x32\x1c.centralconfig.v1.UsageStats\"V\n\x16GetUnusedFieldsRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12)\n\x05since\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\".\n\x17GetUnusedFieldsResponse\x12\x13\n\x0b\x66ield_paths\x18\x01 \x03(\t\"\'\n\x12VerifyChainRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\"v\n\x13VerifyChainResponse\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\r\n\x05total\x18\x02 \x01(\x05\x12\n\n\x02ok\x18\x03 \x01(\x08\x12\x31\n\x06\x62reaks\x18\x04 \x03(\x0b\x32!.centralconfig.v1.AuditChainBreak\"P\n\x0f\x41uditChainBreak\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\x10\n\x08position\x18\x02 \x01(\x05\x12\x0b\n\x03got\x18\x03 \x01(\t\x12\x0c\n\x04want\x18\x04 \x01(\t2\xba\x05\n\x0c\x41uditService\x12x\n\rQueryWriteLog\x12&.centralconfig.v1.QueryWriteLogRequest\x1a\'.centralconfig.v1.QueryWriteLogResponse\"\x16\x82\xd3\xe4\x93\x02\x10\x12\x0e/v1/audit/logs\x12\x94\x01\n\rGetFieldUsage\x12&.centralconfig.v1.GetFieldUsageRequest\x1a\'.centralconfig.v1.GetFieldUsageResponse\"2\x82\xd3\xe4\x93\x02,\x12*/v1/tenants/{tenant_id}/usage/{field_path}\x12\x8a\x01\n\x0eGetTenantUsage\x12\'.centralconfig.v1.GetTenantUsageRequest\x1a(.centralconfig.v1.GetTenantUsageResponse\"%\x82\xd3\xe4\x93\x02\x1f\x12\x1d/v1/tenants/{tenant_id}/usage\x12\x95\x01\n\x0fGetUnusedFields\x12(.centralconfig.v1.GetUnusedFieldsRequest\x1a).centralconfig.v1.GetUnusedFieldsResponse\"-\x82\xd3\xe4\x93\x02\'\x12%/v1/tenants/{tenant_id}/unused-fields\x12t\n\x0bVerifyChain\x12$.centralconfig.v1.VerifyChainRequest\x1a%.centralconfig.v1.VerifyChainResponse\"\x18\x82\xd3\xe4\x93\x02\x12\x12\x10/v1/audit/verifyb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -42,6 +42,8 @@ _globals['_AUDITSERVICE'].methods_by_name['GetTenantUsage']._serialized_options = b'\202\323\344\223\002\037\022\035/v1/tenants/{tenant_id}/usage' _globals['_AUDITSERVICE'].methods_by_name['GetUnusedFields']._loaded_options = None _globals['_AUDITSERVICE'].methods_by_name['GetUnusedFields']._serialized_options = b'\202\323\344\223\002\'\022%/v1/tenants/{tenant_id}/unused-fields' + _globals['_AUDITSERVICE'].methods_by_name['VerifyChain']._loaded_options = None + _globals['_AUDITSERVICE'].methods_by_name['VerifyChain']._serialized_options = b'\202\323\344\223\002\022\022\020/v1/audit/verify' _globals['_QUERYWRITELOGREQUEST']._serialized_start=152 _globals['_QUERYWRITELOGREQUEST']._serialized_end=453 _globals['_QUERYWRITELOGRESPONSE']._serialized_start=455 @@ -58,6 +60,12 @@ _globals['_GETUNUSEDFIELDSREQUEST']._serialized_end=1158 _globals['_GETUNUSEDFIELDSRESPONSE']._serialized_start=1160 _globals['_GETUNUSEDFIELDSRESPONSE']._serialized_end=1206 - _globals['_AUDITSERVICE']._serialized_start=1209 - _globals['_AUDITSERVICE']._serialized_end=1789 + _globals['_VERIFYCHAINREQUEST']._serialized_start=1208 + _globals['_VERIFYCHAINREQUEST']._serialized_end=1247 + _globals['_VERIFYCHAINRESPONSE']._serialized_start=1249 + _globals['_VERIFYCHAINRESPONSE']._serialized_end=1367 + _globals['_AUDITCHAINBREAK']._serialized_start=1369 + _globals['_AUDITCHAINBREAK']._serialized_end=1449 + _globals['_AUDITSERVICE']._serialized_start=1452 + _globals['_AUDITSERVICE']._serialized_end=2150 # @@protoc_insertion_point(module_scope) diff --git a/sdk/src/opendecree/_generated/centralconfig/v1/audit_service_pb2.pyi b/sdk/src/opendecree/_generated/centralconfig/v1/audit_service_pb2.pyi index a3e113e..468575c 100644 --- a/sdk/src/opendecree/_generated/centralconfig/v1/audit_service_pb2.pyi +++ b/sdk/src/opendecree/_generated/centralconfig/v1/audit_service_pb2.pyi @@ -13,10 +13,10 @@ import builtins as _builtins import sys import typing as _typing -if sys.version_info >= (3, 10): - from typing import TypeAlias as _TypeAlias +if sys.version_info >= (3, 11): + from typing import TypeAlias as _TypeAlias, Never as _Never else: - from typing_extensions import TypeAlias as _TypeAlias + from typing_extensions import TypeAlias as _TypeAlias, Never as _Never DESCRIPTOR: _descriptor.FileDescriptor @@ -107,8 +107,11 @@ class QueryWriteLogResponse(_message.Message): entries: _abc.Iterable[_types_pb2.AuditEntry] | None = ..., next_page_token: _builtins.str = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["entries", b"entries", "next_page_token", b"next_page_token"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___QueryWriteLogResponse: _TypeAlias = QueryWriteLogResponse # noqa: Y015 @@ -175,6 +178,7 @@ class GetFieldUsageResponse(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["stats", b"stats"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___GetFieldUsageResponse: _TypeAlias = GetFieldUsageResponse # noqa: Y015 @@ -231,8 +235,11 @@ class GetTenantUsageResponse(_message.Message): *, field_stats: _abc.Iterable[_types_pb2.UsageStats] | None = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["field_stats", b"field_stats"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___GetTenantUsageResponse: _TypeAlias = GetTenantUsageResponse # noqa: Y015 @@ -260,6 +267,7 @@ class GetUnusedFieldsRequest(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["since", b"since", "tenant_id", b"tenant_id"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___GetUnusedFieldsRequest: _TypeAlias = GetUnusedFieldsRequest # noqa: Y015 @@ -277,7 +285,98 @@ class GetUnusedFieldsResponse(_message.Message): *, field_paths: _abc.Iterable[_builtins.str] | None = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["field_paths", b"field_paths"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___GetUnusedFieldsResponse: _TypeAlias = GetUnusedFieldsResponse # noqa: Y015 + +@_typing.final +class VerifyChainRequest(_message.Message): + """--- Chain verification ---""" + + DESCRIPTOR: _descriptor.Descriptor + + TENANT_ID_FIELD_NUMBER: _builtins.int + tenant_id: _builtins.str + """Tenant ID (UUID) whose chain to verify. Empty verifies the global (schema-level) chain.""" + def __init__( + self, + *, + tenant_id: _builtins.str = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["tenant_id", b"tenant_id"] # noqa: Y015 + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... + +Global___VerifyChainRequest: _TypeAlias = VerifyChainRequest # noqa: Y015 + +@_typing.final +class VerifyChainResponse(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + + TENANT_ID_FIELD_NUMBER: _builtins.int + TOTAL_FIELD_NUMBER: _builtins.int + OK_FIELD_NUMBER: _builtins.int + BREAKS_FIELD_NUMBER: _builtins.int + tenant_id: _builtins.str + """Tenant ID that was verified (mirrors the request).""" + total: _builtins.int + """Total number of entries in the chain.""" + ok: _builtins.bool + """Whether the chain is intact (no breaks found).""" + @_builtins.property + def breaks(self) -> _containers.RepeatedCompositeFieldContainer[Global___AuditChainBreak]: + """Any breaks found. Empty when ok is true.""" + + def __init__( + self, + *, + tenant_id: _builtins.str = ..., + total: _builtins.int = ..., + ok: _builtins.bool = ..., + breaks: _abc.Iterable[Global___AuditChainBreak] | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["breaks", b"breaks", "ok", b"ok", "tenant_id", b"tenant_id", "total", b"total"] # noqa: Y015 + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... + +Global___VerifyChainResponse: _TypeAlias = VerifyChainResponse # noqa: Y015 + +@_typing.final +class AuditChainBreak(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + + ENTRY_ID_FIELD_NUMBER: _builtins.int + POSITION_FIELD_NUMBER: _builtins.int + GOT_FIELD_NUMBER: _builtins.int + WANT_FIELD_NUMBER: _builtins.int + entry_id: _builtins.str + """ID of the entry where the break was detected.""" + position: _builtins.int + """0-based position in the ordered chain.""" + got: _builtins.str + """The entry_hash stored in the database.""" + want: _builtins.str + """The entry_hash we recomputed from the entry's fields.""" + def __init__( + self, + *, + entry_id: _builtins.str = ..., + position: _builtins.int = ..., + got: _builtins.str = ..., + want: _builtins.str = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["entry_id", b"entry_id", "got", b"got", "position", b"position", "want", b"want"] # noqa: Y015 + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... + +Global___AuditChainBreak: _TypeAlias = AuditChainBreak # noqa: Y015 diff --git a/sdk/src/opendecree/_generated/centralconfig/v1/audit_service_pb2_grpc.py b/sdk/src/opendecree/_generated/centralconfig/v1/audit_service_pb2_grpc.py index c5853c9..f5cae97 100644 --- a/sdk/src/opendecree/_generated/centralconfig/v1/audit_service_pb2_grpc.py +++ b/sdk/src/opendecree/_generated/centralconfig/v1/audit_service_pb2_grpc.py @@ -5,7 +5,7 @@ from opendecree._generated.centralconfig.v1 import audit_service_pb2 as centralconfig_dot_v1_dot_audit__service__pb2 -GRPC_GENERATED_VERSION = '1.80.0' +GRPC_GENERATED_VERSION = '1.81.0' GRPC_VERSION = grpc.__version__ _version_not_supported = False @@ -25,7 +25,7 @@ ) -class AuditServiceStub(object): +class AuditServiceStub: """AuditService provides read-only access to the change history and usage statistics for tenant configurations. @@ -60,9 +60,14 @@ def __init__(self, channel): request_serializer=centralconfig_dot_v1_dot_audit__service__pb2.GetUnusedFieldsRequest.SerializeToString, response_deserializer=centralconfig_dot_v1_dot_audit__service__pb2.GetUnusedFieldsResponse.FromString, _registered_method=True) + self.VerifyChain = channel.unary_unary( + '/centralconfig.v1.AuditService/VerifyChain', + request_serializer=centralconfig_dot_v1_dot_audit__service__pb2.VerifyChainRequest.SerializeToString, + response_deserializer=centralconfig_dot_v1_dot_audit__service__pb2.VerifyChainResponse.FromString, + _registered_method=True) -class AuditServiceServicer(object): +class AuditServiceServicer: """AuditService provides read-only access to the change history and usage statistics for tenant configurations. @@ -101,6 +106,14 @@ def GetUnusedFields(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def VerifyChain(self, request, context): + """VerifyChain walks a tenant's audit chain and reports any tampered entries. + An empty tenant_id verifies the global (schema-level) chain. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_AuditServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -124,6 +137,11 @@ def add_AuditServiceServicer_to_server(servicer, server): request_deserializer=centralconfig_dot_v1_dot_audit__service__pb2.GetUnusedFieldsRequest.FromString, response_serializer=centralconfig_dot_v1_dot_audit__service__pb2.GetUnusedFieldsResponse.SerializeToString, ), + 'VerifyChain': grpc.unary_unary_rpc_method_handler( + servicer.VerifyChain, + request_deserializer=centralconfig_dot_v1_dot_audit__service__pb2.VerifyChainRequest.FromString, + response_serializer=centralconfig_dot_v1_dot_audit__service__pb2.VerifyChainResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'centralconfig.v1.AuditService', rpc_method_handlers) @@ -132,7 +150,7 @@ def add_AuditServiceServicer_to_server(servicer, server): # This class is part of an EXPERIMENTAL API. -class AuditService(object): +class AuditService: """AuditService provides read-only access to the change history and usage statistics for tenant configurations. @@ -248,3 +266,30 @@ def GetUnusedFields(request, timeout, metadata, _registered_method=True) + + @staticmethod + def VerifyChain(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/centralconfig.v1.AuditService/VerifyChain', + centralconfig_dot_v1_dot_audit__service__pb2.VerifyChainRequest.SerializeToString, + centralconfig_dot_v1_dot_audit__service__pb2.VerifyChainResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) diff --git a/sdk/src/opendecree/_generated/centralconfig/v1/audit_service_pb2_grpc.pyi b/sdk/src/opendecree/_generated/centralconfig/v1/audit_service_pb2_grpc.pyi index 2864c7e..6127105 100644 --- a/sdk/src/opendecree/_generated/centralconfig/v1/audit_service_pb2_grpc.pyi +++ b/sdk/src/opendecree/_generated/centralconfig/v1/audit_service_pb2_grpc.pyi @@ -51,6 +51,10 @@ class AuditServiceStub: """GetUnusedFields returns field paths that have not been read since the given time. Useful for identifying configuration fields that may be safe to deprecate. """ + VerifyChain: _grpc.UnaryUnaryMultiCallable[_audit_service_pb2.VerifyChainRequest, _audit_service_pb2.VerifyChainResponse] + """VerifyChain walks a tenant's audit chain and reports any tampered entries. + An empty tenant_id verifies the global (schema-level) chain. + """ @_typing.type_check_only class AuditServiceAsyncStub(AuditServiceStub): @@ -75,6 +79,10 @@ class AuditServiceAsyncStub(AuditServiceStub): """GetUnusedFields returns field paths that have not been read since the given time. Useful for identifying configuration fields that may be safe to deprecate. """ + VerifyChain: _aio.UnaryUnaryMultiCallable[_audit_service_pb2.VerifyChainRequest, _audit_service_pb2.VerifyChainResponse] # type: ignore[assignment] + """VerifyChain walks a tenant's audit chain and reports any tampered entries. + An empty tenant_id verifies the global (schema-level) chain. + """ class AuditServiceServicer(metaclass=_abc_1.ABCMeta): """AuditService provides read-only access to the change history and usage @@ -121,4 +129,14 @@ class AuditServiceServicer(metaclass=_abc_1.ABCMeta): Useful for identifying configuration fields that may be safe to deprecate. """ + @_abc_1.abstractmethod + def VerifyChain( + self, + request: _audit_service_pb2.VerifyChainRequest, + context: _ServicerContext, + ) -> _typing.Union[_audit_service_pb2.VerifyChainResponse, _abc.Awaitable[_audit_service_pb2.VerifyChainResponse]]: + """VerifyChain walks a tenant's audit chain and reports any tampered entries. + An empty tenant_id verifies the global (schema-level) chain. + """ + def add_AuditServiceServicer_to_server(servicer: AuditServiceServicer, server: _typing.Union[_grpc.Server, _aio.Server]) -> None: ... diff --git a/sdk/src/opendecree/_generated/centralconfig/v1/config_service_pb2.py b/sdk/src/opendecree/_generated/centralconfig/v1/config_service_pb2.py index c5ef1af..59fe736 100644 --- a/sdk/src/opendecree/_generated/centralconfig/v1/config_service_pb2.py +++ b/sdk/src/opendecree/_generated/centralconfig/v1/config_service_pb2.py @@ -2,7 +2,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE # source: centralconfig/v1/config_service.proto -# Protobuf Python Version: 6.31.1 +# Protobuf Python Version: 6.33.5 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -12,8 +12,8 @@ _runtime_version.ValidateProtobufRuntimeVersion( _runtime_version.Domain.PUBLIC, 6, - 31, - 1, + 33, + 5, '', 'centralconfig/v1/config_service.proto' ) @@ -26,7 +26,7 @@ from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%centralconfig/v1/config_service.proto\x12\x10\x63\x65ntralconfig.v1\x1a\x1c\x63\x65ntralconfig/v1/types.proto\x1a\x1cgoogle/api/annotations.proto\"e\n\x10GetConfigRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x14\n\x07version\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x1c\n\x14include_descriptions\x18\x03 \x01(\x08\x42\n\n\x08_version\"=\n\x11GetConfigResponse\x12(\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Config\"w\n\x0fGetFieldRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x12\n\nfield_path\x18\x02 \x01(\t\x12\x14\n\x07version\x18\x03 \x01(\x05H\x00\x88\x01\x01\x12\x1b\n\x13include_description\x18\x04 \x01(\x08\x42\n\n\x08_version\"@\n\x10GetFieldResponse\x12,\n\x05value\x18\x01 \x01(\x0b\x32\x1d.centralconfig.v1.ConfigValue\"z\n\x10GetFieldsRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x13\n\x0b\x66ield_paths\x18\x02 \x03(\t\x12\x14\n\x07version\x18\x03 \x01(\x05H\x00\x88\x01\x01\x12\x1c\n\x14include_descriptions\x18\x04 \x01(\x08\x42\n\n\x08_version\"B\n\x11GetFieldsResponse\x12-\n\x06values\x18\x01 \x03(\x0b\x32\x1d.centralconfig.v1.ConfigValue\"\xfb\x01\n\x0fSetFieldRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x12\n\nfield_path\x18\x02 \x01(\t\x12+\n\x05value\x18\x03 \x01(\x0b\x32\x1c.centralconfig.v1.TypedValue\x12\x1e\n\x11\x65xpected_checksum\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x1e\n\x11value_description\x18\x06 \x01(\tH\x02\x88\x01\x01\x42\x14\n\x12_expected_checksumB\x0e\n\x0c_descriptionB\x14\n\x12_value_description\"K\n\x10SetFieldResponse\x12\x37\n\x0e\x63onfig_version\x18\x01 \x01(\x0b\x32\x1f.centralconfig.v1.ConfigVersion\"\x7f\n\x10SetFieldsRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12.\n\x07updates\x18\x02 \x03(\x0b\x32\x1d.centralconfig.v1.FieldUpdate\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0e\n\x0c_description\"L\n\x11SetFieldsResponse\x12\x37\n\x0e\x63onfig_version\x18\x01 \x01(\x0b\x32\x1f.centralconfig.v1.ConfigVersion\"\xba\x01\n\x0b\x46ieldUpdate\x12\x12\n\nfield_path\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.centralconfig.v1.TypedValue\x12\x1e\n\x11\x65xpected_checksum\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x11value_description\x18\x04 \x01(\tH\x01\x88\x01\x01\x42\x14\n\x12_expected_checksumB\x14\n\x12_value_description\"O\n\x13ListVersionsRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\"b\n\x14ListVersionsResponse\x12\x31\n\x08versions\x18\x01 \x03(\x0b\x32\x1f.centralconfig.v1.ConfigVersion\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"7\n\x11GetVersionRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\"M\n\x12GetVersionResponse\x12\x37\n\x0e\x63onfig_version\x18\x01 \x01(\x0b\x32\x1f.centralconfig.v1.ConfigVersion\"h\n\x18RollbackToVersionRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0e\n\x0c_description\"T\n\x19RollbackToVersionResponse\x12\x37\n\x0e\x63onfig_version\x18\x01 \x01(\x0b\x32\x1f.centralconfig.v1.ConfigVersion\":\n\x10SubscribeRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x13\n\x0b\x66ield_paths\x18\x02 \x03(\t\"C\n\x11SubscribeResponse\x12.\n\x06\x63hange\x18\x01 \x01(\x0b\x32\x1e.centralconfig.v1.ConfigChange\"v\n\x13\x45xportConfigRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x14\n\x07version\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x19\n\x0cspec_version\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_versionB\x0f\n\r_spec_version\",\n\x14\x45xportConfigResponse\x12\x14\n\x0cyaml_content\x18\x01 \x01(\x0c\"\x94\x01\n\x13ImportConfigRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x14\n\x0cyaml_content\x18\x02 \x01(\x0c\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12*\n\x04mode\x18\x04 \x01(\x0e\x32\x1c.centralconfig.v1.ImportModeB\x0e\n\x0c_description\"O\n\x14ImportConfigResponse\x12\x37\n\x0e\x63onfig_version\x18\x01 \x01(\x0b\x32\x1f.centralconfig.v1.ConfigVersion*s\n\nImportMode\x12\x1b\n\x17IMPORT_MODE_UNSPECIFIED\x10\x00\x12\x15\n\x11IMPORT_MODE_MERGE\x10\x01\x12\x17\n\x13IMPORT_MODE_REPLACE\x10\x02\x12\x18\n\x14IMPORT_MODE_DEFAULTS\x10\x03\x32\xb6\x0c\n\rConfigService\x12|\n\tGetConfig\x12\".centralconfig.v1.GetConfigRequest\x1a#.centralconfig.v1.GetConfigResponse\"&\x82\xd3\xe4\x93\x02 \x12\x1e/v1/tenants/{tenant_id}/config\x12\x8d\x01\n\x08GetField\x12!.centralconfig.v1.GetFieldRequest\x1a\".centralconfig.v1.GetFieldResponse\":\x82\xd3\xe4\x93\x02\x34\x12\x32/v1/tenants/{tenant_id}/config/fields/{field_path}\x12\x88\x01\n\tGetFields\x12\".centralconfig.v1.GetFieldsRequest\x1a#.centralconfig.v1.GetFieldsResponse\"2\x82\xd3\xe4\x93\x02,\"\'/v1/tenants/{tenant_id}/config:batchGet:\x01*\x12\x90\x01\n\x08SetField\x12!.centralconfig.v1.SetFieldRequest\x1a\".centralconfig.v1.SetFieldResponse\"=\x82\xd3\xe4\x93\x02\x37\x1a\x32/v1/tenants/{tenant_id}/config/fields/{field_path}:\x01*\x12\x88\x01\n\tSetFields\x12\".centralconfig.v1.SetFieldsRequest\x1a#.centralconfig.v1.SetFieldsResponse\"2\x82\xd3\xe4\x93\x02,\"\'/v1/tenants/{tenant_id}/config:batchSet:\x01*\x12\x87\x01\n\x0cListVersions\x12%.centralconfig.v1.ListVersionsRequest\x1a&.centralconfig.v1.ListVersionsResponse\"(\x82\xd3\xe4\x93\x02\"\x12 /v1/tenants/{tenant_id}/versions\x12\x8b\x01\n\nGetVersion\x12#.centralconfig.v1.GetVersionRequest\x1a$.centralconfig.v1.GetVersionResponse\"2\x82\xd3\xe4\x93\x02,\x12*/v1/tenants/{tenant_id}/versions/{version}\x12\xa9\x01\n\x11RollbackToVersion\x12*.centralconfig.v1.RollbackToVersionRequest\x1a+.centralconfig.v1.RollbackToVersionResponse\";\x82\xd3\xe4\x93\x02\x35\"3/v1/tenants/{tenant_id}/versions/{version}:rollback\x12\x88\x01\n\tSubscribe\x12\".centralconfig.v1.SubscribeRequest\x1a#.centralconfig.v1.SubscribeResponse\"0\x82\xd3\xe4\x93\x02*\x12(/v1/tenants/{tenant_id}/config:subscribe0\x01\x12\x8c\x01\n\x0c\x45xportConfig\x12%.centralconfig.v1.ExportConfigRequest\x1a&.centralconfig.v1.ExportConfigResponse\"-\x82\xd3\xe4\x93\x02\'\x12%/v1/tenants/{tenant_id}/config/export\x12\x8f\x01\n\x0cImportConfig\x12%.centralconfig.v1.ImportConfigRequest\x1a&.centralconfig.v1.ImportConfigResponse\"0\x82\xd3\xe4\x93\x02*\"%/v1/tenants/{tenant_id}/config/import:\x01*b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%centralconfig/v1/config_service.proto\x12\x10\x63\x65ntralconfig.v1\x1a\x1c\x63\x65ntralconfig/v1/types.proto\x1a\x1cgoogle/api/annotations.proto\"e\n\x10GetConfigRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x14\n\x07version\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x1c\n\x14include_descriptions\x18\x03 \x01(\x08\x42\n\n\x08_version\"=\n\x11GetConfigResponse\x12(\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Config\"w\n\x0fGetFieldRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x12\n\nfield_path\x18\x02 \x01(\t\x12\x14\n\x07version\x18\x03 \x01(\x05H\x00\x88\x01\x01\x12\x1b\n\x13include_description\x18\x04 \x01(\x08\x42\n\n\x08_version\"@\n\x10GetFieldResponse\x12,\n\x05value\x18\x01 \x01(\x0b\x32\x1d.centralconfig.v1.ConfigValue\"z\n\x10GetFieldsRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x13\n\x0b\x66ield_paths\x18\x02 \x03(\t\x12\x14\n\x07version\x18\x03 \x01(\x05H\x00\x88\x01\x01\x12\x1c\n\x14include_descriptions\x18\x04 \x01(\x08\x42\n\n\x08_version\"B\n\x11GetFieldsResponse\x12-\n\x06values\x18\x01 \x03(\x0b\x32\x1d.centralconfig.v1.ConfigValue\"\xad\x02\n\x0fSetFieldRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x12\n\nfield_path\x18\x02 \x01(\t\x12+\n\x05value\x18\x03 \x01(\x0b\x32\x1c.centralconfig.v1.TypedValue\x12\x1e\n\x11\x65xpected_checksum\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x1e\n\x11value_description\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x1c\n\x0fidempotency_key\x18\x07 \x01(\tH\x03\x88\x01\x01\x42\x14\n\x12_expected_checksumB\x0e\n\x0c_descriptionB\x14\n\x12_value_descriptionB\x12\n\x10_idempotency_key\"K\n\x10SetFieldResponse\x12\x37\n\x0e\x63onfig_version\x18\x01 \x01(\x0b\x32\x1f.centralconfig.v1.ConfigVersion\"\xb1\x01\n\x10SetFieldsRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12.\n\x07updates\x18\x02 \x03(\x0b\x32\x1d.centralconfig.v1.FieldUpdate\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x0fidempotency_key\x18\x04 \x01(\tH\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x12\n\x10_idempotency_key\"L\n\x11SetFieldsResponse\x12\x37\n\x0e\x63onfig_version\x18\x01 \x01(\x0b\x32\x1f.centralconfig.v1.ConfigVersion\"\xba\x01\n\x0b\x46ieldUpdate\x12\x12\n\nfield_path\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.centralconfig.v1.TypedValue\x12\x1e\n\x11\x65xpected_checksum\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x11value_description\x18\x04 \x01(\tH\x01\x88\x01\x01\x42\x14\n\x12_expected_checksumB\x14\n\x12_value_description\"O\n\x13ListVersionsRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\"b\n\x14ListVersionsResponse\x12\x31\n\x08versions\x18\x01 \x03(\x0b\x32\x1f.centralconfig.v1.ConfigVersion\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"7\n\x11GetVersionRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\"M\n\x12GetVersionResponse\x12\x37\n\x0e\x63onfig_version\x18\x01 \x01(\x0b\x32\x1f.centralconfig.v1.ConfigVersion\"h\n\x18RollbackToVersionRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0e\n\x0c_description\"T\n\x19RollbackToVersionResponse\x12\x37\n\x0e\x63onfig_version\x18\x01 \x01(\x0b\x32\x1f.centralconfig.v1.ConfigVersion\"R\n\x13\x44iffVersionsRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x14\n\x0c\x66rom_version\x18\x02 \x01(\x05\x12\x12\n\nto_version\x18\x03 \x01(\x05\"B\n\x14\x44iffVersionsResponse\x12*\n\x05\x64iffs\x18\x01 \x03(\x0b\x32\x1b.centralconfig.v1.FieldDiff\"x\n\tFieldDiff\x12\x12\n\nfield_path\x18\x01 \x01(\t\x12\x31\n\x0b\x63hange_type\x18\x02 \x01(\x0e\x32\x1c.centralconfig.v1.ChangeType\x12\x11\n\told_value\x18\x03 \x01(\t\x12\x11\n\tnew_value\x18\x04 \x01(\t\"h\n\x10SubscribeRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x13\n\x0b\x66ield_paths\x18\x02 \x03(\t\x12\x1a\n\rstart_version\x18\x03 \x01(\x05H\x00\x88\x01\x01\x42\x10\n\x0e_start_version\"C\n\x11SubscribeResponse\x12.\n\x06\x63hange\x18\x01 \x01(\x0b\x32\x1e.centralconfig.v1.ConfigChange\"v\n\x13\x45xportConfigRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x14\n\x07version\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x19\n\x0cspec_version\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_versionB\x0f\n\r_spec_version\",\n\x14\x45xportConfigResponse\x12\x14\n\x0cyaml_content\x18\x01 \x01(\x0c\"\x94\x01\n\x13ImportConfigRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x14\n\x0cyaml_content\x18\x02 \x01(\x0c\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12*\n\x04mode\x18\x04 \x01(\x0e\x32\x1c.centralconfig.v1.ImportModeB\x0e\n\x0c_description\"O\n\x14ImportConfigResponse\x12\x37\n\x0e\x63onfig_version\x18\x01 \x01(\x0b\x32\x1f.centralconfig.v1.ConfigVersion*s\n\nChangeType\x12\x1b\n\x17\x43HANGE_TYPE_UNSPECIFIED\x10\x00\x12\x15\n\x11\x43HANGE_TYPE_ADDED\x10\x01\x12\x17\n\x13\x43HANGE_TYPE_REMOVED\x10\x02\x12\x18\n\x14\x43HANGE_TYPE_MODIFIED\x10\x03*s\n\nImportMode\x12\x1b\n\x17IMPORT_MODE_UNSPECIFIED\x10\x00\x12\x15\n\x11IMPORT_MODE_MERGE\x10\x01\x12\x17\n\x13IMPORT_MODE_REPLACE\x10\x02\x12\x18\n\x14IMPORT_MODE_DEFAULTS\x10\x03\x32\xe1\r\n\rConfigService\x12|\n\tGetConfig\x12\".centralconfig.v1.GetConfigRequest\x1a#.centralconfig.v1.GetConfigResponse\"&\x82\xd3\xe4\x93\x02 \x12\x1e/v1/tenants/{tenant_id}/config\x12\x8d\x01\n\x08GetField\x12!.centralconfig.v1.GetFieldRequest\x1a\".centralconfig.v1.GetFieldResponse\":\x82\xd3\xe4\x93\x02\x34\x12\x32/v1/tenants/{tenant_id}/config/fields/{field_path}\x12\x88\x01\n\tGetFields\x12\".centralconfig.v1.GetFieldsRequest\x1a#.centralconfig.v1.GetFieldsResponse\"2\x82\xd3\xe4\x93\x02,\"\'/v1/tenants/{tenant_id}/config:batchGet:\x01*\x12\x90\x01\n\x08SetField\x12!.centralconfig.v1.SetFieldRequest\x1a\".centralconfig.v1.SetFieldResponse\"=\x82\xd3\xe4\x93\x02\x37\x1a\x32/v1/tenants/{tenant_id}/config/fields/{field_path}:\x01*\x12\x88\x01\n\tSetFields\x12\".centralconfig.v1.SetFieldsRequest\x1a#.centralconfig.v1.SetFieldsResponse\"2\x82\xd3\xe4\x93\x02,\"\'/v1/tenants/{tenant_id}/config:batchSet:\x01*\x12\x87\x01\n\x0cListVersions\x12%.centralconfig.v1.ListVersionsRequest\x1a&.centralconfig.v1.ListVersionsResponse\"(\x82\xd3\xe4\x93\x02\"\x12 /v1/tenants/{tenant_id}/versions\x12\x8b\x01\n\nGetVersion\x12#.centralconfig.v1.GetVersionRequest\x1a$.centralconfig.v1.GetVersionResponse\"2\x82\xd3\xe4\x93\x02,\x12*/v1/tenants/{tenant_id}/versions/{version}\x12\xa9\x01\n\x11RollbackToVersion\x12*.centralconfig.v1.RollbackToVersionRequest\x1a+.centralconfig.v1.RollbackToVersionResponse\";\x82\xd3\xe4\x93\x02\x35\"3/v1/tenants/{tenant_id}/versions/{version}:rollback\x12\xa8\x01\n\x0c\x44iffVersions\x12%.centralconfig.v1.DiffVersionsRequest\x1a&.centralconfig.v1.DiffVersionsResponse\"I\x82\xd3\xe4\x93\x02\x43\x12\x41/v1/tenants/{tenant_id}/versions/{from_version}/diff/{to_version}\x12\x88\x01\n\tSubscribe\x12\".centralconfig.v1.SubscribeRequest\x1a#.centralconfig.v1.SubscribeResponse\"0\x82\xd3\xe4\x93\x02*\x12(/v1/tenants/{tenant_id}/config:subscribe0\x01\x12\x8c\x01\n\x0c\x45xportConfig\x12%.centralconfig.v1.ExportConfigRequest\x1a&.centralconfig.v1.ExportConfigResponse\"-\x82\xd3\xe4\x93\x02\'\x12%/v1/tenants/{tenant_id}/config/export\x12\x8f\x01\n\x0cImportConfig\x12%.centralconfig.v1.ImportConfigRequest\x1a&.centralconfig.v1.ImportConfigResponse\"0\x82\xd3\xe4\x93\x02*\"%/v1/tenants/{tenant_id}/config/import:\x01*b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -49,14 +49,18 @@ _globals['_CONFIGSERVICE'].methods_by_name['GetVersion']._serialized_options = b'\202\323\344\223\002,\022*/v1/tenants/{tenant_id}/versions/{version}' _globals['_CONFIGSERVICE'].methods_by_name['RollbackToVersion']._loaded_options = None _globals['_CONFIGSERVICE'].methods_by_name['RollbackToVersion']._serialized_options = b'\202\323\344\223\0025\"3/v1/tenants/{tenant_id}/versions/{version}:rollback' + _globals['_CONFIGSERVICE'].methods_by_name['DiffVersions']._loaded_options = None + _globals['_CONFIGSERVICE'].methods_by_name['DiffVersions']._serialized_options = b'\202\323\344\223\002C\022A/v1/tenants/{tenant_id}/versions/{from_version}/diff/{to_version}' _globals['_CONFIGSERVICE'].methods_by_name['Subscribe']._loaded_options = None _globals['_CONFIGSERVICE'].methods_by_name['Subscribe']._serialized_options = b'\202\323\344\223\002*\022(/v1/tenants/{tenant_id}/config:subscribe' _globals['_CONFIGSERVICE'].methods_by_name['ExportConfig']._loaded_options = None _globals['_CONFIGSERVICE'].methods_by_name['ExportConfig']._serialized_options = b'\202\323\344\223\002\'\022%/v1/tenants/{tenant_id}/config/export' _globals['_CONFIGSERVICE'].methods_by_name['ImportConfig']._loaded_options = None _globals['_CONFIGSERVICE'].methods_by_name['ImportConfig']._serialized_options = b'\202\323\344\223\002*\"%/v1/tenants/{tenant_id}/config/import:\001*' - _globals['_IMPORTMODE']._serialized_start=2427 - _globals['_IMPORTMODE']._serialized_end=2542 + _globals['_CHANGETYPE']._serialized_start=2848 + _globals['_CHANGETYPE']._serialized_end=2963 + _globals['_IMPORTMODE']._serialized_start=2965 + _globals['_IMPORTMODE']._serialized_end=3080 _globals['_GETCONFIGREQUEST']._serialized_start=119 _globals['_GETCONFIGREQUEST']._serialized_end=220 _globals['_GETCONFIGRESPONSE']._serialized_start=222 @@ -70,39 +74,45 @@ _globals['_GETFIELDSRESPONSE']._serialized_start=596 _globals['_GETFIELDSRESPONSE']._serialized_end=662 _globals['_SETFIELDREQUEST']._serialized_start=665 - _globals['_SETFIELDREQUEST']._serialized_end=916 - _globals['_SETFIELDRESPONSE']._serialized_start=918 - _globals['_SETFIELDRESPONSE']._serialized_end=993 - _globals['_SETFIELDSREQUEST']._serialized_start=995 - _globals['_SETFIELDSREQUEST']._serialized_end=1122 - _globals['_SETFIELDSRESPONSE']._serialized_start=1124 - _globals['_SETFIELDSRESPONSE']._serialized_end=1200 - _globals['_FIELDUPDATE']._serialized_start=1203 - _globals['_FIELDUPDATE']._serialized_end=1389 - _globals['_LISTVERSIONSREQUEST']._serialized_start=1391 - _globals['_LISTVERSIONSREQUEST']._serialized_end=1470 - _globals['_LISTVERSIONSRESPONSE']._serialized_start=1472 - _globals['_LISTVERSIONSRESPONSE']._serialized_end=1570 - _globals['_GETVERSIONREQUEST']._serialized_start=1572 - _globals['_GETVERSIONREQUEST']._serialized_end=1627 - _globals['_GETVERSIONRESPONSE']._serialized_start=1629 - _globals['_GETVERSIONRESPONSE']._serialized_end=1706 - _globals['_ROLLBACKTOVERSIONREQUEST']._serialized_start=1708 - _globals['_ROLLBACKTOVERSIONREQUEST']._serialized_end=1812 - _globals['_ROLLBACKTOVERSIONRESPONSE']._serialized_start=1814 - _globals['_ROLLBACKTOVERSIONRESPONSE']._serialized_end=1898 - _globals['_SUBSCRIBEREQUEST']._serialized_start=1900 - _globals['_SUBSCRIBEREQUEST']._serialized_end=1958 - _globals['_SUBSCRIBERESPONSE']._serialized_start=1960 - _globals['_SUBSCRIBERESPONSE']._serialized_end=2027 - _globals['_EXPORTCONFIGREQUEST']._serialized_start=2029 - _globals['_EXPORTCONFIGREQUEST']._serialized_end=2147 - _globals['_EXPORTCONFIGRESPONSE']._serialized_start=2149 - _globals['_EXPORTCONFIGRESPONSE']._serialized_end=2193 - _globals['_IMPORTCONFIGREQUEST']._serialized_start=2196 - _globals['_IMPORTCONFIGREQUEST']._serialized_end=2344 - _globals['_IMPORTCONFIGRESPONSE']._serialized_start=2346 - _globals['_IMPORTCONFIGRESPONSE']._serialized_end=2425 - _globals['_CONFIGSERVICE']._serialized_start=2545 - _globals['_CONFIGSERVICE']._serialized_end=4135 + _globals['_SETFIELDREQUEST']._serialized_end=966 + _globals['_SETFIELDRESPONSE']._serialized_start=968 + _globals['_SETFIELDRESPONSE']._serialized_end=1043 + _globals['_SETFIELDSREQUEST']._serialized_start=1046 + _globals['_SETFIELDSREQUEST']._serialized_end=1223 + _globals['_SETFIELDSRESPONSE']._serialized_start=1225 + _globals['_SETFIELDSRESPONSE']._serialized_end=1301 + _globals['_FIELDUPDATE']._serialized_start=1304 + _globals['_FIELDUPDATE']._serialized_end=1490 + _globals['_LISTVERSIONSREQUEST']._serialized_start=1492 + _globals['_LISTVERSIONSREQUEST']._serialized_end=1571 + _globals['_LISTVERSIONSRESPONSE']._serialized_start=1573 + _globals['_LISTVERSIONSRESPONSE']._serialized_end=1671 + _globals['_GETVERSIONREQUEST']._serialized_start=1673 + _globals['_GETVERSIONREQUEST']._serialized_end=1728 + _globals['_GETVERSIONRESPONSE']._serialized_start=1730 + _globals['_GETVERSIONRESPONSE']._serialized_end=1807 + _globals['_ROLLBACKTOVERSIONREQUEST']._serialized_start=1809 + _globals['_ROLLBACKTOVERSIONREQUEST']._serialized_end=1913 + _globals['_ROLLBACKTOVERSIONRESPONSE']._serialized_start=1915 + _globals['_ROLLBACKTOVERSIONRESPONSE']._serialized_end=1999 + _globals['_DIFFVERSIONSREQUEST']._serialized_start=2001 + _globals['_DIFFVERSIONSREQUEST']._serialized_end=2083 + _globals['_DIFFVERSIONSRESPONSE']._serialized_start=2085 + _globals['_DIFFVERSIONSRESPONSE']._serialized_end=2151 + _globals['_FIELDDIFF']._serialized_start=2153 + _globals['_FIELDDIFF']._serialized_end=2273 + _globals['_SUBSCRIBEREQUEST']._serialized_start=2275 + _globals['_SUBSCRIBEREQUEST']._serialized_end=2379 + _globals['_SUBSCRIBERESPONSE']._serialized_start=2381 + _globals['_SUBSCRIBERESPONSE']._serialized_end=2448 + _globals['_EXPORTCONFIGREQUEST']._serialized_start=2450 + _globals['_EXPORTCONFIGREQUEST']._serialized_end=2568 + _globals['_EXPORTCONFIGRESPONSE']._serialized_start=2570 + _globals['_EXPORTCONFIGRESPONSE']._serialized_end=2614 + _globals['_IMPORTCONFIGREQUEST']._serialized_start=2617 + _globals['_IMPORTCONFIGREQUEST']._serialized_end=2765 + _globals['_IMPORTCONFIGRESPONSE']._serialized_start=2767 + _globals['_IMPORTCONFIGRESPONSE']._serialized_end=2846 + _globals['_CONFIGSERVICE']._serialized_start=3083 + _globals['_CONFIGSERVICE']._serialized_end=4844 # @@protoc_insertion_point(module_scope) diff --git a/sdk/src/opendecree/_generated/centralconfig/v1/config_service_pb2.pyi b/sdk/src/opendecree/_generated/centralconfig/v1/config_service_pb2.pyi index 7218ae7..c8facaa 100644 --- a/sdk/src/opendecree/_generated/centralconfig/v1/config_service_pb2.pyi +++ b/sdk/src/opendecree/_generated/centralconfig/v1/config_service_pb2.pyi @@ -13,13 +13,41 @@ import builtins as _builtins import sys import typing as _typing -if sys.version_info >= (3, 10): - from typing import TypeAlias as _TypeAlias +if sys.version_info >= (3, 11): + from typing import TypeAlias as _TypeAlias, Never as _Never else: - from typing_extensions import TypeAlias as _TypeAlias + from typing_extensions import TypeAlias as _TypeAlias, Never as _Never DESCRIPTOR: _descriptor.FileDescriptor +class _ChangeType: + ValueType = _typing.NewType("ValueType", _builtins.int) + V: _TypeAlias = ValueType # noqa: Y015 + +class _ChangeTypeEnumTypeWrapper(_enum_type_wrapper._EnumTypeWrapper[_ChangeType.ValueType], _builtins.type): + DESCRIPTOR: _descriptor.EnumDescriptor + CHANGE_TYPE_UNSPECIFIED: _ChangeType.ValueType # 0 + """Unspecified change type. Never emitted by the server.""" + CHANGE_TYPE_ADDED: _ChangeType.ValueType # 1 + """The field is present in to_version but absent in from_version.""" + CHANGE_TYPE_REMOVED: _ChangeType.ValueType # 2 + """The field is present in from_version but absent in to_version.""" + CHANGE_TYPE_MODIFIED: _ChangeType.ValueType # 3 + """The field is present in both versions with a different value.""" + +class ChangeType(_ChangeType, metaclass=_ChangeTypeEnumTypeWrapper): + """ChangeType categorizes how a field changed between two config versions.""" + +CHANGE_TYPE_UNSPECIFIED: ChangeType.ValueType # 0 +"""Unspecified change type. Never emitted by the server.""" +CHANGE_TYPE_ADDED: ChangeType.ValueType # 1 +"""The field is present in to_version but absent in from_version.""" +CHANGE_TYPE_REMOVED: ChangeType.ValueType # 2 +"""The field is present in from_version but absent in to_version.""" +CHANGE_TYPE_MODIFIED: ChangeType.ValueType # 3 +"""The field is present in both versions with a different value.""" +Global___ChangeType: _TypeAlias = ChangeType # noqa: Y015 + class _ImportMode: ValueType = _typing.NewType("ValueType", _builtins.int) V: _TypeAlias = ValueType # noqa: Y015 @@ -112,6 +140,7 @@ class GetConfigResponse(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["config", b"config"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___GetConfigResponse: _TypeAlias = GetConfigResponse # noqa: Y015 @@ -169,6 +198,7 @@ class GetFieldResponse(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["value", b"value"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___GetFieldResponse: _TypeAlias = GetFieldResponse # noqa: Y015 @@ -190,7 +220,9 @@ class GetFieldsRequest(_message.Message): """ @_builtins.property def field_paths(self) -> _containers.RepeatedScalarFieldContainer[_builtins.str]: - """Dot-separated field paths to retrieve.""" + """Dot-separated field paths to retrieve. Maximum 1 000 entries (configurable + via CONFIG_MAX_LIST_LEN). Exceeds returns InvalidArgument. + """ def __init__( self, @@ -224,8 +256,11 @@ class GetFieldsResponse(_message.Message): *, values: _abc.Iterable[_types_pb2.ConfigValue] | None = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["values", b"values"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___GetFieldsResponse: _TypeAlias = GetFieldsResponse # noqa: Y015 @@ -241,6 +276,7 @@ class SetFieldRequest(_message.Message): EXPECTED_CHECKSUM_FIELD_NUMBER: _builtins.int DESCRIPTION_FIELD_NUMBER: _builtins.int VALUE_DESCRIPTION_FIELD_NUMBER: _builtins.int + IDEMPOTENCY_KEY_FIELD_NUMBER: _builtins.int tenant_id: _builtins.str """Tenant ID (UUID).""" field_path: _builtins.str @@ -257,6 +293,11 @@ class SetFieldRequest(_message.Message): """Value-level description explaining what this specific value means. Retrievable via include_description in read requests. """ + idempotency_key: _builtins.str + """Idempotency key for safe retries. When set, the server deduplicates + writes with the same key within a 24-hour window. Use the SDK's + WithIdempotencyKey option to set this field and enable retry. + """ @_builtins.property def value(self) -> _types_pb2.TypedValue: """The typed value. Omit to set the field to null.""" @@ -270,15 +311,18 @@ class SetFieldRequest(_message.Message): expected_checksum: _builtins.str | None = ..., description: _builtins.str | None = ..., value_description: _builtins.str | None = ..., + idempotency_key: _builtins.str | None = ..., ) -> None: ... - _HasFieldArgType: _TypeAlias = _typing.Literal["_description", b"_description", "_expected_checksum", b"_expected_checksum", "_value_description", b"_value_description", "description", b"description", "expected_checksum", b"expected_checksum", "value", b"value", "value_description", b"value_description"] # noqa: Y015 + _HasFieldArgType: _TypeAlias = _typing.Literal["_description", b"_description", "_expected_checksum", b"_expected_checksum", "_idempotency_key", b"_idempotency_key", "_value_description", b"_value_description", "description", b"description", "expected_checksum", b"expected_checksum", "idempotency_key", b"idempotency_key", "value", b"value", "value_description", b"value_description"] # noqa: Y015 def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... - _ClearFieldArgType: _TypeAlias = _typing.Literal["_description", b"_description", "_expected_checksum", b"_expected_checksum", "_value_description", b"_value_description", "description", b"description", "expected_checksum", b"expected_checksum", "field_path", b"field_path", "tenant_id", b"tenant_id", "value", b"value", "value_description", b"value_description"] # noqa: Y015 + _ClearFieldArgType: _TypeAlias = _typing.Literal["_description", b"_description", "_expected_checksum", b"_expected_checksum", "_idempotency_key", b"_idempotency_key", "_value_description", b"_value_description", "description", b"description", "expected_checksum", b"expected_checksum", "field_path", b"field_path", "idempotency_key", b"idempotency_key", "tenant_id", b"tenant_id", "value", b"value", "value_description", b"value_description"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... _WhichOneofReturnType__description: _TypeAlias = _typing.Literal["description"] # noqa: Y015 _WhichOneofArgType__description: _TypeAlias = _typing.Literal["_description", b"_description"] # noqa: Y015 _WhichOneofReturnType__expected_checksum: _TypeAlias = _typing.Literal["expected_checksum"] # noqa: Y015 _WhichOneofArgType__expected_checksum: _TypeAlias = _typing.Literal["_expected_checksum", b"_expected_checksum"] # noqa: Y015 + _WhichOneofReturnType__idempotency_key: _TypeAlias = _typing.Literal["idempotency_key"] # noqa: Y015 + _WhichOneofArgType__idempotency_key: _TypeAlias = _typing.Literal["_idempotency_key", b"_idempotency_key"] # noqa: Y015 _WhichOneofReturnType__value_description: _TypeAlias = _typing.Literal["value_description"] # noqa: Y015 _WhichOneofArgType__value_description: _TypeAlias = _typing.Literal["_value_description", b"_value_description"] # noqa: Y015 @_typing.overload @@ -286,6 +330,8 @@ class SetFieldRequest(_message.Message): @_typing.overload def WhichOneof(self, oneof_group: _WhichOneofArgType__expected_checksum) -> _WhichOneofReturnType__expected_checksum | None: ... @_typing.overload + def WhichOneof(self, oneof_group: _WhichOneofArgType__idempotency_key) -> _WhichOneofReturnType__idempotency_key | None: ... + @_typing.overload def WhichOneof(self, oneof_group: _WhichOneofArgType__value_description) -> _WhichOneofReturnType__value_description | None: ... Global___SetFieldRequest: _TypeAlias = SetFieldRequest # noqa: Y015 @@ -308,6 +354,7 @@ class SetFieldResponse(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["config_version", b"config_version"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___SetFieldResponse: _TypeAlias = SetFieldResponse # noqa: Y015 @@ -318,15 +365,22 @@ class SetFieldsRequest(_message.Message): TENANT_ID_FIELD_NUMBER: _builtins.int UPDATES_FIELD_NUMBER: _builtins.int DESCRIPTION_FIELD_NUMBER: _builtins.int + IDEMPOTENCY_KEY_FIELD_NUMBER: _builtins.int tenant_id: _builtins.str """Tenant ID (UUID).""" description: _builtins.str """Version-level description explaining why these changes were made.""" + idempotency_key: _builtins.str + """Idempotency key for safe retries. When set, the server deduplicates + writes with the same key within a 24-hour window. Use the SDK's + WithIdempotencyKey option to set this field and enable retry. + """ @_builtins.property def updates(self) -> _containers.RepeatedCompositeFieldContainer[Global___FieldUpdate]: """Field updates to apply. All updates are applied atomically in a single config version. If any update fails validation (checksum, field lock), - no changes are committed. + no changes are committed. Maximum 1 000 entries (configurable via + CONFIG_MAX_LIST_LEN). Exceeds returns InvalidArgument. """ def __init__( @@ -335,14 +389,20 @@ class SetFieldsRequest(_message.Message): tenant_id: _builtins.str = ..., updates: _abc.Iterable[Global___FieldUpdate] | None = ..., description: _builtins.str | None = ..., + idempotency_key: _builtins.str | None = ..., ) -> None: ... - _HasFieldArgType: _TypeAlias = _typing.Literal["_description", b"_description", "description", b"description"] # noqa: Y015 + _HasFieldArgType: _TypeAlias = _typing.Literal["_description", b"_description", "_idempotency_key", b"_idempotency_key", "description", b"description", "idempotency_key", b"idempotency_key"] # noqa: Y015 def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... - _ClearFieldArgType: _TypeAlias = _typing.Literal["_description", b"_description", "description", b"description", "tenant_id", b"tenant_id", "updates", b"updates"] # noqa: Y015 + _ClearFieldArgType: _TypeAlias = _typing.Literal["_description", b"_description", "_idempotency_key", b"_idempotency_key", "description", b"description", "idempotency_key", b"idempotency_key", "tenant_id", b"tenant_id", "updates", b"updates"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... _WhichOneofReturnType__description: _TypeAlias = _typing.Literal["description"] # noqa: Y015 _WhichOneofArgType__description: _TypeAlias = _typing.Literal["_description", b"_description"] # noqa: Y015 + _WhichOneofReturnType__idempotency_key: _TypeAlias = _typing.Literal["idempotency_key"] # noqa: Y015 + _WhichOneofArgType__idempotency_key: _TypeAlias = _typing.Literal["_idempotency_key", b"_idempotency_key"] # noqa: Y015 + @_typing.overload def WhichOneof(self, oneof_group: _WhichOneofArgType__description) -> _WhichOneofReturnType__description | None: ... + @_typing.overload + def WhichOneof(self, oneof_group: _WhichOneofArgType__idempotency_key) -> _WhichOneofReturnType__idempotency_key | None: ... Global___SetFieldsRequest: _TypeAlias = SetFieldsRequest # noqa: Y015 @@ -364,6 +424,7 @@ class SetFieldsResponse(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["config_version", b"config_version"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___SetFieldsResponse: _TypeAlias = SetFieldsResponse # noqa: Y015 @@ -434,8 +495,11 @@ class ListVersionsRequest(_message.Message): page_size: _builtins.int = ..., page_token: _builtins.str = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["page_size", b"page_size", "page_token", b"page_token", "tenant_id", b"tenant_id"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___ListVersionsRequest: _TypeAlias = ListVersionsRequest # noqa: Y015 @@ -457,8 +521,11 @@ class ListVersionsResponse(_message.Message): versions: _abc.Iterable[_types_pb2.ConfigVersion] | None = ..., next_page_token: _builtins.str = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["next_page_token", b"next_page_token", "versions", b"versions"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___ListVersionsResponse: _TypeAlias = ListVersionsResponse # noqa: Y015 @@ -478,8 +545,11 @@ class GetVersionRequest(_message.Message): tenant_id: _builtins.str = ..., version: _builtins.int = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["tenant_id", b"tenant_id", "version", b"version"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___GetVersionRequest: _TypeAlias = GetVersionRequest # noqa: Y015 @@ -499,6 +569,7 @@ class GetVersionResponse(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["config_version", b"config_version"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___GetVersionResponse: _TypeAlias = GetVersionResponse # noqa: Y015 @@ -555,9 +626,96 @@ class RollbackToVersionResponse(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["config_version", b"config_version"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___RollbackToVersionResponse: _TypeAlias = RollbackToVersionResponse # noqa: Y015 +@_typing.final +class DiffVersionsRequest(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + + TENANT_ID_FIELD_NUMBER: _builtins.int + FROM_VERSION_FIELD_NUMBER: _builtins.int + TO_VERSION_FIELD_NUMBER: _builtins.int + tenant_id: _builtins.str + """Tenant ID (UUID).""" + from_version: _builtins.int + """The base version to diff from.""" + to_version: _builtins.int + """The target version to diff to.""" + def __init__( + self, + *, + tenant_id: _builtins.str = ..., + from_version: _builtins.int = ..., + to_version: _builtins.int = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["from_version", b"from_version", "tenant_id", b"tenant_id", "to_version", b"to_version"] # noqa: Y015 + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... + +Global___DiffVersionsRequest: _TypeAlias = DiffVersionsRequest # noqa: Y015 + +@_typing.final +class DiffVersionsResponse(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + + DIFFS_FIELD_NUMBER: _builtins.int + @_builtins.property + def diffs(self) -> _containers.RepeatedCompositeFieldContainer[Global___FieldDiff]: + """The fields that differ between from_version and to_version, sorted by + field path. Unchanged fields are omitted. + """ + + def __init__( + self, + *, + diffs: _abc.Iterable[Global___FieldDiff] | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["diffs", b"diffs"] # noqa: Y015 + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... + +Global___DiffVersionsResponse: _TypeAlias = DiffVersionsResponse # noqa: Y015 + +@_typing.final +class FieldDiff(_message.Message): + """FieldDiff describes a single field that differs between two config versions.""" + + DESCRIPTOR: _descriptor.Descriptor + + FIELD_PATH_FIELD_NUMBER: _builtins.int + CHANGE_TYPE_FIELD_NUMBER: _builtins.int + OLD_VALUE_FIELD_NUMBER: _builtins.int + NEW_VALUE_FIELD_NUMBER: _builtins.int + field_path: _builtins.str + """Dot-separated field path (e.g. "payments.fee").""" + change_type: Global___ChangeType.ValueType + """How the field changed.""" + old_value: _builtins.str + """The value at from_version. Empty when change_type is CHANGE_TYPE_ADDED.""" + new_value: _builtins.str + """The value at to_version. Empty when change_type is CHANGE_TYPE_REMOVED.""" + def __init__( + self, + *, + field_path: _builtins.str = ..., + change_type: Global___ChangeType.ValueType = ..., + old_value: _builtins.str = ..., + new_value: _builtins.str = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["change_type", b"change_type", "field_path", b"field_path", "new_value", b"new_value", "old_value", b"old_value"] # noqa: Y015 + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... + +Global___FieldDiff: _TypeAlias = FieldDiff # noqa: Y015 + @_typing.final class SubscribeRequest(_message.Message): """--- Subscription ---""" @@ -566,12 +724,21 @@ class SubscribeRequest(_message.Message): TENANT_ID_FIELD_NUMBER: _builtins.int FIELD_PATHS_FIELD_NUMBER: _builtins.int + START_VERSION_FIELD_NUMBER: _builtins.int tenant_id: _builtins.str """Tenant ID (UUID) to subscribe to.""" + start_version: _builtins.int + """Resume the stream from this config version (inclusive). When set, the + server replays all changes at versions >= start_version before streaming + live events. Use snapshot_version + 1 to close the gap between a + GetConfig snapshot and the live subscription. + """ @_builtins.property def field_paths(self) -> _containers.RepeatedScalarFieldContainer[_builtins.str]: """Field paths to filter on. If empty, receives changes for all fields. - Changes to fields not in this list are silently dropped. + Changes to fields not in this list are silently dropped. Maximum 1 000 + entries (configurable via CONFIG_MAX_LIST_LEN). Exceeds returns + InvalidArgument. """ def __init__( @@ -579,9 +746,15 @@ class SubscribeRequest(_message.Message): *, tenant_id: _builtins.str = ..., field_paths: _abc.Iterable[_builtins.str] | None = ..., + start_version: _builtins.int | None = ..., ) -> None: ... - _ClearFieldArgType: _TypeAlias = _typing.Literal["field_paths", b"field_paths", "tenant_id", b"tenant_id"] # noqa: Y015 + _HasFieldArgType: _TypeAlias = _typing.Literal["_start_version", b"_start_version", "start_version", b"start_version"] # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["_start_version", b"_start_version", "field_paths", b"field_paths", "start_version", b"start_version", "tenant_id", b"tenant_id"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType__start_version: _TypeAlias = _typing.Literal["start_version"] # noqa: Y015 + _WhichOneofArgType__start_version: _TypeAlias = _typing.Literal["_start_version", b"_start_version"] # noqa: Y015 + def WhichOneof(self, oneof_group: _WhichOneofArgType__start_version) -> _WhichOneofReturnType__start_version | None: ... Global___SubscribeRequest: _TypeAlias = SubscribeRequest # noqa: Y015 @@ -603,6 +776,7 @@ class SubscribeResponse(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["change", b"change"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___SubscribeResponse: _TypeAlias = SubscribeResponse # noqa: Y015 @@ -658,8 +832,11 @@ class ExportConfigResponse(_message.Message): *, yaml_content: _builtins.bytes = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["yaml_content", b"yaml_content"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___ExportConfigResponse: _TypeAlias = ExportConfigResponse # noqa: Y015 @@ -715,5 +892,6 @@ class ImportConfigResponse(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["config_version", b"config_version"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___ImportConfigResponse: _TypeAlias = ImportConfigResponse # noqa: Y015 diff --git a/sdk/src/opendecree/_generated/centralconfig/v1/config_service_pb2_grpc.py b/sdk/src/opendecree/_generated/centralconfig/v1/config_service_pb2_grpc.py index cd9f2a9..8165986 100644 --- a/sdk/src/opendecree/_generated/centralconfig/v1/config_service_pb2_grpc.py +++ b/sdk/src/opendecree/_generated/centralconfig/v1/config_service_pb2_grpc.py @@ -5,7 +5,7 @@ from opendecree._generated.centralconfig.v1 import config_service_pb2 as centralconfig_dot_v1_dot_config__service__pb2 -GRPC_GENERATED_VERSION = '1.80.0' +GRPC_GENERATED_VERSION = '1.81.0' GRPC_VERSION = grpc.__version__ _version_not_supported = False @@ -25,7 +25,7 @@ ) -class ConfigServiceStub(object): +class ConfigServiceStub: """ConfigService manages configuration values, versions, and real-time subscriptions. Configuration is stored per-tenant using delta versioning: each write creates a @@ -85,6 +85,11 @@ def __init__(self, channel): request_serializer=centralconfig_dot_v1_dot_config__service__pb2.RollbackToVersionRequest.SerializeToString, response_deserializer=centralconfig_dot_v1_dot_config__service__pb2.RollbackToVersionResponse.FromString, _registered_method=True) + self.DiffVersions = channel.unary_unary( + '/centralconfig.v1.ConfigService/DiffVersions', + request_serializer=centralconfig_dot_v1_dot_config__service__pb2.DiffVersionsRequest.SerializeToString, + response_deserializer=centralconfig_dot_v1_dot_config__service__pb2.DiffVersionsResponse.FromString, + _registered_method=True) self.Subscribe = channel.unary_stream( '/centralconfig.v1.ConfigService/Subscribe', request_serializer=centralconfig_dot_v1_dot_config__service__pb2.SubscribeRequest.SerializeToString, @@ -102,7 +107,7 @@ def __init__(self, channel): _registered_method=True) -class ConfigServiceServicer(object): +class ConfigServiceServicer: """ConfigService manages configuration values, versions, and real-time subscriptions. Configuration is stored per-tenant using delta versioning: each write creates a @@ -181,12 +186,31 @@ def RollbackToVersion(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def DiffVersions(self, request, context): + """DiffVersions compares the full resolved config at two versions and returns + the fields that differ. Unchanged fields are omitted. Results are sorted by + field path for deterministic output. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def Subscribe(self, request, context): """Real-time subscriptions via server-streaming. Subscribe opens a server-streaming connection that pushes ConfigChange events - whenever the tenant's configuration is modified. The stream remains open until - the client disconnects or the server shuts down. + whenever the tenant's configuration is modified. + + Stream lifetime: + - Client disconnect: stream ends immediately. + - Server closes with OK status: the server-side pub/sub backend restarted + (e.g. Redis reconnect). Clients MUST reconnect with exponential backoff; + an OK close does NOT indicate the subscription is permanently gone. + - Server closes with error status: treat as a transient failure and reconnect + with backoff. + + Use the configwatcher package for a high-level client that handles reconnection + automatically. """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') @@ -251,6 +275,11 @@ def add_ConfigServiceServicer_to_server(servicer, server): request_deserializer=centralconfig_dot_v1_dot_config__service__pb2.RollbackToVersionRequest.FromString, response_serializer=centralconfig_dot_v1_dot_config__service__pb2.RollbackToVersionResponse.SerializeToString, ), + 'DiffVersions': grpc.unary_unary_rpc_method_handler( + servicer.DiffVersions, + request_deserializer=centralconfig_dot_v1_dot_config__service__pb2.DiffVersionsRequest.FromString, + response_serializer=centralconfig_dot_v1_dot_config__service__pb2.DiffVersionsResponse.SerializeToString, + ), 'Subscribe': grpc.unary_stream_rpc_method_handler( servicer.Subscribe, request_deserializer=centralconfig_dot_v1_dot_config__service__pb2.SubscribeRequest.FromString, @@ -274,7 +303,7 @@ def add_ConfigServiceServicer_to_server(servicer, server): # This class is part of an EXPERIMENTAL API. -class ConfigService(object): +class ConfigService: """ConfigService manages configuration values, versions, and real-time subscriptions. Configuration is stored per-tenant using delta versioning: each write creates a @@ -504,6 +533,33 @@ def RollbackToVersion(request, metadata, _registered_method=True) + @staticmethod + def DiffVersions(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/centralconfig.v1.ConfigService/DiffVersions', + centralconfig_dot_v1_dot_config__service__pb2.DiffVersionsRequest.SerializeToString, + centralconfig_dot_v1_dot_config__service__pb2.DiffVersionsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + @staticmethod def Subscribe(request, target, diff --git a/sdk/src/opendecree/_generated/centralconfig/v1/config_service_pb2_grpc.pyi b/sdk/src/opendecree/_generated/centralconfig/v1/config_service_pb2_grpc.pyi index f479c77..8259563 100644 --- a/sdk/src/opendecree/_generated/centralconfig/v1/config_service_pb2_grpc.pyi +++ b/sdk/src/opendecree/_generated/centralconfig/v1/config_service_pb2_grpc.pyi @@ -73,12 +73,27 @@ class ConfigServiceStub: This does not delete intermediate versions — it creates a new version that copies the target's values. """ + DiffVersions: _grpc.UnaryUnaryMultiCallable[_config_service_pb2.DiffVersionsRequest, _config_service_pb2.DiffVersionsResponse] + """DiffVersions compares the full resolved config at two versions and returns + the fields that differ. Unchanged fields are omitted. Results are sorted by + field path for deterministic output. + """ Subscribe: _grpc.UnaryStreamMultiCallable[_config_service_pb2.SubscribeRequest, _config_service_pb2.SubscribeResponse] """Real-time subscriptions via server-streaming. Subscribe opens a server-streaming connection that pushes ConfigChange events - whenever the tenant's configuration is modified. The stream remains open until - the client disconnects or the server shuts down. + whenever the tenant's configuration is modified. + + Stream lifetime: + - Client disconnect: stream ends immediately. + - Server closes with OK status: the server-side pub/sub backend restarted + (e.g. Redis reconnect). Clients MUST reconnect with exponential backoff; + an OK close does NOT indicate the subscription is permanently gone. + - Server closes with error status: treat as a transient failure and reconnect + with backoff. + + Use the configwatcher package for a high-level client that handles reconnection + automatically. """ ExportConfig: _grpc.UnaryUnaryMultiCallable[_config_service_pb2.ExportConfigRequest, _config_service_pb2.ExportConfigResponse] """Import/export. @@ -133,12 +148,27 @@ class ConfigServiceAsyncStub(ConfigServiceStub): This does not delete intermediate versions — it creates a new version that copies the target's values. """ + DiffVersions: _aio.UnaryUnaryMultiCallable[_config_service_pb2.DiffVersionsRequest, _config_service_pb2.DiffVersionsResponse] # type: ignore[assignment] + """DiffVersions compares the full resolved config at two versions and returns + the fields that differ. Unchanged fields are omitted. Results are sorted by + field path for deterministic output. + """ Subscribe: _aio.UnaryStreamMultiCallable[_config_service_pb2.SubscribeRequest, _config_service_pb2.SubscribeResponse] # type: ignore[assignment] """Real-time subscriptions via server-streaming. Subscribe opens a server-streaming connection that pushes ConfigChange events - whenever the tenant's configuration is modified. The stream remains open until - the client disconnects or the server shuts down. + whenever the tenant's configuration is modified. + + Stream lifetime: + - Client disconnect: stream ends immediately. + - Server closes with OK status: the server-side pub/sub backend restarted + (e.g. Redis reconnect). Clients MUST reconnect with exponential backoff; + an OK close does NOT indicate the subscription is permanently gone. + - Server closes with error status: treat as a transient failure and reconnect + with backoff. + + Use the configwatcher package for a high-level client that handles reconnection + automatically. """ ExportConfig: _aio.UnaryUnaryMultiCallable[_config_service_pb2.ExportConfigRequest, _config_service_pb2.ExportConfigResponse] # type: ignore[assignment] """Import/export. @@ -239,6 +269,17 @@ class ConfigServiceServicer(metaclass=_abc_1.ABCMeta): copies the target's values. """ + @_abc_1.abstractmethod + def DiffVersions( + self, + request: _config_service_pb2.DiffVersionsRequest, + context: _ServicerContext, + ) -> _typing.Union[_config_service_pb2.DiffVersionsResponse, _abc.Awaitable[_config_service_pb2.DiffVersionsResponse]]: + """DiffVersions compares the full resolved config at two versions and returns + the fields that differ. Unchanged fields are omitted. Results are sorted by + field path for deterministic output. + """ + @_abc_1.abstractmethod def Subscribe( self, @@ -248,8 +289,18 @@ class ConfigServiceServicer(metaclass=_abc_1.ABCMeta): """Real-time subscriptions via server-streaming. Subscribe opens a server-streaming connection that pushes ConfigChange events - whenever the tenant's configuration is modified. The stream remains open until - the client disconnects or the server shuts down. + whenever the tenant's configuration is modified. + + Stream lifetime: + - Client disconnect: stream ends immediately. + - Server closes with OK status: the server-side pub/sub backend restarted + (e.g. Redis reconnect). Clients MUST reconnect with exponential backoff; + an OK close does NOT indicate the subscription is permanently gone. + - Server closes with error status: treat as a transient failure and reconnect + with backoff. + + Use the configwatcher package for a high-level client that handles reconnection + automatically. """ @_abc_1.abstractmethod diff --git a/sdk/src/opendecree/_generated/centralconfig/v1/schema_service_pb2.py b/sdk/src/opendecree/_generated/centralconfig/v1/schema_service_pb2.py index 1983148..9b4c92b 100644 --- a/sdk/src/opendecree/_generated/centralconfig/v1/schema_service_pb2.py +++ b/sdk/src/opendecree/_generated/centralconfig/v1/schema_service_pb2.py @@ -2,7 +2,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE # source: centralconfig/v1/schema_service.proto -# Protobuf Python Version: 6.31.1 +# Protobuf Python Version: 6.33.5 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -12,8 +12,8 @@ _runtime_version.ValidateProtobufRuntimeVersion( _runtime_version.Domain.PUBLIC, 6, - 31, - 1, + 33, + 5, '', 'centralconfig/v1/schema_service.proto' ) @@ -26,7 +26,7 @@ from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%centralconfig/v1/schema_service.proto\x12\x10\x63\x65ntralconfig.v1\x1a\x1c\x63\x65ntralconfig/v1/types.proto\x1a\x1cgoogle/api/annotations.proto\"|\n\x13\x43reateSchemaRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12-\n\x06\x66ields\x18\x03 \x03(\x0b\x32\x1d.centralconfig.v1.SchemaFieldB\x0e\n\x0c_description\"@\n\x14\x43reateSchemaResponse\x12(\n\x06schema\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Schema\"@\n\x10GetSchemaRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x14\n\x07version\x18\x02 \x01(\x05H\x00\x88\x01\x01\x42\n\n\x08_version\"=\n\x11GetSchemaResponse\x12(\n\x06schema\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Schema\"e\n\x12ListSchemasRequest\x12\x18\n\x0bname_filter\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\tB\x0e\n\x0c_name_filter\"Y\n\x13ListSchemasResponse\x12)\n\x07schemas\x18\x01 \x03(\x0b\x32\x18.centralconfig.v1.Schema\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"\xa1\x01\n\x13UpdateSchemaRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12 \n\x13version_description\x18\x02 \x01(\tH\x00\x88\x01\x01\x12-\n\x06\x66ields\x18\x03 \x03(\x0b\x32\x1d.centralconfig.v1.SchemaField\x12\x15\n\rremove_fields\x18\x04 \x03(\tB\x16\n\x14_version_description\"@\n\x14UpdateSchemaResponse\x12(\n\x06schema\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Schema\"!\n\x13\x44\x65leteSchemaRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\x16\n\x14\x44\x65leteSchemaResponse\"3\n\x14PublishSchemaRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\"A\n\x15PublishSchemaResponse\x12(\n\x06schema\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Schema\"N\n\x13\x43reateTenantRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tschema_id\x18\x02 \x01(\t\x12\x16\n\x0eschema_version\x18\x03 \x01(\x05\"@\n\x14\x43reateTenantResponse\x12(\n\x06tenant\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Tenant\"\x1e\n\x10GetTenantRequest\x12\n\n\x02id\x18\x01 \x01(\t\"=\n\x11GetTenantResponse\x12(\n\x06tenant\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Tenant\"a\n\x12ListTenantsRequest\x12\x16\n\tschema_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\tB\x0c\n\n_schema_id\"Y\n\x13ListTenantsResponse\x12)\n\x07tenants\x18\x01 \x03(\x0b\x32\x18.centralconfig.v1.Tenant\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"m\n\x13UpdateTenantRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\x04name\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1b\n\x0eschema_version\x18\x03 \x01(\x05H\x01\x88\x01\x01\x42\x07\n\x05_nameB\x11\n\x0f_schema_version\"@\n\x14UpdateTenantResponse\x12(\n\x06tenant\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Tenant\"!\n\x13\x44\x65leteTenantRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\x16\n\x14\x44\x65leteTenantResponse\"P\n\x10LockFieldRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x12\n\nfield_path\x18\x02 \x01(\t\x12\x15\n\rlocked_values\x18\x03 \x03(\t\"\x13\n\x11LockFieldResponse\";\n\x12UnlockFieldRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x12\n\nfield_path\x18\x02 \x01(\t\"\x15\n\x13UnlockFieldResponse\"*\n\x15ListFieldLocksRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\"D\n\x16ListFieldLocksResponse\x12*\n\x05locks\x18\x01 \x03(\x0b\x32\x1b.centralconfig.v1.FieldLock\"o\n\x13\x45xportSchemaRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x14\n\x07version\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x19\n\x0cspec_version\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_versionB\x0f\n\r_spec_version\",\n\x14\x45xportSchemaResponse\x12\x14\n\x0cyaml_content\x18\x01 \x01(\x0c\"A\n\x13ImportSchemaRequest\x12\x14\n\x0cyaml_content\x18\x01 \x01(\x0c\x12\x14\n\x0c\x61uto_publish\x18\x02 \x01(\x08\"@\n\x14ImportSchemaResponse\x12(\n\x06schema\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Schema2\xcd\x0f\n\rSchemaService\x12u\n\x0c\x43reateSchema\x12%.centralconfig.v1.CreateSchemaRequest\x1a&.centralconfig.v1.CreateSchemaResponse\"\x16\x82\xd3\xe4\x93\x02\x10\"\x0b/v1/schemas:\x01*\x12n\n\tGetSchema\x12\".centralconfig.v1.GetSchemaRequest\x1a#.centralconfig.v1.GetSchemaResponse\"\x18\x82\xd3\xe4\x93\x02\x12\x12\x10/v1/schemas/{id}\x12o\n\x0bListSchemas\x12$.centralconfig.v1.ListSchemasRequest\x1a%.centralconfig.v1.ListSchemasResponse\"\x13\x82\xd3\xe4\x93\x02\r\x12\x0b/v1/schemas\x12z\n\x0cUpdateSchema\x12%.centralconfig.v1.UpdateSchemaRequest\x1a&.centralconfig.v1.UpdateSchemaResponse\"\x1b\x82\xd3\xe4\x93\x02\x15\x32\x10/v1/schemas/{id}:\x01*\x12w\n\x0c\x44\x65leteSchema\x12%.centralconfig.v1.DeleteSchemaRequest\x1a&.centralconfig.v1.DeleteSchemaResponse\"\x18\x82\xd3\xe4\x93\x02\x12*\x10/v1/schemas/{id}\x12\x85\x01\n\rPublishSchema\x12&.centralconfig.v1.PublishSchemaRequest\x1a\'.centralconfig.v1.PublishSchemaResponse\"#\x82\xd3\xe4\x93\x02\x1d\"\x18/v1/schemas/{id}/publish:\x01*\x12u\n\x0c\x43reateTenant\x12%.centralconfig.v1.CreateTenantRequest\x1a&.centralconfig.v1.CreateTenantResponse\"\x16\x82\xd3\xe4\x93\x02\x10\"\x0b/v1/tenants:\x01*\x12n\n\tGetTenant\x12\".centralconfig.v1.GetTenantRequest\x1a#.centralconfig.v1.GetTenantResponse\"\x18\x82\xd3\xe4\x93\x02\x12\x12\x10/v1/tenants/{id}\x12o\n\x0bListTenants\x12$.centralconfig.v1.ListTenantsRequest\x1a%.centralconfig.v1.ListTenantsResponse\"\x13\x82\xd3\xe4\x93\x02\r\x12\x0b/v1/tenants\x12z\n\x0cUpdateTenant\x12%.centralconfig.v1.UpdateTenantRequest\x1a&.centralconfig.v1.UpdateTenantResponse\"\x1b\x82\xd3\xe4\x93\x02\x15\x32\x10/v1/tenants/{id}:\x01*\x12w\n\x0c\x44\x65leteTenant\x12%.centralconfig.v1.DeleteTenantRequest\x1a&.centralconfig.v1.DeleteTenantResponse\"\x18\x82\xd3\xe4\x93\x02\x12*\x10/v1/tenants/{id}\x12~\n\tLockField\x12\".centralconfig.v1.LockFieldRequest\x1a#.centralconfig.v1.LockFieldResponse\"(\x82\xd3\xe4\x93\x02\"\"\x1d/v1/tenants/{tenant_id}/locks:\x01*\x12\x8e\x01\n\x0bUnlockField\x12$.centralconfig.v1.UnlockFieldRequest\x1a%.centralconfig.v1.UnlockFieldResponse\"2\x82\xd3\xe4\x93\x02,**/v1/tenants/{tenant_id}/locks/{field_path}\x12\x8a\x01\n\x0eListFieldLocks\x12\'.centralconfig.v1.ListFieldLocksRequest\x1a(.centralconfig.v1.ListFieldLocksResponse\"%\x82\xd3\xe4\x93\x02\x1f\x12\x1d/v1/tenants/{tenant_id}/locks\x12~\n\x0c\x45xportSchema\x12%.centralconfig.v1.ExportSchemaRequest\x1a&.centralconfig.v1.ExportSchemaResponse\"\x1f\x82\xd3\xe4\x93\x02\x19\x12\x17/v1/schemas/{id}/export\x12|\n\x0cImportSchema\x12%.centralconfig.v1.ImportSchemaRequest\x1a&.centralconfig.v1.ImportSchemaResponse\"\x1d\x82\xd3\xe4\x93\x02\x17\"\x12/v1/schemas/import:\x01*b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%centralconfig/v1/schema_service.proto\x12\x10\x63\x65ntralconfig.v1\x1a\x1c\x63\x65ntralconfig/v1/types.proto\x1a\x1cgoogle/api/annotations.proto\"|\n\x13\x43reateSchemaRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12-\n\x06\x66ields\x18\x03 \x03(\x0b\x32\x1d.centralconfig.v1.SchemaFieldB\x0e\n\x0c_description\"@\n\x14\x43reateSchemaResponse\x12(\n\x06schema\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Schema\"@\n\x10GetSchemaRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x14\n\x07version\x18\x02 \x01(\x05H\x00\x88\x01\x01\x42\n\n\x08_version\"=\n\x11GetSchemaResponse\x12(\n\x06schema\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Schema\"e\n\x12ListSchemasRequest\x12\x18\n\x0bname_filter\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\tB\x0e\n\x0c_name_filter\"Y\n\x13ListSchemasResponse\x12)\n\x07schemas\x18\x01 \x03(\x0b\x32\x18.centralconfig.v1.Schema\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"\xa1\x01\n\x13UpdateSchemaRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12 \n\x13version_description\x18\x02 \x01(\tH\x00\x88\x01\x01\x12-\n\x06\x66ields\x18\x03 \x03(\x0b\x32\x1d.centralconfig.v1.SchemaField\x12\x15\n\rremove_fields\x18\x04 \x03(\tB\x16\n\x14_version_description\"@\n\x14UpdateSchemaResponse\x12(\n\x06schema\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Schema\"!\n\x13\x44\x65leteSchemaRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\x16\n\x14\x44\x65leteSchemaResponse\"3\n\x14PublishSchemaRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\"A\n\x15PublishSchemaResponse\x12(\n\x06schema\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Schema\"N\n\x13\x43reateTenantRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tschema_id\x18\x02 \x01(\t\x12\x16\n\x0eschema_version\x18\x03 \x01(\x05\"@\n\x14\x43reateTenantResponse\x12(\n\x06tenant\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Tenant\"\x1e\n\x10GetTenantRequest\x12\n\n\x02id\x18\x01 \x01(\t\"=\n\x11GetTenantResponse\x12(\n\x06tenant\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Tenant\"a\n\x12ListTenantsRequest\x12\x16\n\tschema_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\tB\x0c\n\n_schema_id\"Y\n\x13ListTenantsResponse\x12)\n\x07tenants\x18\x01 \x03(\x0b\x32\x18.centralconfig.v1.Tenant\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"m\n\x13UpdateTenantRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\x04name\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1b\n\x0eschema_version\x18\x03 \x01(\x05H\x01\x88\x01\x01\x42\x07\n\x05_nameB\x11\n\x0f_schema_version\"@\n\x14UpdateTenantResponse\x12(\n\x06tenant\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Tenant\"!\n\x13\x44\x65leteTenantRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\x16\n\x14\x44\x65leteTenantResponse\"P\n\x10LockFieldRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x12\n\nfield_path\x18\x02 \x01(\t\x12\x15\n\rlocked_values\x18\x03 \x03(\t\"\x13\n\x11LockFieldResponse\";\n\x12UnlockFieldRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x12\n\nfield_path\x18\x02 \x01(\t\"\x15\n\x13UnlockFieldResponse\"Q\n\x15ListFieldLocksRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\"]\n\x16ListFieldLocksResponse\x12*\n\x05locks\x18\x01 \x03(\x0b\x32\x1b.centralconfig.v1.FieldLock\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"o\n\x13\x45xportSchemaRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x14\n\x07version\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x19\n\x0cspec_version\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_versionB\x0f\n\r_spec_version\",\n\x14\x45xportSchemaResponse\x12\x14\n\x0cyaml_content\x18\x01 \x01(\x0c\"A\n\x13ImportSchemaRequest\x12\x14\n\x0cyaml_content\x18\x01 \x01(\x0c\x12\x14\n\x0c\x61uto_publish\x18\x02 \x01(\x08\"@\n\x14ImportSchemaResponse\x12(\n\x06schema\x18\x01 \x01(\x0b\x32\x18.centralconfig.v1.Schema2\xcd\x0f\n\rSchemaService\x12u\n\x0c\x43reateSchema\x12%.centralconfig.v1.CreateSchemaRequest\x1a&.centralconfig.v1.CreateSchemaResponse\"\x16\x82\xd3\xe4\x93\x02\x10\"\x0b/v1/schemas:\x01*\x12n\n\tGetSchema\x12\".centralconfig.v1.GetSchemaRequest\x1a#.centralconfig.v1.GetSchemaResponse\"\x18\x82\xd3\xe4\x93\x02\x12\x12\x10/v1/schemas/{id}\x12o\n\x0bListSchemas\x12$.centralconfig.v1.ListSchemasRequest\x1a%.centralconfig.v1.ListSchemasResponse\"\x13\x82\xd3\xe4\x93\x02\r\x12\x0b/v1/schemas\x12z\n\x0cUpdateSchema\x12%.centralconfig.v1.UpdateSchemaRequest\x1a&.centralconfig.v1.UpdateSchemaResponse\"\x1b\x82\xd3\xe4\x93\x02\x15\x32\x10/v1/schemas/{id}:\x01*\x12w\n\x0c\x44\x65leteSchema\x12%.centralconfig.v1.DeleteSchemaRequest\x1a&.centralconfig.v1.DeleteSchemaResponse\"\x18\x82\xd3\xe4\x93\x02\x12*\x10/v1/schemas/{id}\x12\x85\x01\n\rPublishSchema\x12&.centralconfig.v1.PublishSchemaRequest\x1a\'.centralconfig.v1.PublishSchemaResponse\"#\x82\xd3\xe4\x93\x02\x1d\"\x18/v1/schemas/{id}/publish:\x01*\x12u\n\x0c\x43reateTenant\x12%.centralconfig.v1.CreateTenantRequest\x1a&.centralconfig.v1.CreateTenantResponse\"\x16\x82\xd3\xe4\x93\x02\x10\"\x0b/v1/tenants:\x01*\x12n\n\tGetTenant\x12\".centralconfig.v1.GetTenantRequest\x1a#.centralconfig.v1.GetTenantResponse\"\x18\x82\xd3\xe4\x93\x02\x12\x12\x10/v1/tenants/{id}\x12o\n\x0bListTenants\x12$.centralconfig.v1.ListTenantsRequest\x1a%.centralconfig.v1.ListTenantsResponse\"\x13\x82\xd3\xe4\x93\x02\r\x12\x0b/v1/tenants\x12z\n\x0cUpdateTenant\x12%.centralconfig.v1.UpdateTenantRequest\x1a&.centralconfig.v1.UpdateTenantResponse\"\x1b\x82\xd3\xe4\x93\x02\x15\x32\x10/v1/tenants/{id}:\x01*\x12w\n\x0c\x44\x65leteTenant\x12%.centralconfig.v1.DeleteTenantRequest\x1a&.centralconfig.v1.DeleteTenantResponse\"\x18\x82\xd3\xe4\x93\x02\x12*\x10/v1/tenants/{id}\x12~\n\tLockField\x12\".centralconfig.v1.LockFieldRequest\x1a#.centralconfig.v1.LockFieldResponse\"(\x82\xd3\xe4\x93\x02\"\"\x1d/v1/tenants/{tenant_id}/locks:\x01*\x12\x8e\x01\n\x0bUnlockField\x12$.centralconfig.v1.UnlockFieldRequest\x1a%.centralconfig.v1.UnlockFieldResponse\"2\x82\xd3\xe4\x93\x02,**/v1/tenants/{tenant_id}/locks/{field_path}\x12\x8a\x01\n\x0eListFieldLocks\x12\'.centralconfig.v1.ListFieldLocksRequest\x1a(.centralconfig.v1.ListFieldLocksResponse\"%\x82\xd3\xe4\x93\x02\x1f\x12\x1d/v1/tenants/{tenant_id}/locks\x12~\n\x0c\x45xportSchema\x12%.centralconfig.v1.ExportSchemaRequest\x1a&.centralconfig.v1.ExportSchemaResponse\"\x1f\x82\xd3\xe4\x93\x02\x19\x12\x17/v1/schemas/{id}/export\x12|\n\x0cImportSchema\x12%.centralconfig.v1.ImportSchemaRequest\x1a&.centralconfig.v1.ImportSchemaResponse\"\x1d\x82\xd3\xe4\x93\x02\x17\"\x12/v1/schemas/import:\x01*b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -118,17 +118,17 @@ _globals['_UNLOCKFIELDRESPONSE']._serialized_start=1874 _globals['_UNLOCKFIELDRESPONSE']._serialized_end=1895 _globals['_LISTFIELDLOCKSREQUEST']._serialized_start=1897 - _globals['_LISTFIELDLOCKSREQUEST']._serialized_end=1939 - _globals['_LISTFIELDLOCKSRESPONSE']._serialized_start=1941 - _globals['_LISTFIELDLOCKSRESPONSE']._serialized_end=2009 - _globals['_EXPORTSCHEMAREQUEST']._serialized_start=2011 - _globals['_EXPORTSCHEMAREQUEST']._serialized_end=2122 - _globals['_EXPORTSCHEMARESPONSE']._serialized_start=2124 - _globals['_EXPORTSCHEMARESPONSE']._serialized_end=2168 - _globals['_IMPORTSCHEMAREQUEST']._serialized_start=2170 - _globals['_IMPORTSCHEMAREQUEST']._serialized_end=2235 - _globals['_IMPORTSCHEMARESPONSE']._serialized_start=2237 - _globals['_IMPORTSCHEMARESPONSE']._serialized_end=2301 - _globals['_SCHEMASERVICE']._serialized_start=2304 - _globals['_SCHEMASERVICE']._serialized_end=4301 + _globals['_LISTFIELDLOCKSREQUEST']._serialized_end=1978 + _globals['_LISTFIELDLOCKSRESPONSE']._serialized_start=1980 + _globals['_LISTFIELDLOCKSRESPONSE']._serialized_end=2073 + _globals['_EXPORTSCHEMAREQUEST']._serialized_start=2075 + _globals['_EXPORTSCHEMAREQUEST']._serialized_end=2186 + _globals['_EXPORTSCHEMARESPONSE']._serialized_start=2188 + _globals['_EXPORTSCHEMARESPONSE']._serialized_end=2232 + _globals['_IMPORTSCHEMAREQUEST']._serialized_start=2234 + _globals['_IMPORTSCHEMAREQUEST']._serialized_end=2299 + _globals['_IMPORTSCHEMARESPONSE']._serialized_start=2301 + _globals['_IMPORTSCHEMARESPONSE']._serialized_end=2365 + _globals['_SCHEMASERVICE']._serialized_start=2368 + _globals['_SCHEMASERVICE']._serialized_end=4365 # @@protoc_insertion_point(module_scope) diff --git a/sdk/src/opendecree/_generated/centralconfig/v1/schema_service_pb2.pyi b/sdk/src/opendecree/_generated/centralconfig/v1/schema_service_pb2.pyi index e18294d..44553a7 100644 --- a/sdk/src/opendecree/_generated/centralconfig/v1/schema_service_pb2.pyi +++ b/sdk/src/opendecree/_generated/centralconfig/v1/schema_service_pb2.pyi @@ -12,10 +12,10 @@ import builtins as _builtins import sys import typing as _typing -if sys.version_info >= (3, 10): - from typing import TypeAlias as _TypeAlias +if sys.version_info >= (3, 11): + from typing import TypeAlias as _TypeAlias, Never as _Never else: - from typing_extensions import TypeAlias as _TypeAlias + from typing_extensions import TypeAlias as _TypeAlias, Never as _Never DESCRIPTOR: _descriptor.FileDescriptor @@ -73,6 +73,7 @@ class CreateSchemaResponse(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["schema", b"schema"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___CreateSchemaResponse: _TypeAlias = CreateSchemaResponse # noqa: Y015 @@ -118,6 +119,7 @@ class GetSchemaResponse(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["schema", b"schema"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___GetSchemaResponse: _TypeAlias = GetSchemaResponse # noqa: Y015 @@ -169,8 +171,11 @@ class ListSchemasResponse(_message.Message): schemas: _abc.Iterable[_types_pb2.Schema] | None = ..., next_page_token: _builtins.str = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["next_page_token", b"next_page_token", "schemas", b"schemas"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___ListSchemasResponse: _TypeAlias = ListSchemasResponse # noqa: Y015 @@ -194,7 +199,10 @@ class UpdateSchemaRequest(_message.Message): @_builtins.property def remove_fields(self) -> _containers.RepeatedScalarFieldContainer[_builtins.str]: - """Dot-separated paths of fields to remove from the new version.""" + """Dot-separated paths of fields to remove from the new version. Maximum + 1 000 entries (configurable via SCHEMA_MAX_REMOVE_FIELDS). Exceeds + returns InvalidArgument. + """ def __init__( self, @@ -232,6 +240,7 @@ class UpdateSchemaResponse(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["schema", b"schema"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___UpdateSchemaResponse: _TypeAlias = UpdateSchemaResponse # noqa: Y015 @@ -247,8 +256,11 @@ class DeleteSchemaRequest(_message.Message): *, id: _builtins.str = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["id", b"id"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___DeleteSchemaRequest: _TypeAlias = DeleteSchemaRequest # noqa: Y015 @@ -259,6 +271,11 @@ class DeleteSchemaResponse(_message.Message): def __init__( self, ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _Never # noqa: Y015 + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___DeleteSchemaResponse: _TypeAlias = DeleteSchemaResponse # noqa: Y015 @@ -280,8 +297,11 @@ class PublishSchemaRequest(_message.Message): id: _builtins.str = ..., version: _builtins.int = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["id", b"id", "version", b"version"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___PublishSchemaRequest: _TypeAlias = PublishSchemaRequest # noqa: Y015 @@ -303,6 +323,7 @@ class PublishSchemaResponse(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["schema", b"schema"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___PublishSchemaResponse: _TypeAlias = PublishSchemaResponse # noqa: Y015 @@ -330,8 +351,11 @@ class CreateTenantRequest(_message.Message): schema_id: _builtins.str = ..., schema_version: _builtins.int = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["name", b"name", "schema_id", b"schema_id", "schema_version", b"schema_version"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___CreateTenantRequest: _TypeAlias = CreateTenantRequest # noqa: Y015 @@ -351,6 +375,7 @@ class CreateTenantResponse(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["tenant", b"tenant"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___CreateTenantResponse: _TypeAlias = CreateTenantResponse # noqa: Y015 @@ -366,8 +391,11 @@ class GetTenantRequest(_message.Message): *, id: _builtins.str = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["id", b"id"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___GetTenantRequest: _TypeAlias = GetTenantRequest # noqa: Y015 @@ -387,6 +415,7 @@ class GetTenantResponse(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["tenant", b"tenant"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___GetTenantResponse: _TypeAlias = GetTenantResponse # noqa: Y015 @@ -436,8 +465,11 @@ class ListTenantsResponse(_message.Message): tenants: _abc.Iterable[_types_pb2.Tenant] | None = ..., next_page_token: _builtins.str = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["next_page_token", b"next_page_token", "tenants", b"tenants"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___ListTenantsResponse: _TypeAlias = ListTenantsResponse # noqa: Y015 @@ -494,6 +526,7 @@ class UpdateTenantResponse(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["tenant", b"tenant"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___UpdateTenantResponse: _TypeAlias = UpdateTenantResponse # noqa: Y015 @@ -509,8 +542,11 @@ class DeleteTenantRequest(_message.Message): *, id: _builtins.str = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["id", b"id"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___DeleteTenantRequest: _TypeAlias = DeleteTenantRequest # noqa: Y015 @@ -521,6 +557,11 @@ class DeleteTenantResponse(_message.Message): def __init__( self, ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _Never # noqa: Y015 + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___DeleteTenantResponse: _TypeAlias = DeleteTenantResponse # noqa: Y015 @@ -550,8 +591,11 @@ class LockFieldRequest(_message.Message): field_path: _builtins.str = ..., locked_values: _abc.Iterable[_builtins.str] | None = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["field_path", b"field_path", "locked_values", b"locked_values", "tenant_id", b"tenant_id"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___LockFieldRequest: _TypeAlias = LockFieldRequest # noqa: Y015 @@ -562,6 +606,11 @@ class LockFieldResponse(_message.Message): def __init__( self, ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _Never # noqa: Y015 + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___LockFieldResponse: _TypeAlias = LockFieldResponse # noqa: Y015 @@ -581,8 +630,11 @@ class UnlockFieldRequest(_message.Message): tenant_id: _builtins.str = ..., field_path: _builtins.str = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["field_path", b"field_path", "tenant_id", b"tenant_id"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___UnlockFieldRequest: _TypeAlias = UnlockFieldRequest # noqa: Y015 @@ -593,6 +645,11 @@ class UnlockFieldResponse(_message.Message): def __init__( self, ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _Never # noqa: Y015 + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___UnlockFieldResponse: _TypeAlias = UnlockFieldResponse # noqa: Y015 @@ -601,15 +658,26 @@ class ListFieldLocksRequest(_message.Message): DESCRIPTOR: _descriptor.Descriptor TENANT_ID_FIELD_NUMBER: _builtins.int + PAGE_SIZE_FIELD_NUMBER: _builtins.int + PAGE_TOKEN_FIELD_NUMBER: _builtins.int tenant_id: _builtins.str """Tenant ID (UUID).""" + page_size: _builtins.int + """Maximum number of locks to return. Defaults to 50, max 200.""" + page_token: _builtins.str + """Pagination token from a previous ListFieldLocksResponse.""" def __init__( self, *, tenant_id: _builtins.str = ..., + page_size: _builtins.int = ..., + page_token: _builtins.str = ..., ) -> None: ... - _ClearFieldArgType: _TypeAlias = _typing.Literal["tenant_id", b"tenant_id"] # noqa: Y015 + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["page_size", b"page_size", "page_token", b"page_token", "tenant_id", b"tenant_id"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___ListFieldLocksRequest: _TypeAlias = ListFieldLocksRequest # noqa: Y015 @@ -618,17 +686,24 @@ class ListFieldLocksResponse(_message.Message): DESCRIPTOR: _descriptor.Descriptor LOCKS_FIELD_NUMBER: _builtins.int + NEXT_PAGE_TOKEN_FIELD_NUMBER: _builtins.int + next_page_token: _builtins.str + """Token for the next page; empty when no more results.""" @_builtins.property def locks(self) -> _containers.RepeatedCompositeFieldContainer[_types_pb2.FieldLock]: - """All active field locks for the tenant.""" + """Active field locks for the tenant (up to page_size).""" def __init__( self, *, locks: _abc.Iterable[_types_pb2.FieldLock] | None = ..., + next_page_token: _builtins.str = ..., ) -> None: ... - _ClearFieldArgType: _TypeAlias = _typing.Literal["locks", b"locks"] # noqa: Y015 + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["locks", b"locks", "next_page_token", b"next_page_token"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___ListFieldLocksResponse: _TypeAlias = ListFieldLocksResponse # noqa: Y015 @@ -687,8 +762,11 @@ class ExportSchemaResponse(_message.Message): *, yaml_content: _builtins.bytes = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["yaml_content", b"yaml_content"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___ExportSchemaResponse: _TypeAlias = ExportSchemaResponse # noqa: Y015 @@ -720,8 +798,11 @@ class ImportSchemaRequest(_message.Message): yaml_content: _builtins.bytes = ..., auto_publish: _builtins.bool = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["auto_publish", b"auto_publish", "yaml_content", b"yaml_content"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___ImportSchemaRequest: _TypeAlias = ImportSchemaRequest # noqa: Y015 @@ -743,5 +824,6 @@ class ImportSchemaResponse(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["schema", b"schema"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___ImportSchemaResponse: _TypeAlias = ImportSchemaResponse # noqa: Y015 diff --git a/sdk/src/opendecree/_generated/centralconfig/v1/schema_service_pb2_grpc.py b/sdk/src/opendecree/_generated/centralconfig/v1/schema_service_pb2_grpc.py index b3e9075..0e37cc0 100644 --- a/sdk/src/opendecree/_generated/centralconfig/v1/schema_service_pb2_grpc.py +++ b/sdk/src/opendecree/_generated/centralconfig/v1/schema_service_pb2_grpc.py @@ -5,7 +5,7 @@ from opendecree._generated.centralconfig.v1 import schema_service_pb2 as centralconfig_dot_v1_dot_schema__service__pb2 -GRPC_GENERATED_VERSION = '1.80.0' +GRPC_GENERATED_VERSION = '1.81.0' GRPC_VERSION = grpc.__version__ _version_not_supported = False @@ -25,7 +25,7 @@ ) -class SchemaServiceStub(object): +class SchemaServiceStub: """SchemaService manages configuration schemas, tenants, and field-level locking. Schemas define the allowed fields and their types for tenant configurations. @@ -122,7 +122,7 @@ def __init__(self, channel): _registered_method=True) -class SchemaServiceServicer(object): +class SchemaServiceServicer: """SchemaService manages configuration schemas, tenants, and field-level locking. Schemas define the allowed fields and their types for tenant configurations. @@ -346,7 +346,7 @@ def add_SchemaServiceServicer_to_server(servicer, server): # This class is part of an EXPERIMENTAL API. -class SchemaService(object): +class SchemaService: """SchemaService manages configuration schemas, tenants, and field-level locking. Schemas define the allowed fields and their types for tenant configurations. diff --git a/sdk/src/opendecree/_generated/centralconfig/v1/server_service_pb2.py b/sdk/src/opendecree/_generated/centralconfig/v1/server_service_pb2.py index 96d3f93..80c0144 100644 --- a/sdk/src/opendecree/_generated/centralconfig/v1/server_service_pb2.py +++ b/sdk/src/opendecree/_generated/centralconfig/v1/server_service_pb2.py @@ -2,7 +2,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE # source: centralconfig/v1/server_service.proto -# Protobuf Python Version: 6.31.1 +# Protobuf Python Version: 6.33.5 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -12,8 +12,8 @@ _runtime_version.ValidateProtobufRuntimeVersion( _runtime_version.Domain.PUBLIC, 6, - 31, - 1, + 33, + 5, '', 'centralconfig/v1/server_service.proto' ) diff --git a/sdk/src/opendecree/_generated/centralconfig/v1/server_service_pb2.pyi b/sdk/src/opendecree/_generated/centralconfig/v1/server_service_pb2.pyi index b8b4a53..c22f372 100644 --- a/sdk/src/opendecree/_generated/centralconfig/v1/server_service_pb2.pyi +++ b/sdk/src/opendecree/_generated/centralconfig/v1/server_service_pb2.pyi @@ -11,10 +11,10 @@ import builtins as _builtins import sys import typing as _typing -if sys.version_info >= (3, 10): - from typing import TypeAlias as _TypeAlias +if sys.version_info >= (3, 11): + from typing import TypeAlias as _TypeAlias, Never as _Never else: - from typing_extensions import TypeAlias as _TypeAlias + from typing_extensions import TypeAlias as _TypeAlias, Never as _Never DESCRIPTOR: _descriptor.FileDescriptor @@ -25,6 +25,11 @@ class GetServerInfoRequest(_message.Message): def __init__( self, ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _Never # noqa: Y015 + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___GetServerInfoRequest: _TypeAlias = GetServerInfoRequest # noqa: Y015 @@ -46,8 +51,11 @@ class GetServerInfoResponse(_message.Message): key: _builtins.str = ..., value: _builtins.bool = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["key", b"key", "value", b"value"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... VERSION_FIELD_NUMBER: _builtins.int COMMIT_FIELD_NUMBER: _builtins.int @@ -69,7 +77,10 @@ class GetServerInfoResponse(_message.Message): commit: _builtins.str = ..., features: _abc.Mapping[_builtins.str, _builtins.bool] | None = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["commit", b"commit", "features", b"features", "version", b"version"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___GetServerInfoResponse: _TypeAlias = GetServerInfoResponse # noqa: Y015 diff --git a/sdk/src/opendecree/_generated/centralconfig/v1/server_service_pb2_grpc.py b/sdk/src/opendecree/_generated/centralconfig/v1/server_service_pb2_grpc.py index c54360e..7e03283 100644 --- a/sdk/src/opendecree/_generated/centralconfig/v1/server_service_pb2_grpc.py +++ b/sdk/src/opendecree/_generated/centralconfig/v1/server_service_pb2_grpc.py @@ -5,7 +5,7 @@ from opendecree._generated.centralconfig.v1 import server_service_pb2 as centralconfig_dot_v1_dot_server__service__pb2 -GRPC_GENERATED_VERSION = '1.80.0' +GRPC_GENERATED_VERSION = '1.81.0' GRPC_VERSION = grpc.__version__ _version_not_supported = False @@ -25,7 +25,7 @@ ) -class ServerServiceStub(object): +class ServerServiceStub: """ServerService provides server metadata and capability discovery. Always registered, no authentication required. """ @@ -43,7 +43,7 @@ def __init__(self, channel): _registered_method=True) -class ServerServiceServicer(object): +class ServerServiceServicer: """ServerService provides server metadata and capability discovery. Always registered, no authentication required. """ @@ -71,7 +71,7 @@ def add_ServerServiceServicer_to_server(servicer, server): # This class is part of an EXPERIMENTAL API. -class ServerService(object): +class ServerService: """ServerService provides server metadata and capability discovery. Always registered, no authentication required. """ diff --git a/sdk/src/opendecree/_generated/centralconfig/v1/types_pb2.py b/sdk/src/opendecree/_generated/centralconfig/v1/types_pb2.py index 417af9c..d0edef5 100644 --- a/sdk/src/opendecree/_generated/centralconfig/v1/types_pb2.py +++ b/sdk/src/opendecree/_generated/centralconfig/v1/types_pb2.py @@ -2,7 +2,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE # source: centralconfig/v1/types.proto -# Protobuf Python Version: 6.31.1 +# Protobuf Python Version: 6.33.5 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -12,8 +12,8 @@ _runtime_version.ValidateProtobufRuntimeVersion( _runtime_version.Domain.PUBLIC, 6, - 31, - 1, + 33, + 5, '', 'centralconfig/v1/types.proto' ) @@ -26,7 +26,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x63\x65ntralconfig/v1/types.proto\x12\x10\x63\x65ntralconfig.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xcf\x02\n\x10\x46ieldConstraints\x12\x10\n\x03min\x18\x01 \x01(\x01H\x00\x88\x01\x01\x12\x10\n\x03max\x18\x02 \x01(\x01H\x01\x88\x01\x01\x12\x12\n\x05regex\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x0b\x65num_values\x18\x04 \x03(\t\x12\x18\n\x0bjson_schema\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\rexclusive_min\x18\x06 \x01(\x01H\x04\x88\x01\x01\x12\x1a\n\rexclusive_max\x18\x07 \x01(\x01H\x05\x88\x01\x01\x12\x17\n\nmin_length\x18\x08 \x01(\x05H\x06\x88\x01\x01\x12\x17\n\nmax_length\x18\t \x01(\x05H\x07\x88\x01\x01\x42\x06\n\x04_minB\x06\n\x04_maxB\x08\n\x06_regexB\x0e\n\x0c_json_schemaB\x10\n\x0e_exclusive_minB\x10\n\x0e_exclusive_maxB\r\n\x0b_min_lengthB\r\n\x0b_max_length\"\x96\x05\n\x0bSchemaField\x12\x0c\n\x04path\x18\x01 \x01(\t\x12)\n\x04type\x18\x02 \x01(\x0e\x32\x1b.centralconfig.v1.FieldType\x12\x37\n\x0b\x63onstraints\x18\x03 \x01(\x0b\x32\".centralconfig.v1.FieldConstraints\x12\x10\n\x08nullable\x18\x04 \x01(\x08\x12\x12\n\ndeprecated\x18\x05 \x01(\x08\x12\x18\n\x0bredirect_to\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rdefault_value\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x12\n\x05title\x18\t \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07\x65xample\x18\n \x01(\tH\x04\x88\x01\x01\x12=\n\x08\x65xamples\x18\x0b \x03(\x0b\x32+.centralconfig.v1.SchemaField.ExamplesEntry\x12\x35\n\rexternal_docs\x18\x0c \x01(\x0b\x32\x1e.centralconfig.v1.ExternalDocs\x12\x0c\n\x04tags\x18\r \x03(\t\x12\x13\n\x06\x66ormat\x18\x0e \x01(\tH\x05\x88\x01\x01\x12\x11\n\tread_only\x18\x0f \x01(\x08\x12\x12\n\nwrite_once\x18\x10 \x01(\x08\x12\x11\n\tsensitive\x18\x11 \x01(\x08\x1aO\n\rExamplesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.centralconfig.v1.FieldExample:\x02\x38\x01\x42\x0e\n\x0c_redirect_toB\x10\n\x0e_default_valueB\x0e\n\x0c_descriptionB\x08\n\x06_titleB\n\n\x08_exampleB\t\n\x07_format\".\n\x0c\x46ieldExample\x12\r\n\x05value\x18\x01 \x01(\t\x12\x0f\n\x07summary\x18\x02 \x01(\t\"0\n\x0c\x45xternalDocs\x12\x13\n\x0b\x64\x65scription\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\"\xc6\x01\n\nSchemaInfo\x12\r\n\x05title\x18\x01 \x01(\t\x12\x0e\n\x06\x61uthor\x18\x02 \x01(\t\x12\x30\n\x07\x63ontact\x18\x03 \x01(\x0b\x32\x1f.centralconfig.v1.SchemaContact\x12\x38\n\x06labels\x18\x04 \x03(\x0b\x32(.centralconfig.v1.SchemaInfo.LabelsEntry\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"9\n\rSchemaContact\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05\x65mail\x18\x02 \x01(\t\x12\x0b\n\x03url\x18\x03 \x01(\t\"\xc2\x03\n\x06Schema\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0f\n\x07version\x18\x04 \x01(\x05\x12\x1b\n\x0eparent_version\x18\x05 \x01(\x05H\x00\x88\x01\x01\x12\x1b\n\x13version_description\x18\x06 \x01(\t\x12\x10\n\x08\x63hecksum\x18\x07 \x01(\t\x12\x11\n\tpublished\x18\x08 \x01(\x08\x12-\n\x06\x66ields\x18\t \x03(\x0b\x32\x1d.centralconfig.v1.SchemaField\x12.\n\ncreated_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12*\n\x04info\x18\x0b \x01(\x0b\x32\x1c.centralconfig.v1.SchemaInfo\x12\x44\n\x12\x64\x65pendent_required\x18\x0c \x03(\x0b\x32(.centralconfig.v1.DependentRequiredEntry\x12\x35\n\x0bvalidations\x18\r \x03(\x0b\x32 .centralconfig.v1.ValidationRuleB\x11\n\x0f_parent_version\"I\n\x16\x44\x65pendentRequiredEntry\x12\x15\n\rtrigger_field\x18\x01 \x01(\t\x12\x18\n\x10\x64\x65pendent_fields\x18\x02 \x03(\t\"_\n\x0eValidationRule\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0c\n\x04rule\x18\x02 \x01(\t\x12\x0f\n\x07message\x18\x03 \x01(\t\x12\x10\n\x08severity\x18\x04 \x01(\t\x12\x0e\n\x06reason\x18\x05 \x01(\t\"\xad\x01\n\x06Tenant\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x11\n\tschema_id\x18\x03 \x01(\t\x12\x16\n\x0eschema_version\x18\x04 \x01(\x05\x12.\n\ncreated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"I\n\tFieldLock\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x12\n\nfield_path\x18\x02 \x01(\t\x12\x15\n\rlocked_values\x18\x03 \x03(\t\"\x85\x02\n\nTypedValue\x12\x17\n\rinteger_value\x18\x01 \x01(\x03H\x00\x12\x16\n\x0cnumber_value\x18\x02 \x01(\x01H\x00\x12\x16\n\x0cstring_value\x18\x03 \x01(\tH\x00\x12\x14\n\nbool_value\x18\x04 \x01(\x08H\x00\x12\x30\n\ntime_value\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x12\x33\n\x0e\x64uration_value\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00\x12\x13\n\turl_value\x18\x07 \x01(\tH\x00\x12\x14\n\njson_value\x18\x08 \x01(\tH\x00\x42\x06\n\x04kind\"\x8a\x01\n\x0b\x43onfigValue\x12\x12\n\nfield_path\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.centralconfig.v1.TypedValue\x12\x10\n\x08\x63hecksum\x18\x03 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x42\x0e\n\x0c_description\"\x98\x01\n\rConfigVersion\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\ttenant_id\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x05\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\x12\x12\n\ncreated_by\x18\x05 \x01(\t\x12.\n\ncreated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"[\n\x06\x43onfig\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\x12-\n\x06values\x18\x03 \x03(\x0b\x32\x1d.centralconfig.v1.ConfigValue\"\xec\x01\n\x0c\x43onfigChange\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\x12\x12\n\nfield_path\x18\x03 \x01(\t\x12/\n\told_value\x18\x04 \x01(\x0b\x32\x1c.centralconfig.v1.TypedValue\x12/\n\tnew_value\x18\x05 \x01(\x0b\x32\x1c.centralconfig.v1.TypedValue\x12\x12\n\nchanged_by\x18\x06 \x01(\t\x12.\n\nchanged_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\x9e\x02\n\nAuditEntry\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\ttenant_id\x18\x02 \x01(\t\x12\r\n\x05\x61\x63tor\x18\x03 \x01(\t\x12\x0e\n\x06\x61\x63tion\x18\x04 \x01(\t\x12\x17\n\nfield_path\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x16\n\told_value\x18\x06 \x01(\tH\x01\x88\x01\x01\x12\x16\n\tnew_value\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x1b\n\x0e\x63onfig_version\x18\x08 \x01(\x05H\x03\x88\x01\x01\x12.\n\ncreated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB\r\n\x0b_field_pathB\x0c\n\n_old_valueB\x0c\n\n_new_valueB\x11\n\x0f_config_version\"\xbb\x01\n\nUsageStats\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x12\n\nfield_path\x18\x02 \x01(\t\x12\x12\n\nread_count\x18\x03 \x01(\x03\x12\x19\n\x0clast_read_by\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x35\n\x0clast_read_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01\x88\x01\x01\x42\x0f\n\r_last_read_byB\x0f\n\r_last_read_at*\xd5\x01\n\tFieldType\x12\x1a\n\x16\x46IELD_TYPE_UNSPECIFIED\x10\x00\x12\x12\n\x0e\x46IELD_TYPE_INT\x10\x01\x12\x15\n\x11\x46IELD_TYPE_STRING\x10\x02\x12\x13\n\x0f\x46IELD_TYPE_TIME\x10\x03\x12\x17\n\x13\x46IELD_TYPE_DURATION\x10\x04\x12\x12\n\x0e\x46IELD_TYPE_URL\x10\x05\x12\x13\n\x0f\x46IELD_TYPE_JSON\x10\x06\x12\x15\n\x11\x46IELD_TYPE_NUMBER\x10\x07\x12\x13\n\x0f\x46IELD_TYPE_BOOL\x10\x08\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x63\x65ntralconfig/v1/types.proto\x12\x10\x63\x65ntralconfig.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xe8\x02\n\x10\x46ieldConstraints\x12\x10\n\x03min\x18\x01 \x01(\x01H\x00\x88\x01\x01\x12\x10\n\x03max\x18\x02 \x01(\x01H\x01\x88\x01\x01\x12\x12\n\x05regex\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x0b\x65num_values\x18\x04 \x03(\t\x12\x18\n\x0bjson_schema\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\rexclusive_min\x18\x06 \x01(\x01H\x04\x88\x01\x01\x12\x1a\n\rexclusive_max\x18\x07 \x01(\x01H\x05\x88\x01\x01\x12\x17\n\nmin_length\x18\x08 \x01(\x05H\x06\x88\x01\x01\x12\x17\n\nmax_length\x18\t \x01(\x05H\x07\x88\x01\x01\x12\x17\n\x0f\x61llowed_schemes\x18\n \x03(\tB\x06\n\x04_minB\x06\n\x04_maxB\x08\n\x06_regexB\x0e\n\x0c_json_schemaB\x10\n\x0e_exclusive_minB\x10\n\x0e_exclusive_maxB\r\n\x0b_min_lengthB\r\n\x0b_max_length\"\x96\x05\n\x0bSchemaField\x12\x0c\n\x04path\x18\x01 \x01(\t\x12)\n\x04type\x18\x02 \x01(\x0e\x32\x1b.centralconfig.v1.FieldType\x12\x37\n\x0b\x63onstraints\x18\x03 \x01(\x0b\x32\".centralconfig.v1.FieldConstraints\x12\x10\n\x08nullable\x18\x04 \x01(\x08\x12\x12\n\ndeprecated\x18\x05 \x01(\x08\x12\x18\n\x0bredirect_to\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rdefault_value\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x12\n\x05title\x18\t \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07\x65xample\x18\n \x01(\tH\x04\x88\x01\x01\x12=\n\x08\x65xamples\x18\x0b \x03(\x0b\x32+.centralconfig.v1.SchemaField.ExamplesEntry\x12\x35\n\rexternal_docs\x18\x0c \x01(\x0b\x32\x1e.centralconfig.v1.ExternalDocs\x12\x0c\n\x04tags\x18\r \x03(\t\x12\x13\n\x06\x66ormat\x18\x0e \x01(\tH\x05\x88\x01\x01\x12\x11\n\tread_only\x18\x0f \x01(\x08\x12\x12\n\nwrite_once\x18\x10 \x01(\x08\x12\x11\n\tsensitive\x18\x11 \x01(\x08\x1aO\n\rExamplesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.centralconfig.v1.FieldExample:\x02\x38\x01\x42\x0e\n\x0c_redirect_toB\x10\n\x0e_default_valueB\x0e\n\x0c_descriptionB\x08\n\x06_titleB\n\n\x08_exampleB\t\n\x07_format\".\n\x0c\x46ieldExample\x12\r\n\x05value\x18\x01 \x01(\t\x12\x0f\n\x07summary\x18\x02 \x01(\t\"0\n\x0c\x45xternalDocs\x12\x13\n\x0b\x64\x65scription\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\"\xc6\x01\n\nSchemaInfo\x12\r\n\x05title\x18\x01 \x01(\t\x12\x0e\n\x06\x61uthor\x18\x02 \x01(\t\x12\x30\n\x07\x63ontact\x18\x03 \x01(\x0b\x32\x1f.centralconfig.v1.SchemaContact\x12\x38\n\x06labels\x18\x04 \x03(\x0b\x32(.centralconfig.v1.SchemaInfo.LabelsEntry\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"9\n\rSchemaContact\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05\x65mail\x18\x02 \x01(\t\x12\x0b\n\x03url\x18\x03 \x01(\t\"\xc2\x03\n\x06Schema\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0f\n\x07version\x18\x04 \x01(\x05\x12\x1b\n\x0eparent_version\x18\x05 \x01(\x05H\x00\x88\x01\x01\x12\x1b\n\x13version_description\x18\x06 \x01(\t\x12\x10\n\x08\x63hecksum\x18\x07 \x01(\t\x12\x11\n\tpublished\x18\x08 \x01(\x08\x12-\n\x06\x66ields\x18\t \x03(\x0b\x32\x1d.centralconfig.v1.SchemaField\x12.\n\ncreated_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12*\n\x04info\x18\x0b \x01(\x0b\x32\x1c.centralconfig.v1.SchemaInfo\x12\x44\n\x12\x64\x65pendent_required\x18\x0c \x03(\x0b\x32(.centralconfig.v1.DependentRequiredEntry\x12\x35\n\x0bvalidations\x18\r \x03(\x0b\x32 .centralconfig.v1.ValidationRuleB\x11\n\x0f_parent_version\"I\n\x16\x44\x65pendentRequiredEntry\x12\x15\n\rtrigger_field\x18\x01 \x01(\t\x12\x18\n\x10\x64\x65pendent_fields\x18\x02 \x03(\t\"_\n\x0eValidationRule\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0c\n\x04rule\x18\x02 \x01(\t\x12\x0f\n\x07message\x18\x03 \x01(\t\x12\x10\n\x08severity\x18\x04 \x01(\t\x12\x0e\n\x06reason\x18\x05 \x01(\t\"\xad\x01\n\x06Tenant\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x11\n\tschema_id\x18\x03 \x01(\t\x12\x16\n\x0eschema_version\x18\x04 \x01(\x05\x12.\n\ncreated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"I\n\tFieldLock\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x12\n\nfield_path\x18\x02 \x01(\t\x12\x15\n\rlocked_values\x18\x03 \x03(\t\"\x85\x02\n\nTypedValue\x12\x17\n\rinteger_value\x18\x01 \x01(\x03H\x00\x12\x16\n\x0cnumber_value\x18\x02 \x01(\x01H\x00\x12\x16\n\x0cstring_value\x18\x03 \x01(\tH\x00\x12\x14\n\nbool_value\x18\x04 \x01(\x08H\x00\x12\x30\n\ntime_value\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x12\x33\n\x0e\x64uration_value\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00\x12\x13\n\turl_value\x18\x07 \x01(\tH\x00\x12\x14\n\njson_value\x18\x08 \x01(\tH\x00\x42\x06\n\x04kind\"\x8a\x01\n\x0b\x43onfigValue\x12\x12\n\nfield_path\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.centralconfig.v1.TypedValue\x12\x10\n\x08\x63hecksum\x18\x03 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x42\x0e\n\x0c_description\"\x98\x01\n\rConfigVersion\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\ttenant_id\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x05\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\x12\x12\n\ncreated_by\x18\x05 \x01(\t\x12.\n\ncreated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"[\n\x06\x43onfig\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\x12-\n\x06values\x18\x03 \x03(\x0b\x32\x1d.centralconfig.v1.ConfigValue\"\xec\x01\n\x0c\x43onfigChange\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\x12\x12\n\nfield_path\x18\x03 \x01(\t\x12/\n\told_value\x18\x04 \x01(\x0b\x32\x1c.centralconfig.v1.TypedValue\x12/\n\tnew_value\x18\x05 \x01(\x0b\x32\x1c.centralconfig.v1.TypedValue\x12\x12\n\nchanged_by\x18\x06 \x01(\t\x12.\n\nchanged_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xe2\x03\n\nAuditEntry\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\ttenant_id\x18\x02 \x01(\t\x12\r\n\x05\x61\x63tor\x18\x03 \x01(\t\x12\x0e\n\x06\x61\x63tion\x18\x04 \x01(\t\x12\x17\n\nfield_path\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x16\n\told_value\x18\x06 \x01(\tH\x01\x88\x01\x01\x12\x16\n\tnew_value\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x1b\n\x0e\x63onfig_version\x18\x08 \x01(\x05H\x03\x88\x01\x01\x12.\n\ncreated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x13\n\x0bobject_kind\x18\n \x01(\t\x12\x12\n\nentry_hash\x18\x0b \x01(\t\x12\x15\n\rprevious_hash\x18\x0c \x01(\t\x12\x13\n\x0b\x63hain_epoch\x18\r \x01(\x04\x12<\n\x08metadata\x18\x0e \x03(\x0b\x32*.centralconfig.v1.AuditEntry.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\r\n\x0b_field_pathB\x0c\n\n_old_valueB\x0c\n\n_new_valueB\x11\n\x0f_config_version\"\xbb\x01\n\nUsageStats\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x12\n\nfield_path\x18\x02 \x01(\t\x12\x12\n\nread_count\x18\x03 \x01(\x03\x12\x19\n\x0clast_read_by\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x35\n\x0clast_read_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01\x88\x01\x01\x42\x0f\n\r_last_read_byB\x0f\n\r_last_read_at*\xd5\x01\n\tFieldType\x12\x1a\n\x16\x46IELD_TYPE_UNSPECIFIED\x10\x00\x12\x12\n\x0e\x46IELD_TYPE_INT\x10\x01\x12\x15\n\x11\x46IELD_TYPE_STRING\x10\x02\x12\x13\n\x0f\x46IELD_TYPE_TIME\x10\x03\x12\x17\n\x13\x46IELD_TYPE_DURATION\x10\x04\x12\x12\n\x0e\x46IELD_TYPE_URL\x10\x05\x12\x13\n\x0f\x46IELD_TYPE_JSON\x10\x06\x12\x15\n\x11\x46IELD_TYPE_NUMBER\x10\x07\x12\x13\n\x0f\x46IELD_TYPE_BOOL\x10\x08\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -37,46 +37,50 @@ _globals['_SCHEMAFIELD_EXAMPLESENTRY']._serialized_options = b'8\001' _globals['_SCHEMAINFO_LABELSENTRY']._loaded_options = None _globals['_SCHEMAINFO_LABELSENTRY']._serialized_options = b'8\001' - _globals['_FIELDTYPE']._serialized_start=3724 - _globals['_FIELDTYPE']._serialized_end=3937 + _globals['_AUDITENTRY_METADATAENTRY']._loaded_options = None + _globals['_AUDITENTRY_METADATAENTRY']._serialized_options = b'8\001' + _globals['_FIELDTYPE']._serialized_start=3945 + _globals['_FIELDTYPE']._serialized_end=4158 _globals['_FIELDCONSTRAINTS']._serialized_start=116 - _globals['_FIELDCONSTRAINTS']._serialized_end=451 - _globals['_SCHEMAFIELD']._serialized_start=454 - _globals['_SCHEMAFIELD']._serialized_end=1116 - _globals['_SCHEMAFIELD_EXAMPLESENTRY']._serialized_start=954 - _globals['_SCHEMAFIELD_EXAMPLESENTRY']._serialized_end=1033 - _globals['_FIELDEXAMPLE']._serialized_start=1118 - _globals['_FIELDEXAMPLE']._serialized_end=1164 - _globals['_EXTERNALDOCS']._serialized_start=1166 - _globals['_EXTERNALDOCS']._serialized_end=1214 - _globals['_SCHEMAINFO']._serialized_start=1217 - _globals['_SCHEMAINFO']._serialized_end=1415 - _globals['_SCHEMAINFO_LABELSENTRY']._serialized_start=1370 - _globals['_SCHEMAINFO_LABELSENTRY']._serialized_end=1415 - _globals['_SCHEMACONTACT']._serialized_start=1417 - _globals['_SCHEMACONTACT']._serialized_end=1474 - _globals['_SCHEMA']._serialized_start=1477 - _globals['_SCHEMA']._serialized_end=1927 - _globals['_DEPENDENTREQUIREDENTRY']._serialized_start=1929 - _globals['_DEPENDENTREQUIREDENTRY']._serialized_end=2002 - _globals['_VALIDATIONRULE']._serialized_start=2004 - _globals['_VALIDATIONRULE']._serialized_end=2099 - _globals['_TENANT']._serialized_start=2102 - _globals['_TENANT']._serialized_end=2275 - _globals['_FIELDLOCK']._serialized_start=2277 - _globals['_FIELDLOCK']._serialized_end=2350 - _globals['_TYPEDVALUE']._serialized_start=2353 - _globals['_TYPEDVALUE']._serialized_end=2614 - _globals['_CONFIGVALUE']._serialized_start=2617 - _globals['_CONFIGVALUE']._serialized_end=2755 - _globals['_CONFIGVERSION']._serialized_start=2758 - _globals['_CONFIGVERSION']._serialized_end=2910 - _globals['_CONFIG']._serialized_start=2912 - _globals['_CONFIG']._serialized_end=3003 - _globals['_CONFIGCHANGE']._serialized_start=3006 - _globals['_CONFIGCHANGE']._serialized_end=3242 - _globals['_AUDITENTRY']._serialized_start=3245 - _globals['_AUDITENTRY']._serialized_end=3531 - _globals['_USAGESTATS']._serialized_start=3534 - _globals['_USAGESTATS']._serialized_end=3721 + _globals['_FIELDCONSTRAINTS']._serialized_end=476 + _globals['_SCHEMAFIELD']._serialized_start=479 + _globals['_SCHEMAFIELD']._serialized_end=1141 + _globals['_SCHEMAFIELD_EXAMPLESENTRY']._serialized_start=979 + _globals['_SCHEMAFIELD_EXAMPLESENTRY']._serialized_end=1058 + _globals['_FIELDEXAMPLE']._serialized_start=1143 + _globals['_FIELDEXAMPLE']._serialized_end=1189 + _globals['_EXTERNALDOCS']._serialized_start=1191 + _globals['_EXTERNALDOCS']._serialized_end=1239 + _globals['_SCHEMAINFO']._serialized_start=1242 + _globals['_SCHEMAINFO']._serialized_end=1440 + _globals['_SCHEMAINFO_LABELSENTRY']._serialized_start=1395 + _globals['_SCHEMAINFO_LABELSENTRY']._serialized_end=1440 + _globals['_SCHEMACONTACT']._serialized_start=1442 + _globals['_SCHEMACONTACT']._serialized_end=1499 + _globals['_SCHEMA']._serialized_start=1502 + _globals['_SCHEMA']._serialized_end=1952 + _globals['_DEPENDENTREQUIREDENTRY']._serialized_start=1954 + _globals['_DEPENDENTREQUIREDENTRY']._serialized_end=2027 + _globals['_VALIDATIONRULE']._serialized_start=2029 + _globals['_VALIDATIONRULE']._serialized_end=2124 + _globals['_TENANT']._serialized_start=2127 + _globals['_TENANT']._serialized_end=2300 + _globals['_FIELDLOCK']._serialized_start=2302 + _globals['_FIELDLOCK']._serialized_end=2375 + _globals['_TYPEDVALUE']._serialized_start=2378 + _globals['_TYPEDVALUE']._serialized_end=2639 + _globals['_CONFIGVALUE']._serialized_start=2642 + _globals['_CONFIGVALUE']._serialized_end=2780 + _globals['_CONFIGVERSION']._serialized_start=2783 + _globals['_CONFIGVERSION']._serialized_end=2935 + _globals['_CONFIG']._serialized_start=2937 + _globals['_CONFIG']._serialized_end=3028 + _globals['_CONFIGCHANGE']._serialized_start=3031 + _globals['_CONFIGCHANGE']._serialized_end=3267 + _globals['_AUDITENTRY']._serialized_start=3270 + _globals['_AUDITENTRY']._serialized_end=3752 + _globals['_AUDITENTRY_METADATAENTRY']._serialized_start=3643 + _globals['_AUDITENTRY_METADATAENTRY']._serialized_end=3690 + _globals['_USAGESTATS']._serialized_start=3755 + _globals['_USAGESTATS']._serialized_end=3942 # @@protoc_insertion_point(module_scope) diff --git a/sdk/src/opendecree/_generated/centralconfig/v1/types_pb2.pyi b/sdk/src/opendecree/_generated/centralconfig/v1/types_pb2.pyi index fe1f225..114b51e 100644 --- a/sdk/src/opendecree/_generated/centralconfig/v1/types_pb2.pyi +++ b/sdk/src/opendecree/_generated/centralconfig/v1/types_pb2.pyi @@ -14,10 +14,10 @@ import builtins as _builtins import sys import typing as _typing -if sys.version_info >= (3, 10): - from typing import TypeAlias as _TypeAlias +if sys.version_info >= (3, 11): + from typing import TypeAlias as _TypeAlias, Never as _Never else: - from typing_extensions import TypeAlias as _TypeAlias + from typing_extensions import TypeAlias as _TypeAlias, Never as _Never DESCRIPTOR: _descriptor.FileDescriptor @@ -108,6 +108,7 @@ class FieldConstraints(_message.Message): EXCLUSIVE_MAX_FIELD_NUMBER: _builtins.int MIN_LENGTH_FIELD_NUMBER: _builtins.int MAX_LENGTH_FIELD_NUMBER: _builtins.int + ALLOWED_SCHEMES_FIELD_NUMBER: _builtins.int min: _builtins.float """For integer/number/duration: minimum allowed value (inclusive, >=).""" max: _builtins.float @@ -134,6 +135,13 @@ class FieldConstraints(_message.Message): Applies to any field type. """ + @_builtins.property + def allowed_schemes(self) -> _containers.RepeatedScalarFieldContainer[_builtins.str]: + """For url: allowed URI schemes (e.g. "https", "http"). + If non-empty, schemes not in this list are rejected with InvalidArgument. + Defaults to ["http", "https"] when empty. + """ + def __init__( self, *, @@ -146,10 +154,11 @@ class FieldConstraints(_message.Message): exclusive_max: _builtins.float | None = ..., min_length: _builtins.int | None = ..., max_length: _builtins.int | None = ..., + allowed_schemes: _abc.Iterable[_builtins.str] | None = ..., ) -> None: ... _HasFieldArgType: _TypeAlias = _typing.Literal["_exclusive_max", b"_exclusive_max", "_exclusive_min", b"_exclusive_min", "_json_schema", b"_json_schema", "_max", b"_max", "_max_length", b"_max_length", "_min", b"_min", "_min_length", b"_min_length", "_regex", b"_regex", "exclusive_max", b"exclusive_max", "exclusive_min", b"exclusive_min", "json_schema", b"json_schema", "max", b"max", "max_length", b"max_length", "min", b"min", "min_length", b"min_length", "regex", b"regex"] # noqa: Y015 def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... - _ClearFieldArgType: _TypeAlias = _typing.Literal["_exclusive_max", b"_exclusive_max", "_exclusive_min", b"_exclusive_min", "_json_schema", b"_json_schema", "_max", b"_max", "_max_length", b"_max_length", "_min", b"_min", "_min_length", b"_min_length", "_regex", b"_regex", "enum_values", b"enum_values", "exclusive_max", b"exclusive_max", "exclusive_min", b"exclusive_min", "json_schema", b"json_schema", "max", b"max", "max_length", b"max_length", "min", b"min", "min_length", b"min_length", "regex", b"regex"] # noqa: Y015 + _ClearFieldArgType: _TypeAlias = _typing.Literal["_exclusive_max", b"_exclusive_max", "_exclusive_min", b"_exclusive_min", "_json_schema", b"_json_schema", "_max", b"_max", "_max_length", b"_max_length", "_min", b"_min", "_min_length", b"_min_length", "_regex", b"_regex", "allowed_schemes", b"allowed_schemes", "enum_values", b"enum_values", "exclusive_max", b"exclusive_max", "exclusive_min", b"exclusive_min", "json_schema", b"json_schema", "max", b"max", "max_length", b"max_length", "min", b"min", "min_length", b"min_length", "regex", b"regex"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... _WhichOneofReturnType__exclusive_max: _TypeAlias = _typing.Literal["exclusive_max"] # noqa: Y015 _WhichOneofArgType__exclusive_max: _TypeAlias = _typing.Literal["_exclusive_max", b"_exclusive_max"] # noqa: Y015 @@ -211,6 +220,7 @@ class SchemaField(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["key", b"key", "value", b"value"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... PATH_FIELD_NUMBER: _builtins.int TYPE_FIELD_NUMBER: _builtins.int @@ -362,8 +372,11 @@ class FieldExample(_message.Message): value: _builtins.str = ..., summary: _builtins.str = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["summary", b"summary", "value", b"value"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___FieldExample: _TypeAlias = FieldExample # noqa: Y015 @@ -387,8 +400,11 @@ class ExternalDocs(_message.Message): description: _builtins.str = ..., url: _builtins.str = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["description", b"description", "url", b"url"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___ExternalDocs: _TypeAlias = ExternalDocs # noqa: Y015 @@ -417,8 +433,11 @@ class SchemaInfo(_message.Message): key: _builtins.str = ..., value: _builtins.str = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["key", b"key", "value", b"value"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... TITLE_FIELD_NUMBER: _builtins.int AUTHOR_FIELD_NUMBER: _builtins.int @@ -453,6 +472,7 @@ class SchemaInfo(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["author", b"author", "contact", b"contact", "labels", b"labels", "title", b"title"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___SchemaInfo: _TypeAlias = SchemaInfo # noqa: Y015 @@ -480,8 +500,11 @@ class SchemaContact(_message.Message): email: _builtins.str = ..., url: _builtins.str = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["email", b"email", "name", b"name", "url", b"url"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___SchemaContact: _TypeAlias = SchemaContact # noqa: Y015 @@ -615,8 +638,11 @@ class DependentRequiredEntry(_message.Message): trigger_field: _builtins.str = ..., dependent_fields: _abc.Iterable[_builtins.str] | None = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["dependent_fields", b"dependent_fields", "trigger_field", b"trigger_field"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___DependentRequiredEntry: _TypeAlias = DependentRequiredEntry # noqa: Y015 @@ -672,8 +698,11 @@ class ValidationRule(_message.Message): severity: _builtins.str = ..., reason: _builtins.str = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["message", b"message", "path", b"path", "reason", b"reason", "rule", b"rule", "severity", b"severity"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___ValidationRule: _TypeAlias = ValidationRule # noqa: Y015 @@ -725,6 +754,7 @@ class Tenant(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["created_at", b"created_at", "id", b"id", "name", b"name", "schema_id", b"schema_id", "schema_version", b"schema_version", "updated_at", b"updated_at"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___Tenant: _TypeAlias = Tenant # noqa: Y015 @@ -756,8 +786,11 @@ class FieldLock(_message.Message): field_path: _builtins.str = ..., locked_values: _abc.Iterable[_builtins.str] | None = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["field_path", b"field_path", "locked_values", b"locked_values", "tenant_id", b"tenant_id"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___FieldLock: _TypeAlias = FieldLock # noqa: Y015 @@ -905,6 +938,7 @@ class ConfigVersion(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["created_at", b"created_at", "created_by", b"created_by", "description", b"description", "id", b"id", "tenant_id", b"tenant_id", "version", b"version"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___ConfigVersion: _TypeAlias = ConfigVersion # noqa: Y015 @@ -932,8 +966,11 @@ class Config(_message.Message): version: _builtins.int = ..., values: _abc.Iterable[Global___ConfigValue] | None = ..., ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["tenant_id", b"tenant_id", "values", b"values", "version", b"version"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___Config: _TypeAlias = Config # noqa: Y015 @@ -987,6 +1024,7 @@ class ConfigChange(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal["changed_at", b"changed_at", "changed_by", b"changed_by", "field_path", b"field_path", "new_value", b"new_value", "old_value", b"old_value", "tenant_id", b"tenant_id", "version", b"version"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... Global___ConfigChange: _TypeAlias = ConfigChange # noqa: Y015 @@ -999,6 +1037,26 @@ class AuditEntry(_message.Message): DESCRIPTOR: _descriptor.Descriptor + @_typing.final + class MetadataEntry(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + + KEY_FIELD_NUMBER: _builtins.int + VALUE_FIELD_NUMBER: _builtins.int + key: _builtins.str + value: _builtins.str + def __init__( + self, + *, + key: _builtins.str = ..., + value: _builtins.str = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _Never # noqa: Y015 + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["key", b"key", "value", b"value"] # noqa: Y015 + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + def WhichOneof(self, oneof_group: _Never) -> None: ... + ID_FIELD_NUMBER: _builtins.int TENANT_ID_FIELD_NUMBER: _builtins.int ACTOR_FIELD_NUMBER: _builtins.int @@ -1008,6 +1066,11 @@ class AuditEntry(_message.Message): NEW_VALUE_FIELD_NUMBER: _builtins.int CONFIG_VERSION_FIELD_NUMBER: _builtins.int CREATED_AT_FIELD_NUMBER: _builtins.int + OBJECT_KIND_FIELD_NUMBER: _builtins.int + ENTRY_HASH_FIELD_NUMBER: _builtins.int + PREVIOUS_HASH_FIELD_NUMBER: _builtins.int + CHAIN_EPOCH_FIELD_NUMBER: _builtins.int + METADATA_FIELD_NUMBER: _builtins.int id: _builtins.str """Server-assigned unique identifier (UUID).""" tenant_id: _builtins.str @@ -1026,10 +1089,29 @@ class AuditEntry(_message.Message): """ config_version: _builtins.int """The config version number created by this action.""" + object_kind: _builtins.str + """The kind of object affected ("field", "schema", "tenant", or "lock").""" + entry_hash: _builtins.str + """SHA-256 hash of this entry's immutable fields, chained to previous_hash.""" + previous_hash: _builtins.str + """entry_hash of the previous entry in this tenant's chain ("" for the first).""" + chain_epoch: _builtins.int + """Hash scheme epoch. 0 = legacy (structural fields only). + 1+ = full payload included in the hash (field_path, old_value, new_value, + config_version, metadata). Clients must use the same epoch when + recomputing entry_hash for verification. + """ @_builtins.property def created_at(self) -> _timestamp_pb2.Timestamp: """When the audit entry was created.""" + @_builtins.property + def metadata(self) -> _containers.ScalarMap[_builtins.str, _builtins.str]: + """Arbitrary key-value metadata attached to this audit entry. + Populated by the server when additional context was recorded (e.g. caller IP, + request ID). Empty when no metadata was stored. + """ + def __init__( self, *, @@ -1042,10 +1124,15 @@ class AuditEntry(_message.Message): new_value: _builtins.str | None = ..., config_version: _builtins.int | None = ..., created_at: _timestamp_pb2.Timestamp | None = ..., + object_kind: _builtins.str = ..., + entry_hash: _builtins.str = ..., + previous_hash: _builtins.str = ..., + chain_epoch: _builtins.int = ..., + metadata: _abc.Mapping[_builtins.str, _builtins.str] | None = ..., ) -> None: ... _HasFieldArgType: _TypeAlias = _typing.Literal["_config_version", b"_config_version", "_field_path", b"_field_path", "_new_value", b"_new_value", "_old_value", b"_old_value", "config_version", b"config_version", "created_at", b"created_at", "field_path", b"field_path", "new_value", b"new_value", "old_value", b"old_value"] # noqa: Y015 def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... - _ClearFieldArgType: _TypeAlias = _typing.Literal["_config_version", b"_config_version", "_field_path", b"_field_path", "_new_value", b"_new_value", "_old_value", b"_old_value", "action", b"action", "actor", b"actor", "config_version", b"config_version", "created_at", b"created_at", "field_path", b"field_path", "id", b"id", "new_value", b"new_value", "old_value", b"old_value", "tenant_id", b"tenant_id"] # noqa: Y015 + _ClearFieldArgType: _TypeAlias = _typing.Literal["_config_version", b"_config_version", "_field_path", b"_field_path", "_new_value", b"_new_value", "_old_value", b"_old_value", "action", b"action", "actor", b"actor", "chain_epoch", b"chain_epoch", "config_version", b"config_version", "created_at", b"created_at", "entry_hash", b"entry_hash", "field_path", b"field_path", "id", b"id", "metadata", b"metadata", "new_value", b"new_value", "object_kind", b"object_kind", "old_value", b"old_value", "previous_hash", b"previous_hash", "tenant_id", b"tenant_id"] # noqa: Y015 def ClearField(self, field_name: _ClearFieldArgType) -> None: ... _WhichOneofReturnType__config_version: _TypeAlias = _typing.Literal["config_version"] # noqa: Y015 _WhichOneofArgType__config_version: _TypeAlias = _typing.Literal["_config_version", b"_config_version"] # noqa: Y015 diff --git a/sdk/src/opendecree/_generated/centralconfig/v1/types_pb2_grpc.py b/sdk/src/opendecree/_generated/centralconfig/v1/types_pb2_grpc.py index 0b03645..3865ca8 100644 --- a/sdk/src/opendecree/_generated/centralconfig/v1/types_pb2_grpc.py +++ b/sdk/src/opendecree/_generated/centralconfig/v1/types_pb2_grpc.py @@ -4,7 +4,7 @@ import warnings -GRPC_GENERATED_VERSION = '1.80.0' +GRPC_GENERATED_VERSION = '1.81.0' GRPC_VERSION = grpc.__version__ _version_not_supported = False