[Jc@sdZddklZddkiZddklZlZddk l Z da da d'ZeidZeidZeidZeidZeidZd efdYZdefdYZdefdYZde ifdYZdefdYZddZdZdZd efd YZd efd!YZ defd"YZ!defd#YZ"de!fd$YZ#d efd%YZ$d efd&YZ%dS((s Semi-private module containing various base classes used throughout the ORM. Defines the extension classes :class:`MapperExtension`, :class:`SessionExtension`, and :class:`AttributeExtension` as well as other user-subclassable extension objects. i(tchainN(tlogtutil(t expressiontAttributeExtensiont EXT_CONTINUEtEXT_STOPtExtensionOptiontInstrumentationManagertLoaderStrategytMapperExtensiont MapperOptiontMapperPropertytPropComparatortPropertyOptiontSessionExtensiontStrategizedOptiontStrategizedPropertyt build_patht ONETOMANYt MANYTOONEt MANYTOMANYcBseZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZRS(stBase implementation for customizing Mapper behavior. For each method in MapperExtension, returning a result of EXT_CONTINUE will allow processing to continue to the next MapperExtension in line or use the default functionality if there are no other extensions. Returning EXT_STOP will halt processing of further extensions handling that method. Some methods such as ``load`` have other return requirements, see the individual documentation for details. Other than these exception cases, any return value other than EXT_CONTINUE or EXT_STOP will be interpreted as equivalent to EXT_STOP. cCstS(N(R(tselftmappertclass_((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytinstrument_classAscCstS(N(R(RRRtoldinittinstancetargstkwargs((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt init_instanceDscCstS(N(R(RRRRRRR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt init_failedGscCstS(sPerform pre-processing on the given result row and return a new row instance. This is called when the mapper first receives a row, before the object identity or the instance itself has been derived from that row. (R(RRtcontexttrow((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt translate_rowJs cCstS(s?Receive a row when a new object instance is about to be created from that row. The method can choose to create the instance itself, or it can return EXT_CONTINUE to indicate normal object creation should take place. mapper The mapper doing the operation selectcontext SelectionContext corresponding to the instances() call row The result row from the database class\_ The class we are mapping. return value A new object instance, or EXT_CONTINUE (R(RRt selectcontextR!R((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytcreate_instanceUscKstS(sReceive an object instance before that instance is appended to a result list. If this method returns EXT_CONTINUE, result appending will proceed normally. if this method returns any other value or None, result appending will not proceed for this instance, giving this extension an opportunity to do the appending itself, if desired. mapper The mapper doing the operation. selectcontext SelectionContext corresponding to the instances() call. row The result row from the database. instance The object instance to be appended to the result. result List to which results are being appended. \**flags extra information about the row, same as criterion in ``create_row_processor()`` method of :class:`~sqlalchemy.orm.interfaces.MapperProperty` (R(RRR#R!Rtresulttflags((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt append_resultnscKstS(sReceive an instance before that instance has its attributes populated. This usually corresponds to a newly loaded instance but may also correspond to an already-loaded instance which has unloaded attributes to be populated. The method may be called many times for a single instance, as multiple result rows are used to populate eagerly loaded collections. If this method returns EXT_CONTINUE, instance population will proceed normally. If any other value or None is returned, instance population will not proceed, giving this extension an opportunity to populate the instance itself, if desired. As of 0.5, most usages of this hook are obsolete. For a generic "object has been newly created from a row" hook, use ``reconstruct_instance()``, or the ``@orm.reconstructor`` decorator. (R(RRR#R!RR&((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytpopulate_instancescCstS(s4Receive an object instance after it has been created via ``__new__``, and after initial attribute population has occurred. This typically occurs when the instance is created based on incoming result rows, and is only called once for that instance's lifetime. Note that during a result-row load, this method is called upon the first row received for this instance. If eager loaders are set to further populate collections on the instance, those will *not* yet be completely loaded. (R(RRR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytreconstruct_instancescCstS(s/Receive an object instance before that instance is INSERTed into its table. This is a good place to set up primary key values and such that aren't handled otherwise. Column-based attributes can be modified within this method which will result in the new value being inserted. However *no* changes to the overall flush plan can be made; this means any collection modification or save() operations which occur within this method will not take effect until the next flush call. (R(RRt connectionR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt before_insertscCstS(s;Receive an object instance after that instance is INSERTed.(R(RRR*R((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt after_insertscCstS(sReceive an object instance before that instance is UPDATEed. Note that this method is called for all instances that are marked as "dirty", even those which have no net changes to their column-based attributes. An object is marked as dirty when any of its column-based attributes have a "set attribute" operation called or when any of its collections are modified. If, at update time, no column-based attributes have any net changes, no UPDATE statement will be issued. This means that an instance being sent to before_update is *not* a guarantee that an UPDATE statement will be issued (although you can affect the outcome here). To detect if the column-based attributes on the object have net changes, and will therefore generate an UPDATE statement, use ``object_session(instance).is_modified(instance, include_collections=False)``. Column-based attributes can be modified within this method which will result in their being updated. However *no* changes to the overall flush plan can be made; this means any collection modification or save() operations which occur within this method will not take effect until the next flush call. (R(RRR*R((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt before_updatescCstS(s;Receive an object instance after that instance is UPDATEed.(R(RRR*R((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt after_updatescCstS(s?Receive an object instance before that instance is DELETEed. Note that *no* changes to the overall flush plan can be made here; this means any collection modification, save() or delete() operations which occur within this method will not take effect until the next flush call. (R(RRR*R((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt before_deletes cCstS(s;Receive an object instance after that instance is DELETEed.(R(RRR*R((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt after_deletes(t__name__t __module__t__doc__RRRR"R$R'R(R)R+R,R-R.R/R0(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyR 3s            cBsheZdZdZdZdZdZdZdZdZ dZ d Z d Z RS( sAn extension hook object for Sessions. Subclasses may be installed into a Session (or sessionmaker) using the ``extension`` keyword argument. cCsdS(sExecute right before commit is called. Note that this may not be per-flush if a longer running transaction is ongoing.N((Rtsession((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt before_commitscCsdS(s|Execute after a commit has occured. Note that this may not be per-flush if a longer running transaction is ongoing.N((RR4((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt after_commitscCsdS(s~Execute after a rollback has occured. Note that this may not be per-flush if a longer running transaction is ongoing.N((RR4((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytafter_rollback scCsdS(sExecute before flush process has started. `instances` is an optional list of objects which were passed to the ``flush()`` method. N((RR4t flush_contextt instances((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt before_flushscCsdS(sExecute after flush has completed, but before commit has been called. Note that the session's state is still in pre-flush, i.e. 'new', 'dirty', and 'deleted' lists still show pre-flush state as well as the history settings on instance attributes.N((RR4R8((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt after_flushscCsdS(sZExecute after flush has completed, and after the post-exec state occurs. This will be when the 'new', 'dirty', and 'deleted' lists are in their final state. An actual commit() may or may not have occured, depending on whether or not the flush started its own transaction or participated in a larger transaction. N((RR4R8((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytafter_flush_postexec scCsdS(sExecute after a transaction is begun on a connection `transaction` is the SessionTransaction. This method is called after an engine level transaction is begun on a connection. N((RR4t transactionR*((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt after_begin(scCsdS(ssExecute after an instance is attached to a session. This is called after an add, delete or merge. N((RR4R((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt after_attach/scCsdS(sGExecute after a bulk update operation to the session. This is called after a session.query(...).update() `query` is the query object that this update operation was called on. `query_context` was the query context object. `result` is the result object returned from the bulk operation. N((RR4tqueryt query_contextR%((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytafter_bulk_update5scCsdS(sGExecute after a bulk delete operation to the session. This is called after a session.query(...).delete() `query` is the query object that this delete operation was called on. `query_context` was the query context object. `result` is the result object returned from the bulk operation. N((RR4R@RAR%((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytafter_bulk_delete?s( R1R2R3R5R6R7R:R;R<R>R?RBRC(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRs         cBseZdZdZdZdddZdZdZe Z e Z dZ dZ dZd Zd Zd Zd Zd ZRS(s Manage the relationship of a ``Mapper`` to a single class attribute, as well as that attribute as it appears on individual instances of the class, including attribute instrumentation, attribute access, loading behavior, and dependency calculations. cKsdS(sCalled by Query for the purposes of constructing a SQL statement. Each MapperProperty associated with the target mapper processes the statement referenced by the query context, adding columns and/or criterion as appropriate. N((RR tentitytpathtadapterR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytsetupPscCs tdS(sgReturn a 2-tuple consiting of two row processing functions and an instance post-processing function. Input arguments are the query.SelectionContext and the *first* applicable row of a result set obtained within query.Query.instances(), called only the first time a particular mapper's populate_instance() method is invoked for the overall result. The settings contained within the SelectionContext as well as the columns present in the row (which will be the same columns present in all rows) are used to determine the presence and behavior of the returned callables. The callables will then be used to process all rows and instances. Callables are of the following form:: def new_execute(state, dict_, row, **flags): # process incoming instance state and given row. the instance is # "new" and was just created upon receipt of this row. # flags is a dictionary containing at least the following # attributes: # isnew - indicates if the instance was newly created as a # result of reading this row # instancekey - identity key of the instance def existing_execute(state, dict_, row, **flags): # process incoming instance state and given row. the instance is # "existing" and was created based on a previous row. return (new_execute, existing_execute) Either of the three tuples can be ``None`` in which case no function is called. N(tNotImplementedError(RR#RERR!RF((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytcreate_row_processorZs#cCs tdS(sIterate through instances related to the given instance for a particular 'cascade', starting with this MapperProperty. See PropertyLoader for the related instance implementation. ((titer(Rttype_tstatetvisited_instancesthalt_on((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytcascade_iteratorscCs ||_dS(N(tparent(RRP((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt set_parentscCs tdS(N(RH(RR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRscCs t|_|it|_dS(sCalled after all mappers are created to assemble relationships between mappers and perform other post-mapper-creation initialization steps. N(tTruet_compile_startedtdo_initt_compile_finished(R((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytinits  cCsdS(sPerform subclass-specific initialization post-mapper-creation steps. This is a *template* method called by the ``MapperProperty`` object's init() method. N((R((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRTscCsdS(sdPerform instrumentation adjustments that need to occur after init() has completed. N((RR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytpost_instrument_classscOsdS(sCalled by the ``Mapper`` in response to the UnitOfWork calling the ``Mapper``'s register_dependencies operation. Establishes a topological dependency between two mappers which will affect the order in which mappers persist data. N((RRR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytregister_dependenciesscOsdS(sCalled by the ``Mapper`` in response to the UnitOfWork calling the ``Mapper``'s register_processors operation. Establishes a processor object between two mappers which will link data and state between parent/child objects. N((RRR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytregister_processorsscCs |ii S(s-Return True if this ``MapperProperty``'s mapper is the primary mapper for its class. This flag is used to indicate that the ``MapperProperty`` can define attribute instrumentation for the class at the class level (as opposed to the individual instance level). (RPt non_primary(R((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt is_primarys cCs tdS(sdMerge the attribute represented by this ``MapperProperty`` from source to destination objectN(RH(RR4tsourcetdestt dont_loadt _recursive((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytmergescCs||i|S(s{Return a compare operation for the columns represented by this ``MapperProperty`` to the given value, which may be a column value or an instance. 'operator' is an operator from the operators module, or from sql.Comparator. By default uses the PropComparator attached to this MapperProperty under the attribute name "comparator". (t comparator(Rtoperatortvalue((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytcompares N(R1R2R3RGRItNoneRORQRtFalseRSRURVRTRWRXRYR[R`Rd(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyR Is  %    cBszeZdZd dZdZdZedZedZ edZ dZ d dZ d d Z RS( sdefines comparison operations for MapperProperty objects. PropComparator instances should also define an accessor 'property' which returns the MapperProperty associated with this PropComparator. cCs&||_|_||_||_dS(N(tproptpropertyRRF(RRgRRF((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt__init__s cCstd|dS(Ns%r(RH(R((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt__clause_element__scCs|i|i|i|S(sReturn a copy of this PropComparator which will use the given adaption function on the local side of generated expressions. (t __class__RgR(RRF((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytadaptedscKs|i||S(N(tany(tatbR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytany_opscKs|i||S(N(thas(RnRoR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pythas_opscCs |i|S(N(tof_type(RnR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt of_type_opscCs|iti|S(sRedefine this object in terms of a polymorphic subclass. Returns a new PropComparator from which further criterion can be evaluated. e.g.:: query.join(Company.employees.of_type(Engineer)).\ filter(Engineer.name=='foo') \class_ a class or mapper indicating that criterion will be against this specific subclass. (toperateR Rt(RR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRsscKs|iti||S(s|Return true if this collection contains any member that meets the given criterion. criterion an optional ClauseElement formulated against the member class' table or attributes. \**kwargs key/value pairs corresponding to member class attribute names which will be compared via equality to the corresponding values. (RuR Rp(Rt criterionR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRms cKs|iti||S(szReturn true if this element references a member which meets the given criterion. criterion an optional ClauseElement formulated against the member class' table or attributes. \**kwargs key/value pairs corresponding to member class attribute names which will be compared via equality to the corresponding values. (RuR Rr(RRvR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRq s N(R1R2R3ReRiRjRlt staticmethodRpRrRtRsRmRq(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyR s     cBsMeZdZdZdZdZdZdZdZdZ RS(s"A MapperProperty which uses selectable strategies to affect loading behavior. There is a single default strategy selected by default. Alternate strategies can be selected at Query time through the usage of ``StrategizedOption`` objects via the Query.options() method. cCs`|iid|fd}|o3y|i|SWq\tj o|i|SXn|iSdS(Ntloaderstrategy(t attributestgetRet$_StrategizedProperty__all_strategiestKeyErrort#_StrategizedProperty__init_strategytstrategy(RR REtcls((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt__get_context_strategy8scCs3y|i|SWntj o|i|SXdS(N(R{R|R}(RR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt _get_strategyBscCs%|||i|<}|i|S(N(R{RV(RRR~((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt__init_strategyHs cKs3|i|||ifi|||||dS(N(t*_StrategizedProperty__get_context_strategytkeyt setup_query(RR RDRERFR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRGMscCs/|i|||ifi|||||S(N(RRRI(RR RERR!RF((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRIPscCs"h|_|i|i|_dS(N(R{R}tstrategy_classR~(R((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRTSs cCs%|io|ii|ndS(N(R[R~tinit_class_attribute(RR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRWWs ( R1R2R3RRR}RGRIRTRW(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyR/s     cCs$|o|||fS||fSdS(N((RDRtprev((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyR[scCs|djodSg}g}tdt|ddD]}|||||dfq:~D]\}}||i|fq`~S(Niii(RetrangetlenR(REt_[1]t_[2]tiRR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytserialize_pathas cCsp|djodStdjoddklanttg}|D]\}}|t||fqD~S(Ni(t class_mapper(ReRtsqlalchemy.ormttupleR(RERRR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytdeserialize_pathjs   cBs eZdZdZdZRS(s#Describe a modification to a Query.cCsdS(N((RR@((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt process_queryyscCs|i|dS(ssame as process_query(), except that this option may not apply to the given query. Used when secondary loaders resend existing options to a new Query.N(R(RR@((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytprocess_query_conditionally|s(R1R2R3RR(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyR vs cBs eZdZdZdZRS(sCa MapperOption that applies a MapperExtension to a query operation.cCs ||_dS(N(text(RR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRiscCs5|i}|ii|_|ii|idS(N(t_generate_mapper_zerot extensiontcopytpushR(RR@RD((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRs (R1R2R3RiR(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRs cBsbeZdZd dZdZdZdZdZdZ dZ dZ d Z RS( sA MapperOption that is applied to a property off the mapper or one of its child mappers, identified by a dot-separated key. cCs||_||_dS(N(RR(RRR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRis cCs|i|tdS(N(t_processRR(RR@((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRscCs|i|tdS(N(RRf(RR@((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRscCs1|i||}|o|i||ndS(N(t_PropertyOption__get_pathstprocess_query_property(RR@traiseerrtpaths((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRscCsdS(N((RR@R((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRsc Csddkl}l}||o |}n||i}xu|iD]}|i|jo|SqFW|oDtid|g}|iD]} |t | iq~fndSdS(Ni(t_class_to_mappert_is_aliased_classs0Can't find entity %s in Query. Current list: %r( tsqlalchemy.orm.utilRRt base_mappert_mapper_entitiest path_entitytsa_exct ArgumentErrort _entitieststrRe( RR@RRRRt searchfortentRtm((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt __find_entitys     ;cCs{|ii}g|d<}xWti|iD]C}t|to |i|ii |ifq0|i|q0W|S(NR( t__dict__RRtto_listRt isinstanceR tappendRR(Rtdtretttoken((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt __getstate__s cCs{g}xU|dD]I}t|to&|\}}|it||q|i|qWt||d<||_dS(NR(RRRtgetattrR(RRLRRRtpropkey((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt __setstate__s  c Cs9d}d}g}t|i}|io.|i||i|}|i}|i}nxti|iD]} t | t o| i d} n | g} x| D]|} t | t oN|p"|i }|i}|i}n|i | dtd|} | } nnt | toN| i} |p1|i|| i|}|pgS|i}n| i} ntid|o"| |djo|d}qn| djogSt|| i|}|i|t| ddo| i}}nt| dd}}|o |i}qqWqlW|ogS|S( Nt.tresolve_synonymsRs6mapper option expects string key or list of attributesiit_of_typeR(Retlistt _current_pathRt_PropertyOption__find_entityRRRRRt basestringtsplitt _entity_zerot get_propertyRRR Rht parententityRRRRRRR( RR@RRERDtlt current_pathRt path_elementRttokensRRg((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt __get_pathss\              N( R1R2R3ReRiRRRRRRRR(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRs       cBs)eZdZdZdZdZRS(sAn event handler for individual attribute change events. AttributeExtension is assembled within the descriptors associated with a mapped class. cCs|S(sReceive a collection append event. The returned value will be used as the actual value to be appended. ((RRLRct initiator((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRscCsdS(sFReceive a remove event. No return value is defined. N((RRLRcR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytremovescCs|S(snReceive a set event. The returned value will be used as the actual value to be set. ((RRLRctoldvalueR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytset#s(R1R2R3RRR(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyR s cBs)eZdZdZdZdZRS(sqA MapperOption that affects which LoaderStrategy will be used for an operation by a StrategizedProperty. cCstS(N(Rf(R((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt is_chained2scCs\|io.xH|D]}|i|id|fs((RR((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt state_getterscsfdS(Ncsi|S((R(R(RR(s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRs((RR((RRs=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyt dict_getters(R1R2R3RiRRRRRRRRRRRRRRRR(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pyRs$                (sAttributeExtensions EXT_CONTINUEsEXT_STOPsExtensionOptionsInstrumentationManagersLoaderStrategysMapperExtensions MapperOptionsMapperPropertysPropComparatorsPropertyOptionsSessionExtensionsStrategizedOptionsStrategizedPropertys build_path(&R3t itertoolsRtsqlalchemy.exceptionst exceptionsRt sqlalchemyRRtsqlalchemy.sqlRReRRt__all__tsymbolRRRRRtobjectR RR tColumnOperatorsR RRRRR RRRRR R(((s=/usr/lib/python2.6/site-packages/sqlalchemy/orm/interfaces.pytsRKS,   {#@