source: OpenRLabs-Git/deploy/rlabs-docker/web2py-rlabs/gluon/packages/dal/pydal/parsers/mongo.py

main
Last change on this file was 42bd667, checked in by David Fuertes <dfuertes@…>, 4 years ago

Historial Limpio

  • Property mode set to 100755
File size: 1.6 KB
Line 
1from datetime import datetime
2from .._compat import PY2, integer_types
3from ..adapters.mongo import Mongo, MongoBlob
4from ..helpers.classes import Reference
5from . import Parser, parsers, for_type, before_parse
6
7long = integer_types[-1]
8
9
10@parsers.register_for(Mongo)
11class MongoParser(Parser):
12    @for_type("id")
13    def _id(self, value):
14        if isinstance(value, self.adapter.ObjectId):
15            return long(str(value), 16)
16        return long(value)
17
18    @for_type("blob")
19    def _blob(self, value):
20        return MongoBlob.decode(value) if PY2 else value
21
22    @before_parse("reference")
23    def reference_extras(self, field_type):
24        return {"referee": field_type[10:].strip()}
25
26    @for_type("reference")
27    def _reference(self, value, referee):
28        if isinstance(value, self.adapter.ObjectId):
29            value = long(str(value), 16)
30        if "." not in referee:
31            value = Reference(value)
32            value._table, value._record = self.adapter.db[referee], None
33        return value
34
35    @before_parse("list:reference")
36    def referencelist_extras(self, field_type):
37        return {"field_type": field_type}
38
39    @for_type("list:reference")
40    def _list_references(self, value, field_type):
41        return [self.registered["reference"](el, field_type[5:]) for el in value]
42
43    @for_type("date")
44    def _date(self, value):
45        if isinstance(value, datetime):
46            return value.date()
47        return value
48
49    @for_type("time")
50    def _time(self, value):
51        if isinstance(value, datetime):
52            return value.time()
53        return value
Note: See TracBrowser for help on using the repository browser.