43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
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))
|