Ejemplo n.º 1
0
from sqlplain.dispatcher import generic_on, TagType
from nose.tools import assert_raises

driver = TagType()
driver.register('psycopg2')
driver.register('sqlite3')


class Row(object):
    pass


@generic_on('driver', 'row')
def convert(driver, row):
    raise NotImplementedError


@convert.when_type(driver.psycopg2, Row)
def convert_psycopg2_Row(driver, row):
    print 'psycopg2'


@convert.when_type(driver.sqlite3, Row)
def convert_sqlite3_Row(driver, row):
    print 'sqlite3'


def test():
    convert(driver.psycopg2.instance, Row())
    convert(driver.sqlite3.instance, Row())
    assert_raises(NotImplementedError, convert,
Ejemplo n.º 2
0
import os
import uuid
import tempfile
from sqlplain.dispatcher import generic_on, TagType


class Driver(object):
    @property
    def module(self):
        return __import__(self.tag)

driver = TagType(Driver)
sqlite3 = driver.register('sqlite3').instance
psycopg2 = driver.register('psycopg2').instance
mysqldb = driver.register('MySQLdb').instance
mock = driver.register('mock').instance

#################### multidispatch functions ######################


# works for psycopg2 (and for pymssql, except the autocommit syntax)
@generic_on("uridict['driver']")
def driverconnect(uridict, autocommit, extras):
    "Return a low-level connection by using directly the driver"
    extras.update(uridict)
    for param in ('host', 'port', 'user', 'password'):
        if not extras[param]:
            del extras[param]
    driver = __import__(extras['name'])
    del extras['name']
    del extras['driver']