From 8cd9b70ef159f8579408468dba90c11ff299397c Mon Sep 17 00:00:00 2001 From: Valeriya Popova Date: Wed, 11 Jan 2023 16:46:12 +0300 Subject: [PATCH] add unknown item type to scheme ls --- CHANGELOG.md | 2 ++ ydb/scheme.py | 15 +++++++++------ ydb/scheme_test.py | 30 ++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 ydb/scheme_test.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 089c5c2a..0abea541 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,5 @@ +* Support `TYPE_UNSPECIFIED` item type to scheme ls + ## 2.12.0 ## * Fixed error message while get token from metadata with asyncio iam * Add `SnapshotReadOnly` transaction mode support to `session.transaction` diff --git a/ydb/scheme.py b/ydb/scheme.py index a78357e0..88eca78c 100644 --- a/ydb/scheme.py +++ b/ydb/scheme.py @@ -12,6 +12,7 @@ class SchemeEntryType(enum.IntEnum): Enumerates all available entry types. """ + TYPE_UNSPECIFIED = 0 DIRECTORY = 1 TABLE = 2 PERS_QUEUE_GROUP = 3 @@ -24,6 +25,10 @@ class SchemeEntryType(enum.IntEnum): REPLICATION = 16 TOPIC = 17 + @classmethod + def _missing_(cls, value): + return cls.TYPE_UNSPECIFIED + @staticmethod def is_table(entry): """ @@ -299,7 +304,7 @@ def _wrap_scheme_entry(entry_pb, scheme_entry_cls=None, *args, **kwargs): return scheme_entry_cls( entry_pb.name, entry_pb.owner, - getattr(SchemeEntryType, _apis.ydb_scheme.Entry.Type.Name(entry_pb.type)), + SchemeEntryType(entry_pb.type), _wrap_permissions(entry_pb.effective_permissions), _wrap_permissions(entry_pb.permissions), entry_pb.size_bytes, @@ -318,7 +323,7 @@ def _wrap_list_directory_response(rpc_state, response): message = _apis.ydb_scheme.ListDirectoryResult() response.operation.result.Unpack(message) children = [] - supported_items = set([i.value for i in SchemeEntryType]) + supported_items = set(i.value for i in SchemeEntryType) for children_item in message.children: if children_item.type not in supported_items: continue @@ -328,12 +333,10 @@ def _wrap_list_directory_response(rpc_state, response): return Directory( message.self.name, message.self.owner, - getattr(SchemeEntryType, _apis.ydb_scheme.Entry.Type.Name(message.self.type)), + SchemeEntryType(message.self.type), _wrap_permissions(message.self.effective_permissions), _wrap_permissions(message.self.permissions), - tuple( - children, - ), + tuple(children), ) diff --git a/ydb/scheme_test.py b/ydb/scheme_test.py new file mode 100644 index 00000000..79094882 --- /dev/null +++ b/ydb/scheme_test.py @@ -0,0 +1,30 @@ +from ydb.scheme import ( + SchemeEntryType, + _wrap_scheme_entry, + _wrap_list_directory_response, +) +from ydb._apis import ydb_scheme + + +def test_wrap_scheme_entry(): + assert ( + _wrap_scheme_entry(ydb_scheme.Entry(type=1)).type is SchemeEntryType.DIRECTORY + ) + assert _wrap_scheme_entry(ydb_scheme.Entry(type=17)).type is SchemeEntryType.TOPIC + + assert ( + _wrap_scheme_entry(ydb_scheme.Entry()).type is SchemeEntryType.TYPE_UNSPECIFIED + ) + assert ( + _wrap_scheme_entry(ydb_scheme.Entry(type=10)).type + is SchemeEntryType.TYPE_UNSPECIFIED + ) + assert ( + _wrap_scheme_entry(ydb_scheme.Entry(type=1001)).type + is SchemeEntryType.TYPE_UNSPECIFIED + ) + + +def test_wrap_list_directory_response(): + d = _wrap_list_directory_response(None, ydb_scheme.ListDirectoryResponse()) + assert d.type is SchemeEntryType.TYPE_UNSPECIFIED