ó ÃÌ4]c@sªdZddlmZddlmZddlmZddlmZddlmZddlm Z dd lm Z dd lm Z dd lm Z dd lmZdd lmZddlmZdefd„ƒYZejjddeƒdefd„ƒYƒZejjddeƒdefd„ƒYƒZejjddeƒdefd„ƒYƒZejjddeƒejddƒdefd„ƒYƒƒZdS(sŸDescriptor properties are more "auxiliary" properties that exist as configurational elements, but don't participate as actively in the load/persist ORM loop. i(t attributes(t properties(tquery(tMapperProperty(tPropComparator(t _none_seti(tevent(texc(tschema(tsql(tutil(t expressiontDescriptorPropertycBseZdZdZd„ZRS(sS:class:`.MapperProperty` which proxies access to a user-defined descriptor.c s;ˆ‰dtf‡‡fd†ƒY}ˆjdkrjtˆjˆjdƒ}ˆj|ƒrj|ˆ_qjnˆjdkrLJfd†}‡fd†}‡fd†}td|d|d|ƒˆ_ntj ˆjƒˆj jˆjˆj‡‡fd †d ˆj d ˆƒ}|ˆjƒ|_ ˆj jˆj|ƒdS( Nt _ProxyImplcsbeZeZeZeZe‡‡fd†ƒZd„Z e ˆdƒr`e j ‡fd†Z nRS(cstˆjˆjƒjjS(N(tgetattrtclass_tnametimplt uses_objects(tself(tmappertprop(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR*scSs ||_dS(N(tkey(RR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyt__init__.st get_historycsˆj|||ƒS(N(R(Rtstatetdict_tpassive(R(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR3s(t__name__t __module__tFalsetaccepts_scalar_loadertTruetexpire_missingt collectiontpropertyRRthasattrRt PASSIVE_OFFR((RR(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR %s cst|ˆj|ƒdS(N(tsetattrR(tobjtvalue(R(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pytfset?scst|ˆjƒdS(N(tdelattrR(R'(R(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pytfdelBscst|ˆjƒS(N(RR(R'(R(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pytfgetEsR,R)R+cs ˆjˆƒS(N(t_comparator_factory((RR(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pytNttdoctoriginal_property(tobjectt descriptortNoneRRRt_is_userland_descriptorR#Rtcreate_proxied_attributetparentR0Rt class_managertinstrument_attribute(RRR tdescR)R+R,t proxy_attr((RRRsR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pytinstrument_class"s(!   N(RRt__doc__R4R0R<(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR sssqlalchemy.orm.propertiest add_to_alltCompositePropertycBsëeZdZejddƒd„ƒZd„Zd„Zd„Zej d„ƒZ ej d „ƒZ e d „ƒZ d „Zd „Zej d „ƒZejd„Zd„Zdejfd„ƒYZdefd„ƒYZd„ZRS(söDefines a "composite" mapped attribute, representing a collection of columns as one attribute. :class:`.CompositeProperty` is constructed using the :func:`.composite` function. .. seealso:: :ref:`mapper_composite` t extensions0.7s½:class:`.AttributeExtension` is deprecated in favor of the :class:`.AttributeEvents` listener interface. The :paramref:`.composite.extension` parameter will be removed in a future release.cOs»tt|ƒjƒ||_||_|jdtƒ|_|jdtƒ|_|jddƒ|_ |j d|j j ƒ|_d|kr |j dƒ|_ntj|ƒ|jƒdS(sQReturn a composite column-based property for use with a Mapper. See the mapping documentation section :ref:`mapper_composite` for a full usage example. The :class:`.MapperProperty` returned by :func:`.composite` is the :class:`.CompositeProperty`. :param class\_: The "composite type" class, or any classmethod or callable which will produce a new instance of the composite object given the column values in order. :param \*cols: List of Column objects to be mapped. :param active_history=False: When ``True``, indicates that the "previous" value for a scalar attribute should be loaded when replaced, if not already loaded. See the same flag on :func:`.column_property`. :param group: A group name for this property when marked as deferred. :param deferred: When True, the column property is "deferred", meaning that it does not load immediately, and is instead loaded when the attribute is first accessed on an instance. See also :func:`~sqlalchemy.orm.deferred`. :param comparator_factory: a class which extends :class:`.CompositeProperty.Comparator` which provides custom SQL clause generation for comparison operations. :param doc: optional string that will be applied as the doc on the class-bound descriptor. :param info: Optional data dictionary which will be populated into the :attr:`.MapperProperty.info` attribute of this object. :param extension: an :class:`.AttributeExtension` instance, or list of extensions, which will be prepended to the list of attribute listeners for the resulting descriptor placed on the class. tactive_historytdeferredtgrouptcomparator_factorytinfoN(tsuperR?Rtattrstcomposite_classtgetRRARBR4RCtpopt __class__t ComparatorRDRER tset_creation_ordert_create_descriptor(RRRGtkwargs((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyRds:    cCs$tt|ƒj|ƒ|jƒdS(N(RFR?R<t_setup_event_handlers(RR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR<®scCs|jƒdS(sInitialization which occurs after the :class:`.CompositeProperty` has been associated with its parent mapper. N(t_setup_arguments_on_columns(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pytdo_init²scsF‡fd†}‡fd†}‡fd†}t|||ƒˆ_dS(stCreate the Python descriptor that will serve as the access point on instances of the mapped class. csÎtj|ƒ}tj|ƒ}ˆj|kr»gˆjD]}t||ƒ^q7}ˆj|kr»|jdk s€tj|ƒ r»ˆj |Œ|ˆj<|j j j |dˆjgƒq»n|j ˆjdƒS(N(Rt instance_dicttinstance_stateRt_attribute_keysRR4Rt issupersetRHtmanagertdispatchtrefreshRI(tinstanceRRRtvalues(R(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR,¿s%%csòtj|ƒ}tj|ƒ}|jˆj}|jˆjtjƒ}x,|jjD]}|||||j ƒ}qSW||ˆj<|dkrµx]ˆj D]}t ||dƒq˜Wn9x6t ˆj |jƒƒD]\}}t |||ƒqÎWdS(N(RRSRTRWRRItNO_VALUERXtsetRR4RUR&tzipt__composite_values__(RZR(RRtattrtprevioustfnR(R(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR)Øs  cs‡tj|ƒ}tj|ƒ}|jˆjtjƒ}|jˆj}|jj|||j ƒx!ˆj D]}t ||dƒqiWdS(N( RRTRSRJRR\RWRXtremoveRRUR&R4(RZRRRaR`R(R(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR+ésN(R#R3(RR,R)R+((RsR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyRN¹s cCs,g|jD]}t|jj|jƒ^q S(N(tpropsRR7RR(RR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyt_comparable_elementsôscCs®g}x¡|jD]–}t|tƒr@|jj|dtƒ}nYt|tjƒre|jj|}n4t|t j ƒrƒ|j }nt j d|fƒ‚|j|ƒqW|S(Nt_configure_mapperss[Composite expects Column objects or mapped attributes/attribute names as arguments, got: %r(RGt isinstancetstrR7t get_propertyRRtColumnt_columntopropertyRtInstrumentedAttributeR#tsa_exct ArgumentErrortappend(RRdR`R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyRdøs  cCs,g|jD]}t|tjƒr |^q S(N(RGRgRRj(Rta((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pytcolumns scCscx\|jD]Q}|j|_|jrO|j|_dtfdtff|_n|j|_q WdS(swPropagate configuration arguments made on this composite to the target columns, for those that apply. RBt instrumentN(RdRARBR t strategy_keyRC(RR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyRQs    csí‡fd†}‡fd†}‡fd†‰‡fd†}‡fd†}tjˆjd|dtƒtjˆjd|dtƒtjˆjd |dtd tƒtjˆjd |dtd tƒtjˆjd |dtd tƒd S(s>Establish events that populate/expire the composite attribute.csˆ||dtƒdS(Nt is_refresh(R(Rtargs(t_load_refresh_handler(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyt load_handlerscsˆ||dtƒdS(NRt(R (RRu(Rv(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pytrefresh_handler!scs~|j}| r#ˆj|kr#dSx!ˆjD]}||kr-dSq-WˆjgˆjD]}|j|^qWŒ|ˆjProvided for userland code that uses attributes.get_history().N((((RRdRRWRRt has_changesR t non_deletedtextendRoR4tdeletedRtHistoryRH( RRRRtaddedRŠt has_historyRRthistRˆ((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyRYs*      cCs|j||ƒS(N(RD(RR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR-ystCompositeBundlecBseZd„Zd„ZRS(cCs,||_ttj|ƒj|j|ŒdS(N(R#RFR?RRR(Rt property_texpr((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR}s cs‡‡fd†}|S(Ncs)ˆjjgˆD]}||ƒ^qŒS(N(R#RH(trowtproc(tprocsR(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR“„s ((RRR”tlabelsR“((R”RsR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pytcreate_row_processorƒs(RRRR–(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR|s RLcBsbeZdZdZed„ƒZd„Zd„Zd„Z e j d„ƒZ d„Z d„ZRS( s¿Produce boolean, comparison, and other operators for :class:`.CompositeProperty` attributes. See the example in :ref:`composite_operations` for an overview of usage , as well as the documentation for :class:`.PropComparator`. .. seealso:: :class:`.PropComparator` :class:`.ColumnOperators` :ref:`types_operators` :attr:`.TypeEngine.comparator_factory` cCs |jƒS(N(t__clause_element__(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pytclauses scCstjdt|jŒS(NRC(R t ClauseListRRe(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR—¤s cCstj|j|jƒƒS(N(R?RRR—(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyt_query_clause_element©scCs~|dkr.g|jjD] }d^q}n@t||jjƒrR|jƒ}ntjd|j|fƒ‚t|j |ƒS(Ns)Can't UPDATE composite attribute %s to %r( R4RRURgRHR_RmRnR^Re(RR(RR[((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyt_bulk_update_tuples®s "cCsF|jr8g|jjD]}t|jj|jƒ^qS|jjSdS(N(t_adapt_to_entityRReRtentityR(RR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyRe»s ,cCs£|dkr(dgt|jjƒ}n |jƒ}gt|jj|ƒD]\}}||k^qJ}|jr–g|D]}|j|ƒ^qx}ntj |ŒS(N( R4tlenRReR_R^RœtadapterR tand_(RtotherR[Rptbt comparisonstx((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyt__eq__Ås  4 %cCstj|j|ƒƒS(N(R tnot_R¥(RR¡((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyt__ne__ÑsN(RRR=R4t__hash__R#R˜R—RšR›R tmemoized_propertyReR¥R§(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyRL‹s    cCst|jjjƒd|jS(Nt.(RhR7RRR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyt__str__Ôs(s0.7s½:class:`.AttributeExtension` is deprecated in favor of the :class:`.AttributeEvents` listener interface. The :paramref:`.composite.extension` parameter will be removed in a future release.(RRR=R tdeprecated_paramsRR<RRRNR©ReRdR#RqRQRPRURR%RR-RtBundleRRRLR«(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR?Vs$  G   ; : ItConcreteInheritedPropertycBs eZdZd„Zd„ZRS(s4A 'do nothing' :class:`.MapperProperty` that disables an attribute on a concrete subclass that is only present on the inherited mapper, not the concrete classes' mapper. Cases where this occurs include: * When the superclass mapper is mapped against a "polymorphic union", which includes all attributes from all subclasses. * When a relationship() is configured on an inherited mapper, but not on the subclass mapper. Concrete mappers require that relationship() is configured explicitly on each subclass. cCsPd}xC|jjƒD]2}|j|j}t|tƒs|j}PqqW|S(N(R4R7titerate_to_roott_propsRRgR®RD(RRtcomparator_callabletmtp((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR-ês csQttˆƒjƒ‡fd†‰dtf‡‡fd†ƒY}|ƒˆ_dS(Ncs&tdˆjˆjˆjfƒ‚dS(NsgConcrete %s does not implement attribute %r at the instance level. Add this property explicitly to %s.(tAttributeErrorR7R((R(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pytwarn÷stNoninheritedConcretePropcs8eZ‡fd†Z‡fd†Z‡‡fd†ZRS(cs ˆƒdS(N((tsR'R((Rµ(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyt__set__scs ˆƒdS(N((R·R'(Rµ(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyt __delete__scs|dkrˆjSˆƒdS(N(R4R3(R·R'towner(RRµ(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyt__get__s (RRR¸R¹R»((RRµ(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR¶ÿs(RFR®RR2R3(RR¶((RRµsR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyRôs (RRR=R-R(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR®Øs tSynonymPropertycBsMeZdddddd„Zejd„ƒZd„Zd„Zd„Z RS(cCsxtt|ƒjƒ||_||_||_||_|pO|rL|jpOd|_ |rg||_ nt j |ƒdS(s}Denote an attribute name as a synonym to a mapped property, in that the attribute will mirror the value and expression behavior of another attribute. e.g.:: class MyClass(Base): __tablename__ = 'my_table' id = Column(Integer, primary_key=True) job_status = Column(String(50)) status = synonym("job_status") :param name: the name of the existing mapped property. This can refer to the string name ORM-mapped attribute configured on the class, including column-bound attributes and relationships. :param descriptor: a Python :term:`descriptor` that will be used as a getter (and potentially a setter) when this attribute is accessed at the instance level. :param map_column: **For classical mappings and mappings against an existing Table object only**. if ``True``, the :func:`.synonym` construct will locate the :class:`.Column` object upon the mapped table that would normally be associated with the attribute name of this synonym, and produce a new :class:`.ColumnProperty` that instead maps this :class:`.Column` to the alternate name given as the "name" argument of the synonym; in this way, the usual step of redefining the mapping of the :class:`.Column` to be under a different name is unnecessary. This is usually intended to be used when a :class:`.Column` is to be replaced with an attribute that also uses a descriptor, that is, in conjunction with the :paramref:`.synonym.descriptor` parameter:: my_table = Table( "my_table", metadata, Column('id', Integer, primary_key=True), Column('job_status', String(50)) ) class MyClass(object): @property def _job_status_descriptor(self): return "Status: %s" % self._job_status mapper( MyClass, my_table, properties={ "job_status": synonym( "_job_status", map_column=True, descriptor=MyClass._job_status_descriptor) } ) Above, the attribute named ``_job_status`` is automatically mapped to the ``job_status`` column:: >>> j1 = MyClass() >>> j1._job_status = "employed" >>> j1.job_status Status: employed When using Declarative, in order to provide a descriptor in conjunction with a synonym, use the :func:`sqlalchemy.ext.declarative.synonym_for` helper. However, note that the :ref:`hybrid properties ` feature should usually be preferred, particularly when redefining attribute behavior. :param info: Optional data dictionary which will be populated into the :attr:`.InspectionAttr.info` attribute of this object. .. versionadded:: 1.0.0 :param comparator_factory: A subclass of :class:`.PropComparator` that will provide custom comparison behavior at the SQL expression level. .. note:: For the use case of providing an attribute which redefines both Python-level and SQL-expression level behavior of an attribute, please refer to the Hybrid attribute introduced at :ref:`mapper_hybrids` for a more effective technique. .. seealso:: :ref:`synonyms` - Overview of synonyms :func:`.synonym_for` - a helper oriented towards Declarative :ref:`mapper_hybrids` - The Hybrid Attribute extension provides an updated approach to augmenting attribute behavior more flexibly than can be achieved with synonyms. N( RFR¼RRt map_columnR3RDR=R4R0RER RM(RRR½R3RDR0RE((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyRsl     cCsmt|jj|jƒ}t|dƒ s;t|jtƒ rftj d|jjj |j|fƒ‚n|jS(NR#sGsynonym() attribute "%s.%s" only supports ORM mapped attributes, got %r( RR7RRR$RgR#RRmtInvalidRequestErrorR(RR`((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyt_proxied_property‹s"cCs=|j}|jr'|j||ƒ}n|j||ƒ}|S(N(R¿RD(RRRtcomp((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR-˜s   cOs+t|jj|jƒ}|jj||ŽS(N(RR7RRRR(RtargtkwR`((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR¡scCs|jr|j|jjkrItjd|j|jj|jfƒ‚np|jj|j|jkr¹|j|jj|jj|jkr¹tjd|j|j|j|jfƒ‚nt j |jj|jƒ}|j |j|d|dt ƒ|j|_ n||_dS(Ns>Can't compile synonym '%s': no column on table '%s' named '%s'spCan't call map_column=True for synonym %r=%r, a ColumnProperty already exists keyed to the name %r for column %rtinitt setparent(R½Rtpersist_selectabletcRmRnRt descriptionRkRtColumnPropertyt_configure_propertyR t_mapped_by_synonymR7(RR7RÃR³((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyt set_parent¥s(    %N( RRR4RR R©R¿R-RRË(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR¼s t s0.7s‘:func:`.comparable_property` is deprecated and will be removed in a future release. Please refer to the :mod:`~sqlalchemy.ext.hybrid` extension.tComparablePropertycBs)eZdZdddd„Zd„ZRS(s;Instruments a Python property for use in query expressions.cCsftt|ƒjƒ||_||_|p=|r:|jp=d|_|rU||_nt j |ƒdS(sš Provides a method of applying a :class:`.PropComparator` to any Python descriptor attribute. Allows any Python descriptor to behave like a SQL-enabled attribute when used at the class level in queries, allowing redefinition of expression operator behavior. In the example below we redefine :meth:`.PropComparator.operate` to wrap both sides of an expression in ``func.lower()`` to produce case-insensitive comparison:: from sqlalchemy.orm import comparable_property from sqlalchemy.orm.interfaces import PropComparator from sqlalchemy.sql import func from sqlalchemy import Integer, String, Column from sqlalchemy.ext.declarative import declarative_base class CaseInsensitiveComparator(PropComparator): def __clause_element__(self): return self.prop def operate(self, op, other): return op( func.lower(self.__clause_element__()), func.lower(other) ) Base = declarative_base() class SearchWord(Base): __tablename__ = 'search_word' id = Column(Integer, primary_key=True) word = Column(String) word_insensitive = comparable_property(lambda prop, mapper: CaseInsensitiveComparator( mapper.c.word, mapper) ) A mapping like the above allows the ``word_insensitive`` attribute to render an expression like:: >>> print SearchWord.word_insensitive == "Trucks" lower(search_word.word) = lower(:lower_1) :param comparator_factory: A PropComparator subclass or factory that defines operator behavior for this property. :param descriptor: Optional when used in a ``properties={}`` declaration. The Python descriptor or property to layer comparison behavior on top of. The like-named descriptor will be automatically retrieved from the mapped class if left blank in a ``properties`` declaration. :param info: Optional data dictionary which will be populated into the :attr:`.InspectionAttr.info` attribute of this object. .. versionadded:: 1.0.0 N( RFRÌRR3RDR=R4R0RER RM(RRDR3R0RE((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyRÓsB   cCs|j||ƒS(N(RD(RR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyR-sN(RRR=R4RR-(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyRÌÉsIN(R=R/RRRt interfacesRRR RRRRmRR R R t langhelperstdependency_forR R?R®R¼tdeprecated_clsRÌ(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/descriptor_props.pyt s2:ÿ‚5º