zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
U
¸ý°dQÌã @sŽdZddlmZddlZddlZddlmZddlmZddlmZddlm    Z    dd    l
m Z dd
l
m Z dd l
mZdd l
mZdd l
mZddl
mZddl
mZddl
mZddl
mZddl
mZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%dd l&m'Z'dd!l(m)Z)dd"l*m+Z+dd#lm,Z,dd$lm-Z-d%d&l
m.Z.d%d
l
m Z/d%d'l
m0Z0d%d(l
m1Z1d%d)l
m2Z2d%dl
mZd%dl2mZ3d%d*l2m4Z4d%d+l5m6Z6d%d,l5m7Z7e    r6dd-lm8Z8d%d.l9m:Z:dbd0d1„Z;ej<j=d/d/d2Gd3d4„d4e$ƒƒZ>e1j?ej<j=d5d/d2Gd6d7„d7e$ƒƒƒZ@e1j?ej<j=d5d8Gd9d:„d:e@ƒƒƒZAe1j?ej<j=d5d5d;ej<j=d5d5d5d<ej<j=d5d=Gd>d?„d?e$ƒƒƒƒƒZBGd@dA„dAƒZCGdBdC„dCe$ƒZDe1j?ej8j=d5d=GdDdE„dEe$ƒƒƒZEe1j?ej8j=dFdGej8j=ddGGdHdI„dIeDƒƒƒƒZFe1j?ej8j=d5dGej8j=dJdGej8j=dKdGej8j=dLdGej8j=dMdGGdNdO„dOeDejGe1jHƒƒƒƒƒƒƒZIGdPdQ„dQƒZJGdRdS„dSeDƒZKej8j=dTdGGdUdV„dVeKƒƒZLe1j?ej8j=dWdGGdXdY„dYeKƒƒƒZMe1j?ej8j=dZdGej8j=d/dGGd[d\„d\eDƒƒƒƒZNe1j?ej8j=d]dGGd^d_„d_eKejGƒƒƒZOd`da„ZPdS)czWsqlalchemy.orm.interfaces.LoaderStrategy
   implementations, and related MapperOptions.é)Ú annotationsN)ÚAny)ÚDict)ÚTuple)Ú TYPE_CHECKINGé)Ú
attributes)Úexc)Ú
interfaces)Úloading)Ú path_registry)Ú
properties)Úquery)Ú relationships)Ú
unitofwork)Úutil)Ú_DEFER_FOR_STATE)Ú_RAISE_FOR_STATE)Ú_SET_DEFERRED_EXPIRED)Ú ATTR_WAS_SET)ÚLoaderCallableStatus)Ú PASSIVE_OFF)Ú PassiveFlag)Ú_column_descriptions)ÚORMCompileState)ÚORMSelectCompileState)Ú QueryContext)ÚLoaderStrategy)ÚStrategizedProperty)Ú_state_session)Ú InstanceState)ÚLoad)Ú    _none_set)Ú AliasedClassé)Úevent)Úinspect)Úlog)Úsql)Úvisitors)ÚLABEL_STYLE_TABLENAME_PLUS_COL)ÚSelect)ÚRelationshipProperty)Ú ColumnElementFc     s"g}
|o |j‰|r"|jr"|
 t¡|j|jjkrV|jj|j\‰‰|
 ‡‡fdd„¡|rf|
 tj¡|rŽ|j    ‰ˆrŽ|j
rŽ|
 ‡‡fdd„¡|j D]ˆ} || j   |j¡kr”| j |j¡s”tj| j|jf|ˆ|||oâ|jpâ|jtjk||||| pö|j |jdœ |    —Ž} |
D]} | | |ƒq
q”dS)Ncstj||jˆfˆŽS©N)Úorm_utilZ_validator_eventsÚkey©ÚdescÚprop)ÚfnÚopts©úPd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\sqlalchemy/orm/strategies.pyÚ<lambda>Ys ÿÿz%_register_attribute.<locals>.<lambda>cst |ˆˆ¡Sr.)rZbackref_listenersr1)ÚbackrefÚuselistr6r7r8gsÿ) Z parent_tokenr:Úcompare_functionÚ    useobjectZ trackparentÚ typecallableÚ    callable_Úactive_historyÚ
impl_classZsend_modified_eventsÚdoc)r:Z single_parentÚappendÚsingle_parent_validatorr0ÚparentZ
validatorsrZtrack_cascade_eventsZback_populatesZ_effective_sync_backrefZself_and_descendantsÚ_propsÚgetÚ class_managerZ_attr_has_implrZregister_attribute_implÚclass_Ú    directionr
Z    ONETOMANYZviewonlyrA)r3Úmapperr<r;r=r>Zproxy_propertyr?r@ÚkwZ listen_hooksÚmr2Úhookr6)r9r4r5r:r7Ú_register_attributeBsZ 
 
 
 ÿ 
 ÿ
ÿ þþ
 ïîrN)Ú
instrumentÚdeferredcs6eZdZdZdZ‡fdd„Zd
dd„Zdd    „Z‡ZS) ÚUninstrumentedColumnLoaderz¶Represent a non-instrumented MapperProperty.
 
    The polymorphic_on argument of mapper() often results in this,
    if the argument is against the with_polymorphic selectable.
 
    ©Úcolumnscstƒ ||¡|jj|_dSr.)ÚsuperÚ__init__Úparent_propertyrS©ÚselfrDÚ strategy_key©Ú    __class__r6r7rU sz#UninstrumentedColumnLoader.__init__Nc    Ks*|jD]}|r|j|}| ||¡qdSr.)rSÚ_append_dedupe_col_collection)    rXÚ compile_stateÚ query_entityÚpathÚloadoptÚadapterÚcolumn_collectionÚkwargsÚcr6r6r7Ú setup_query¤s
 
 
z&UninstrumentedColumnLoader.setup_queryc        CsdSr.r6©    rXÚcontextr^r_r`rJÚresultraÚ
populatorsr6r6r7Úcreate_row_processor³s z/UninstrumentedColumnLoader.create_row_processor)N)    Ú__name__Ú
__module__Ú __qualname__Ú__doc__Ú    __slots__rUrerjÚ __classcell__r6r6rZr7rQ•s  ù
rQTcs>eZdZdZdZ‡fdd„Zd dd„Zdd    „Zd
d „Z‡Z    S) Ú ColumnLoaderz8Provide loading behavior for a :class:`.ColumnProperty`.)rSÚ is_compositecs*tƒ ||¡|jj|_t|jdƒ|_dS)NÚcomposite_class)rTrUrVrSÚhasattrrrrWrZr6r7rUÈs
zColumnLoader.__init__Fc     Ksv|jD]<}
|r6|r,| |
¡}
|
dkr6dSn
|j|
}
| |
|¡q|jd} |rh|j| } | dkrhdS| ||j<dS©Nr)rSZadapt_check_presentr\rV) rXr]r^r_r`rarbÚmemoized_populatorsZcheck_for_adaptrcrdÚfetchr6r6r7reÍs
 
 
 
 
zColumnLoader.setup_querycCs`d|_|jdj}|jjpD|jdjpD|jdk    oD|j |jd¡|jk}t    |j|d|j
|ddS)NTrF)r<r;r?) Úis_class_levelrSÚtyperVr?Ú primary_keyZversion_id_colÚ_columntopropertyrFrNÚcompare_values)rXrJZcoltyper?r6r6r7Úinit_class_attributeîs" 
ÿ
ÿû
ûz!ColumnLoader.init_class_attributec     CsZ|jD]:}    |r|j|    }    | |    d¡}
|
r|d |j|
f¡qVq|d |jdf¡dS)NFÚquickÚexpireT)rSÚ_getterrBr0) rXrgr^r_r`rJrhrariÚcolÚgetterr6r6r7rjs
 
 z!ColumnLoader.create_row_processor)F)
rkrlrmrnrorUrer}rjrpr6r6rZr7rqÁs ÷
!rq)Zquery_expressioncs4eZdZ‡fdd„Zdd„Zdd„Zdd„Z‡ZS)    ÚExpressionColumnLoadercs<tƒ ||¡t ¡ d¡‰t‡fdd„|jjDƒƒ|_dS)Nc3s|]}| ˆ¡ VqdSr.)Úcompare©Ú.0rd©Únullr6r7Ú    <genexpr>'sz2ExpressionColumnLoader.__init__.<locals>.<genexpr>)    rTrUr(rˆÚlabelÚanyrVrSÚ_have_default_expressionrWrZr‡r7rU s
 ÿzExpressionColumnLoader.__init__c KsŽd}    |r d|jkr |jdg}    n|jr.|jj}    |    dkr:dS|    D]}
|rP|j|
}
| |
|¡q>|    d} |r€|j| } | dkr€dS| ||j<dS)NÚ
expressionr)Ú
local_optsrŒrVrSr\) rXr]r^r_r`rarbrvrcrSrdrwr6r6r7re+s" 
 
z"ExpressionColumnLoader.setup_queryc     Csr|rnd|jkrn|jdg}    |    D]:}
|r0|j|
}
| |
d¡} | r|d |j| f¡qnq|d |jdf¡dS)NrFr~rT)rŽrSr€rBr0) rXrgr^r_r`rJrhrarirSrr‚r6r6r7rjOs  
 z+ExpressionColumnLoader.create_row_processorcCs(d|_t|j|d|jdjjdddS)NTFr)r<r;Zaccepts_scalar_loader)rxrNrVrSryr|©rXrJr6r6r7r}is ûz+ExpressionColumnLoader.init_class_attribute)rkrlrmrUrerjr}rpr6r6rZr7rƒs $rƒ)rPrO)rPrOÚ    raiseload)Z
do_nothingcsNeZdZdZdZ‡fdd„Zdd„Zdd„Zdd
d „Zd d „Z    dd„Z
‡Z S)ÚDeferredColumnLoaderzAProvide loading behavior for a deferred :class:`.ColumnProperty`.)rSÚgrouprcsJtƒ ||¡t|jdƒr"tdƒ‚|j dd¡|_|jj|_|jj    |_    dS)Nrsz8Deferred loading for composite types not implemented yetrF)
rTrUrtrVÚNotImplementedErrorÚ strategy_optsrFrrSr’rWrZr6r7rU€s ÿ
zDeferredColumnLoader.__init__c    
 
CsŽ|jrB|jjjrB|j|jjjkrB|j d¡ ||||||||¡nH|jsv|j    rX|jj
}    n|jj }    |d  |j|    f¡n|d  |jdf¡dS)N©)rPF©rOTÚnewrF) Ú refresh_staterÚ_compile_optionsÚ_only_load_propsr0rVÚ _get_strategyrjrxrZ_raise_column_loaderZ_deferred_column_loaderrB)
rXrgr^r_r`rJrhrariZset_deferred_for_local_stater6r6r7rjŠs4ÿþýÿö ÿÿz)DeferredColumnLoader.create_row_processorcCs,d|_t|j|d|jdjj|jdddS)NTFr)r<r;r>Zload_on_unexpire)rxrNrVrSryr|Ú_load_for_staterr6r6r7r}¾s úz)DeferredColumnLoader.init_class_attributeNc    
Ksª|jjr|jjsT|r(t|jƒ |jj¡sT|rF|j    rF|j
  d|j    d¡sT|rx|j |krx|j  d¡j|||||||f|    Žn.|jrŠt||j<n|jsœt||j<n
t||j<dS)Nzundefer_group_%sFr•)Úcompile_optionsZ_render_for_subqueryrVZ_renders_in_subqueriesÚsetrSÚ intersectionrDZ_should_undefer_in_wildcardr’rŽrFr0r›rerxrrrr)
rXr]r^r_r`rarbrvZonly_load_propsrKr6r6r7reÊsRþýú
ÿù ô óÿòîîÿ÷
ö   z DeferredColumnLoader.setup_querycs´ˆjs tjS|tj@stjSˆjj}ˆjr@‡fdd„|j    Dƒ}nˆjg}‡fdd„|Dƒ}t
ˆƒ}|dkr„t   dt  ˆ¡ˆjf¡‚ˆjr˜ˆ ˆ|d¡t ˆjˆt|ƒt¡tjS)Ncs4g|],}t|tƒrt|jtƒr|jˆjkr|j‘qSr6)Ú
isinstancerÚstrategyr‘r’r0)r†Úp©rXr6r7Ú
<listcomp>s
 
  üz8DeferredColumnLoader._load_for_state.<locals>.<listcomp>csg|]}|ˆjkr|‘qSr6)Z
unmodified)r†Úk)Ústater6r7r¤s
zfParent instance %s is not bound to a Session; deferred load operation of attribute '%s' cannot proceedÚraise)r0rÚ
ATTR_EMPTYrÚSQL_OKÚPASSIVE_NO_RESULTÚmanagerrJr’Ziterate_propertiesrÚorm_excÚDetachedInstanceErrorr/Ú    state_strrÚ_invoke_raise_loadr Zload_scalar_attributesržrr)rXr¦ÚpassiveÚ localparentZtoloadr’Úsessionr6)rXr¦r7rœþs6
 
þþÿÿz$DeferredColumnLoader._load_for_statecCst d|f¡‚dS)Nz+'%s' is not available due to raiseload=True©Úsa_excÚInvalidRequestError©rXr¦r°Úlazyr6r6r7r¯&sÿz'DeferredColumnLoader._invoke_raise_load)N) rkrlrmrnrorUrjr}rerœr¯rpr6r6rZr7r‘us
4÷
4(r‘c@s0eZdZdZd dddœdd„Zejfdd    „Zd
S) ÚLoadDeferredColumnsz7serializable loader object used by DeferredColumnLoaderFÚstrÚbool©r0rcCs||_||_dSr.r»)rXr0rr6r6r7rU/szLoadDeferredColumns.__init__cCs>|j}|jj}|j|}|jr$d}nd}| |¡}| ||¡S)N)©rPTr–)rT)r¼r–)r0r«rJrErr›rœ)rXr¦r°r0r±r3rYr¡r6r6r7Ú__call__3s
 
zLoadDeferredColumns.__call__N)F)rkrlrmrnrUrrr½r6r6r6r7r¸,sr¸cs,eZdZdZdZ‡fdd„Zdd„Z‡ZS)ÚAbstractRelationshipLoaderz0LoaderStratgies which deal with related objects.)rJÚtargetr:Úentitycs:tƒ ||¡|jj|_|jj|_|jj|_|jj|_dSr.)rTrUrVrJrÀr¿r:rWrZr6r7rUIs
 
 
 
z#AbstractRelationshipLoader.__init__c        
Cs |j d¡ ||||||||¡S)N))r·Ú    immediate)rVr›rjrfr6r6r7Ú#_immediateload_create_row_processorPs ÿöz>AbstractRelationshipLoader._immediateload_create_row_processor)rkrlrmrnrorUrÂrpr6r6rZr7r¾Ds r¾c@seZdZdZdS)ÚDoNothingLoaderzßRelationship loader that makes no change to the object's state.
 
    Compared to NoLoader, this loader does not initialize the
    collection/attribute to empty/none; the usual default LazyLoader will
    take effect.
 
    N)rkrlrmrnr6r6r6r7rÃisrÃZnoload)r·c@s$eZdZdZdZdd„Zdd„ZdS)ÚNoLoaderzQProvide loading behavior for a :class:`.Relationship`
    with "lazy=None".
 
    r6cCs d|_t|j|d|jjddS)NT)r<r=)rxrNrVÚcollection_classrr6r6r7r}€süzNoLoader.init_class_attributec    
s$‡fdd„}    |d ˆj|    f¡dS)Ncs&ˆjrt ||ˆj¡n
d|ˆj<dSr.)r:rÚinit_state_collectionr0©r¦Údict_Úrowr£r6r7Úinvoke_no_load•sz5NoLoader.create_row_processor.<locals>.invoke_no_loadr—)rBr0)
rXrgr^r_r`rJrhrarirÊr6r£r7rjŠs zNoLoader.create_row_processorN)rkrlrmrnror}rjr6r6r6r7rÄus
rÄÚselectr§Ú raise_on_sqlZ baked_selectcs®eZdZUdZdZded<ded<ded<ded<d    ed
<d    d d œ‡fd d„ Zdd„Zdd„Zdd„Z    dd„Z
dddde j fdd„Z dd„Ze  d¡dd„ƒZd d!„Z‡ZS)"Ú
LazyLoaderztProvide loading behavior for a :class:`.Relationship`
    with "lazy=True", that is loads when first accessed.
 
    ) Ú
_lazywhereÚ_rev_lazywhereZ_lazyload_reverse_optionÚ    _order_byÚuse_getÚis_aliased_classÚ _bind_to_colÚ_equated_columnsÚ_rev_bind_to_colÚ_rev_equated_columnsÚ_simple_lazy_clauseÚ _raise_alwaysÚ _raise_on_sqlzColumnElement[bool]rÎzDict[str, ColumnElement[Any]]rÓrÏrÕzRelationshipProperty[Any]rVzTuple[Any, ...])rDrYcs8tƒ ||¡|jddk|_|jddk|_t|jƒj|_|jj    }| 
¡\|_ |_ |_ |j
dd\|_|_|_|jjr”dd„t |jj¡Dƒ|_nd|_|j d||j ¡|j oÚ|j oÚ|jjd    j|j dd
|jjd |_|jr4t|j ƒD]4}||jjkrð|jj|D]}|j ||j |<q qð|j d |¡dS) Nr·r§rÌT)Zreverse_directioncSsg|]}t |ddi¡‘qS)Ú
_orm_adaptT)Úsql_utilÚ_deep_annotate©r†Úelemr6r6r7r¤Úsÿz'LazyLoader.__init__.<locals>.<listcomp>z%s lazy loading clause %srF©Z use_proxiesZ compare_keysÚ equivalentsz4%s will use Session.get() to optimize instance loads)rTrUr”rØrÙr&rÀrÒrVÚ_join_conditionZcreate_lazy_clauserÎrÓrÔrÏrÕrÖÚorder_byrÚto_listrÐÚloggerÚinfor:Ú _get_clauser„rJÚ_equivalent_columnsrÑÚlist)rXrDrYZjoin_conditionrrdrZr6r7rUÃsPü
ü þ
 
ÿ üý  ÿzLazyLoader.__init__c    Csvd|_|jj}|jjr d}d}n4|jjtjk    s4|jsL|rBd}d}qTd}d}nd}}t|j|d|j    |jj
||ddS)NTF)r<r>r=r?Ú_deferred_history) rxrVÚ_legacy_inactive_history_styler?rIr
Ú    MANYTOONErÑrNrœrÅ)rXrJrêr?rér6r6r7r}ÿs2ÿ ÿþùzLazyLoader.init_class_attributecsdt |jddi¡}||j}‰g‰dd„}t |id|i¡‡‡fdd„}t |id|i¡}|ˆfS)NrÚTcSs
d|_dS)NF)Úunique©Ú    bindparamr6r6r7Úvisit_bindparam+szFLazyLoader._memoized_attr__simple_lazy_clause.<locals>.visit_bindparamrîcsF|jˆkr$ˆ |jˆ|jdf¡n|jdkrBˆ |jd|jf¡dSr.)Z_identifying_keyrBr0ÚcallableÚvaluerí©Z bind_to_colÚparamsr6r7rï0s
ýÿ
)rÛrÜrÎrÓr)ZtraverseZcloned_traverse)rXZ    lazywhereÚ    criterionrïr6ròr7Ú"_memoized_attr__simple_lazy_clause!sÿ  ÿz-LazyLoader._memoized_attr__simple_lazy_clausec Cs²|j\}}|dkr(t |dd„|Dƒ¡S|jj}| ¡}t |¡}|tj    @rV|tj    N}i}|D]J\}    }
} |
dk    r |r|tj
@r|  |||
|¡} n|  |||
|¡} | ||    <q^||fS)NcSsg|]\}}}|‘qSr6r6)r†r0Úidentrñr6r6r7r¤Gsz4LazyLoader._generate_lazy_clause.<locals>.<listcomp>) r×rÛZadapt_criterion_to_nullrVrDÚobjrÚ instance_dictrZINIT_OKÚLOAD_AGAINST_COMMITTEDÚ#_get_committed_state_attr_by_columnÚ_get_state_attr_by_column) rXr¦r°rôZ
param_keysrJÚorÈrór0rörñr6r6r7Ú_generate_lazy_clauseBs:
 ÿ
 
 
ÿÿ
z LazyLoader._generate_lazy_clausecCst d||f¡‚dS)Nz&'%s' is not available due to lazy='%s'r³r¶r6r6r7r¯bs
ÿzLazyLoader._invoke_raise_loadNr6c Cs”|js |jjs|jr|js tjS|j }d}    |jo>| p>|j }
|t    j
@sN|
r\|t j @sb|rbtj S|jrŽ|t    j@sŽ|
r€|t    j@rŽ| ||d¡t|ƒ} | sÄ|t    j@rªtj St dt |¡|jf¡‚|
rz| | ||¡}    tj |    krètj Stj|    krøtjSt |    ¡rdS|j|jkr(|t    j@s(tjS| j|j|    ||d} | dk    r\| tj krVdS| Sn|t    j
@rt|t    j@sztj S| !| ||    ||||||¡    S)Nr§zbParent instance %s is not bound to a Session; lazy load operation of attribute '%s' cannot proceed)r°Zlazy_loaded_from)"r0rVZload_on_pendingZ _load_pendingZ
session_idrr¨rÑÚ_extra_criteriarr©rZNON_PERSISTENT_OKrªrØÚNO_RAISEZRELATED_OBJECT_OKr¯rr¬r­r/r®Ú_get_ident_for_use_getZ    NEVER_SETr"Ú
issupersetÚdictÚDEFERRED_HISTORY_LOADrZ_identity_lookuprÀZPASSIVE_CLASS_MISMATCHÚ_emit_lazyload) rXr¦r°r`Úextra_criteriaÚ extra_optionsÚalternate_effective_pathÚexecution_optionsÚpendingÚprimary_key_identityrÑr²Úinstancer6r6r7rœgsœ
þýûÿÿþü õ ô
þÿÿ
 
 
ÿþü
 ÿþ÷zLazyLoader._load_for_statecsDˆjj}ˆtj@r|j‰n|j‰ˆj‰‡‡‡‡‡fdd„ˆjjDƒS)Ncs"g|]}ˆˆˆˆj|ˆd‘qS)©r°©rÔ©r†Úpk©rÈZget_attrr°rXr¦r6r7r¤âsÿz5LazyLoader._get_ident_for_use_get.<locals>.<listcomp>)r«rJrrùrúrûrrz)rXr²r¦r°Úinstance_mapperr6rr7rØs
þz!LazyLoader._get_ident_for_use_getzsqlalchemy.orm.strategy_optionsc
sºtjj‰ˆj ¡}
tj|
g|
jtt    j
d} t j } | d|dœ7} ˆj jdk    r\|  ˆjˆj j¡} |j } | sr|tj@r‚t ddi¡| _ˆj}|js˜|rè|jrè|dkr®|jˆj }n
|ˆj }|j}|rà|jràd}|t ˆj|¡f7}|| _n$|dkr|jjˆj }n
|ˆj }|r | j|7_| jd|i7_|rnˆjrZ|t j!@sZˆ "||d¡t#j$|| || |    dSˆj%r~ˆj%| _&‡‡fdd    „}| j'|ˆj ff7_'ˆ (||¡\}}|    rÌtj) *|    d
| i¡}    nd
| i}    ˆj|j+krô|t j,@sôt-j.S| rt /tj0| 1¡¡r,dSnt /tj2| 1¡¡r,dSˆjrN|t j!@sNˆ "||d¡|f| _3|j4| ||    d }| 5¡ 6¡ 7¡}ˆj8r‚|St9|ƒ}|r²|d krªt :d ˆj ¡|dSdSdS)N)Ú _raw_columnsÚ_propagate_attrsÚ _label_styler™F)Z_invoke_all_eagersÚ_lazy_loaded_fromZ    autoflushÚ _current_pathrÌ)Ú load_optionsrcsRˆjjD]D}|jtjkr|jrt|jtƒsˆj     
|j j |j ¡ |¡ |¡qdSr.)rVZ_reverse_propertyrIr
rëZ_use_getr r¡rÍr!Z_construct_for_existing_pathrrrDZlazyloadZprocess_compile_state)Úcompile_contextÚrev©rXÚstrategy_optionsr6r7Ú_lazyload_reverse<s  
ÿþ
ýÿÿüüz4LazyLoader._emit_lazyload.<locals>._lazyload_reverseZ_sa_orm_load_options)rrzKMultiple rows returned with uselist=False for lazily-loaded attribute '%s' r);rZ    preloadedZorm_strategy_optionsrÀÚ__clause_element__r+Ú_create_raw_selectrr*rÚdefault_compile_optionsrZdefault_load_optionsrVZ    secondaryÚ select_fromrJr0rZ NO_AUTOFLUSHÚ immutabledictÚ_execution_optionsrÑrrþZ    load_pathr/ÚLoaderCriteriaOptionÚ _with_optionsÚ_path_registryr™rÙrrÿr¯r Zload_on_pk_identityrÐÚ_order_by_clausesZ_with_context_optionsrýÚ
EMPTY_DICTZ
merge_withrrrrZhas_intersectionr"ÚvaluesZ
_never_setZ_where_criteriaÚexecuterìZscalarsÚallr:ÚlenÚwarn)rXr²r¦r
r°r`rrrrZ clauseelementZstmtrr    rÑÚeffective_pathr5rZ lazy_clauserórhÚlr6rr7rçs 
üþ ÿ
 
 ÿ
 
ûÿÿþÿ
ÿþÿ
þÿzLazyLoader._emit_lazyloadc    
sÀ|j‰|jjr@|jjjr@|j|jjjkr@| ||||||||¡S|jrP|r|jrt     
|j t ˆ|||jrp|  |¡ndƒˆ¡}    |d |j|    f¡n,|jsœ|jr¼‡fdd„}
|d |j|
f¡dS)Nr—cs| |ˆ¡dSr.)Z_resetrÇ©r0r6r7Úreset_for_lazy_callable¿s    z@LazyLoader.create_row_processor.<locals>.reset_for_lazy_callable)r0rZ_is_user_refreshrr™ršrÂrxrþr Z"_instance_level_callable_processorrGÚLoadLazyAttributeÚ_generate_extra_criteriarBÚpopulate_existingZalways_refresh) rXrgr^r_r`rJrhrariZset_lazy_callabler0r6r/r7rj†sF ÿþýø 
ÿÿ úô  zLazyLoader.create_row_processor)rkrlrmrnroÚ__annotations__rUr}rõrýr¯rr'rœrZpreload_modulerrjrpr6r6rZr7r͞s.
    <"!     ø
q
rÍc@s.eZdZdZdd„Zdd„Zejfdd„ZdS)    r1a¦semi-serializable loader object used by LazyLoader
 
    Historically, this object would be carried along with instances that
    needed to run lazyloaders, so it had to be serializable to support
    cached instances.
 
    this is no longer a general requirement, and the case where this object
    is used is exactly the case where we can't really serialize easily,
    which is when extra criteria in the loader option is present.
 
    We can't reliably serialize that as it refers to mapped entities and
    AliasedClass objects that are local to the current process, which would
    need to be matched up on deserialize e.g. the sqlalchemy.ext.serializer
    approach.
 
    cCs||_|j|_||_||_dSr.©r0rYr`r)rXr0Zinitiating_strategyr`rr6r6r7rUßszLoadLazyAttribute.__init__cCs(|jdk    rt d¡|j|j|jddœS)NzvCan't reliably serialize a lazyload() option that contains additional criteria; please use eager loading for this caser6r5)rrr,r0rYr`r£r6r6r7Ú __getstate__ås
ÿüzLoadLazyAttribute.__getstate__cCs:|j}|jj}|j|}|j|j}|j|||j|jdS)N)r`r)    r0r«rJrEZ _strategiesrYrœr`r)rXr¦r°r0rr3r¡r6r6r7r½ós
 üzLoadLazyAttribute.__call__N)    rkrlrmrnrUr6rrr½r6r6r6r7r1Ísr1c@seZdZdZdZddd„ZdS)Ú
PostLoaderz;A relationship loader that emits a second SELECT statement.r6Nc CsN|jjptjj|}| ¡}t d|i¡}|rF|j     dd¡}|dk}    nd}d}    |dk    rÂ|j
j srt   d|j
›d¡‚|j     dt|ƒ›|¡}|    s¢|dkr¢|d||fS|    sÂ| dt|ƒ›|d    i¡}tj |||j
¡rà|d||fS||j
}
||j
} |
 |jd
¡sB|r(| jd |krB|d||fSn|  |j¡rB|d||fS|d ||fS) NZsa_top_level_orm_contextÚrecursion_depthéÿÿÿÿFz'recursion_depth option on relationship z0 not valid for non-self-referential relationshipZ_recursion_depth_rrÚloaderr$T)r]Ú current_pathr/Ú PathRegistryÚrootZ_get_top_level_contextrr!rŽrFrVZ_is_self_referentialr´rµrÚidÚunionr ÚPostLoadZ path_existsÚcontainsrÚlengthÚcontains_mapperrJ) rXrgr_r`Ú
join_depthr-Ztop_level_contextrr8Zunlimited_recursionÚ path_w_propZeffective_path_w_propr6r6r7Ú_setup_for_recursionspþÿ
 ÿ ÿ ü ÿÿÿ 
 
üüzPostLoader._setup_for_recursion)N)rkrlrmrnrorFr6r6r6r7r7sr7rÁc@s(eZdZdZdd„Zdd„Zdd„ZdS)    ÚImmediateLoaderr6cCs|j d¡ |¡dS©N©)r·rË©rVr›r}rr6r6r7r}Rs
ÿþz$ImmediateLoader.init_class_attributec     CsZ| |||¡\}    }
} } |
s(tjtjB} n tjtjB} tj ||    |j    |j
|j || | | ¡    dSr.) rFrZPASSIVE_NO_FETCH_RELATEDrrÿrr r@Úcallable_for_pathrDrVÚ_load_for_path)rXrgr^r_r`rJrhrarir-Ú
run_loaderrr8Úflagsr6r6r7rjWs( û ÷z$ImmediateLoader.create_row_processorc    Cs |r.t|jjƒ}    || ¡f|    _| ¡}
|    f} n d}    |}
d} |j} |j d¡} |D]J\}}|j    }|sj| |krP| j
||| |
|d}|t k    rP|  | ¡  |||¡qPdS)Nr6rI)rrr)r!r_rÀZ_recursergÚ_truncate_recursiver0rVr›rrœrÚget_implÚset_committed_value)rXrgr_ÚstatesÚ    load_onlyr`rNr8rZnew_optrrr0Ú
lazyloaderr¦Ú    overwriterÈrñr6r6r7rL~s8  þ   û
ÿzImmediateLoader._load_for_pathN)rkrlrmror}rjrLr6r6r6r7rGNs'rGÚsubquerycs†eZdZdZ‡fdd„Zdd„Zdd„Zdd    „Zd
d „Zd d „Z    dd„Z
dd„Z Gdd„dƒZ dd„Z dd„Zdd„Zdd„Z‡ZS)ÚSubqueryLoader©rDcstƒ ||¡|jj|_dSr.)rTrUrVrDrWrZr6r7rU¯szSubqueryLoader.__init__cCs|j d¡ |¡dSrHrJrr6r6r7r}³s
ÿþz#SubqueryLoader.init_class_attributec sÀ|}|j}t |d¡}|j |¡rB|j|dkrB|j|j‰}n||d‰}|r–|j|jj|‰t    |ƒt    ˆƒ}|ršˆt
j   || d…¡7‰n|‰|j }    ‡‡fdd„|    Dƒ}
ˆ|
|ˆfS)Nrrcs&g|]}tˆjdjˆj|jƒ‘qS©r)Úgetattrr_rÀr{r0r…©Úleftmost_mapperZ new_subq_pathr6r7r¤ßs
ü
 
þz0SubqueryLoader._get_leftmost.<locals>.<listcomp>)r_r/Z_class_to_mapperrDÚisarVÚ    _entitiesÚ entity_zeror%r+r r<ZcoerceÚ local_columns) rXÚorig_query_entity_indexÚ    subq_pathZcurrent_compile_stateÚis_rootZgiven_subq_pathZ subq_mapperZ leftmost_propÚ
additionalZ leftmost_colsÚ leftmost_attrr6r[r7Ú _get_leftmost¸s4
ÿ þÿþ ÿ ûzSubqueryLoader._get_leftmostcCs.| ¡ d¡}tj tj¡}|j |j¡|}|js^d|_|j    j
|fdd„t ||dDƒžŽ|  dd„|Dƒ|  ¡¡}    |    |_|j}
|
dkr”d|_n6|
dkrÊdd„|    DƒD]} t|    ƒ | j¡sªd|_qÊqª|jsÖd    |_|jdkr |jr t |    |j¡} | r | |    | ¡| t¡ ¡} tj|| dd
}|S) NFcSs h|]}|ddk    r|d’qS)rÀNr6)r†Úentr6r6r7Ú    <setcomp> s üz?SubqueryLoader._generate_from_original_query.<locals>.<setcomp>)r]cSsg|]}tj tjj|¡‘qSr6)r(Z    coercionsÚexpectZrolesZColumnsClauseRole)r†rür6r6r7r¤"sÿz@SubqueryLoader._generate_from_original_query.<locals>.<listcomp>TcSsh|]
}|j’qSr6)Útabler…r6r6r7rh1sr6©Úuse_mapper_path)Z_cloneZ    correlaterÚQueryÚ__new__Ú__dict__ÚupdateZ    _from_objZ_enable_assertionsr Znon_generativerZ_adapt_col_listZ_get_current_adapterrÚdistinct_target_keyZ    _distinctržrrzZ_has_row_limiting_clauser&rÛZ expand_column_list_from_order_byZ _set_entitiesZset_label_styler*rVr/r#)rXÚorig_compile_stateÚ
orig_queryr\reÚleftmost_relationshipZ orig_entityÚqZq2Z target_colsrqÚtZto_addZembed_qÚ
left_aliasr6r6r7Ú_generate_from_original_queryés^  ÿÿþþþûÿÿz,SubqueryLoader._generate_from_original_queryc sÎg}t| ¡ƒ}t|ƒD]N\}\}}|dkrR||ddj}| |¡rL|n|}    n|}    | |    |jf¡qt|ƒdkrz|‰n.t|ddƒ}
|
j    r˜|
j
‰nt j |
j
dd‰ˆj j} ‡‡fdd„| Dƒ} || ˆfS)    Nrrr$r9Trkcs g|]}tˆˆjj|jƒ‘qSr6)rZrDr{r0r…©Ú parent_aliasrXr6r7r¤vsÿz2SubqueryLoader._prep_for_joins.<locals>.<listcomp>)rèÚpairsÚ    enumeraterJr]rBr0r+r&rÒrÀr/r#rVr`) rXrwrbÚto_joinr{ÚirJr3Z prev_mapperZ    to_appendråÚ
local_colsÚ
local_attrr6ryr7Ú_prep_for_joinsMs,  ÿ þzSubqueryLoader._prep_for_joinsc Cs0t|ƒ}|dkr,t||ddƒ |¡g}nê|dkrft||ddƒ |¡t||ddƒ |¡g}n°|dkrdd„|dd…Dƒ}g}|rØ| d¡}    t|    d|    dƒ}
|rÂ|
 |dd¡}
n
|
 |¡}
| |
¡qŠt||ddƒ |dj¡g|t||ddƒ |¡g}|D]}
| |
¡}q|S)Nrrr$r9cSs:g|]2}t|dƒjs$t |d¡n|dj|df‘qS)rr)r&rÒr/r#rÀ)r†Úitemr6r6r7r¤s ü ÿüz/SubqueryLoader._apply_joins.<locals>.<listcomp>)r+rZÚof_typeÚpoprBrDÚjoin) rXrur}rwrzÚeffective_entityZltjZmiddleÚinnerr‚Úattrr6r6r7Ú _apply_joins|sDÿÿþ
 
ù    
 
 ÿÿÿþÿ
zSubqueryLoader._apply_joinsc    CsB|j}|r*|jr*|t |j| |¡¡f7}| |¡}|j|Ž}|Sr.)r$rþr/r#rÀr2Z_with_current_pathÚoptions)    rXrgrurbÚrewritten_pathrsr†r`Ú new_optionsr6r6r7Ú_setup_options±s
þÿ    
 
zSubqueryLoader._setup_optionscs&ˆjjr"‡fdd„}| |ˆj¡}|S)Ncs |jtt ˆjj¡ƒ7_dSr.©Úeager_order_byÚtuplerrãrVrâ©rr£r6r7Ú_setup_outermost_orderbyØs ÿzISubqueryLoader._setup_outermost_orderby.<locals>._setup_outermost_orderby)rVrâÚ_add_context_option)rXrur’r6r£r7r’Õs ÿz'SubqueryLoader._setup_outermost_orderbyc@s4eZdZdZdZdd„Zdd„Zdd„Zd    d
„Zd S) zSubqueryLoader._SubqCollectionsz±Given a :class:`_query.Query` used to emit the "subquery load",
        provide a load interface that executes the query at the
        first moment a value is needed.
 
        ©r²rrróÚsubqÚ_datacCs4|j|_|j|_|j|_|jp i|_||_d|_dSr.r”)rXrgr•r6r6r7rUós  z(SubqueryLoader._SubqCollections.__init__cCs |jdkr| ¡|j ||¡Sr.)r–Ú_loadrF)rXr0Údefaultr6r6r7rFýs
z#SubqueryLoader._SubqCollections.getcCs„t t¡|_|j}|jdks t‚| |j¡}|jj    r<| 
¡}t|  |j ¡ƒ}t   |dd„¡D]"\}}|j| dd„|Dƒ¡q\dS)NcSs |dd…S)Nrr6©Úxr6r6r7r8óz7SubqueryLoader._SubqCollections._load.<locals>.<lambda>css|]}|dVqdS)rNr6©r†Úvvr6r6r7r‰sz8SubqueryLoader._SubqCollections._load.<locals>.<genexpr>)Ú collectionsÚ defaultdictrèr–r•r²ÚAssertionErrorZ with_sessionrZ_populate_existingr3róÚ    itertoolsÚgroupbyÚextend)rXruÚrowsr¥Úvr6r6r7r—s  z%SubqueryLoader._SubqCollections._loadcCs|jdkr| ¡dSr.)r–r—)rXr¦rÈrÉr6r6r7r:s
z&SubqueryLoader._SubqCollections.loaderN)    rkrlrmrnrorUrFr—r:r6r6r6r7Ú_SubqCollectionsãs     
r¦c    Cs |j}|jjr|jjrdS|j |¡}d|_||j}| |j    dd¡}    |    dk    rT|    }
n|j
}
|j j  dt jjt jjf¡\} } | t jjk} | |} | |} |j j  dtf|j ¡}t |d¡}|jrâ|jjdkrÜt d||f¡|j}|j|dd}| || || ¡\}}}} | ||||||¡}t  |
¡}|j  dtf|d| | fi¡|_ | d¡}| || ¡\}}}|j |Ž}| !|||||
¡}| "||| | ||
|¡}| #|¡}|S)    NTÚpath_with_polymorphic)Zsubquery_pathsNrsÚormzÙsubqueryloader for "%s" must invoke lambda callable at %r in order to produce a new query, decreasing the efficiency of caching for this statement.  Consider using selectinload() for more effective full-lambda cachingF)Úlegacy)$r]rÚ_enable_eagerloadsZ_for_refresh_stater^ÚindexZloaders_require_bufferingrVrFrrÀrr"r/r<r=rWrZ_get_plugin_class_for_pluginZ_is_lambda_elementrrrr,Z    _resolvedZ_create_entities_collectionrfrxrmr?Z_set_enable_single_critrZ add_columnsr‰rr’)rXrgr^r_rÀr`rar]raÚwith_poly_entityr†rbr‹rcrsZcompile_state_clsrrr\rertrwrur}r€rzr6r6r7Ú_setup_query_from_rowprocs¾    ÿþ 
ÿþ ÿÿ ûÿÿ    üû
ú
þÿ
ÿ
 
ÿù    
z(SubqueryLoader._setup_query_from_rowprocc    
sj|jr| ||||||ˆ|¡S| ||||j¡\}    }
}    }    |
s@dSt|jtƒsPdS|jj|j    j
j spt   d|¡‚t|ƒdkr’t |j|j¡s¨dSnt |d|j¡s¨dS| ||||d|ˆ¡} | dkrÌdS| jdksÚt‚||j}|jj} | |jd¡} | dkr | || ¡} | |jd| ¡ˆr8‡fdd„| Dƒ} |jrT| ||| | |¡n| ||| | |¡dS)NúJ'%s' does not support object population - eager loading cannot be applied.rr9ržcsg|]}ˆj|‘qSr6rRr…©rar6r7r¤ísz7SubqueryLoader.create_row_processor.<locals>.<listcomp>)r˜rÂrFrDr r]rrDrGr0ÚimplÚsupports_populationr´rµr+r/Ú _entity_isar_r­r²r rVr`rFrr¦ržr:Ú_create_collection_loaderÚ_create_scalar_loader)rXrgr^r_r`rJrhrariÚ_rMr•rržr6r¯r7rjžs„ ø ÿ  ÿÿ     ú    
 
 ÿÿz#SubqueryLoader.create_row_processorcsp| |¡‰‡‡‡fdd„‰‡‡fdd„}|d ˆjˆf¡|d ˆj|f¡|jrl|d ˆjˆjf¡dS)Ncs*ˆ ˆ|ƒd¡}| ˆj¡ |||¡dS)Nr6)rFrPr0rQ)r¦rÈrÉÚ
collection©ržrXÚ tuple_getterr6r7Úload_collection_from_subqýs  ÿzKSubqueryLoader._create_collection_loader.<locals>.load_collection_from_subqcsˆj|krˆ|||ƒdSr.r/rÇ)r¹rXr6r7Ú&load_collection_from_subq_existing_rows
zXSubqueryLoader._create_collection_loader.<locals>.load_collection_from_subq_existing_rowr—ÚexistingÚeager©Z _tuple_getterrBr0Úinvoke_all_eagersr:)rXrgrhržrrirºr6)ržr¹rXr¸r7r³øs
ÿz(SubqueryLoader._create_collection_loadercsp| |¡‰‡‡‡fdd„‰‡‡fdd„}|d ˆjˆf¡|d ˆj|f¡|jrl|d ˆjˆjf¡dS)NcsLˆ ˆ|ƒd¡}t|ƒdkr*t dˆ¡|d}| ˆj¡ |||¡dS)Nr.rúLMultiple rows returned with uselist=False for eagerly-loaded attribute '%s' r)rFr+rr,rPr0rQ)r¦rÈrÉr¶Zscalarr·r6r7Úload_scalar_from_subqs ÿÿzCSubqueryLoader._create_scalar_loader.<locals>.load_scalar_from_subqcsˆj|krˆ|||ƒdSr.r/rÇ)rÀrXr6r7Ú"load_scalar_from_subq_existing_rows
zPSubqueryLoader._create_scalar_loader.<locals>.load_scalar_from_subq_existing_rowr—r»r¼r½)rXrgrhržrrirÁr6)ržrÀrXr¸r7r´s
 ÿz$SubqueryLoader._create_scalar_loader)rkrlrmrorUr}rfrxrr‰rr’r¦r­rjr³r´rpr6r6rZr7rWªs 1d/5$4ZrWZjoinedcsˆeZdZdZdZ‡fdd„Zdd„Zdd    d
„Zd d „Zd d„Z    dd„Z
dd„Z dd„Z d dd„Z dd„Zdd„Zdd„Zdd„Z‡ZS)!Ú JoinedLoaderz[Provide loading behavior for a :class:`.Relationship`
    using joined eager loading.
 
    )rDÚ_aliased_class_poolcs"tƒ ||¡|jj|_g|_dSr.)rTrUrVrDrÃrWrZr6r7rU6s
zJoinedLoader.__init__cCs|j d¡ |¡dSrHrJrr6r6r7r};s
ÿþz!JoinedLoader.init_class_attributeNFc     Ks:|jjs dS|jrd|_||j}d}
|r:| |||j¡nd} | dk    r`| ||||| ¡\} }} n`| |jd¡sš|j    rŠ|j
d|j    kršdSn|  |j ¡ršdS|  ||||||||¡\} }} }d|_| |jdd¡}|dk    rät|ƒj}
nd}
||j}tj||j ||| | |
|j |d    |dk    r6dt|jƒkr6t d¡‚dS)    z@Add a left outer join to the statement that's being constructed.NTFr:r$r§)Úwith_polymorphicÚ parentmapperÚchained_from_outerjoinz–Detected unaliased columns when generating joined load.  Make sure to use aliased=True or flat=True when using joined loading with with_polymorphic().)rrªr:Úmulti_row_eager_loadersrVÚ_init_user_defined_eager_procrÚ$_setup_query_on_user_defined_adapterrArDrBrCrJÚ_generate_row_adapterZeager_adding_joinsrFr&Zwith_polymorphic_mappersrÀr Z_setup_entity_queryržÚsecondary_columnsr´rµ)rXr]r^r_r`rarbrÅrÆrcrÄÚuser_defined_adapterÚclausesÚadd_to_collectionr¬r6r6r7re@sš
ýÿûûüý øûÿÿ
÷ ÿÿzJoinedLoader.setup_queryc
Csâd|jkrdS|jj}| |jdd¡}|dk    r2|S|jd}|dd…\}}|dk    rŠt|tƒrj|j |¡}t    j
t    j j |j ||j jdd}nF| |jd¡rÀ| |jd¡}    t    j
t    j j|    |j jd}n|j |j d¡}| |d|¡|S)NZeager_from_aliasFÚ user_defined_eager_row_processoréþÿÿÿ)Ú
selectableràZlimit_on_entityr§)rà)rŽr_rDrFrr r¹r¿Úaliasr/Ú
ORMAdapterÚ_TraceAdaptRoleZJOINEDLOAD_USER_DEFINED_ALIASrJrçrAZ JOINEDLOAD_PATH_WITH_POLYMORPHICZ_polymorphic_adaptersrž)
rXr`r]Ztarget_attributesr_rarÒZ root_mapperr3r¬r6r6r7rȳsZ
ÿ
 
 ûÿÿýÿýz*JoinedLoader._init_user_defined_eager_proccCsV| |¡}|r.|r.| |¡}| |jd|¡n|rF|}| |jd|¡|j}|||fS)NrÏ)Z_get_entity_clausesÚwrapržrÚprimary_columns)rXrgrÀr_rarÌrÎr6r6r7rÉís"
 
ýýz1JoinedLoader._setup_query_on_user_defined_adaptercCs°t|jƒjrt|jƒj}nd}d|f}||jkr@d|j|<}n|j|d|j|<}|t|jƒkr¦tj|j    |dk    r‚|j
ddndddd}t|ƒjj |j  |¡|j|S)NZjoinedloader_acrrT)Úflat)rÒr×rl) r&rÀrÒrÑrr+rÃr/r#rJZ_anonymous_fromclauserdrB)rXrgZalt_selectabler0ÚidxÚto_adaptr6r6r7Ú_gen_pooled_aliased_class    s& 
ÿú  z&JoinedLoader._gen_pooled_aliased_classc     CsÔ| |jdd¡}    |    r|    }
n
| |¡}
t|
ƒ} | jd|ftjtjj| |j    j
dddd} | j s^t ‚|dk    rx|j  d|jj¡n|jj} | sˆd}|j |j||||| | ||rª|jndf    ¡|j}| |jd| ¡| |||fS)    Nr§Zjoinedloader_ormadapterTF)ràZadapt_requiredZallow_label_resolveZanonymize_labelsÚ    innerjoinr6Úeager_row_processor)rFrrÚr&Z_memor/rÓrÔZJOINEDLOAD_MEMOIZED_ADAPTERrJrçrÒr rŽrVrÛZcreate_eager_joinsrBÚ_create_eager_joinrþrËrž)rXr]rÀr_r`rarbrÅrÆr¬rÙZ to_adapt_insprÍrÛrÎr6r6r7rÊ)    sR ÿ
ø
ÿý ÷ÿz"JoinedLoader._generate_row_adapterc
    sX|dkr|j}
n|}
|jo|j} d} ||jkr~| s~|jr~t |j|j¡} t| ƒdkr^t     
d¡‚| r~|j| d}| d|} }| dkr’||j} }|j  | |¡}|rt |ddƒrä|j  |
 ˆj¡rÈ|
nˆj¡}t |jˆjˆjƒ}n t tjˆj|jddˆjˆjƒ}nˆj}|jst‚| p8| p8|dkp8|jj}|    }|j d    ˆjfd
¡}|rr|t‡fd d „|Dƒƒ7}|r¸tj||j || p¦|jjp¦|o¦t|tj ƒˆjˆj|d }nˆ !|||||¡}||j| <|j|_"|s&t #ˆjj$¡D]4}|
j%j& '|¡rð|r|j(|}| )||j*¡qðˆjj+rT|j,t|j- .t/ 0ˆjj+¡¡ƒ7_,dS)Nrz€Can't identify which query entity in which to joined eager load from.   Please use an exact match when specifying the join path.rrÒFTrkZunnestedÚadditional_entity_criteriar6c3s |]}|jr| ˆj¡VqdSr.)Zpropagate_to_loadersZ_resolve_where_criteriarJ)r†Zaer£r6r7r‰Ò    sþz2JoinedLoader._create_eager_join.<locals>.<genexpr>©ÚisouterÚ
_left_memoÚ _right_memorþ)1rJrÇZ_should_nest_selectableZ eager_joinsZ from_clausesrÛZ#find_left_clause_that_matches_givenrÑr+r´rµÚ
setdefaultrZÚ aliased_inspZ_entity_for_mapperr]rDrÀr0rVr/r#rÒr r_Zrepresents_outer_joinZglobal_attributesrFrÚ_ORMJoinr r(ZJoinÚ_splice_nested_inner_joinZstop_onZ _find_columnsZ primaryjoinZpersist_selectablerdZcontains_columnrSr\rÖrârÚ_target_adapterZcopy_and_processrrã)rXr]r^r_rarÅrÍrÛrÆrr±Zshould_nest_selectableZquery_entity_keyZindexesZclauseZdefault_towrapZtowrapZefmÚonclauseZattach_on_outsideZextra_join_criteriarÞÚ    eagerjoinrr6r£r7rÝi    sÔ þÿþýÿ ÿþÿ 
ÿýÿû     ÿþüÿþ
ÿ÷ ÿ
ÿ
ÿ
 ÿÿzJoinedLoader._create_eager_joinc
    Cs>|dkrt|tjƒs|t‚nbt|tjjƒr>| ||j||||¡St|tjƒs||d     |¡rxtj||j
|d||dj |dSdS| ||j ||||j ¡}|dkrÖd}| ||j||||j¡}|dkrÚ|dk    sÐtdƒ‚dSnd}|r|jsø|jsø| |¡}    ntj|j||j|j|jd}    ntj||j |j|j|j d}    |j|    _|    S)    NFrÐr9rßz9assertion failed attempting to produce joined eager loadsT)ràrá)ràrâ)r r/rår r(rÑZ FromGroupingræÚelementr]rärJÚrightrâÚleftráràZ_splice_into_centerrèrç)
rXr_Zjoin_objrÍrèrZsplicingZ target_joinZ right_splicerér6r6r7ræ    
s†    ú ù
úúÿþ  ûûz&JoinedLoader._splice_nested_inner_joinc    Cs„|j}|r| |||j¡nd}|dk    rP|}|jrB|rB| |j¡}qj|jrj|j}n| |jd¡}|dkrjdS|j ||¡r||SdSdS)NFrÜ)r]rÈrZcompound_eager_adapterrÕrFrJZ_result_has_identity_key)    rXrgrhrar_r`r]rÌÚ    decoratorr6r6r7Ú_create_eager_adapterc
s4ýÿû
ÿÿz"JoinedLoader._create_eager_adapterc    
CsÀ|jj|jjjs t d|¡‚|jr,d|_||j    }    | 
||||    |¡}
|
dk    rœ|j} t   ||j |||    |j|
¡} |jsŠ| || | |¡q¼| || | |¡n |j     d¡ ||||||||¡dS)Nr®TFrI)rDrGr0r°r±r´rµr:Zloaders_require_uniquingrVrîr Z_instance_processorrJrÀr´r³r›rj) rXrgr^r_r`rJrhrariZour_pathZ eager_adapterr0Ú    _instancer6r6r7rj‡
s\ ÿÿ
ÿú    ÿÿöz!JoinedLoader.create_row_processorcsr‡‡‡fdd„}‡‡‡fdd„}‡fdd„}|d |j|f¡|d |j|f¡ˆjrn|d     |j|f¡dS)
NcsFt ||ˆ¡}t |d¡}|ˆj|ˆf<ˆ|ƒ}|dk    rB| |¡dS©NZappend_without_event©rrÆrZUniqueAppenderrB)r¦rÈrÉr¶Ú result_listÚinst©rïrgr0r6r7Ú#load_collection_from_joined_new_rowÂ
sÿzSJoinedLoader._create_collection_loader.<locals>.load_collection_from_joined_new_rowcsd|ˆfˆjkrˆj|ˆf}n(t ||ˆ¡}t |d¡}|ˆj|ˆf<ˆ|ƒ}|dk    r`| |¡dSrðrñ)r¦rÈrÉròr¶rórôr6r7Ú(load_collection_from_joined_existing_rowÏ
sÿÿzXJoinedLoader._create_collection_loader.<locals>.load_collection_from_joined_existing_rowcs ˆ|ƒdSr.r6rÇ©rïr6r7Ú load_collection_from_joined_execâ
szPJoinedLoader._create_collection_loader.<locals>.load_collection_from_joined_execr—r»r¼©rBr0r¾)rXrgr0rïrirõrörør6rôr7r³Á
s  ÿÿÿz&JoinedLoader._create_collection_loadercsp‡‡fdd„}‡‡‡fdd„}‡fdd„}|d ˆj|f¡|d ˆj|f¡|jrl|d     ˆj|f¡dS)
Ncsˆ|ƒ|ˆ<dSr.r6rÇ)rïr0r6r7Úload_scalar_from_joined_new_rowñ
szKJoinedLoader._create_scalar_loader.<locals>.load_scalar_from_joined_new_rowcs8ˆ|ƒ}ˆ|kr,||ˆk    r4t dˆ¡n||ˆ<dS)Nr¿)rr,)r¦rÈrÉr»©rïr0rXr6r7Ú$load_scalar_from_joined_existing_rowö
s þÿ    zPJoinedLoader._create_scalar_loader.<locals>.load_scalar_from_joined_existing_rowcs ˆ|ƒdSr.r6rÇr÷r6r7Úload_scalar_from_joined_exec     szHJoinedLoader._create_scalar_loader.<locals>.load_scalar_from_joined_execr—r»r¼rù)rXrgr0rïrirúrürýr6rûr7r´ð
s ÿÿz"JoinedLoader._create_scalar_loader)NNF)F)rkrlrmrnrorUr}rerÈrÉrÚrÊrÝrærîrjr³r´rpr6r6rZr7rÂ+s(  ÷
s:"@"ÿ
Z$:/rÂZselectinc    s|eZdZdZe dddddddg¡Zd    Z‡fd
d „Zd d „Z    dd„Z
dd„Z dd„Z dd„Z dd„Zdd„Zdd„Z‡ZS)ÚSelectInLoader)rDÚ    omit_joinÚ _parent_aliasÚ _query_infoÚ_fallback_query_infoZ    queryinfoÚload_only_childÚload_with_joinÚin_exprÚpk_colsÚzero_idxÚchild_lookup_colsiôcs´tƒ ||¡|jj|_|jjtjk}|jjdk    r>|jj|_n<|j d¡}|rX|j    |_n"|j
j dj |j dd|j
jd|_|jr¦|rš| ¡|_| ¡|_q°| ¡|_n
| ¡|_dS)NrIrTFrß)rTrUrVrDrIr
rërÿr›rÑrDrær„rÏrçÚ_init_for_omit_join_m2orÚ_init_for_joinrÚ_init_for_omit_join)rXrDrYZis_m2orTrZr6r7rU/ s,
  ÿ
 ü
  zSelectInLoader.__init__cs‚tˆjjjƒ‰ˆ ‡‡fdd„tˆƒDƒ¡‡fdd„ˆjjDƒ}}t|ƒdkrbt    j
|Ž}d}n |d}d}ˆ  dd|||d¡S)    Nc3s0|](}ˆjj |d¡D]}|ˆ|fVqqdS)r6N)rDrçrF)r†r¥Úequiv©Úpk_to_fkrXr6r7r‰Q sþz5SelectInLoader._init_for_omit_join.<locals>.<genexpr>csg|]}|ˆkrˆ|‘qSr6r6©r†r)rr6r7r¤W sz6SelectInLoader._init_for_omit_join.<locals>.<listcomp>rFrT) rrVráZlocal_remote_pairsrprèrDrzr+r(Útuple_Ú
query_info)rXrZfk_colsrrr6r r7r M sÿþ
ÿ
 
z"SelectInLoader._init_for_omit_joincsb|jj}t|ƒdkr$tj|Ž}d}n |d}d}|j d¡‰‡fdd„|Dƒ}| dd||||¡S)NrFrTrIcsg|]}ˆj|‘qSr6r r©rTr6r7r¤m sz:SelectInLoader._init_for_omit_join_m2o.<locals>.<listcomp>)rJrzr+r(rrVr›r)rXrrrZ lookup_colsr6rr7r    c s  
 ÿz&SelectInLoader._init_for_omit_join_m2ocsjt|jjƒ|_t|jƒ‰‡fdd„|jjDƒ}t|ƒdkrJtj|Ž}d}n |d}d}|     dd|||d¡S)Ncsg|]}ˆ |¡‘qSr6©Ú_adapt_elementr©Zpa_inspr6r7r¤v sz1SelectInLoader._init_for_join.<locals>.<listcomp>rFrT)
r#rDrHrr&rzr+r(rr)rXrrrr6rr7r
s s
 
ÿ 
zSelectInLoader._init_for_joincCs|j d¡ |¡dSrHrJrr6r6r7r} s
ÿþz#SelectInLoader.init_class_attributec     Csö|jr| ||||||||¡S|j||||jd\}    }
} } |
sBdS|jj|jjjsbt     
d|¡‚t |ƒdkr„t   |j|j¡sšdSnt   |d|j¡sšdS|    } ||j}| |jdd¡}|dk    rÊt|ƒ}n|j}tj || |j|j|j||| | ¡    dS)NrXr®rr9r§)r˜rÂrFrDrDrGr0r°r±r´rµr+r/r²r_rVrFrr&rÀr r@rKrL)rXrgr^r_r`rJrhrarir-rMrr8Z selectin_pathrEr¬r†r6r6r7rj† sp øÿûÿÿ     
ÿ
÷z#SelectInLoader.create_row_processorc    s´|rˆj|krdSˆj}    |    jr¤t t¡}
g} ˆj‰|D]l\‰} ˆj‰t‡‡‡fdd„|    j    Dƒƒ} t
j | krtˆj }    q¤d| kr’|
|   ˆˆ| f¡q6|   ˆˆ| f¡q6|    js¸dd„|Dƒ}
|    j}|    j}|    jsìˆjrì‡fdd„|Dƒ}ˆ |¡}tjd|žŽ}| ¡}ˆ ¡}tj||gttjdˆdœd    }|    js<| ˆ¡}n$| ˆj¡ tˆjˆjjƒ  ˆ¡¡}| !| "t# $d
¡¡¡}ˆj%j&}|ˆj}|ˆj'krœ|j(}n&|j(}ˆj'j(}‡fd d„t)||ƒDƒ}|rè|j*rè|t +ˆ| ,ˆ¡¡f7}|dk    rú| -¡}|j.|Ž}| /d |i¡}ˆj0r&|j1d d}ˆjj2r€|    jsfˆjj2}ˆjrZ‡fdd„|Dƒ}|j2|Ž}n‡fdd„}| 3|ˆj¡}|    jržˆ 4|
| |    |ˆ|¡nˆ 5|
|    |ˆ|¡dS)Nc3s"|]}ˆjˆˆ|tjdVqdS)r N)rûrZPASSIVE_NO_FETCH)r†Zlk)rJr¦Ú
state_dictr6r7r‰ë súüz0SelectInLoader._load_for_path.<locals>.<genexpr>cSs$g|]\}}|jd||j|f‘qS)r)r0r)r†r¦rUr6r6r7r¤ sÿz1SelectInLoader._load_for_path.<locals>.<listcomp>csg|]}ˆ |¡‘qSr6rr©r†r6r7r¤ srr¨)Zcompile_state_pluginZplugin_subject)rrr™rÚ primary_keyscsg|]\}}| ˆ|¡‘qSr6)Z'_adapt_cached_option_to_uncached_option)r†Zorig_optZ uncached_opt)rgr6r7r¤j s
ýÿrT)r3csg|]}ˆ |¡‘qSr6rrÝrr6r7r¤ˆ sÿcs |jtt ˆjj¡ƒ7_dSr.rŽr‘r£r6r7r’ s ÿz?SelectInLoader._load_for_path.<locals>._setup_outermost_orderby)r)6r0rrržrŸrèrDrrrrrªrrBrrrrÒrr/ZBundlerr+rr*rrr rr…rZrVrƒÚfilterZin_r(rîr]Zselect_statementrr$Úziprþr#r2rOrŠZ_update_compile_optionsr3rrâr“Ú_load_via_childÚ_load_via_parent)rXrgr_rRrSr†r`r8rrÚ
our_statesÚ none_statesrUZ related_identrrZ
bundle_entZ
bundle_sqlZ
entity_sqlrursr-rŒZcached_optionsZuncached_optionsrr’r6)rgr†rJrXr¦rr7rLÓ sÒ 
 ù
ÿþ
ÿ
þü
  ÿÿ
 
ÿü    þÿ
 
 
 
þ  ÿú    ÿzSelectInLoader._load_for_pathcsö|j}t|ƒ}|r¼|d|j…}    ||jd…}dd„|jj|d‡fdd„|    Dƒi|d ¡Dƒ}
|    D]T} |
 | d¡} || D]:\} }}|s–|j|kr–q||  |j¡     | ||s®| n| g¡q|qdq|D]0\} }}|sÚ|j|krÚqÀ|  |j¡     | |d¡qÀdS)NrcSsi|]\}}||“qSr6r6)r†r¥r¥r6r6r7Ú
<dictcomp>¶ sÿz2SelectInLoader._load_via_child.<locals>.<dictcomp>rcsg|]}ˆjr|dn|‘qSrY©r)r†r0©rr6r7r¤» sÿz2SelectInLoader._load_via_child.<locals>.<listcomp>©rór)
r:ÚsortedÚ
_chunksizer²r)rìrFr0rPrQ)rXrrrrurgrr:Zour_keysÚchunkÚdatar0Z related_objr¦rÈrUr6r!r7r¦ s<    
þÿøþ   ý
zSelectInLoader._load_via_childcs$|j}|rdnd}|r |d|j…}||jd…}‡fdd„|Dƒ}    t t¡}
t |jj|d|    i|d     ¡dd„¡D] \} } |
|  
d    d
„| Dƒ¡qv|D]€\} }}}|s¸|j |kr¸qœ|
  | |¡}|s|rt |ƒd krêt d |¡| |j ¡ |||d¡qœ| |j ¡ |||¡qœqdS) Nr6rcs&g|]\}}}}ˆjr|dn|‘qSrYr )r†r0r¦rrUr!r6r7r¤ç s
ÿz3SelectInLoader._load_via_parent.<locals>.<listcomp>rr"cSs|dSrur6r™r6r6r7r8ó r›z1SelectInLoader._load_via_parent.<locals>.<lambda>css|]}|dVqdS)rNr6rœr6r6r7r‰õ sz2SelectInLoader._load_via_parent.<locals>.<genexpr>rr¿)r:r$ržrŸrèr¡r¢r²r)rìr£r0rFr+rr,rPrQ)rXrrrurgrr:Z _empty_resultr%rr&r¥r¥r0r¦rrUr¶r6r!r7rÝ sN 
þ
ýú    þÿ ÿ ÿzSelectInLoader._load_via_parent)rkrlrmroržÚ
namedtuplerr$rUr r    r
r}rjrLrrrpr6r6rZr7rþ s,úþ  MT7rþcsT‡fdd„‰‡fdd„}‡fdd„}tj|d|dddd    tj|d
|dddd    dS) NcsT|dk    rP|jˆjkrP| t |¡¡}|rP||k    rPtjdt |¡|jˆfdd‚|S)NzsInstance %s is already associated with an instance of %s via its %s attribute, and is only allowed a single parent.Zbbf1)Úcode)    r0Ú    hasparentrZinstance_stater´rµr/Z instance_strrH)r¦rñÚoldvalueÚ    initiatorr))r3r6r7Ú    _do_check s ýûz*single_parent_validator.<locals>._do_checkcsˆ||d|ƒSr.r6)r¦rñr+©r,r6r7rB sz'single_parent_validator.<locals>.appendcsˆ||||ƒSr.r6)r¦rñr*r+r-r6r7Úset_! sz%single_parent_validator.<locals>.set_rBT)ÚrawÚretvalr?rž)r%Úlisten)r2r3rBr.r6)r,r3r7rC s  ÿrC)NNNNFN)QrnÚ
__future__rržr¡ÚtypingrrrrÚrr    r¬r
r r r rrrrr/Úbaserrrrrrrrgrrrrrrr²rr¦r rr!r"r#r%r´r&r'r(rÛr)Zsql.selectabler*r+r,Z sql.elementsr-rNZColumnPropertyZ strategy_forrQZ class_loggerrqrƒr‘r¸r¾rÃrÄZ MemoizedSlotsZ
IdentifiedrÍr1r7rGrWrÂrþrCr6r6r6r7Ú<module>
sú                                             ÷
S+Z Vÿ 2% 
  &     
ÿ-4M [   m {