source: OpenRLabs-Git/deploy/rlabs-docker/web2py-rlabs/gluon/packages/dal/pydal/adapters/__init__.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: 2.3 KB
Line 
1import re
2from .._gae import gae
3from ..helpers._internals import Dispatcher
4
5
6class Adapters(Dispatcher):
7    def register_for(self, *uris):
8        def wrap(dispatch_class):
9            for uri in uris:
10                self._registry_[uri] = dispatch_class
11            return dispatch_class
12
13        return wrap
14
15    def get_for(self, uri):
16        try:
17            return self._registry_[uri]
18        except KeyError:
19            raise SyntaxError("Adapter not found for %s" % uri)
20
21
22adapters = Adapters("adapters")
23
24
25class AdapterMeta(type):
26    """Metaclass to support manipulation of adapter classes.
27
28    At the moment is used to intercept `entity_quoting` argument passed to DAL.
29    """
30
31    def __call__(cls, *args, **kwargs):
32        uploads_in_blob = kwargs.get("adapter_args", {}).get(
33            "uploads_in_blob", cls.uploads_in_blob
34        )
35        cls.uploads_in_blob = uploads_in_blob
36
37        entity_quoting = kwargs.get("entity_quoting", True)
38        if "entity_quoting" in kwargs:
39            del kwargs["entity_quoting"]
40
41        obj = super(AdapterMeta, cls).__call__(*args, **kwargs)
42
43        regex_ent = r"(\w+)"
44        if not entity_quoting:
45            obj.dialect.quote_template = "%s"
46        else:
47            regex_ent = obj.dialect.quote_template % regex_ent
48        # FIXME: this regex should NOT be compiled
49        obj.REGEX_TABLE_DOT_FIELD = re.compile(r"^%s\.%s$" % (regex_ent, regex_ent))
50
51        return obj
52
53
54def with_connection(f):
55    def wrap(*args, **kwargs):
56        if args[0].connection:
57            return f(*args, **kwargs)
58        return None
59
60    return wrap
61
62
63def with_connection_or_raise(f):
64    def wrap(*args, **kwargs):
65        if not args[0].connection:
66            if len(args) > 1:
67                raise ValueError(args[1])
68            raise RuntimeError("no connection available")
69        return f(*args, **kwargs)
70
71    return wrap
72
73
74from .base import SQLAdapter, NoSQLAdapter
75from .sqlite import SQLite
76from .postgres import Postgre, PostgrePsyco
77from .mysql import MySQL
78from .mssql import MSSQL
79from .mongo import Mongo
80from .db2 import DB2
81from .firebird import FireBird
82from .informix import Informix
83from .ingres import Ingres
84from .oracle import Oracle
85from .sap import SAPDB
86from .teradata import Teradata
87from .couchdb import CouchDB
88
89from .google import GoogleSQL
Note: See TracBrowser for help on using the repository browser.