Ñò Š„[Jc @sÞdZddkZddkZddkZddklZddklZddklZddkl Z d„Z de fd „ƒYZ d e fd „ƒYZ eid ƒZd e fd„ƒYZde fd„ƒYZdS(sõContain the ``AssociationProxy`` class. The ``AssociationProxy`` is a Python property object which provides transparent proxied access to the endpoint of an association object. See the example ``examples/association/proxied_association.py``. iÿÿÿÿN(t exceptions(torm(tutil(t collectionscKst|||S(sr Return a Python property implementing a view of *attr* over a collection. Implements a read/write view over an instance's *target_collection*, extracting *attr* from each member of the collection. The property acts somewhat like this list comprehension:: [getattr(member, *attr*) for member in getattr(instance, *target_collection*)] Unlike the list comprehension, the collection returned by the property is always in sync with *target_collection*, and mutations made to either collection will be reflected in both. Implements a Python property representing a relation as a collection of simpler values. The proxied property will mimic the collection type of the target (list, dict or set), or, in the case of a one to one relation, a simple scalar value. :param target_collection: Name of the relation attribute we'll proxy to, usually created with :func:`~sqlalchemy.orm.relation`. :param attr: Attribute on the associated instances we'll proxy for. For example, given a target collection of [obj1, obj2], a list created by this proxy property would look like [getattr(obj1, *attr*), getattr(obj2, *attr*)] If the relation is one-to-one or otherwise uselist=False, then simply: getattr(obj, *attr*) :param creator: optional. When new items are added to this proxied collection, new instances of the class collected by the target collection will be created. For list and set collections, the target class constructor will be called with the 'value' for the new instance. For dict types, two arguments are passed: key and value. If you want to construct instances differently, supply a *creator* function that takes arguments as above and returns instances. For scalar relations, creator() will be called if the target is None. If the target is present, set operations are proxied to setattr() on the associated object. If you have an associated object with multiple attributes, you may set up multiple association proxies mapping to different attributes. See the unit tests for examples, and for examples of how creator() functions can be used to construct the scalar relation on-demand in this situation. :param \*\*kw: Passes along any other keyword arguments to :class:`AssociationProxy`. (tAssociationProxy(ttarget_collectiontattrtkw((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pytassociation_proxys8RcBs’eZdZd d d d d„Zd„Zd„ZeeƒZd„Zd„Z d„Z d„Z d„Z d „Z d „Zd „Zd „ZRS(sDA descriptor that presents a read/write view of an object attribute.cCsz||_||_||_||_||_||_d|_d|_dt |ƒi |t |ƒf|_ d|_ dS(sªArguments are: target_collection Name of the collection we'll proxy to, usually created with 'relation()' in a mapper setup. attr Attribute on the collected instances we'll proxy for. For example, given a target collection of [obj1, obj2], a list created by this proxy property would look like [getattr(obj1, attr), getattr(obj2, attr)] creator Optional. When new items are added to this proxied collection, new instances of the class collected by the target collection will be created. For list and set collections, the target class constructor will be called with the 'value' for the new instance. For dict types, two arguments are passed: key and value. If you want to construct instances differently, supply a 'creator' function that takes arguments as above and returns instances. getset_factory Optional. Proxied attribute access is automatically handled by routines that get and set values based on the `attr` argument for this proxy. If you would like to customize this behavior, you may supply a `getset_factory` callable that produces a tuple of `getter` and `setter` functions. The factory is called with two arguments, the abstract type of the underlying collection and this proxy instance. proxy_factory Optional. The type of collection to emulate is determined by sniffing the target collection. If your collection type can't be determined by duck typing or you'd like to use a different collection implementation, you may supply a factory function to produce those collections. Only applicable to non-scalar relations. proxy_bulk_set Optional, use with proxy_factory. See the _set() method for details. s _%s_%s_%sN(Rt value_attrtcreatortgetset_factoryt proxy_factorytproxy_bulk_settNonetscalart owning_classttypet__name__tidtkeytcollection_class(tselfRRR R R R ((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__init__Ps.        "cCsti|iƒi|iƒS(N(Rt class_mapperRt get_propertyR(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt _get_property‹scCs|iƒiiS(s#The class the proxy is attached to.(Rtmappertclass_(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt target_classscCs|iƒi S(N(Rtuselist(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt_target_is_scalar”scs"|i‰~‡‡fd†}|S(Ncs6ˆƒ}|djotidƒ‚nt|ˆƒS(Ns<stale association proxy, parent object has gone out of scope(RRtInvalidRequestErrortgetattr(tobj(ttargett weakobjref(sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pytlazy_collectionšs    (R(RR$R%((R$R#sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt_lazy_collection—s cCs4|idjo!|o|p t|ƒ|_n|djo|S|idjo+|iƒ|_|io|iƒq~n|io|it||iƒƒSy4t||i ƒ\}}t |ƒ|jo|SWnt j onX|i |i ti|ƒƒƒ}t||i t |ƒ|fƒ|SdS(N(RRRRRt_initialize_scalar_accessorst _scalar_getR!RRRtAttributeErrort_newR&tweakreftreftsetattr(RR"Rt creator_idtproxy((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__get__£s&!    !cCs|idjot|ƒ|_n|idjo+|iƒ|_|io|iƒq^n|iom|io |ip|i}t||i ƒ}|djot ||i ||ƒƒq|i ||ƒn>|i |dƒ}||j o|i ƒ|i||ƒndS(N(RRRRRR'R RR!RR-t _scalar_setR0tcleart_set(RR"tvaluesR R#R/((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__set__¼s      cCs7|idjot|ƒ|_nt||iƒdS(N(RRRtdelattrR(RR"((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt __delete__ÑscCsR|io|id|ƒ\}}n|idƒ\}}|||_|_dS(N(R Rt_default_getsetR(R1(Rtgettset((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR'Ös csQ|i‰tiˆƒ}|tjo‡fd†}n‡fd†}||fS(Ncst|ˆ|ƒS((R-(totktv(R(sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pytáscst|ˆ|ƒS((R-(R;R=(R(sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR>ãs(R toperatort attrgettertdict(RRtgettertsetter((RsC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR8Ýs   cCs&|io |ip|i}ti|ƒƒ|_|io|i|||iƒS|io|i|i|ƒ\}}n|i|iƒ\}}|it jot ||||ƒS|it jot ||||ƒS|it jot||||ƒStid|ii|ifƒ‚dS(Ns‚could not guess which interface to use for collection_class "%s" backing "%s"; specify a proxy_factory and proxy_bulk_set manually(R RRtduck_type_collectionRR R R R8tlistt_AssociationListRAt_AssociationDictR:t_AssociationSetRt ArgumentErrorRR(RR%R RBRC((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR*æs   cCs”|io|i||ƒns|itjo|i|ƒnR|itjo|i|ƒn1|itjo|i|ƒntidƒ‚dS(NsEno proxy_bulk_set supplied for custom collection_class implementation( R RREtextendRAtupdateR:RRI(RR/R4((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR3ÿs N(Rt __module__t__doc__RRRRtpropertyRR&R0R5R7R'R8R*R3(((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRMs:         RFcBsöeZdZd„Zed„ƒZd„Zd„Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zd „Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zdd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z!d „Z"d!„Z#d"„Z$d#„Z%e%Z&d$„Z'd%„Z(d&„Z)d'„Z*d(„Z+xqe,ƒi-ƒD]`\Z.Z/e0i1e/ƒoDe/i.e.jo4e/i o)e2e3e.ƒoe4e3e.ƒie/_qŠqŠW[.[/RS()s(Generic, converting, list-to-list proxy.cCs(||_||_||_||_dS(s~Constructs an _AssociationList. lazy_collection A callable returning a list-based collection of entities (usually an object attribute managed by a SQLAlchemy relation()) creator A function that creates new target entities. Given one parameter: value. This assertion is assumed:: obj = creator(somevalue) assert getter(obj) == somevalue getter A function. Given an associated object, return the 'value'. setter A function. Given an associated object and a value, store that value on the object. N(R%R RBRC(RR%R RBRC((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRs   cCs |iƒS((R%(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR>,scCs |i|ƒS(N(R (Rtvalue((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt_create.scCs |i|ƒS(N(RB(Rtobject((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt_get1scCs|i||ƒS(N(RC(RRQRO((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR34scCs t|iƒS(N(tlentcol(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__len__7scCs|iotStSdS(N(RTtTruetFalse(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt __nonzero__:s cCs|i|i|ƒS(N(RRRT(Rtindex((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt __getitem__@scCst|tƒp|i|i||ƒnS|idjot|ƒ}n1|idjot|ƒ|i}n |i}|ipd}t|i pd||ƒ}|djoSx|D]}||i =q»W|i }x¢|D] }|i ||ƒ|d7}qßWnwt|ƒt|ƒjo&t dt|ƒt|ƒfƒ‚nx4t ||ƒD]#\}}|i|i||ƒqVWdS(NiisBattempt to assign sequence of size %s to extended slice of size %s( t isinstancetsliceR3RTtstopRRStsteptrangetstarttinsertt ValueErrortzip(RRYROR]R^trngtititem((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt __setitem__Cs4     cCs|i|=dS(N(RT(RRY((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt __delitem__`scCs3x,|iD]!}|i|ƒ|jotSq WtS(N(RTRRRVRW(RROtmember((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt __contains__cs   cCs2g}|i||!D]}||i|ƒq~S(N(RTRR(RR`tendt_[1]Ri((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt __getslice__jscCs>g}|D]}||i|ƒq ~}||i||+dS(N(RPRT(RR`RkR4RlR=tmembers((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt __setslice__ms*cCs|i||5dS(N(RT(RR`Rk((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt __delslice__qsccs,x|iD]}|i|ƒVq Wt‚dS(sÇIterate over proxied values. For the actual domain objects, iterate over .col instead or just use the underlying collection directly from its property on the parent. N(RTRRt StopIteration(RRi((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__iter__ts cCs#|i|ƒ}|ii|ƒdS(N(RPRTtappend(RRORf((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRs€scs@tg}ti‡fd†t|ƒƒD] }|dq)~ƒS(Ncs |ˆjS(((R=(RO(sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR>†si(tsumt itertoolstifiltertiter(RRORlt_((ROsC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pytcount„s cCs"x|D]}|i|ƒqWdS(N(Rs(RR4R=((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRJˆscCs |i|ƒg|i||+dS(N(RPRT(RRYRO((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRaŒsiÿÿÿÿcCs|i|ii|ƒƒS(N(RBRTtpop(RRY((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRzscCsIx6t|ƒD](\}}||jo|i|=dSq Wtdƒ‚dS(Nsvalue not in list(t enumerateRTRb(RRORetval((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pytremove’s     cCs t‚dS(s#Not supported, use reversed(mylist)N(tNotImplementedError(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pytreverse™scCs t‚dS(s!Not supported, use sorted(mylist)N(R~(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pytsortžscCs|idt|iƒ5dS(Ni(RTRS(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR2£scCst|ƒ|jS(N(RE(Rtother((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__eq__¦scCst|ƒ|jS(N(RE(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__ne__©scCst|ƒ|jS(N(RE(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__lt__¬scCst|ƒ|jS(N(RE(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__le__¯scCst|ƒ|jS(N(RE(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__gt__²scCst|ƒ|jS(N(RE(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__ge__µscCstt|ƒ|ƒS(N(tcmpRE(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__cmp__¸scCs5yt|ƒ}Wntj otSXt|ƒ|S(N(REt TypeErrortNotImplemented(RtiterableR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__add__»s cCs5yt|ƒ}Wntj otSX|t|ƒS(N(RERŠR‹(RRŒR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__radd__Âs cCs#t|tƒptSt|ƒ|S(N(R[tintR‹RE(Rtn((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__mul__ÉscCs|i|ƒ|S(N(RJ(RRŒ((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__iadd__Ïs cCs`t|tƒptS|djo|iƒn-|djo|it|ƒ|dƒn|S(Nii(R[RR‹R2RJRE(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__imul__Ós  cCs t|ƒS(N(RE(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pytcopyàscCstt|ƒƒS(N(treprRE(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__repr__ãscCstdt|ƒiƒ‚dS(Ns%s objects are unhashable(RŠRR(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__hash__æs(5RRLRMRRNRTRPRRR3RURXRZRgRhRjRmRoRpRrRsRyRJRaRzR}RR€R2R‚RƒR„R…R†R‡R‰RRŽR‘t__rmul__R’R“R”R–R—tlocalstitemst func_nametfuncRtcallablethasattrRER!(((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRFs^                                      t _NotProvidedRGcBsÒeZdZd„Zed„ƒZd„Zd„Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zd „Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd$d„Zd$d„Zd„Zd„Zd„Zd„Z d„Z!d„Z"e#d„Z$d „Z%d!„Z&d"„Z'd#„Z(xqe)ƒi!ƒD]`\Z*Z+e,i-e+ƒoDe+i*e*jo4e+i o)e.e/e*ƒoe0e/e*ƒie+_qfqfW[*[+RS(%s(Generic, converting, dict-to-dict proxy.cCs(||_||_||_||_dS(s®Constructs an _AssociationDict. lazy_collection A callable returning a dict-based collection of entities (usually an object attribute managed by a SQLAlchemy relation()) creator A function that creates new target entities. Given two parameters: key and value. The assertion is assumed:: obj = creator(somekey, somevalue) assert getter(somekey) == somevalue getter A function. Given an associated object and a key, return the 'value'. setter A function. Given an associated object, a key and a value, store that value on the object. N(R%R RBRC(RR%R RBRC((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRôs   cCs |iƒS((R%(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR>scCs|i||ƒS(N(R (RRRO((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRPscCs |i|ƒS(N(RB(RRQ((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRRscCs|i|||ƒS(N(RC(RRQRRO((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR3scCs t|iƒS(N(RSRT(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRUscCs|iotStSdS(N(RTRVRW(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRXs cCs|i|i|ƒS(N(RRRT(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRZ$scCsK||ijo|i|i|||ƒn|i||ƒ|i|scCst|ƒ|jS(N(RA(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRƒAscCst|ƒ|jS(N(RA(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR„DscCst|ƒ|jS(N(RA(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR…GscCst|ƒ|jS(N(RA(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR†JscCst|ƒ|jS(N(RA(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR‡MscCstt|ƒ|ƒS(N(RˆRA(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR‰PscCstt|iƒƒƒS(N(R•RARš(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR–SscCs'y ||SWntj o|SXdS(N(tKeyError(RRtdefault((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR9Vs cCs:||ijo|i||ƒ|i|<|S||SdS(N(RTRP(RRR£((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt setdefault\scCs |iiƒS(N(RTtkeys(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR¥cscCs |iiƒS(N(RTR¡(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR¡fscCs1g}|iiƒD]}||i|ƒq~S(N(RTR4RR(RRlRi((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR4isccs3x&|iD]}|i|i|ƒVq Wt‚dS(N(RTRRRq(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt itervaluesls cCs5g}|D]#}|||i|i|ƒfq ~S(N(RRRT(RRlR<((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRšqsccs9x,|iD]!}||i|i|ƒfVq Wt‚dS(N(RTRRRq(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt iteritemsts cCsE|tjo|ii|ƒ}n|ii||ƒ}|i|ƒS(N(RŸRTRzRR(RRR£Ri((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRzys cCs*|iiƒ}|d|i|dƒfS(Nii(RTtpopitemRR(RRf((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR¨€scOs¸t|ƒdjotdt|ƒƒ‚ngt|ƒdjoS|d}xF|D]:}t|tƒo|d||d¾scCs |i|ƒS(N(R (RRO((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRPÀscCs |i|ƒS(N(RB(RRQ((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRRÃscCs|i||ƒS(N(RC(RRQRO((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR3ÆscCs t|iƒS(N(RSRT(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRUÉscCs|iotStSdS(N(RTRVRW(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRXÌs cCs3x,|iD]!}|i|ƒ|jotSq WtS(N(RTRRRVRW(RRORi((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRjÒs   ccs,x|iD]}|i|ƒVq Wt‚dS(sÀIterate over proxied values. For the actual domain objects, iterate over .col instead or just use the underlying collection directly from its property on the parent. N(RTRRRq(RRi((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRrÙs cCs.||jo|ii|i|ƒƒndS(N(RTtaddRP(RRO((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR¬äs cCsCx<|iD]1}|i|ƒ|jo|ii|ƒPq q WdS(N(RTRRtdiscard(RRORi((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR­ês  cCsOx<|iD]1}|i|ƒ|jo|ii|ƒdSq Wt|ƒ‚dS(N(RTRRR­R¢(RRORi((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR}ðs   cCs6|iptdƒ‚n|iiƒ}|i|ƒS(Nspop from an empty set(RTR¢RzRR(RRi((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRz÷s cCs"x|D]}|i|ƒqWdS(N(R¬(RRRO((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRKýscCs:ti||ƒptSx|D]}|i|ƒqW|S(N(Rt_set_binops_check_strictR‹R¬(RRRO((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__ior__s cCstt|ƒƒS(N(R:Rw(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR3scCst|ƒi|ƒS(N(R:tunion(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR° scCst|ƒi|ƒS(N(R:t difference(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR±scCs"x|D]}|i|ƒqWdS(N(R­(RRRO((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pytdifference_updatescCs:ti||ƒptSx|D]}|i|ƒqW|S(N(RR®R‹R­(RRRO((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__isub__s cCst|ƒi|ƒS(N(R:t intersection(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR´ scCsq|i|ƒt|ƒ}}||||}}x|D]}|i|ƒq8Wx|D]}|i|ƒqVWdS(N(R´R:R}R¬(RRtwantthaveR}R¬RO((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pytintersection_update%scCs‰ti||ƒptS|i|ƒt|ƒ}}||||}}x|D]}|i|ƒqPWx|D]}|i|ƒqnW|S(N(RR®R‹R´R:R}R¬(RRRµR¶R}R¬RO((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__iand__/scCst|ƒi|ƒS(N(R:tsymmetric_difference(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR¹<scCsq|i|ƒt|ƒ}}||||}}x|D]}|i|ƒq8Wx|D]}|i|ƒqVWdS(N(R¹R:R}R¬(RRRµR¶R}R¬RO((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pytsymmetric_difference_updateAscCs‰ti||ƒptS|i|ƒt|ƒ}}||||}}x|D]}|i|ƒqPWx|D]}|i|ƒqnW|S(N(RR®R‹R¹R:R}R¬(RRRµR¶R}R¬RO((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyt__ixor__KscCst|ƒi|ƒS(N(R:tissubset(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR¼XscCst|ƒi|ƒS(N(R:t issuperset(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR½[scCs|iiƒdS(N(RTR2(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR2^scCs t|ƒS(N(R:(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR”ascCst|ƒ|jS(N(R:(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR‚dscCst|ƒ|jS(N(R:(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRƒgscCst|ƒ|jS(N(R:(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR„jscCst|ƒ|jS(N(R:(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR…mscCst|ƒ|jS(N(R:(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR†pscCst|ƒ|jS(N(R:(RR((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR‡sscCstt|ƒƒS(N(R•R:(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR–vscCstdt|ƒiƒ‚dS(Ns%s objects are unhashable(RŠRR(R((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyR—ys(6RRLRMRRNRTRPRRR3RURXRjRrR¬R­R}RzRKR¯R°t__or__R±t__sub__R²R³R´t__and__R·R¸R¹t__xor__RºR»R¼R½R2R”R‚RƒR„R…R†R‡R–R—R™RšR›RœRRRžR:R!(((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyRH sb                                  (RMRuR?R+t sqlalchemyRRRtsqlalchemy.ormRRRQRRFtsymbolRŸRGRH(((sC/usr/lib/python2.6/site-packages/sqlalchemy/ext/associationproxy.pyts    ;Áâ¯