1 | from ..adapters.oracle import Oracle |
---|
2 | import json |
---|
3 | from .base import BasicParser, ListsParser |
---|
4 | from datetime import datetime, date, time, timedelta |
---|
5 | from base64 import b64decode |
---|
6 | from .._compat import to_native |
---|
7 | from . import parsers, for_type |
---|
8 | |
---|
9 | |
---|
10 | class OracleParser(BasicParser): |
---|
11 | @for_type("integer") |
---|
12 | def _integer(self, value): |
---|
13 | return int(value) |
---|
14 | |
---|
15 | @for_type("text") |
---|
16 | def _text(self, value): |
---|
17 | return value |
---|
18 | |
---|
19 | @for_type("clob") |
---|
20 | def _clob(self, value): |
---|
21 | return value |
---|
22 | |
---|
23 | @for_type("blob") |
---|
24 | def _blob(self, value): |
---|
25 | decoded = b64decode(value.read()) |
---|
26 | try: |
---|
27 | decoded = to_native(decoded) |
---|
28 | except: |
---|
29 | pass |
---|
30 | return decoded |
---|
31 | |
---|
32 | @for_type("json") |
---|
33 | def _json(self, value): |
---|
34 | return json.loads(value) |
---|
35 | |
---|
36 | @for_type("date") |
---|
37 | def _date(self, value): |
---|
38 | if isinstance(value, datetime): |
---|
39 | return value.date() |
---|
40 | (y, m, d) = map(int, str(value)[:10].strip().split("-")) |
---|
41 | return date(y, m, d) |
---|
42 | |
---|
43 | @for_type("list:reference") |
---|
44 | def _list_references(self, value, field_type): |
---|
45 | return super(OracleParser, self)._list_references.f(self, value, field_type) |
---|
46 | |
---|
47 | |
---|
48 | class OracleListsParser(ListsParser): |
---|
49 | @for_type("list:integer") |
---|
50 | def _list_integers(self, value): |
---|
51 | return super(OracleListsParser, self)._list_integers.f(self, value) |
---|
52 | |
---|
53 | @for_type("list:string") |
---|
54 | def _list_strings(self, value): |
---|
55 | return super(OracleListsParser, self)._list_strings.f(self, value) |
---|
56 | |
---|
57 | |
---|
58 | @parsers.register_for(Oracle) |
---|
59 | class OracleCommonparser(OracleParser, OracleListsParser): |
---|
60 | pass |
---|