Exemple #1
0
    def do_init(self):
        class_ = self.parent.class_

        def comparator():
            return self.parent._get_property(self.key, resolve_synonyms=True).comparator

        self.logger.info("register managed attribute %s on class %s" % (self.key, class_.__name__))
        if self.descriptor is None:

            class SynonymProp(object):
                def __set__(s, obj, value):
                    setattr(obj, self.name, value)

                def __delete__(s, obj):
                    delattr(obj, self.name)

                def __get__(s, obj, owner):
                    if obj is None:
                        return s
                    return getattr(obj, self.name)

            self.descriptor = SynonymProp()
        sessionlib.register_attribute(
            class_, self.key, uselist=False, proxy_property=self.descriptor, useobject=False, comparator=comparator
        )
Exemple #2
0
    def _init_composite_attribute(self):
        self.logger.info(
            "register managed composite attribute %s on class %s" %
            (self.key, self.parent.class_.__name__))

        def copy(obj):
            return self.parent_property.composite_class(
                *obj.__composite_values__())

        def compare(a, b):
            for col, aprop, bprop in zip(self.columns,
                                         a.__composite_values__(),
                                         b.__composite_values__()):
                if not col.type.compare_values(aprop, bprop):
                    return False
            else:
                return True

        sessionlib.register_attribute(
            self.parent.class_,
            self.key,
            uselist=False,
            useobject=False,
            copy_function=copy,
            compare_function=compare,
            mutable_scalars=True,
            comparator=self.parent_property.comparator)
Exemple #3
0
    def do_init(self):
        class_ = self.parent.class_

        def comparator():
            return self.parent._get_property(self.key,
                                             resolve_synonyms=True).comparator

        self.logger.info("register managed attribute %s on class %s" %
                         (self.key, class_.__name__))
        if self.descriptor is None:

            class SynonymProp(object):
                def __set__(s, obj, value):
                    setattr(obj, self.name, value)

                def __delete__(s, obj):
                    delattr(obj, self.name)

                def __get__(s, obj, owner):
                    if obj is None:
                        return s
                    return getattr(obj, self.name)

            self.descriptor = SynonymProp()
        sessionlib.register_attribute(class_,
                                      self.key,
                                      uselist=False,
                                      proxy_property=self.descriptor,
                                      useobject=False,
                                      comparator=comparator)
Exemple #4
0
 def _register_attribute(self, class_, callable_=None, impl_class=None, **kwargs):
     self.logger.info("%s register managed %s attribute" % (self, (self.uselist and "collection" or "scalar")))
     
     attribute_ext = util.to_list(self.parent_property.extension) or []
     
     if self.parent_property.backref:
         attribute_ext.append(self.parent_property.backref.extension)
     
     if self.key in self.parent._validators:
         attribute_ext.append(mapperutil.Validator(self.key, self.parent._validators[self.key]))
         
     sessionlib.register_attribute(
         class_, 
         self.key, 
         uselist=self.uselist, 
         useobject=True, 
         extension=attribute_ext, 
         trackparent=True, 
         typecallable=self.parent_property.collection_class, 
         callable_=callable_, 
         comparator=self.parent_property.comparator, 
         parententity=self.parent,
         impl_class=impl_class,
         **kwargs
         )
Exemple #5
0
    def _register_attribute(self, compare_function, copy_function, mutable_scalars, 
            comparator_factory, callable_=None, proxy_property=None, active_history=False):
        self.logger.info("%s register managed attribute" % self)

        attribute_ext = util.to_list(self.parent_property.extension) or []
        if self.key in self.parent._validators:
            attribute_ext.append(mapperutil.Validator(self.key, self.parent._validators[self.key]))

        for mapper in self.parent.polymorphic_iterator():
            if (mapper is self.parent or not mapper.concrete) and mapper.has_property(self.key):
                sessionlib.register_attribute(
                    mapper.class_, 
                    self.key, 
                    uselist=False, 
                    useobject=False, 
                    copy_function=copy_function, 
                    compare_function=compare_function, 
                    mutable_scalars=mutable_scalars, 
                    comparator=comparator_factory(self.parent_property, mapper), 
                    parententity=mapper,
                    callable_=callable_,
                    extension=attribute_ext,
                    proxy_property=proxy_property,
                    active_history=active_history
                    )
Exemple #6
0
    def do_init(self):
        """Set up a proxy to the unmanaged descriptor."""

        class_ = self.parent.class_
        # refactor me
        sessionlib.register_attribute(
            class_, self.key, uselist=False, proxy_property=self.descriptor, useobject=False, comparator=self.comparator
        )
Exemple #7
0
    def do_init(self):
        """Set up a proxy to the unmanaged descriptor."""

        class_ = self.parent.class_
        # refactor me
        sessionlib.register_attribute(class_, self.key, uselist=False,
                                      proxy_property=self.descriptor,
                                      useobject=False,
                                      comparator=self.comparator)
Exemple #8
0
 def _init_scalar_attribute(self):
     self.logger.info("register managed attribute %s on class %s" %
                      (self.key, self.parent.class_.__name__))
     coltype = self.columns[0].type
     sessionlib.register_attribute(
         self.parent.class_,
         self.key,
         uselist=False,
         useobject=False,
         copy_function=coltype.copy_value,
         compare_function=coltype.compare_values,
         mutable_scalars=self.columns[0].type.is_mutable(),
         comparator=self.parent_property.comparator)
 def _init_composite_attribute(self):
     self.logger.info("register managed composite attribute %s on class %s" % (self.key, self.parent.class_.__name__))
     def copy(obj):
         return self.parent_property.composite_class(
             *obj.__composite_values__())
     def compare(a, b):
         for col, aprop, bprop in zip(self.columns,
                                      a.__composite_values__(),
                                      b.__composite_values__()):
             if not col.type.compare_values(aprop, bprop):
                 return False
         else:
             return True
     sessionlib.register_attribute(self.parent.class_, self.key, uselist=False, useobject=False, copy_function=copy, compare_function=compare, mutable_scalars=True, comparator=self.parent_property.comparator)
Exemple #10
0
 def _register_attribute(self, class_, callable_=None, **kwargs):
     self.logger.info("register managed %s attribute %s on class %s" %
                      ((self.uselist and "list-holding" or "scalar"),
                       self.key, self.parent.class_.__name__))
     sessionlib.register_attribute(
         class_,
         self.key,
         uselist=self.uselist,
         useobject=True,
         extension=self.attributeext,
         cascade=self.cascade,
         trackparent=True,
         typecallable=self.parent_property.collection_class,
         callable_=callable_,
         comparator=self.parent_property.comparator,
         **kwargs)
 def _init_scalar_attribute(self):
     self.logger.info("register managed attribute %s on class %s" % (self.key, self.parent.class_.__name__))
     coltype = self.columns[0].type
     sessionlib.register_attribute(self.parent.class_, self.key, uselist=False, useobject=False, copy_function=coltype.copy_value, compare_function=coltype.compare_values, mutable_scalars=self.columns[0].type.is_mutable(), comparator=self.parent_property.comparator)
 def _register_attribute(self, class_, callable_=None, **kwargs):
     self.logger.info("register managed %s attribute %s on class %s" % ((self.uselist and "list-holding" or "scalar"), self.key, self.parent.class_.__name__))
     sessionlib.register_attribute(class_, self.key, uselist=self.uselist, useobject=True, extension=self.attributeext, cascade=self.cascade,  trackparent=True, typecallable=self.parent_property.collection_class, callable_=callable_, comparator=self.parent_property.comparator, **kwargs)