SP/web2py/gluon/packages/dal/pydal/adapters/__init__.py

88 lines
2.4 KiB
Python
Raw Normal View History

2018-10-25 15:33:07 +00:00
import re
from .._gae import gae
from ..helpers._internals import Dispatcher
from ..helpers.regex import REGEX_NO_GREEDY_ENTITY_NAME
class Adapters(Dispatcher):
def register_for(self, *uris):
def wrap(dispatch_class):
for uri in uris:
self._registry_[uri] = dispatch_class
return dispatch_class
return wrap
def get_for(self, uri):
try:
return self._registry_[uri]
except KeyError:
raise SyntaxError(
'Adapter not found for %s' % uri
)
adapters = Adapters('adapters')
class AdapterMeta(type):
"""Metaclass to support manipulation of adapter classes.
At the moment is used to intercept `entity_quoting` argument passed to DAL.
"""
def __call__(cls, *args, **kwargs):
uploads_in_blob = kwargs.get('adapter_args', {}).get(
'uploads_in_blob', cls.uploads_in_blob)
cls.uploads_in_blob = uploads_in_blob
entity_quoting = kwargs.get('entity_quoting', True)
if 'entity_quoting' in kwargs:
del kwargs['entity_quoting']
obj = super(AdapterMeta, cls).__call__(*args, **kwargs)
if not entity_quoting:
quot = obj.dialect.quote_template = '%s'
regex_ent = r'(\w+)'
else:
quot = obj.dialect.quote_template
regex_ent = REGEX_NO_GREEDY_ENTITY_NAME
obj.REGEX_TABLE_DOT_FIELD = re.compile(
r'^' + quot % regex_ent + r'\.' + quot % regex_ent + r'$')
return obj
def with_connection(f):
def wrap(*args, **kwargs):
if args[0].connection:
return f(*args, **kwargs)
return None
return wrap
def with_connection_or_raise(f):
def wrap(*args, **kwargs):
if not args[0].connection:
if len(args) > 1:
raise ValueError(args[1])
raise RuntimeError('no connection available')
return f(*args, **kwargs)
return wrap
from .base import SQLAdapter, NoSQLAdapter
from .sqlite import SQLite
from .postgres import Postgre, PostgrePsyco, PostgrePG8000
from .mysql import MySQL
from .mssql import MSSQL
from .mongo import Mongo
from .db2 import DB2
from .firebird import FireBird
from .informix import Informix
from .ingres import Ingres
from .oracle import Oracle
from .sap import SAPDB
from .teradata import Teradata
from .couchdb import CouchDB
if gae is not None:
from .google import GoogleSQL