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 / strategies.pyc
Size: Mime:
ó
‹EYc@sVdZddlmZmZddlmZmZmZddlmZ	m
Z
ddlmZddlmZmZmZ
mZmZmZddlmZdd	lmZdd
lmZddlmZmZddlmZmZdd
lmZddlZeeeeeeed„Zej j!dedeƒdefd„ƒYƒZ"ej#ej j!de$deƒdefd„ƒYƒƒZ%ej#ej j!de$de$ƒdefd„ƒYƒƒZ&de'fd„ƒYZ(defd„ƒYZ)ej#ej*j!ddƒej*j!deƒde)fd „ƒYƒƒƒZ+ej#ej*j!de$ƒej*j!dd!ƒd"e)ej,fd#„ƒYƒƒƒZ-d$e'fd%„ƒYZ.ej*j!dd&ƒd'e)fd(„ƒYƒZ/ej#ej*j!dd)ƒd*e)fd+„ƒYƒƒZ0ej#ej*j!dd,ƒej*j!deƒd-e)fd.„ƒYƒƒƒZ1d/„Z2dS(0sWsqlalchemy.orm.interfaces.LoaderStrategy
   implementations, and related MapperOptions.i(texctinspect(tutiltlogtevent(Rtvisitors(tsqli(t
attributest
interfacesRtloadingt
unitofworkR(t
InstanceState(t	_none_set(t
properties(tLoaderStrategytStrategizedProperty(t_SET_DEFERRED_EXPIREDt_DEFER_FOR_STATE(t_state_sessioniÿÿÿÿNc
"sÙ|j}ttj|jdgƒƒ}g}
|rL|jrL|
jtƒn|j|j	j
kr–|j	j
|j\‰‰|
j‡‡fd†ƒn|r¯|
jtjƒn|
j
ddƒ‰ˆrã|
j‡‡fd†ƒnxï|jD]ä}||jj|jƒkrí|jj|jƒrítj|j|jd|dˆd|d|d	|d
|ou|jpu|jtjkd|d|d
|d|	d|pž|jd|j|
}x|
D]}|||ƒq·WqíqíWdS(Ntdefaultcstj||jˆˆS(N(torm_utilt_validator_eventstkey(tdesctprop(tfntopts(sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyt<lambda>6stbackrefcstj|ˆˆƒS(N(Rtbackref_listeners(RR(Rtuselist(sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRCstparent_tokenRtcompare_functiont	useobjectt	extensionttrackparentttypecallablet	callable_tactive_historyt
impl_classtsend_modified_eventstdoc(tparent_propertytlistRtto_listR"t
single_parenttappendtsingle_parent_validatorRtparentt
validatorsR
ttrack_cascade_eventstpoptNonetself_and_descendantst_propstgett
class_managert_attr_has_implRtregister_attribute_impltclass_t	directionRt	ONETOMANYtviewonlyR)(tstrategytmapperR!R R$RR%tproxy_propertyR&R'tkwRt
attribute_exttlisten_hookstmRthook((RRRRsN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyt_register_attributesL				
t
instrumenttdeferredtUninstrumentedColumnLoadercBs2eZdZdZd„Zdd„Zd„ZRS(s¶Represent a non-instrumented MapperProperty.

    The polymorphic_on argument of mapper() often results in this,
    if the argument is against the with_polymorphic selectable.

    tcolumnscCs)tt|ƒj|ƒ|jj|_dS(N(tsuperRJt__init__R*RK(tselfR0((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRM{sc	Ks;x4|jD])}|r&|j|}n|j|ƒq
WdS(N(RKR.(	RNtcontexttentitytpathtloadopttadaptertcolumn_collectiontkwargstc((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pytsetup_queryscCsdS(N((RNRORQRRR@tresultRSt
populators((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pytcreate_row_processor‡s(scolumnsN(t__name__t
__module__t__doc__t	__slots__RMR4RWRZ(((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRJqs
	tColumnLoadercBs8eZdZdZd„Zd„Zd„Zd„ZRS(s8Provide loading behavior for a :class:`.ColumnProperty`.RKtis_compositecCs>tt|ƒj|ƒ|jj|_t|jdƒ|_dS(Ntcomposite_class(RLR_RMR*RKthasattrR`(RNR0((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRM”scKskx4|jD])}	|r&|j|	}	n|j|	ƒq
W|jd}
|rZ|j|
}
n|
||j<dS(Ni(RKR.R*(RNRORPRQRRRSRTtmemoized_populatorsRURVtfetch((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRW™s
cCsst|_|jdj}|jjpJ|jdjpJ|jt|jƒk}t	||dt
d|jd|ƒdS(NiR!R R&(tTruetis_class_levelRKttypeR*R&tprimary_keytversion_id_coltsetRGtFalsetcompare_values(RNR@tcoltypeR&((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pytinit_class_attribute§s		c
Cs~xw|jD]R}|r&|j|}n|j|tƒ}	|	r
|dj|j|	fƒPq
q
W|dj|jtfƒdS(Ntquicktexpire(RKt_getterRkR.RRe(
RNRORQRRR@RXRSRYtcoltgetter((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRZµs(scolumnssis_composite(R[R\R]R^RMRWRnRZ(((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR_s			tDeferredColumnLoadercBsDeZdZdZd„Zd„Zd„Zd	d„Zd„Z	RS(
sAProvide loading behavior for a deferred :class:`.ColumnProperty`.RKtgroupcCsYtt|ƒj|ƒt|jdƒr7tdƒ‚n|jj|_|jj|_dS(NRas8Deferred loading for composite types not implemented yet(RLRtRMRbR*tNotImplementedErrorRKRu(RNR0((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRMÌs
c	CsP|js2|jj}|dj|j|fƒn|dj|jtfƒdS(NtnewRp(RfR*t_deferred_column_loaderR.RRk(	RNRORQRRR@RXRSRYtset_deferred_for_local_state((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRZÔs	cCsBt|_t||dtd|jdjjd|jdtƒdS(NR!R iR%texpire_missing(ReRfRGRkRKRgRlt_load_for_state(RNR@((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRnãs		c	
KsÎ|r3d|jkr3t|jƒj|jjƒss|r^|jr^|jjd|jtƒss|r¤|j	|kr¤|j
jtƒj
||||||||	n&|jr½t||j
<n
t||j
<dS(Ntundefer_pkssundefer_group_%s(t
local_optsRjRKtintersectionR0t_should_undefer_in_wildcardRuR7RkRR*t_get_strategy_by_clsR_RWRfRR(
RNRORPRQRRRSRTRctonly_load_propsRB((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRWís			c
CsQ|jstjS|tj@s$tjS|jj}|jrŽg|jD]B}t	|t
ƒrCt	|jtƒrC|j|jkrC|j^qC}n|jg}g|D]}||j
kr¡|^q¡}t|ƒ}|dkrtjdtj|ƒ|jfƒ‚n|j|ƒ}	tj|	|jd|d|ƒdkrJtj|ƒ‚ntjS(NsfParent instance %s is not bound to a Session; deferred load operation of attribute '%s' cannot proceedRt
refresh_state(RRt
ATTR_EMPTYtSQL_OKtPASSIVE_NO_RESULTtmanagerR@Rutiterate_propertiest
isinstanceRR?Rtt
unmodifiedRR4torm_exctDetachedInstanceErrorRt	state_strtqueryR	t
load_on_identtObjectDeletedErrortATTR_WAS_SET(
RNtstatetpassivetlocalparenttpttoloadtkRutsessionR((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR{
s0	
	
$((scolumnssgroupN(
R[R\R]R^RMRZRnR4RWR{(((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRtÅs			
tLoadDeferredColumnscBs&eZdZd„Zejd„ZRS(s7serializable loader object used by DeferredColumnLoadercCs
||_dS(N(R(RNR((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRM8scCs?|j}|jj}|j|}|jt}|j||ƒS(N(RR†R@R6t_strategiesRtR{(RNR‘R’RR“RR?((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyt__call__;s
	

(R[R\R]RMRtPASSIVE_OFFRš(((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR˜5s	tAbstractRelationshipLoadercBseZdZdZd„ZRS(s0LoaderStratgies which deal with related objects.R@ttargetRcCsGtt|ƒj|ƒ|jj|_|jj|_|jj|_dS(N(RLRœRMR*R@RR(RNR0((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRMIs(smapperstargetsuselist(R[R\R]R^RM(((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRœDstlazytnoloadtNoLoadercBs&eZdZdZd„Zd„ZRS(sYProvide loading behavior for a :class:`.RelationshipProperty`
    with "lazy=None".

    c	Cs8t|_t||dtd|jjd|jjƒdS(NR!RR$(ReRfRGR*Rtcollection_class(RNR@((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRn[s		c	s-‡fd†}|djˆj|fƒdS(Ncs<ˆjr+|jjˆjƒj||ƒn
d|ˆj<dS(N(RR†tget_implRt
initializeR4(R‘tdict_trow(RN(sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pytinvoke_no_loadhs	"Rw(R.R(	RNRORQRRR@RXRSRYR¦((RNsN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRZes((R[R\R]R^RnRZ(((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR Ps	
tselectt
LazyLoadercBskeZdZdZd	„Zd
„Zd„Zd„Zd
„Zd„Z	e
jdƒd„ƒZd„Z
RS(s|Provide loading behavior for a :class:`.RelationshipProperty`
    with "lazy=True", that is loads when first accessed.

    t
_lazywheret_rev_lazywheretuse_gett_bind_to_colt_equated_columnst_rev_bind_to_colt_rev_equated_columnst_simple_lazy_clausecCs9tt|ƒj|ƒ|jj}|jƒ\|_|_|_|jdt	ƒ\|_
|_|_|j
jd||jƒ|jo²|jjdj|jdt	d|jjƒ|_|jr5x[t|jƒD]J}||jjkrÑx/|jj|D]}|j||j|<qúWqÑqÑW|j
jd|ƒndS(Ntreverse_directions%s lazy loading clause %situse_proxiestequivalentss2%s will use query.get() to optimize instance loads(RLR¨RMR*t_join_conditiontcreate_lazy_clauseR©R¬R­ReRªR®R¯tloggertinfoRR@t_get_clausetcomparet_equivalent_columnsR«R+(RNR0tjoin_conditionRrRV((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRM~s$	
		cCs~t|_|jjp1|jjtjk	p1|j}t||dtd|j	d|jj
d|jjd|jjd|ƒdS(NR!R%RRR$R&(
ReRfR*R&R<Rt	MANYTOONER«RGR{Rtback_populatesR¡(RNR@R&((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRnžs	
		csQ|j|j}‰g‰‡‡fd†}tj|ii|d6ƒ}|ˆfS(Ncs[t|_|jˆkr;ˆj|jˆ|jdfƒnˆj|jd|jfƒdS(N(Rktuniquet_identifying_keyR.RR4tvalue(t	bindparam(tbind_to_coltparams(sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pytvisit_bindparamÀs	
RÁ(R©R¬Rtcloned_traverse(RNt	criterionRÄ((RÂRÃsN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyt"_memoized_attr__simple_lazy_clause¸s
	cCs|j\}}|dkrGtj|g|D]\}}}|^q+ƒS|jj}|jƒ}	tj|	ƒ}
|tj	@r‹|tj	N}ni}xv|D]n\}}}|dk	rü|rá|tj
@rá|j||
||ƒ}qü|j||
||ƒ}n|||<q˜W||fS(N(
R°R4tsql_utiltadapt_criterion_to_nullR*R0tobjRt
instance_dicttINIT_OKtLOAD_AGAINST_COMMITTEDt#_get_committed_state_attr_by_columnt_get_state_attr_by_column(RNR‘R’RÆt
param_keysRtidentRÀR@toR¤RÃ((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyt_generate_lazy_clauseÏs&&
cCs|jr2|jjr!|js+|jr2tjS|j}d}|tj@rZ|j	sn|tj
@ru|rutjSt|ƒ}|s¯t
jdtj|ƒ|jfƒ‚n|j	ri|j|||ƒ}tj|krãtjStj|krùtjStj|ƒrdS|jj|ƒ}tj|||ƒ}|dk	rC|S|tj@s_|tj@ritjSn|j||||ƒS(NsbParent instance %s is not bound to a Session; lazy load operation of attribute '%s' cannot proceed(RR*tload_on_pendingt
_load_pendingt
session_idRRƒR4R„R«tNON_PERSISTENT_OKR…RRŠR‹RRŒt_get_ident_for_use_gett	NEVER_SETRt
issupersetR@tidentity_key_from_primary_keyR	tget_from_identitytRELATED_OBJECT_OKt_emit_lazyload(RNR‘R’tpendingt	ident_keyR—RÑtinstance((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR{ìsD




		
cCsm|jj}|tj@r%|j}n	|j}|j}g|jjD]%}||||j|d|ƒ^qDS(NR’(	R†R@RRÍRÎRÏtdictRhR­(RNR—R‘R’tinstance_mappertget_attrR¤tpk((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRØ"s
		ssqlalchemy.orm.strategy_optionsc
CsV|j|jƒjƒ}|jjdk	rH|j|j|jjƒ}n|jtƒ}|j	}|st|t
j@r†|jtƒ}n|j
r«|j|j
|jƒ}n|jrÉ|j|jŒ}n|jrâtj||ƒS|jjr|jtj|jjƒŒ}nxl|jjD]^}|jtjkr|jrt|jtƒr|j|j |j!ƒj"|j	ƒƒ}qqW|j#|d|ƒ\}	}
|rÁtj$t%j&|
j'ƒƒràdSntj$t%j(|
j'ƒƒràdS|j)|	ƒj*|
ƒ}|j+ƒ}|j,r|St-|ƒ}|rN|dkrFtj.d|jƒn|dSdSdS(NR’isKMultiple rows returned with uselist=False for lazily-loaded attribute '%s' i(/RR@t_adapt_all_clausesR*t	secondaryR4tselect_fromt_with_invoke_all_eagersRkRRtNO_AUTOFLUSHt	autoflusht	load_patht_with_current_pathtload_optionst_conditional_optionsR«R	RŽtorder_byRR,t_reverse_propertyR<RR¼t_use_getRˆR?R¨toptionstLoadR0tlazyloadRÓthas_intersectionRRtvaluest
_never_settfilterRÃtallRtlentwarn(
RNtstrategy_optionsR—R‘RàR’tqRßtrevtlazy_clauseRÃRXtl((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRÞ5sR
			!	(	c
s™|j‰|jsWtj|jtˆ|jdƒˆƒ}|dj|j|fƒn>|jsi|j	r•‡fd†}	|dj|j|	fƒndS(NiRwcs|j|ˆƒdS(N(t_reset(R‘R¤R¥(R(sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pytreset_for_lazy_callable‰s	(
RRfRt"_instance_level_callable_processorR8tLoadLazyAttributet_strategy_keysR.tpopulate_existingtalways_refresh(
RNRORQRRR@RXRSRYtset_lazy_callableR((RsN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRZvs			(s
_lazywheres_rev_lazywheresuse_gets_bind_to_cols_equated_columnss_rev_bind_to_cols_rev_equated_columnss_simple_lazy_clause(R[R\R]R^RMRnRÇRÓR{RØRtdependenciesRÞRZ(((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR¨ps	 				6	ARcBs)eZdZdd„Zejd„ZRS(s-serializable loader object used by LazyLoaderRžR§cCs||_||_dS(N(Rtstrategy_key(RNRR((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRMšs	cCsB|j}|jj}|j|}|j|j}|j||ƒS(N(RR†R@R6R™RR{(RNR‘R’RRãRR?((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRšžs
	
(slazysselect((slazysselect(R[R\R]RMRR›Rš(((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR—st	immediatetImmediateLoadercBs/eZdZd„Zddd„Zd„ZRS(cCs|jjtƒj|ƒdS(N(R*R€R¨Rn(RNR@((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRn«s		c	KsdS(N((	RNRORPRQRRRSRTtparentmapperRU((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRW°sc	s-‡fd†}|djˆj|fƒdS(Ncs |jˆjƒj||ƒdS(N(R¢RR7(R‘R¤R¥(RN(sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pytload_immediate¹stdelayed(R.R(	RNRORQRRR@RXRSRYR((RNsN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRZ¶s(N(R[R\R^RnR4RWRZ(((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR
§s
	tsubquerytSubqueryLoadercBs–eZdZd„Zd„Zddd„Zd„Zd„Zd„Z	d„Z
d„Zd	„Zd
e
fd„ƒYZd„Zd
„Zd„ZRS(t
join_depthcCs)tt|ƒj|ƒ|jj|_dS(N(RLRRMR*R(RNR0((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRMÄscCs|jjtƒj|ƒdS(N(R*R€R¨Rn(RNR@((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRnÈs		cKs|jjsdS|jjr/|jjdƒn||j}|j|jddƒ}	|	dk	rl|	j}
n	|j	}
|jjdt
jjƒ}||}|j
|jdƒsî|jrÕ|jd|jkrëdSqî|j|j	ƒrîdSn|j|ƒ\}}
}|jjdtf|jƒ}|j|||
||jƒ}|jj|
ƒ}i|dtf6|d6|_|jtƒ}|j||ƒ\}}}|j|Œ}|j|Œ}|j|||||
ƒ}|j||||
ƒ}|j|ƒ}|j|jd|ƒdS(	NRtpath_with_polymorphict
subquery_pathtloaderit
orig_query(RN(RN( Rt_enable_eagerloadst
_yield_pert
_no_yield_perR*R7RR4RPR@RtPathRegistrytroottcontainsRtlengthtcontains_mappert
_get_leftmostRt_generate_from_original_querytentity_zeroR—t_attributest_set_enable_single_critRkt_prep_for_joinsRðtadd_columnst_apply_joinst_setup_optionst_setup_outermost_orderbyRj(RNRORPRQRRRSRTRRUtwith_poly_infoteffective_entityt	subq_pathtleftmost_mappert
leftmost_attrtleftmost_relationshipRt
left_aliasRþtto_joint
local_attrtparent_alias((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRWÍsV
		
			

	cCs±|j}tj|dƒ}|jj|ƒrW|j|dkrW|j|j}}n||d}}|j}g|D]&}t|dj|j	|j
ƒ^qx}|||fS(Nii(RQRt_class_to_mapperR0tisaR*t
local_columnstgetattrRPt_columntopropertyR(RNR,tsubq_mapperR-t
leftmost_propt
leftmost_colsRVR.((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR s		0cCsO|jƒjdƒ}|jrG|jj|ƒrG|j|gtƒn|j|ƒ}|j	|ƒ|j
}|tkr„t|_nU|dkrÙxFt
d„|DƒƒD]+}	t
|ƒj|	jƒs§t|_Pq§q§Wn|jtkr÷|j|_n|jdkr!|jdkr!d|_n|jƒjƒ}
tj||
dtƒ}|S(Ncss|]}|jVqdS(N(ttable(t.0RV((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pys	<genexpr>Ostuse_mapper_path(t_clonet	correlateR4t	_from_objR@R5t_set_select_fromRkt_adapt_col_listt
_set_entitiestdistinct_target_keyRet	_distinctRjRÚRht	_order_byRðt_limitt_offsettwith_labelsRRtAliasedClass(RNRR-R.R/torig_entityRþttarget_colsREtttembed_qR0((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR!6s,
				cCs:g}t|jƒƒ}x{t|ƒD]m\}\}}|dkrv||ddj}|j|ƒrm|n|}	n|}	|j|	|jfƒq%Wt|ƒdkr±|}
nAt|ddƒ}|j	rÚ|j
}
ntj|j
dt
ƒ}
|jj}g|D]"}
t|
|jj|
jƒ^q}|||
fS(NiiiiÿÿÿÿR>(R+tpairst	enumerateR@R5R.RRûRtis_aliased_classRPRRKReR*R6R7R0R8(RNR0R,R1RPtiR@Rtprev_mappert	to_appendR3R·t
local_colsRVR2((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR%ds(				,cCsát|ƒ}|dkr>t||ddƒj|ƒg}ny|dkrt||ddƒj|ƒt||ddƒj|ƒg}n*|dkr·g|dd!D]C}t|dƒjsÓtj|dƒn
|dj|df^q§}g}	xl|rd|jdƒ}t|d|dƒ}
|rE|
j|ddƒ}
n|
j|ƒ}
|	j	|
ƒqùWt||ddƒj|	dj
ƒg|	t||ddƒj|ƒg}nx#|D]}
|j|
dtƒ}q¾W|S(Niiiiÿÿÿÿtfrom_joinpoint(
RûR7tof_typeRRRRRKRPR3R.R0tjoinRe(RNRþR1R0R3R+tltjtitemtmiddletinnertattr((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR'“s,&&T	+'
cCs=|j|ƒ}|j|jŒ}|jr9|j|_n|S(N(RíRït
_with_optionst_populate_existing(RNRþR,RR+((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR(Às
	cCsP|jjrL|jd}|jjtj|jjƒƒ}|j|Œ}n|S(Ni(R*RðRAt_target_adaptertcopy_and_processRR,(RNRþt	eagerjointeager_order_by((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR)Ês
	t_SubqCollectionscBs8eZdZdZd„Zd„Zd„Zd„ZRS(s«Given a :class:`.Query` used to emit the "subquery load",
        provide a load interface that executes the query at the
        first moment a value is needed.

        cCs
||_dS(N(tsubq(RNRf((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRMäscCs/|jdkr|jƒn|jj||ƒS(N(t_dataR4t_loadR7(RNRR((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR7çs
cCs/td„tj|jd„ƒDƒƒ|_dS(Ncss8|].\}}|g|D]}|d^qfVqdS(iN((R=R–tvtvv((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pys	<genexpr>îscSs|dS(Ni((tx((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRñs(Rât	itertoolstgroupbyRfRg(RN((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRhìs
cCs |jdkr|jƒndS(N(RgR4Rh(RNR‘R¤R¥((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRõsN(	R[R\R]R4RgRMR7RhR(((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyReÜs				cCs9|jj|jjjs/tjd|ƒ‚n||j}|j|j	dƒ}|dkradS|j|jkstdƒ‚|jj
}	|j|j	dƒ}
|
dkrÔ|j|ƒ}
|j|j	d|
ƒn|rýg|	D]}|j|^qá}	n|jr|j||
|	|ƒn|j||
|	|ƒdS(NsJ'%s' does not support object population - eager loading cannot be applied.RslSubquery session doesn't refer to that of our context.  Are there broken context caching schemes being used?tcollections(R0R8Rtimpltsupports_populationtsa_exctInvalidRequestErrorR*R7RR4R—tAssertionErrorR6ReRjRKRt_create_collection_loadert_create_scalar_loader(RNRORQRRR@RXRSRYRfRVRnRV((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRZùs,

	#	cs\‡‡‡fd†}|djˆj|fƒ|jrX|djˆjˆjfƒndS(NcsRˆjtgˆD]}||^qƒdƒ}|jˆjƒj|||ƒdS(N((R7ttupleR¢Rtset_committed_value(R‘R¤R¥Rrt
collection(RnRVRN(sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pytload_collection_from_subq%s
 	Rwteager(R.Rtinvoke_all_eagersR(RNRORnRVRYRy((RnRVRNsN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRt#s	cs\‡‡‡fd†}|djˆj|fƒ|jrX|djˆjˆjfƒndS(Ncs‚ˆjtgˆD]}||^qƒdƒ}t|ƒdkrUtjdˆƒn|d}|jˆjƒj|||ƒdS(NisLMultiple rows returned with uselist=False for eagerly-loaded attribute '%s' i(N(	R7RvR4RûRRüR¢RRw(R‘R¤R¥RrRxtscalar(RnRVRN(sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pytload_scalar_from_subq3s 	
RwRz(R.RR{R(RNRORnRVRYR}((RnRVRNsN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRu1s	(s
join_depthN(R[R\R^RMRnR4RWR R!R%R'R(R)tobjectReRZRtRu(((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR¿s		L		.	/	-	
		*	tjoinedtJoinedLoadercBsŒeZdZdZd„Zd„Zdded„Zd„Z	d„Z
d„Zd„Zed	„Z
d
„Zd„Zd„Zd
„ZRS(scProvide loading behavior for a :class:`.RelationshipProperty`
    using joined eager loading.

    RcCs)tt|ƒj|ƒ|jj|_dS(N(RLR€RMR*R(RNR0((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRMRscCs|jjtƒj|ƒdS(N(R*R€R¨Rn(RNR@((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRnVs	c	KsÎ|jjsdS|jjr8|jr8|jjdƒn||j}d}
|rc|j||ƒnt}|tk	rœ|j	|||||ƒ\}}}
n„|j
|jdƒsð|jr×|j
d|jkrídSqð|j|jƒrðdSn|j||||||||ƒ\}}}
}|j|jddƒ}|dk	rP|j}
nd}
||j}tj||j||||
d|
d|jd|ƒ|dk	rÊdt|jƒkrÊtjd	ƒ‚ndS(
s@Add a left outer join to the statement that's being constructed.Nsjoined collectionRiRtwith_polymorphicRtchained_from_outerjoins–Detected unaliased columns when generating joined load.  Make sure to use aliased=True or flat=True when using joined loading with with_polymorphic().(RRRRRR*R4t_init_user_defined_eager_procRkt$_setup_query_on_user_defined_adapterRRRRRR@t_generate_row_adapterR7twith_polymorphic_mappersR	t_setup_entity_queryRjtsecondary_columnsRqRr(RNRORPRQRRRSRTRR‚RURtuser_defined_adaptertclausestadd_to_collectionR*((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRWZsL
		
	c	Cs2d|jkrtS|jj}|j|jdtƒ}|tk	rG|S|jd}|d\}}|dk	r²t|tƒr”|j	j
|ƒ}ntj|d|j
jƒ}nf|j|jdƒrý|j|jdƒ}tj|jd|j
jƒ}n|jjj|j
dƒ}|j|jd|ƒ|S(Nteager_from_aliast user_defined_eager_row_processoriþÿÿÿR³R(R}RkRQR0R7RR4RˆtstrRtaliasRÈt
ColumnAdapterR@RºRRt
ORMAdapterRPRt_polymorphic_adaptersRj(	RNRRRORQRSRtroot_mapperRR*((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRƒžs<
		cCs„|j|j|ƒ}|rI|rI|j|ƒ}|j|jd|ƒn%|rn|}|j|jd|ƒn|j}|||fS(NR(t_get_entity_clausesRtwrapRjRtprimary_columns(RNRORPRQRSR‰R‹((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR„Òs	
	
	c	
CsA|j|jddƒ}	|	r*|	j}
ntj|jdtdtƒ}
tj|
d|jj	dtdt
dtƒ}|jdk	sŠt‚|j
jr¢t|_n|dk	rÉ|jjd|j
jƒn	|j
j}|sät}n|jj|j||||||||f	ƒ|j}
|j|jd	|ƒ|||
|fS(
NRtflatR>R³tadapt_requiredtallow_label_resolvetanonymize_labelst	innerjointeager_row_processor(R7RR4RPRRKR@ReR‘RºRkt
aliased_classRsR*Rtmulti_row_eager_loadersR}R›tcreate_eager_joinsR.t_create_eager_joinRˆRj(RNRORPRQRRRSRTRR‚R*tto_adaptRŠR›R‹((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR…ès:				'					c	CsÄ|dkr|j}	n|}	|jo0|jj}
d}||jkr•|
r•|jr•tj|j|j	ƒ\}}
|
dk	r•||
}}q•n|dkr´||j	}}n|jj
||ƒ}|ret|ddƒr2t|j
ƒj|	j|jƒr|	n|jƒ}t|j|j|jƒ}qnttj|j|j	dtƒ|j|jƒ}n	|j}|j
dk	sƒt‚|pš|pš|dk}|rïtj||j
|d|pÔ|oÔt|tjƒd|jd|jƒ}n|j||||ƒ}||j|<|j	|_|s‡x^tj|jjƒD]D}|	j j!j"|ƒr<|rm|j#|}n|j$j%|ƒq<q<Wn|jj&rÀ|j'|j(j)t*j+|jj&ƒƒ7_'ndS(NRR>tunnestedtisoutert
_left_memot_right_memo(,R4R@RžRt_should_nest_selectableteager_joinstfrom_clauseRÈtfind_join_sourcet
selectablet
setdefaultR7RRt_entity_for_mapperR5R0RPRR*RRKReRst_ORMJoinRˆRtJoint_splice_nested_inner_jointstop_ont
_find_columnstprimaryjointmapped_tableRVtcontains_columnRKR–R.RðRdRaRbRR,(RNRORPRQRSRRŠR›R‚R“tshould_nest_selectablet
entity_keytindextclausetdefault_towrapttowraptefmtonclausetattach_on_outsideRcRr((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR sp		$		
	c	CsÎ|tkr't|tjƒs°t‚n‰t|tjjƒrX|j||j	|||ƒSt|tjƒs°|d|kr©tj||j
|dtd|d|djƒSdSn|j||j
|||jƒ}|dkr/t}|j||j|||jƒ}|dkr5|tk	s(tdƒ‚dSnt}|r‘|jra|jra|j|ƒ}q¾tj|j||jd|jd|jƒ}n-tj||j
|jd|jd|jƒ}|j|_|S(NiþÿÿÿR£R¤R¥iÿÿÿÿs9assertion failed attempting to produce joined eager loads(RkRˆRR­RsRRªtFromGroupingR¯telementRR@R4trightR¥tleftR¤ReR£t_splice_into_centerR¼Ra(	RNRQtjoin_objRŠR¼tsplicingttarget_jointright_spliceRc((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR¯ŒsN				cCs²|r|j||ƒnt}|tk	rl|}|jrT|rT|j|jƒ}q‘|jr‘|j}q‘n%|j|jdƒ}|dkr‘tS|jj||ƒrª|StSdS(NRœ(	RƒRkRSR•R7RR4R@t_result_has_identity_key(RNRORXRSRQRRR‰t	decorator((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyt_create_eager_adapterÈs	cCsû|jj|jjjs/tjd|ƒ‚n||j}|j|||||ƒ}	|	t	k	rÌ|j}
t
j|j||||j|	ƒ}|j
s³|j||
||ƒq÷|j||
||ƒn+|jjtƒj|||||||ƒdS(NsJ'%s' does not support object population - eager loading cannot be applied.(R0R8RRoRpRqRrR*RÉRkR	t_instance_processorR@RRuRtR€R¨RZ(RNRORQRRR@RXRSRYtour_patht
eager_adapterRt	_instance((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRZás0

	
			cs—‡‡‡fd†}‡‡‡fd†}‡fd†}|dj|j|fƒ|dj|j|fƒˆjr“|dj|j|fƒndS(Ncsftj||ˆƒ}tj|dƒ}|ˆj|ˆf<ˆ|ƒ}|dk	rb|j|ƒndS(Ntappend_without_event(Rtinit_state_collectionRtUniqueAppenderR4R.(R‘R¤R¥Rxtresult_listtinst(RÍROR(sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyt#load_collection_from_joined_new_rows		cs‘|ˆfˆjkr+ˆj|ˆf}n:tj||ˆƒ}tj|dƒ}|ˆj|ˆf<ˆ|ƒ}|dk	r|j|ƒndS(NRÎ(RRÏRRÐR4R.(R‘R¤R¥RÑRxRÒ(RÍROR(sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyt(load_collection_from_joined_existing_rows	csˆ|ƒdS(N((R‘R¤R¥(RÍ(sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyt load_collection_from_joined_exec$sRwtexistingRz(R.RR{(RNRORRÍRYRÓRÔRÕ((RÍRORsN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRts

	
cs”‡‡fd†}‡‡‡fd†}‡fd†}|djˆj|fƒ|djˆj|fƒ|jr|djˆj|fƒndS(Ncsˆ|ƒ|ˆ<dS(N((R‘R¤R¥(RÍR(sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pytload_scalar_from_joined_new_row/scsLˆ|ƒ}|dk	rHˆ|krH||ˆk	rHtjdˆƒndS(NsLMultiple rows returned with uselist=False for eagerly-loaded attribute '%s' (R4RRü(R‘R¤R¥RÖ(RÍRRN(sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyt$load_scalar_from_joined_existing_row4scsˆ|ƒdS(N((R‘R¤R¥(RÍ(sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pytload_scalar_from_joined_exec@sRwRÖRz(R.RR{(RNRORRÍRYR×RØRÙ((RÍRRNsN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyRu.s
	(s
join_depthN(R[R\R]R^RMRnR4RkRWRƒR„R…R R¯RÉRZRtRu(((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR€Gs		A	4		3	r;		&	'c
s{‡fd†‰‡fd†}‡fd†}tj|d|dtdtdtƒtj|d|dtdtdtƒdS(	Ncsz|dk	rv|jˆjkrv|jtj|ƒƒ}|rv||k	rvtjdtj|ƒ|j	ˆfƒ‚qvn|S(NssInstance %s is already associated with an instance of %s via its %s attribute, and is only allowed a single parent.(
R4Rt	hasparentRtinstance_stateRqRrRtinstance_strR;(R‘RÀtoldvaluet	initiatorRÚ(R(sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyt	_do_checkKs%csˆ||d|ƒS(N(R4(R‘RÀRÞ(Rß(sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR.Wscsˆ||||ƒS(N((R‘RÀRÝRÞ(Rß(sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pytset_ZsR.trawtretvalR&Rj(RtlistenRe(RRR.Rà((RßRsN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyR/Js(3R]tRRqRRRRRRÈRRRRŠR	R
RR‘RRR
RRtbaseRRR—RRlR4RkRGtColumnPropertytstrategy_forRJtclass_loggerReR_RtR~R˜RœtRelationshipPropertyR t
MemoizedSlotsR¨RR
RR€R/(((sN/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/orm/strategies.pyt<module>	sh.K6n"ÿ%ÿ‡ÿÿ