"""Util for package.""" from boto3.dynamodb.types import TypeDeserializer class AsDictModelMixin: """Mixin that adds method for converting Pynamo model to python dict.""" _deserializer = TypeDeserializer() @property def hash_key_name(self): """Get name of a hash key. Returns: str: hash key name or None """ return next( (k for k, v in self._attributes.items() if v.is_hash_key), None) @property def range_key_name(self): """Get name of a range key. Returns: str: range key name or None """ return next( (k for k, v in self._attributes.items() if v.is_range_key), None) def as_dict(self): """Get dictionary representation of a Pynamo model. Returns: dict: pynamo model as python dictionary """ result = {} hash_key, json_data = self._get_json() # hash key if self.hash_key_name: result[self.hash_key_name] = hash_key # range key if self.range_key_name: result[self.range_key_name] = json_data.get('range_key') # attributes model_attributes = json_data.get('attributes', {}) for k, v in model_attributes.items(): try: value = self._deserializer.deserialize(v) except TypeError: value = None finally: result[k] = value return result