SP/web2py/gluon/packages/dal/pydal/representers/google.py

43 lines
1.4 KiB
Python
Raw Permalink Normal View History

2018-10-25 15:33:07 +00:00
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))