Esempio n. 1
0
    def __call__(cls, *args, **params):
        assembly = params.pop("__assembly__", None)
        if not assembly:
            assembly = Assembly.current()

        identity = params.pop("__identity__", None)
        token = params.pop("__token__", None)

        if not token:
            token = identity = cls.identity

        signature = get_constructor_args(cls)
        if args:
            for i, argument in enumerate(args):
                try:
                    name = signature[i]
                    if name not in params:
                        params[name] = argument
                    else:
                        raise TypeError("duplicate arguments")
                except IndexError:
                    raise TypeError("too many arguments")

        unit = cls.__new__(cls)
        unit.__assembly__ = assembly
        unit.__identity__ = identity
        unit.__token__ = token

        # log('debug', 'instantiating unit %s: token=%r, identity=%r',
        #    cls.identity, token, identity)

        if cls.configuration:
            configuration = cls.configuration.get(unit)
            if params:
                for name, value in params.items():
                    configuration[name] = value
                    if name not in signature:
                        del params[name]

            for name in signature:
                if name in configuration:
                    params[name] = configuration[name]

        for dependency in cls.dependencies.itervalues():
            if not dependency.deferred:
                dependency.get(unit)

        unit.__init__(**params)

        return unit
Esempio n. 2
0
    def __call__(cls, *args, **params):
        assembly = params.pop('__assembly__', None)
        if not assembly:
            assembly = Assembly.current()

        identity = params.pop('__identity__', None)
        token = params.pop('__token__', None)

        if not token:
            token = identity = cls.identity

        signature = get_constructor_args(cls)
        if args:
            for i, argument in enumerate(args):
                try:
                    name = signature[i]
                    if name not in params:
                        params[name] = argument
                    else:
                        raise TypeError('duplicate arguments')
                except IndexError:
                    raise TypeError('too many arguments')

        unit = cls.__new__(cls)
        unit.__assembly__ = assembly
        unit.__identity__ = identity
        unit.__token__ = token

        #log('debug', 'instantiating unit %s: token=%r, identity=%r',
        #    cls.identity, token, identity)

        if cls.configuration:
            configuration = cls.configuration.get(unit)
            if params:
                for name, value in params.items():
                    configuration[name] = value
                    if name not in signature:
                        del params[name]

            for name in signature:
                if name in configuration:
                    params[name] = configuration[name]

        for dependency in cls.dependencies.itervalues():
            if not dependency.deferred:
                dependency.get(unit)

        unit.__init__(**params)

        return unit
Esempio n. 3
0
File: model.py Progetto: siq/spire
from threading import Lock

from sqlalchemy import Column, MetaData, Table, event
from sqlalchemy.ext.declarative import DeclarativeMeta, declarative_base
from sqlalchemy.orm import mapper
from sqlalchemy.orm.attributes import InstrumentedAttribute
from sqlalchemy.orm.mapper import Mapper
from sqlalchemy.orm.properties import ColumnProperty
from sqlalchemy.orm.session import object_session

from spire.schema.schema import Schema, SessionLocals
from spire.util import get_constructor_args, pluralize

__all__ = ("Model",)

MAPPER_PARAMS = get_constructor_args(Mapper)


class AttributeValidator(object):
    def __init__(self, column):
        self.column = column

    def __call__(self, instance, value, oldvalue, initiator):
        column = self.column
        if value is None:
            if column.nullable:
                return value
            else:
                raise ValueError(repr(self.column))
        else:
            return column.type.validate(instance, column, value) or value
Esempio n. 4
0
from threading import Lock

from sqlalchemy import Column, MetaData, Table, event
from sqlalchemy.ext.declarative import DeclarativeMeta, declarative_base
from sqlalchemy.orm import mapper
from sqlalchemy.orm.attributes import InstrumentedAttribute
from sqlalchemy.orm.mapper import Mapper
from sqlalchemy.orm.properties import ColumnProperty
from sqlalchemy.orm.session import object_session

from spire.schema.schema import Schema, SessionLocals
from spire.util import get_constructor_args, pluralize

__all__ = ('Model', )

MAPPER_PARAMS = get_constructor_args(Mapper)


class AttributeValidator(object):
    def __init__(self, column):
        self.column = column

    def __call__(self, instance, value, oldvalue, initiator):
        column = self.column
        if value is None:
            if column.nullable:
                return value
            else:
                raise ValueError(repr(self.column))
        else:
            return column.type.validate(instance, column, value) or value