From 2d9a379d38719c11828bedb5953a921b49864626 Mon Sep 17 00:00:00 2001 From: gautamomento Date: Fri, 10 Dec 2021 09:13:07 -0800 Subject: [PATCH 1/2] feat: Add ListCaches --- setup.cfg | 2 +- .../_cache_service_errors_converter.py | 6 +---- src/momento/cache_operation_responses.py | 22 +++++++++++++++++++ src/momento/momento.py | 11 +++++++++- 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/setup.cfg b/setup.cfg index e8220b5b..37ac9080 100644 --- a/setup.cfg +++ b/setup.cfg @@ -7,7 +7,7 @@ package_dir = packages = find: python_requires = >=3.6 install_requires = - momento-wire-types==0.6.0 + momento-wire-types==0.7.0 build setuptools pyjwt diff --git a/src/momento/_cache_service_errors_converter.py b/src/momento/_cache_service_errors_converter.py index 0b0d80a4..fd964e13 100644 --- a/src/momento/_cache_service_errors_converter.py +++ b/src/momento/_cache_service_errors_converter.py @@ -9,12 +9,8 @@ grpc.StatusCode.PERMISSION_DENIED: errors.PermissionError, } -# Till the time MR2 stops returning errors in Enums __ecache_result_to_error = { - cache_client_types.Bad_Request: errors.CacheValueError, - cache_client_types.Internal_Server_Error: errors.InternalServerError, - cache_client_types.Service_Unavailable: errors.InternalServerError, - cache_client_types.Unauthorized: errors.PermissionError, + cache_client_types.Invalid: errors.InternalServerError, } diff --git a/src/momento/cache_operation_responses.py b/src/momento/cache_operation_responses.py index 35794eb1..c378d657 100644 --- a/src/momento/cache_operation_responses.py +++ b/src/momento/cache_operation_responses.py @@ -58,3 +58,25 @@ def __init__(self, grpc_create_cache_response): class DeleteCacheResponse: def __init__(self, grpc_delete_cache_response): pass + + +class ListCachesResponse: + def __init__(self, grpc_list_cache_response): + self._next_token = grpc_list_cache_response.next_token + self._caches = [] + for cache in grpc_list_cache_response.cache: + self._caches.append(CacheInfo(cache)) + + def next_token(self): + return self._next_token + + def caches(self): + return self._caches + + +class CacheInfo: + def __init__(self, grpc_listed_caches): + self._name = grpc_listed_caches.cache_name + + def name(self): + return self._name diff --git a/src/momento/momento.py b/src/momento/momento.py index d1b18c96..94f9bab7 100644 --- a/src/momento/momento.py +++ b/src/momento/momento.py @@ -1,7 +1,7 @@ import grpc import momento_wire_types.controlclient_pb2_grpc as control_client -from momento_wire_types.controlclient_pb2 import CreateCacheRequest +from momento_wire_types.controlclient_pb2 import CreateCacheRequest, ListCachesRequest from momento_wire_types.controlclient_pb2 import DeleteCacheRequest from . import _cache_service_errors_converter from . import errors @@ -10,6 +10,7 @@ from . import _momento_endpoint_resolver from .cache_operation_responses import CreateCacheResponse from .cache_operation_responses import DeleteCacheResponse +from .cache_operation_responses import ListCachesResponse class Momento: @@ -61,6 +62,14 @@ def get_cache(self, cache_name, ttl_seconds, create_if_absent=False): self.create_cache(cache_name) return cache._connect() + def list_caches(self, next_token=None): + try: + list_caches_request = ListCachesRequest() + list_caches_request.next_token = next_token + return ListCachesResponse(self._client.ListCaches(list_caches_request)) + except Exception as e: + raise _cache_service_errors_converter.convert(e) + def init(auth_token): return Momento(auth_token) From f6811eb0295bbf8968b6b222dc67d2ef48bbf795 Mon Sep 17 00:00:00 2001 From: gautamomento Date: Fri, 10 Dec 2021 10:33:40 -0800 Subject: [PATCH 2/2] update token logic --- src/momento/cache_operation_responses.py | 2 +- src/momento/momento.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/momento/cache_operation_responses.py b/src/momento/cache_operation_responses.py index c378d657..abf35c3f 100644 --- a/src/momento/cache_operation_responses.py +++ b/src/momento/cache_operation_responses.py @@ -62,7 +62,7 @@ def __init__(self, grpc_delete_cache_response): class ListCachesResponse: def __init__(self, grpc_list_cache_response): - self._next_token = grpc_list_cache_response.next_token + self._next_token = grpc_list_cache_response.next_token if grpc_list_cache_response.next_token != '' else None self._caches = [] for cache in grpc_list_cache_response.cache: self._caches.append(CacheInfo(cache)) diff --git a/src/momento/momento.py b/src/momento/momento.py index 94f9bab7..c8521135 100644 --- a/src/momento/momento.py +++ b/src/momento/momento.py @@ -65,7 +65,7 @@ def get_cache(self, cache_name, ttl_seconds, create_if_absent=False): def list_caches(self, next_token=None): try: list_caches_request = ListCachesRequest() - list_caches_request.next_token = next_token + list_caches_request.next_token = next_token if next_token is not None else '' return ListCachesResponse(self._client.ListCaches(list_caches_request)) except Exception as e: raise _cache_service_errors_converter.convert(e)