diff options
| author | Jordan Cook <jordan.cook@pioneer.com> | 2022-04-20 16:50:40 -0500 |
|---|---|---|
| committer | Jordan Cook <jordan.cook@pioneer.com> | 2022-04-22 17:28:33 -0500 |
| commit | 0dbd82d4d28875f2c0a592dfc89f50bf1c63cb2b (patch) | |
| tree | f3982671c81005c29c39fbd6da241e79509cc0cf /requests_cache/backends/dynamodb.py | |
| parent | 57579af3a5c4e683f2dd96f493471077808d1d39 (diff) | |
| download | requests-cache-0dbd82d4d28875f2c0a592dfc89f50bf1c63cb2b.tar.gz | |
Merge *PickleDict storage classes into parent classes
Diffstat (limited to 'requests_cache/backends/dynamodb.py')
| -rw-r--r-- | requests_cache/backends/dynamodb.py | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/requests_cache/backends/dynamodb.py b/requests_cache/backends/dynamodb.py index d6a5fdb..f39d267 100644 --- a/requests_cache/backends/dynamodb.py +++ b/requests_cache/backends/dynamodb.py @@ -19,6 +19,7 @@ from . import BaseCache, BaseStorage class DynamoDbCache(BaseCache): """DynamoDB cache backend. + By default, responses are only partially serialized into a DynamoDB-compatible document format. Args: table_name: DynamoDB table name @@ -34,14 +35,25 @@ class DynamoDbCache(BaseCache): table_name: str = 'http_cache', ttl: bool = True, connection: ServiceResource = None, + serializer=None, **kwargs, ): super().__init__(cache_name=table_name, **kwargs) - self.responses = DynamoDbDocumentDict( - table_name, 'responses', ttl=ttl, connection=connection, **kwargs + self.responses = DynamoDbDict( + table_name, + 'responses', + ttl=ttl, + serializer=serializer or dynamodb_document_serializer, + connection=connection, + **kwargs, ) self.redirects = DynamoDbDict( - table_name, 'redirects', ttl=False, connection=self.responses.connection, **kwargs + table_name, + 'redirects', + ttl=False, + connection=self.responses.connection, + serializer=None, + **kwargs, ) @@ -132,14 +144,15 @@ class DynamoDbDict(BaseStorage): # With a custom serializer, the value may be a Binary object raw_value = result['Item']['value'] - return raw_value.value if isinstance(raw_value, Binary) else raw_value + value = raw_value.value if isinstance(raw_value, Binary) else raw_value + return self.deserialize(value) def __setitem__(self, key, value): - item = {**self._composite_key(key), 'value': value} + item = {**self._composite_key(key), 'value': self.serialize(value)} # If enabled, set TTL value as a timestamp in unix format if self.ttl and getattr(value, 'ttl', None): - item['ttl'] = int(time() + value.ttl) + item['ttl'] = round(time() + value.ttl) self._table.put_item(Item=item) @@ -169,19 +182,3 @@ class DynamoDbDict(BaseStorage): def clear(self): self.bulk_delete((k for k in self)) - - -class DynamoDbDocumentDict(DynamoDbDict): - """Same as :class:`DynamoDbDict`, but serializes values before saving. - - By default, responses are only partially serialized into a DynamoDB-compatible document format. - """ - - def __init__(self, *args, serializer=None, **kwargs): - super().__init__(*args, serializer=serializer or dynamodb_document_serializer, **kwargs) - - def __getitem__(self, key): - return self.serializer.loads(super().__getitem__(key)) - - def __setitem__(self, key, item): - super().__setitem__(key, self.serializer.dumps(item)) |
