1 | from .._compat import integer_types, to_unicode |
---|
2 | from ..adapters.google import GoogleDatastore |
---|
3 | from ..helpers.serializers import serializers |
---|
4 | from .base import NoSQLRepresenter |
---|
5 | from . import representers, pre, for_type |
---|
6 | |
---|
7 | long = integer_types[-1] |
---|
8 | |
---|
9 | |
---|
10 | @representers.register_for(GoogleDatastore) |
---|
11 | class GoogleDatastoreRepresenter(NoSQLRepresenter): |
---|
12 | @pre(is_breaking=True) |
---|
13 | def _keep_lists_for_in_operator(self, obj, field_type): |
---|
14 | if ( |
---|
15 | isinstance(field_type, str) |
---|
16 | and isinstance(obj, list) |
---|
17 | and not field_type.startswith("list:") |
---|
18 | ): |
---|
19 | return True, [self.adapter.represent(v, field_type) for v in obj] |
---|
20 | return False, obj |
---|
21 | |
---|
22 | @for_type("json") |
---|
23 | def _json(self, value): |
---|
24 | return serializers.json(value) |
---|
25 | |
---|
26 | @for_type("list:integer") |
---|
27 | def _list_integer(self, value): |
---|
28 | if not isinstance(value, list): |
---|
29 | return int(value) |
---|
30 | values = self._represent_list(value) |
---|
31 | return list(map(int, values)) |
---|
32 | |
---|
33 | @for_type("list:string") |
---|
34 | def _list_string(self, value): |
---|
35 | if not isinstance(value, list): |
---|
36 | return str(value) |
---|
37 | values = self._represent_list(value) |
---|
38 | return list(map(to_unicode, values)) |
---|
39 | |
---|
40 | @for_type("list:reference") |
---|
41 | def _list_reference(self, value): |
---|
42 | if not isinstance(value, list): |
---|
43 | return long(value) |
---|
44 | values = self._represent_list(value) |
---|
45 | return list(map(long, values)) |
---|