from .._compat import integer_types, to_unicode from ..adapters.google import GoogleDatastore from ..helpers.serializers import serializers from .base import NoSQLRepresenter from . import representers, pre, for_type long = integer_types[-1] @representers.register_for(GoogleDatastore) class GoogleDatastoreRepresenter(NoSQLRepresenter): @pre(is_breaking=True) def _keep_lists_for_in_operator(self, obj, field_type): if isinstance(field_type, str) and isinstance(obj, list) and \ not field_type.startswith('list:'): return True, [self.adapter.represent(v, field_type) for v in obj] return False, obj @for_type('json') def _json(self, value): return serializers.json(value) @for_type('list:integer') def _list_integer(self, value): if not isinstance(value, list): return int(value) values = self._represent_list(value) return list(map(int, values)) @for_type('list:string') def _list_string(self, value): if not isinstance(value, list): return str(value) values = self._represent_list(value) return list(map(to_unicode, values)) @for_type('list:reference') def _list_reference(self, value): if not isinstance(value, list): return long(value) values = self._represent_list(value) return list(map(long, values))