[Jc @sdZddklZlZlZddkiZddkl Z l Z l Z ddk l Z lZddklZlZlZlZlZddklZlZlZlZddklZlZlZlZlZl Z d d d d d dfZ!d e fdYZ"ei#e"d e"fdYZ$defdYZ%d efdYZ&ei#e&d efdYZ'd e fdYZ(e(Z)ei#e(de*fdYZ+e"e_"e&e_&e'e_'e(e_(e%e_%dS(syMapperProperty implementations. This is a private module which defines the behavior of invidual ORM-mapped attributes. i(tsqltutiltlogN(t ClauseAdaptertcriterion_as_pairstjoin_condition(t operatorst expression(t attributest dependencytmappert object_mappert strategies(tCascadeOptionst_class_to_mappert _orm_annotatet_orm_deannotate(t MANYTOMANYt MANYTOONEtMapperPropertyt ONETOMANYtPropComparatortStrategizedPropertytColumnPropertytCompositePropertytSynonymPropertytComparablePropertytRelationPropertytBackRefcBseZdZdZdZdZdZdZedZ dZ dZ d Z d e fd YZeZd ZRS( sADescribes an object attribute that corresponds to a table column.cOs>g}|D]}|ti|q ~|_|idd |_|idt|_|idt|_|id|i i |_ |idd |_ |idd |_ |o5td|i idit|ifnti||ioti|_n'|ioti|_n ti|_d S( sConstruct a ColumnProperty. :param \*columns: The list of `columns` describes a single object property. If there are multiple tables joined together for the mapper, this list represents the equivalent column as it appears across each table. :param group: :param deferred: :param comparator_factory: :param descriptor: :param extension: tgrouptdeferredt_no_instrumenttcomparator_factoryt descriptort extensions.%s received unexpected keyword argument(s): %ss, N(Rt_labeledtcolumnstpoptNoneRtFalseRt no_instrumentt __class__t ComparatorR R!R"t TypeErrort__name__tjointsortedtkeysRtset_creation_orderR tUninstrumentedColumnLoadertstrategy_classtDeferredColumnLoadert ColumnLoader(tselfR$tkwargst_[1]tc((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyt__init__"s"-/   c CsG|iodSti|i|id|i||d|d|dS(Nt comparatort parententityt property_(R(Rtregister_descriptortclass_tkeyR (R5R ((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pytinstrument_classIs  cCs{tt|it|idjoN|iii|io5ti d|i|id|id|i fndS(NisOn mapper %s, primary key column '%s' is being combined with distinct primary key column '%s' in attribute '%s'. Use explicit properties to give each column its own mapped attribute name.i( tsuperRtdo_inittlenR$tparentt primary_keyt issupersetRtwarnR?(R5((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRBUs /cCstd|id|i|iS(NRR(RRRR$(R5((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pytcopy_scCs|i|ii||iS(N(tget_implR?tgettdict(R5tstatetcolumn((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pytgetattrbscCs%|i|ii||id|S(Ntpassive(RIR?tget_committed_valueRK(R5RLRMRO((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyt getcommittedescCs)|i|ii||i|ddS(N(RIR?tsetRKR&(R5RLtvalueRM((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pytsetattrhscCscti|i|idt}|ot||i|dnti|i|igdS(NROi(Rtinstance_statetvalue_as_iterableR?tTrueRTtexpire_attributes(R5tsessiontsourcetdestt dont_loadt _recursiveRS((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pytmergeks cCs|S(N((R5RMRS((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyt get_col_valuessR*cBs,eZeidZdZdZRS(cCsQ|io|i|iidS|iidih|id6|id6SdS(NiR;t parentmapper(tadaptertpropR$t _annotateR (R5((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyt__clause_element__ws cOs||i||S(N(Rd(R5toptotherR6((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pytoperate~scKs%|i}||i|||S(N(Rdt _bind_param(R5ReRfR6tcol((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pytreverse_operates (R,t __module__Rtmemoized_instancemethodRdRgRj(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR*vs cCst|iiid|iS(Nt.(tstrRDR>R,R?(R5((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyt__str__s(R,Rkt__doc__R9R@RBRHRNR'RQRTR^R_RR*tColumnComparatorRo(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRs '      cBsoeZdZdZdZdZdZedZdZ dZ de fd YZ d Z RS( s<subclasses ColumnProperty to provide composite type support.cOsd|jotid|d|ds ( Rtwarn_deprecatedRARR9t column_dictt enumeratet_col_position_maptcomposite_classR tCompositeColumnLoaderR2(R5R>R$R6((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR9s  " cCs(td|id|id|i|iS(NRRRx(RRRRxR$(R5((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRHscCstt|idS(N(RARRB(R5((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRBscCs1|i|ii||i}|i||S(N(RIR?RJRKR_(R5RLRMtobj((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRNs!cCs1|i|ii|d|}|i||S(NRO(RIR?RPR_(R5RLRMRORz((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRQs!cCs|i|ii||i}|djoV|ig}|iD] }|dqB~}|i|ii||i|dnt|do4t |i }|||i |<|i |nt ||i|dS(Nt__set_composite_values__(RIR?RJRKR&RxR$RRthasattrtlistt__composite_values__RwR{RT(R5RLRSRMRzR7R8tvalues((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRTs! -)cCsQ|djodSx8t|i|iD]\}}||jo|Sq+WdS(N(R&tzipR$R~(R5RMRStatb((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR_s    R*cBs)eZdZdZdZdZRS(cCsY|io8tig}|iiD]}||i|q!~Sti|iiSdS(N(RaRt ClauseListRbR$(R5R7tx((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRds 8cCsy|djodgt|ii}n |i}tig}t|ii|D]\}}|||jqV~S(N(R&RCRbR$R~Rtand_R(R5RfRR7RR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyt__eq__s  cCsti|i|S(N(Rtnot_R(R5Rf((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyt__ne__sN(R,RkRdR&t__hash__RR(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR*s  cCst|iiid|iS(NRm(RnRDR>R,R?(R5((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRos(R,RkRpR9RHRBRNR'RQRTR_RR*Ro(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRs      tConcreteInheritedPropertycBs)eZdZdZdZdZRS(cKsdS(N((R5tcontexttentitytpathRaR6((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pytsetupscCsdS(N(NN(R&(R5t selectcontextRR trowRa((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pytcreate_row_processorscsfddtffdY}d}xGiiD]6}|ii}t|tp|i}PqAqAWt i |i id||d|dd|dS(Ncs&tdiiifdS(NsgConcrete %s does not implement attribute %r at the instance level. Add this property explicitly to %s.(tAttributeErrorRDR?((R5(s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRGstNoninheritedConcretePropcs5eZfdZfdZfdZRS(cs dS(N((tsRzRS(RG(s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyt__set__scs dS(N((RRz(RG(s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyt __delete__scs dS(N((RRztowner(RG(s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyt__get__s(R,RkRRR((RG(s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRsR:R;R<tproxy_property( tobjectR&RDtiterate_to_roott _get_propertyR?t isinstanceRR RR=R>(R5R Rtcomparator_callabletmtp((R5RGs=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR@s    N(R,RkR&R"RRR@(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRs  cBsDeZdZddddZdZdZdZdZRS(cCs5||_||_||_||_ti|dS(N(tnamet map_columnR!R RR0(R5RRR!R ((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR9s     cKsdS(N((R5RRRRaR6((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR scCsdS(N(NN(R&(R5RRR RRa((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR sc sii}idjo,dtffdY}|_nfd}ti|iid||d|ddidS(Nt SynonymPropcs5eZfdZfdZfdZRS(cst|i|dS(N(RTR(RRzRS(R5(s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRscst|idS(N(tdelattrR(RRz(R5(s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRscs"|djo|St|iS(N(R&RNR(RRzR(R5(s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRs (R,RkRRR((R5(s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRscsfd}|S(NcsJiiidt}ioi|S|i|SdS(Ntresolve_synonyms(RDRR?RWR (Rb(R R5(s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR: s ((RbR R:(R5(R s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRsR:R;R<R(RDR>R!R&RRR=R?(R5R R>RR((R5s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR@s    cCsdS(N((R5RYRZR[R\R]((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR^1sN( R,RkR&R"R9RRR@R^(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRs    "cBsDeZdZdZddZdZdZdZdZ RS(s;Instruments a Python property for use in query expressions.cCs#||_||_ti|dS(N(R!R RR0(R5R R!((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR9;s  c CsAti|i|id|i||d|d|d|idS(s+Set up a proxy to the unmanaged descriptor.R:R;R<RN(RR=R>R?R R!(R5R ((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR@@s cKsdS(N((R5RRRRaR6((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRLscCsdS(N(NN(R&(R5RRR RRa((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyROscCsdS(N((R5RYRZR[R\R]((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR^RsN( R,RkRpR&R"R9R@RRR^(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR6s   cBs_eZdZdddddeddeedeedeededdeddddZdZdefdYZ edZ eddZ dZ dZ dd Zd Zd Zd Zd ZdZdZdZdZdZdZdZdZededddZeeedZdZdZRS(s|Describes an object property that holds a single item or list of items that correspond to a related database table. c Cs||_||_||_||_||_| |_d|_| |_||_ ||_ ||_ ||_ ||_ ||_||_||_||_||_||_| |_|pti|_|i|d|_ti||o ||_n}|i djo ddkl}|i|_nM|i tjot i!|_n-|i djot i"|_n t i#|_t$|_%| tj ot&| |_'nt&d|_'|i djo3d|i'jpd|i'jot(i)dn||_*| |_+|i+o'|ot(i)d nd|_,nwt-|t.o]|dj o(t/|d |d |d |i|_,qt/|d |d |d |i|_,n ||_,dS( Ntdynamici(Rssave-update, mergetalltdeletes delete-orphansWCan't set passive_deletes='all' in conjunction with 'delete' or 'delete-orphan' cascadesCbackref and back_populates keyword arguments are mutually exclusivet primaryjoint secondaryjointpassive_updates(0tuselisttargumentt secondaryRRt post_updateR&t directiontviewonlytlazyt single_parentt _foreign_keystcollection_classtpassive_deletesRt remote_sidetenable_typecheckst query_classt join_depthtlocal_remote_pairsR"RR*R R:RR0R2tsqlalchemy.ormRt DynaLoaderR'R t EagerLoadertNoLoadert LazyLoaderRRt_reverse_propertyR tcascadetsa_exct ArgumentErrortorder_bytback_populatestbackrefRt basestringR(R5RRRRt foreign_keysRRRRRRR"RRRRRRRRR RR2t_local_remote_pairsRR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR9[sh                         0     c Cs8ti|i|id|i||d|d|dS(NR:R;R<(RR=R>R?R (R5R ((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR@s  R*cBseZdddZdZedZdZdZdZ dZ dZ dZ dZ dd Zdd Zdd Zd Zd ZdZeidZRS(cCs9||_||_||_|ot||_ndS(N(RbR RaRt_of_type(R5RbR tof_typeRa((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR9s    cCs(|i|i|it|dd|S(sReturn a copy of this PropComparator which will use the given adaption function on the local side of generated expressions. RN(R)tpropertyR RNR&(R5Ra((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pytadaptedscCs |iiS(N(RRD(R5((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR;scCs/|iii}|io|i|S|SdS(N(RRDt_with_polymorphic_selectableRa(R5telem((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRds cOs||||S(N((R5ReRfR6((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRgscKs||||S(N((R5ReRfR6((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRjscCs"ti|i|i|d|iS(NRa(RR*RR Ra(R5tcls((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRscCstddS(Nsrin_() not yet supported for relations. For a simple many-to-one, use in_() against the set of foreign key values.(tNotImplementedError(R5Rf((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pytin_scCs|djoH|iittgjo |iSt|iidd|iSn@|ii ot i dn t|ii|d|iSdS(Nt adapt_sources]Can't compare a collection to an object or collection; use contains() to test for membership.( R&RRRRt_criterion_existsRt_optimized_compareRaRRtInvalidRequestError(R5Rf((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRs  # cKst|ddok|i}|i}|iio|i}n|i}|o%|dj o||@}qz|}qnd}|io|i }nd}|ii dt d|d|\}}} } } } xL|D]D} |ii i | || j}|djo |}q||@}qW|ot||@}nt|d|ii}|o| o| i|}n|o|iht d6}n||@}tidg|d| i| S( NRtdest_polymorphictdest_selectabletsource_selectabletexcludet _halt_adaptitfrom_obj(RNR&RRRt_is_self_referentialtaliast_single_table_criterionRaRdt _create_joinsRWR t class_managerRRttraverseRcRtexistst correlate(R5t criterionR6t target_mappert to_selectablet single_critRtpjtsjRZR[Rttarget_adaptertktcrittj((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRs<     3   cKs0|iiptidn|i||S(Ns9'any()' not implemented for scalar attributes. Use has().(RRRRR(R5RR6((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pytany#s cKs0|iiotidn|i||S(Ns4'has()' not implemented for collections. Use any().(RRRRR(R5RR6((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pythas)s cKsb|iiptidn|ii|d|i}|iio|i||_n|S(Ns9'contains' not implemented for scalar attributes. Use ==R( RRRRRRaRt'_Comparator__negated_contains_or_equalstnegation_clause(R5RfR6tclause((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pytcontains.s   c s*iitjoti|}iiti}fd}fd}|iobt i g}ii D]@\}}|t i |||||j||djqv~Snt i g} tiiiiii|D]\}}| ||jq~ } i| S(Ncs|ifdS(NcsiiiS((RR t_get_committed_attr_by_column((R5Rito(s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyt?s(Rz(RLRi(R5(RiRs=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pytstate_bindparam=s cs ioi|S|SdS(N(Ra(Ri(R5(s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pytadaptAs (RRRRRUt _get_strategyR Rtuse_getRRRtor_R&RR REtprimary_key_from_instanceR( R5RfRLtstrategyRRR7Rtyt_[2]R((R5s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyt__negated_contains_or_equals8s YWcCs|djoV|iitjo5tig}|iiD]}||djq7~S|iSn.|iiot i dn|i |SdS(Ns]Can't compare a collection to an object or collection; use contains() to test for membership.( R&RRRRRRRRRRR(R5RfR7R((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRQs 5 cCs|iii|iS(N(RbRDtcompile(R5((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR\sN(R,RkR&R9RRR;RdRgRjRRRRRRRRRRRtmemoized_property(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR*s"       5    cCs|tijo]|djo9|iotidg|iS|idd|Sq}|i|d|Sn||i|SdS(Nitvalue_is_parent( RteqR&RRRRRR:(R5ReRSR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pytcompareas  cCsL|dj oti|}n|itii|d| dtd|S(Ntreverse_directiontalias_secondaryR(R&RRURR Rt lazy_clauseRW(R5RSRR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRms cCst|iiid|iS(NRm(RnRDR>R,R?(R5((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRossc Cs |p0x-|iD]}||f|jodSqWnti|}ti|ti|}} d|ijo|i|igdS|i|idt} | pdS|i og} xW| D]O} t|| |f<|i | d|d|} | dj o| i | qqW|o7ti ||i}xD| D]}|i|q>Wqt|i|iii|| | n| d} | dj ont|| |f<|i | d|d|} | dj o2|o| |i|itAssertionErrorRnRDR)taddR RU( R5ttype_RLtvisited_instancesthalt_onROR RR8tinstance_mapper((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pytcascade_iterators"  5/  cCs|ii|}|ii||ii||ii|ip&tid||||ifn|i t t fjo6|i |i jo#tid|||i fndS(Ns]reverse_property %r on relation %s references relation %s, which does not reference mapper %ssv%s and back-reference %s are both of the same direction %r. Did you mean to set remote_side on the many-to-one side ?( R RRRt _get_targett common_parentRDRRRRR(R5R?Rf((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyt_add_reverse_propertys ) cCs]|i|i|i|i|i|i|itt|i dS(N( R$t_process_dependent_argumentst_determine_joinst_determine_synchronize_pairst_determine_directiont_determine_local_remote_pairst _post_initRARRB(R5((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRBs       cCst|dpt|itoti|idt|_nt|itio|i|_n[ti |io"ti|idt|_n&t i d|i t|ift|itip t |in|iS(NR RsArelation '%s' expects a class or a mapper argument (received: %s)(R|RRttypeR t class_mapperR'tMapperRtcallableRRR?R(R5((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR$s"%'c Cs?xGd D]?}tit||o t||t||qqWxZd D]R}t||}|dj o0ti|ti|t||t|qQqQW|i o=g}ti |i D]}|t i |q~|_ nti dti|iD|_ti dti|iD|_|iipkxh|iiD]S}||ij o=|i|id to$tid |i|i|fq[q[Wn|ii|_|_|iiob|ii|iijoti d t!|n|ii"i#i$|i|iifndS(NRRRRRRcss"x|]}ti|VqWdS(N(Rt_literal_as_column(RrR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pys s css"x|]}ti|VqWdS(N(RR1(RrR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pys s traiseerrsWarning: relation '%s' on mapper '%s' supercedes the same relation on inherited mapper '%s'; this can cause dependency issues during flushsIn relationship '%s', can't establish 'delete-orphan' cascade rule on a self-referential relationship. You probably want cascade='all', which includes delete cascading but not orphan detection.(sorder_bys primaryjoins secondaryjoins secondarys _foreign_keyss remote_side(s primaryjoins secondaryjoin(%RR0RNRTR&tassert_arg_typeRt ClauseElementRRtto_listRR1t column_sett to_column_setRRRDtconcreteRRR?R'RGR t mapped_tablettargetttableRt delete_orphanR>RRRnRtdelete_orphansR (R5tattrtvalR7Rt inheriting((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR's6$  =(( )#  cCs|idj o.|idjotid|idnd}y|idj o\|idjo||i|i|_n|idjo||i|i|_qn-|idjo||i|i |_nWn+tij o}tid|nXdS(Ns Property 'sC' specified with secondary join condition but no secondary argumentcSs@yt|i|SWn%tij o}t|i|SXdS(N(Rt local_tableRRR9(R R;te((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyt_search_for_join ssCould not determine join condition between parent/child tables on relation %s. Specify a 'primaryjoin' expression. If this is a many-to-many relation, 'secondaryjoin' is needed as well.( RR&RRRR?R RRDR:(R5RCRB((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR(s     cCs|idjo-|iiii|p|iii|S|iiii|p/|iii|p|iii|dj SdS(N(RR&RDR9R8tcontains_columnR:(R5RM((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyt_col_is_part_of_mappings%s c Cs3|io|iptidng|_x|iD]`\}}||ijo|ii||fq:||ijo|ii||fq:q:Wn1t|id|id|i}g}|D]W\}}|i |o|i |p|io!||ijo|||fqq~}|p|i o?t|id|idt o tid|i|fq|io tid|i|fqtid|i|fn||_|i ot|i d|id|i}g}|D]M\}}|i |o|i |p||ijo|||fqq~}|pj|i o?t|i d|idt o tid|i |fqtid|i |fn||_ n d|_ tid |iD|_|i o!|iid |i DndS( NsCforeign_keys argument is required with _local_remote_pairs argumenttconsider_as_foreign_keyst any_operatorsCould not locate any equated, locally mapped column pairs for primaryjoin condition '%s' on relation %s. For more relaxed rules on join conditions, the relation may be marked as viewonly=True.sCould not determine relation direction for primaryjoin condition '%s', on relation %s. Do the columns in 'foreign_keys' represent only the 'foreign' columns in this join condition ?sCould not determine relation direction for primaryjoin condition '%s', on relation %s. Specify the 'foreign_keys' argument to indicate which columns on the relation are foreign.sCould not locate any equated, locally mapped column pairs for secondaryjoin condition '%s' on relation %s. For more relaxed rules on join conditions, the relation may be marked as viewonly=True.sCould not determine relation direction for secondaryjoin condition '%s', on relation %s. Specify the foreign_keys argument to indicate which columns on the relation are foreign.cssx|]\}}|VqWdS(N((RrtlR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pys rs cssx|]\}}|VqWdS(N((RrRHR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pys ts (RRRRtsynchronize_pairsR RRRRERWRtsecondary_synchronize_pairsR&RR6tupdate(R5RHRteq_pairsR7tsq_pairsR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR).sT    "   4*      !a*     cCs|idj o t|_n(|io|io.g}|iD]\}}||qB~}n|io |i}nd}| p)|iid|i Di |o t |_qDt |_n{g}|i D]\}}||q~}t i|iii} t i|iii} | i |} | i |} | o| otid|n| o| og} |i D]\}}| |q~ }| i |}| i |}|o| o t |_q#|o| o t |_q#n)| o t |_n| o t |_n|iptid|n|iio@|i o5|itjp|it jot id|ndS(Ncssx|]\}}|VqWdS(N((RrRHR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pys s sCan't determine relation direction for relationship '%s' - foreign key columns are present in neither the parent nor the child's mapped tablessCan't determine relation direction for relationship '%s' - foreign key columns are present in both the parent and the child's mapped tables. Specify 'foreign_keys' argument.sOn %s, delete-orphan cascade is not supported on a many-to-many or many-to-one relationship when single_parent is not set. Set single_parent=True on the relation().(RR&RRt_refers_to_parent_tableRRRt differenceRIt intersectionRRRR6RDR9R8R RRRR<RRG(R5R7RHRtremoteRR8tfRt parentcolst targetcolst onetomany_fkt manytoone_fkt_[3]t referentstonetomany_localtmanytoone_local((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR*vsT   .     **      c Cs|ip|io|itjoLg}t|id|idtD]\}}|||fqG~|_n"t|id|idt|_|ip tid||ifqq|i o(|i }|i o||i 7}qnt|id|i dt}|i o&|t|i d|i dt7}ng}|D]=\}}|i|o!|i|o|||fqJqJ~}|itjo4g}|D]\}}|||fq~|_q||_n|iotidnx|iD]\}}|itjo1|i| o tid||ifq|itjo1|i| o tid||ifqqWg}tt|iD]}|ti|q~\|_|_dS(Ntconsider_as_referenced_keysRGRFsZRelation %s could not determine any local/remote column pairs from remote side argument %rsTremote_side argument is redundant against more detailed _local_remote_side argument.sLocal column '%s' is not part of mapping %s. Specify remote_side argument to indicate which column lazy join condition should compare against.sRemote column '%s' is not part of mapping %s. Specify remote_side argument to indicate which column lazy join condition should bind.(RRRRRRRWRRRRIRRJRRERRDR RR}Rtordered_column_sett local_side( R5R7RHRRLRRWt_[4]R((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR+s<  E! $    &Q4   ! ! cCsp|io |iit|d|i|iit|d|i|iit|ddid|iD|iit|ddid|ipgD|iit|ddid |i D|iit|d |i n|i djo|i t jo t|_ n|i djo t|_ n|ipti||_n|io~|ioLti|ipg|_|iiti|i|i|in|idj o|ii|qlndti |i!i"d ti#|i$d tp5t%i&d |i$|i!i"i'|i!i"i'fndS(Ns setup primary join %ss setup secondary join %ss synchronize pairs [%s]t,css)x"|]\}}d||fVqWdS(s (%s => %s)N((RrRHR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pys s s! secondary synchronize pairs [%s]css)x"|]\}}d||fVqWdS(s (%s => %s)N((RrRHR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pys s s local/remote pairs [%s]css)x"|]\}}d||fVqWdS(s (%s / %s)N((RrRHR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pys s s relation direction %sRR2sAttempting to assign a new relation '%s' to a non-primary mapper on class '%s'. New relations can only be added to the primary mapper, i.e. the very first mapper created for class '%s' ((t_should_log_infotloggertinfoRnRRR-RIRJRRRR&RR'RWRR tcreate_dependency_processort_dependency_processort is_primaryRRR5R"R RtGenericBackrefExtensionR&RRR R.RDR>RR?RRR,(R5((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR,s. !!4;4%      . cCs:x3|iD]$\}}|i|ijotSq WtSdS(N(RIR;RWR'(R5R8RR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRN s   cCs|ii|iS(N(R R%RD(R5((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRscCs|djo(|o|iio|ii}q5nt}|djoj|o#|iio|ii}t}n |ii}|io#|djo|i }t}qnt}|p t |}|i |i |i }}} |p|i} | i} | o#|o|| @}q+|| @}n|oW| o| i } t| } |o%t|d|iii| } n| } |o+t| it|d|ii} n| i|}n|oXt|d|id|ii} |o,| it|d|id|iiqSn-|o%t|d|id|ii} nd} | i|}| p| }d|_|_nd}|||p |ii|p |ii| |fS(Nt equivalentsR(R&RDtwith_polymorphicRR'R RWR9RRtboolRRRRRt_equivalent_columnstchainRR]RtincludeRRA(R5tsource_polymorphicRRRRtaliasedRRRt dest_mapperRtprimary_aliasizertsecondary_aliasizerR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRsZ         %+!0% c Csc|id|\}}}}} } |o|o ||@S|o|S|o|StddS(sVdeprecated. use primary_join_against(), secondary_join_against(), full_join_against()Rmsillegal conditionN(RR( R5RDtprimaryRtpolymorphic_parentRRRZR[tsecondarytableRa((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyt _get_join\s$ cCs"|ip|ii|ndS(N(RRdtregister_dependencies(R5t uowcommit((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRvjs cCs"|ip|ii|ndS(N(RRdtregister_processors(R5Rw((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRxns N(R,RkRpR&R'RWR9R@RR*RRRoR^R#R&RBR$R'R(RER)R*R+R,RNRRRuRvRx(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRVsPF    +   )  H D / "  G cBs#eZdZddZdZRS(sLAttached to a RelationProperty to indicate a complementary reverse relationship. Handles the job of creating the opposite RelationProperty according to configuration. Alternatively, two explicit RelationProperty objects can be associated bidirectionally using the back_populates keyword argument on each. cKs4||_||_||_ti|i|_dS(N(R?R6RbRRfR"(R5R?t_propR6((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyR9s   c Cs|iodS||_|ii}|i|idtdjo8|io4|ii d|i }|ii d|i }nH|ii d|i }|ii dd}|ot i dn|ii d|i}|ii}|iid|i|iid|it||i||d|dt|id ||i}|i|i||i|in t id |i||fdS( NR2RRsKCan't assign 'secondaryjoin' on a backref against a non-secondary relation.RRRRRysYError creating backref '%s' on relation '%s': property of that name exists on mapper '%s'(RbR RRR?R'R&RR6R%RRRRRRDt setdefaultRRRRt_configure_propertyR&R(R5RbR RRRRDtrelation((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRs0      N(R,RkRpR&R9R(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyRus (,Rpt sqlalchemyRRRtsqlalchemy.exceptionst exceptionsRtsqlalchemy.sql.utilRRRtsqlalchemy.sqlRRRRR R R R tsqlalchemy.orm.utilR RRRtsqlalchemy.orm.interfacesRRRRRRt__all__Rt class_loggerRRRRRtPropertyLoaderRR(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/properties.pyt s8(". l H)6   5