Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
contego / home / tvault / .virtenv / lib / python2.7 / site-packages / sqlalchemy / orm / instrumentation.pyc
Size: Mime:
ó
‹EYc@sîdZddlmZmZmZmZddlmZddlmZejƒZ	de
fd„ƒYZdefd	„ƒYZ
d
efd„ƒYZeƒZejZZejZZejZZd„Zd
„Zd„Zd„ZdS(sœDefines SQLAlchemy's system of class instrumentation.

This module is usually not directly visible to user applications, but
defines a large part of the ORM's interactivity.

instrumentation.py deals with registration of end-user classes
for state tracking.   It interacts closely with state.py
and attributes.py which establish per-instance and per-class-attribute
instrumentation, respectively.

The class instrumentation system can be customized on a per-class
or global basis using the :mod:`sqlalchemy.ext.instrumentation`
module, which provides the means to build and specify
alternate instrumentation forms.

.. versionchanged: 0.8
   The instrumentation extension system was moved out of the
   ORM and into the external :mod:`sqlalchemy.ext.instrumentation`
   package.  When that package is imported, it installs
   itself within sqlalchemy.orm so that its more comprehensive
   resolution mechanics take effect.

i(texctcollectionst
interfaceststatei(tutil(tbasetClassManagercBs*eZdZejZejZee	j
eƒƒZd+Z
ejZd+Zd„Zd„Zd„Zed„ƒZed„ƒZed„ƒZed„ƒZe	jd„ƒZd+d	„Zd
„Zd„Zd„Zd
„Z e	jd„ƒZ!d„Z"d„Z#e	j$d„ƒZ%e	j$d„ƒZ&e	j$d„ƒZ'e(d„Z)d„Z*d„Z+e(d„Z,d„Z-d„Z.d„Z/d„Z0d„Z1d„Z2d„Z3e(d„Z4d „Z5ed!„ƒZ6d+d"„Z7d+d#„Z8d$„Z9d%„Z:d&„Z;d'„Z<e(d(„Z=d)„Z>e>Z?d*„Z@RS(,s,tracks state information at the class level.cCs7||_i|_d|_i|_i|_gg|jjD]!}t|tƒr=t	|ƒ^q=D]}|dk	rb|^qb|_
x|j
D]}|j|ƒqW|jj
j||ƒx?|jD]4}t	|ƒ}|dk	rÄ|jj|jƒqÄqÄW|jƒ|jƒd|jkr3tjd|ƒndS(Nt__del__s¦__del__() method on class %s will cause unreachable cycles and memory leaks, as SQLAlchemy instrumentation often creates reference cycles.  Please remove this method.(tclass_tinfotNonetnew_inittlocal_attrst	originalst	__bases__t
isinstancettypetmanager_of_classt_basestupdatetdispatcht_eventst_new_classmanager_instancet__mro__t_updatetmanaget_instrument_initt__dict__Rtwarn(tselfRRtmgrtbasecls((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt__init__7s,					%

	cCs
t|ƒS(N(tid(R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt__hash__XscCs
||kS(N((Rtother((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt__eq__[scCs
d|jkS(Ntmapper(R(R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt	is_mapped^scCs
t|ƒS(N(t	frozenset(R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt_all_key_setbscCs2tg|jƒD]}|jjr|j^qƒS(N(R'tvaluestimplt
collectiontkey(Rtattr((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt_collection_impl_keysfscCs2tg|jƒD]}|jjr|j^qƒS(N(R'R)R*taccepts_scalar_loader(RR-((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt_scalar_loader_implskscCstj|jƒ‚dS(N(RtUnmappedClassErrorR(R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyR%qsccs|dkrtƒ}nxq|jjD]c}xZt|jƒj|ƒD]@}|j|ƒ|j|}t|tj	ƒrD||fVqDqDWq%WdS(sreturn an iterator of all classbound attributes that are
        implement :class:`.InspectionAttr`.

        This includes :class:`.QueryableAttribute` as well as extension
        types such as :class:`.hybrid_property` and
        :class:`.AssociationProxy`.

        N(
R
tsetRRRt
differencetaddRRtInspectionAttr(RtexcludetsuperclsR,tval((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt_all_sqla_attributesvs	

cCs||ko||jdk	S(s\Return True if the given attribute is fully initialized.

        i.e. has an impl.
        N(R*R
(RR,((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt_attr_has_implˆscCs.t|ƒ}|dkr*tj|ƒ}n|S(sÏCreate a new ClassManager for a subclass of this ClassManager's
        class.

        This is called automatically when attributes are instrumented so that
        the attributes can be propagated to subclasses against their own
        class-local manager, without the need for mappers etc. to have already
        pre-configured managers for the full class hierarchy.   Mappers
        can post-configure the auto-generated ClassManager when needed.

        N(RR
t_instrumentation_factorytcreate_manager_for_cls(Rtclstmanager((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt_subclass_managerscCs;|jj|_t|j|ƒ|_|jd|jƒdS(NR (RR t
original_initt_generate_initRtinstall_member(R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyR scCs&|jr"|jdƒd|_ndS(NR (Rtuninstall_memberR
(R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt_uninstrument_initªs	
cCs|jj||jƒtjS(N(Rt
first_initRRt
InstanceState(R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt_state_constructor¯scCst|j|j|ƒdS(s0Mark this instance as the manager for its class.N(tsetattrRtMANAGER_ATTR(R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyR´scCst|j|jƒdS(s)Dissasociate this manager from its class.N(tdelattrRRI(R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pytdispose¹scCstS(N(t_default_manager_getter(R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pytmanager_getter¾scCstS(sÍReturn a (instance) -> InstanceState callable.

        "state getter" callables should raise either KeyError or
        AttributeError if no InstanceState could be found for the
        instance.
        (t_default_state_getter(R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pytstate_getterÂs	cCstS(N(t_default_dict_getter(R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pytdict_getterÍscCs|r||jkr9dSn||j|<|j||ƒtj|ƒ|||<x9|jjƒD](}|j|ƒ}|j||tƒq`WdS(N(	Rtinstall_descriptort_memoized_key_collectiontexpire_instanceRt__subclasses__R?tinstrument_attributetTrue(RR,tinstt
propagatedR=R>((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyRVÑs


ccsrxk|jjƒD]Z}t|ƒ}|dk	r||k	r|V|rjx|jtƒD]}|VqUWqjqqWdS(N(RRURR
tsubclass_managersRW(Rt	recursiveR=Rtm((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyRZßscCs!tjj|j|||ƒdS(N(R;Rtattribute_instrumentR(RR,((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pytpost_configure_attributeès	cCsš||krdS|r,||jkrCdSn|j|=|j|ƒtj|ƒ||=x<|jjƒD]+}t|ƒ}|rg|j|tƒqgqgWdS(N(	Rtuninstall_descriptorRSRTRRURtuninstrument_attributeRW(RR,RYR=R>((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyR`ìs


cCsa|jƒd|_|_|jjƒx3t|ƒD]%}||jkr4|j|ƒq4q4WdS(s<remove all instrumentation established by this ClassManager.N(	RDR
R%RR	tcleartlistRR`(RR,((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt
unregisterüs

cCsB||j|jfkr+td|ƒ‚nt|j||ƒdS(NsW%r: requested attribute name conflicts with instrumentation attribute of the same name.(t
STATE_ATTRRItKeyErrorRHR(RR,RX((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyRRs
cCst|j|ƒdS(N(RJR(RR,((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyR_scCsd||j|jfkr+td|ƒ‚n|jj|t|j|dƒƒt|j||ƒdS(NsW%r: requested attribute name conflicts with instrumentation attribute of the same name.(	RdRIReR
t
setdefaulttgetattrRR
RH(RR,timplementation((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyRBs

"cCs;|jj|dƒ}|dk	r7t|j||ƒndS(N(R
tpopR
RHR(RR,toriginal((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyRCscCs
tj|ƒS(N(Rtprepare_instrumentation(RR,tcollection_class((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pytinstrument_collection_classscCs1|ƒ}tj|j|ƒ||ƒ}||fS(N(RtCollectionAdaptertget_impl(RR,Rtfactoryt	user_datatadapter((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pytinitialize_collection"s	cCs!|r||kS||jkSdS(N(R(RR,tsearch((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pytis_instrumented(s
cCs||jS(N(R*(RR,((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyRo.scCst|jƒƒS(N(titerR)(R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt
attributes1scCsJ|jj|jƒ}|dkr6|j||ƒ}n|j||ƒ|S(N(Rt__new__R
RGt
_state_setter(RRtinstance((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pytnew_instance7s
cCs5|dkr!|j||ƒ}n|j||ƒdS(N(R
RGRy(RRzR((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pytsetup_instance>scCst||jƒdS(N(RJRd(RRz((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pytteardown_instanceCscCs
t||ƒS(N(t_SerializeManager(RRt
state_dict((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt
_serializeFscCstt||jƒrtS|j|jk	rJ|jrJ|j|jƒj|ƒS|j||ƒ}|j	||ƒ|SdS(sƒInstall a default InstanceState if none is present.

        A private convenience method used by the __init__ decorator.

        N(
thasattrRdtFalseRt	__class__R&R?t_new_state_if_noneRGRy(RRzR((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyR„Is	cCst||jƒS(N(RRd(RRz((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt	has_state_scCs|j|ƒj|d|ƒS(tTODOt
optimistic(Rot	hasparent(RRR,R‡((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt
has_parentbscCstS(s=All ClassManagers are non-zero regardless of attribute state.(RW(R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt__bool__fscCs d|jj|jt|ƒfS(Ns<%s of %r at %x>(Rƒt__name__RR!(R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt__repr__lsN(AR‹t
__module__t__doc__RtDEFAULT_MANAGER_ATTRRItDEFAULT_STATE_ATTRRdtstaticmethodRt
attrsetterRyR
tdeferred_scalar_loadertobjectR R@RpR"R$tpropertyR&RSR(R.R0tmemoized_propertyR%R9R:R?RRDRGRRKthybridmethodRMRORQR‚RVRZR^R`RcRRR_RBRCRmRsRuRoRwR{R|R}R€R„R…R‰RŠt__nonzero__RŒ(((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyR)sd				!					
																			R~cBs eZdZd„Zd„ZRS(s¡Provide serialization of a :class:`.ClassManager`.

    The :class:`.InstanceState` uses ``__init__()`` on serialize
    and ``__call__()`` on deserialize.

    cCs,|j|_|j}|jj||ƒdS(N(RR>Rtpickle(RRtdR>((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyR ys	cCsšt|jƒ|_}|dkr>tj|d|jƒ‚n&|jrd|jjrd|jj	ƒn|dk	rƒ|j
||ƒn|jj||ƒdS(NsxCannot deserialize object of type %r - no mapper() has been configured for this class within the current Python process!(
RRR>R
RtUnmappedInstanceErrorR&R%t
configuredt_configure_allR|Rtunpickle(RRRXRR>((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt__call__~s(R‹RRŽR RŸ(((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyR~qs	tInstrumentationFactorycBs2eZdZd„Zd„Zd„Zd„ZRS(s'Factory for new ClassManager instances.cCs|dk	st‚t|ƒdks*t‚|j|ƒ\}}|dkr`t}||ƒ}n|j||ƒ||_|jj|ƒ|S(N(	R
tAssertionErrorRt_locate_extended_factoryRt_check_conflictsRpRtclass_instrument(RRR>Rp((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyR<–s	cCsdS(s2Overridden by a subclass to do an extended lookup.N(NN(R
(RR((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyR¢©scCsdS(s;Overridden by a subclass to test for conflicting factories.N((RRRp((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyR£­scCsYt|ƒ}|jƒ|jƒ|jj|ƒtj|jkrUt|tjƒndS(N(	RRcRKRtclass_uninstrumentRRIRRJ(RRR>((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyRc±s

(R‹RRŽR<R¢R£Rc(((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyR “s
			cCs.t|ƒ}|dkr*tj|ƒ}n|S(s_Register class instrumentation.

    Returns the existing or newly created class manager.

    N(RR
R;R<(RR>((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pytregister_classÇscCstj|ƒdS(s!Unregister class instrumentation.N(R;Rc(R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pytunregister_classÔscCst|jƒj|dtƒS(sïReturn True if the given attribute on the given instance is
    instrumented by the attributes package.

    This function may be used regardless of instrumentation
    applied directly to the class, i.e. no descriptors are required.

    Rt(RRƒRuRW(RzR,((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyRuÚscBsó|j}|st‚d}ej|deƒ}||}ejrje|d|ƒ}e|ddƒ}n$e|ddƒ}e|ddƒ}eƒj	ƒ}	||	fdU|	d}
|j
|
_
|rÓ||
_nejrï|rï||
_n|
S(	s>Build an __init__ decorator that triggers ClassManager events.sâdef __init__(%(apply_pos)s):
    new_state = class_manager._new_state_if_none(%(self_arg)s)
    if new_state:
        return new_state._initialize_instance(%(apply_kw)s)
    else:
        return original__init__(%(apply_kw)s)
tgroupedtim_funct
func_defaultst__defaults__t__kwdefaults__NR (
R R¡Rtformat_argspec_initR‚tpy2kRgR
tlocalstcopyRŽR«R¬(Rt
class_managertoriginal__init__t	func_bodyt	func_varst	func_texttfuncRªtfunc_kw_defaultstenvR ((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyRAæs&	
	
N(RŽtRRRRRRt!group_expirable_memoized_propertyRStdictRR”R~R R;tinstance_stateRNt
instance_dictRPRRLR¦R§RuRA(((sS/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/instrumentation.pyt<module>s "ÿI"(