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
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
U
¸ý°dÈ@ã @s ddlmZddlZddlZddlZddlZddlZddlmZddlmZddlm    Z    ddlm
Z
ddlm Z ddlm Z dd    lm Z dd
lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddl"m#Z#ddl"m$Z$ddl"m%Z%ddl"m&Z&dd l"m'Z'dd!l"m(Z(dd"l"m)Z)dd#l"m*Z*dd$l"m+Z+dd%l"m,Z,dd&l"m-Z-dd'l"m.Z.dd(l"m/Z/dd)l"m0Z0dd*l"m1Z1dd+l2m3Z3dd,l2m4Z4dd-l2m5Z5dd.l2m6Z6dd/l2m7Z7dd0l8m9Z9d1d2lm:Z:d1dlmZ;d1d3lm<Z<d1d4lm=Z=d1d5lm>Z>d1d6l?m@Z@d1d7l=mAZAd1d8l=mBZBd1d9l=mCZCd1d:l=mDZDd1d5l=m>ZEd1d;l=mFZFd1d<lGmHZHd1d=lImJZJd1d>lKmLZLd1d?lMmNZNd1d@lMmOZOd1dAlPmQZQd1dBlPmRZRd1dClSmTZTd1dDlUmVZVd1dElWmXZYd1dFlWmZZ[d1dGlWm\Z]d1dHlWm^Z^d1dIlWm_Z_d1dJlWm`Z`d1dKlWmaZaejrddLlmbZbddMlmcZcddNlmdZdddOlmeZeddPlfmgZgddQlfmhZhddRlimjZjddSlkmlZlddTlmmnZnd1dUlompZpd1dVlomqZqd1dWlGmrZrd1dXlGmsZsd1dYlGmtZtd1dZlGmuZud1d[lGmvZvd1d\lGmwZwd1d]lImxZxd1d^lKmyZyd1d_lPmzZzd1d`lSm{Z{d1dalSm|Z|d1dblSm}Z}d1dclSm~Z~d1ddlSmZd1del€mZd1dflWm‚Z‚d1dglWmƒZƒedhediZ„e…djƒZ†ej‡ej‡e> ˆdke+i¡dlZ‰Gdmdn„dne`ƒZŠe
eŠe‰eYƒƒZXGdodp„dpe`ƒZ‹e
e‹e‰e[ƒƒZZGdqdr„dre`ƒZŒe
eŒe‰e]ƒƒZ\Gdsdt„dte eƒZŽdudv„ZdØdydz„ZdÙdddd{œd|d}d~dd€dd‚œdƒd„„Z‘Gd…d†„d†ej’ƒZ“Gd‡dˆ„dˆeEj”ƒZ•Gd‰dŠ„dŠeEj”ƒZ–Gd‹dŒ„dŒe<j—de5eƒZ˜e<j™GdŽd„de6ee7eNe)eVe<j—de eƒ    ƒZšGdd‘„d‘ƒZ›Gd’d“„d“e3ƒZœe< e˜¡d”d•„ƒe< ež¡d–d—d˜œd™dš„ƒZŸežeeƒZ e< e ¡d–d—d˜œd›dœ„ƒZ¡e<j™Gddž„dže5e„eJeOe<j—dŸe)ƒƒZ¢dÚd d€d d¡œd¢d£„Z£d d d¤œd¥d¦„Z¤d d d¤œd§d¨„Z¥Gd©dª„dªeBj¦ƒZ§dÛd«d¬d­d®d¯œd°d±„Z¨d«d²d³œd´dµ„Z©d«d²d³œd¶d·„Zªd¸d¸d²d¹œdºd»„Z«d¸d¸d²d¹œd¼d½„Z¬d¸d¾d²d¿œdÀdÁ„Z­dÂdÃdÃdĜdÅdƄZ®dÇdÈdÈd²dɜdÊd˄Z¯GdÌd̈́dÍe°ƒZ±dÎdÎdÎdϜdÐdфZ²dÜdÒdÓdÎdÎdÈd²d²d²d²dÔd՜
dÖdׄZ³dS)Ýé)Ú annotationsN)Ú AbstractSet)ÚAny)ÚCallable)Úcast)ÚDict)Ú    FrozenSet)ÚGeneric)ÚIterable)ÚIterator)ÚList)ÚMatch)ÚOptional)ÚSequence)ÚTuple)ÚType)Ú TYPE_CHECKING)ÚTypeVar)ÚUnioné)Ú
attributes)Úexc)Ú_O)Úinsp_is_aliased_class)Úinsp_is_mapper)Úprop_is_relationship)Ú_class_to_mapper)Ú_MappedAnnotationBase)Ú
_never_set)Ú    _none_set)Ú attribute_str)Ú class_mapper)ÚInspectionAttr)Ú instance_str)ÚMapped)Ú object_mapper)Ú object_state)Úopt_manager_of_class)Ústate_attribute_str)Ústate_class_str)Ú    state_str)ÚCriteriaOption)ÚMapperProperty)ÚORMColumnsClauseRole)ÚORMEntityColumnsClauseRole)ÚORMFromClauseRole)Ú PathRegistryé)Úevent)Ú
inspection)Úsql)Úutil©Ú result_tuple)Ú    coercions)Ú
expression)Úlambdas)Úroles)Úvisitors)Ú is_selectable)ÚSupportsCloneAnnotations)ÚColumnCollection)Ú HasCacheKey)ÚMemoizedHasCacheKey)Ú ColumnElement)ÚKeyedColumnElement)Ú
FromClause)Ú MemoizedSlots)Úde_stringify_annotation)Úde_stringify_union_elements)Úeval_name_only)Úis_origin_of_cls)ÚLiteral)ÚProtocol)Útyping_get_origin)Ú _EntityType)Ú_IdentityKeyType)Ú_InternalEntityType)Ú _ORMCOLEXPR)Ú _MapperEntity)ÚORMCompileState)ÚMapper)ÚQuery)ÚRelationshipProperty)ÚRow)Ú
RowMapping)Ú_CE)Ú_ColumnExpressionArgument)Ú_EquivalentColumnMap)Ú_FromClauseArgument)Ú_OnClauseArgument)Ú_PropagateAttrsType)Ú_SA)ÚReadOnlyColumnCollection)Ú BindParameter)Ú_ColumnsClauseElement)ÚAlias)ÚSelect)Ú
Selectable)ÚSubquery)Úanon_map)Ú_AnnotationScanType)ÚArgsTypeProcotolÚ_T)Úbound)Údeleteú delete-orphanÚallÚmergeÚexpungeú save-updateúrefresh-expireÚnoner$)Zlocals_c@s,eZdZdddœddddddd    œd
d „ZdS) Ú_DeStringifyAnnotationNF)Ústr_cleanup_fnÚinclude_genericú    Type[Any]rgÚstrú#Optional[Callable[[str, str], str]]Úbool)ÚclsÚ
annotationÚoriginating_modulertruÚreturncCsdS©N©)Úselfrzr{r|rtrurrúJd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\sqlalchemy/orm/util.pyÚ__call__•s    z_DeStringifyAnnotation.__call__©Ú__name__Ú
__module__Ú __qualname__r‚rrrrrs”sùrsc@s(eZdZddœddddddœdd    „ZdS)
Ú_DeStringifyUnionElementsN©rtrvrhrwrx)rzr{r|rtr}cCsdSr~r)r€rzr{r|rtrrrr‚§sz"_DeStringifyUnionElements.__call__rƒrrrrr‡¦súr‡c@seZdZddddœdd„ZdS)Ú _EvalNameOnlyrwr)ÚnameÚ module_namer}cCsdSr~r)r€rŠr‹rrrr‚¹sz_EvalNameOnly.__call__Nrƒrrrrr‰¸sr‰cs”eZdZUdZe dddg¡ZeZdddddgZdZ    d    e
d
<d    e
d <d    e
d <d    e
d<d    e
d<d    e
d <dddœ‡fdd„ Z dd„Z e dd„ƒZ‡ZS)ÚCascadeOptionszHKeeps track of the options sent to
    :paramref:`.relationship.cascade`rmrrrlrorqrn)Ú save_updaterkÚrefresh_expirernroÚ delete_orphanryrrkrŽrz#Optional[Union[Iterable[str], str]])Ú
value_listr}c
sìt|tƒs|dkr| |¡St|ƒ}| |j¡rZt dd dd„t    | |j¡ƒDƒ¡¡‚d|krn| 
|j ¡d|kr~|  ¡|  d¡tƒ ||¡}d|k|_d|k|_d    |k|_d
|k|_d |k|_d |k|_|jrè|jsèt d ¡|S)NzInvalid cascade option(s): %sú, cSsg|] }t|ƒ‘qSr)Úrepr©Ú.0ÚxrrrÚ
<listcomp>åsÿz*CascadeOptions.__new__.<locals>.<listcomp>rmrrrprkrqrnrorlz5The 'delete-orphan' cascade option requires 'delete'.)Ú
isinstancerwÚ from_stringÚsetÚ
differenceÚ_allowed_cascadesÚsa_excÚ ArgumentErrorÚjoinÚsortedÚupdateÚ_add_w_all_cascadesÚclearÚdiscardÚsuperÚ__new__rrkrŽrnrorr5Úwarn)rzrÚvaluesr€©Ú    __class__rrr¥Ûs@
 
ÿþÿÿÿ  
 
 
 
 
 
 
 ÿzCascadeOptions.__new__cCsdd dd„t|ƒDƒ¡S)NzCascadeOptions(%r)ú,cSsg|]}|‘qSrrr“rrrr–sz+CascadeOptions.__repr__.<locals>.<listcomp>)ržrŸ©r€rrrÚ__repr__szCascadeOptions.__repr__cCs"dd„t d|pd¡Dƒ}||ƒS)NcSsg|] }|r|‘qSrr)r”Úcrrrr–sz.CascadeOptions.from_string.<locals>.<listcomp>z\s*,\s*Ú)ÚreÚsplit)rzÚargr§rrrr˜szCascadeOptions.from_string)r„r…r†Ú__doc__Ú all_cascadesršr¡r›Z_viewonly_cascadesÚ    __slots__Ú__annotations__r¥r¬Ú classmethodr˜Ú __classcell__rrr¨rrŒÀs"
ÿ    'rŒc    sêˆs‡fdd„‰|r^‡‡‡‡fdd„}‡‡‡‡fdd„}‡‡‡‡fdd„}‡‡‡‡fd    d
„}n6‡‡‡‡fd d„}‡‡‡‡fd d„}‡‡‡‡fd d„}tj|d|dddtj|d|ddtj|d|ddd|rætj|d|ddddS)zNRuns a validation method on an attribute value to be set or
    appended.
    cs|jˆj}|j|k    Sr~)ÚmanagerÚimpl)ÚstateÚ    initiatorr¹)ÚkeyrrÚdetect_is_backrefs z,_validator_events.<locals>.detect_is_backrefcs4|jtjk    r,ˆsˆ||ƒs,ˆ| ¡ˆ|dƒS|SdS©NF©ÚoprZOP_BULK_REPLACEÚobj©rºÚvaluer»©r½Úinclude_backrefsr¼Ú    validatorrrÚappends ÿÿz!_validator_events.<locals>.appendcs8ˆsˆ||ƒs4| ¡‰‡‡‡fdd„|Dƒ|dd…<dS)Ncsg|]}ˆˆˆ|dƒ‘qS)Fr©r”rér¼rÁrÆrrr–#sú7_validator_events.<locals>.bulk_set.<locals>.<listcomp>©rÁ©rºr§r»rÄrËrÚbulk_set s
ÿz#_validator_events.<locals>.bulk_setcs(ˆsˆ||ƒs ˆ| ¡ˆ|dƒS|SdSr¾rË©rºrÃZoldvaluer»rÄrrÚset_'sz_validator_events.<locals>.set_cs$ˆsˆ||ƒs ˆ| ¡ˆ|dƒdS)NTrËrÂrÄrrÚremove-sz!_validator_events.<locals>.removecs2|jtjk    r*ˆsˆ||ƒs*ˆ| ¡ˆ|ƒS|SdSr~r¿rÂrÄrrrÇ3s ÿÿcs8ˆsˆ||ƒs4| ¡‰‡‡‡fdd„|Dƒ|dd…<dS)Ncsg|]}ˆˆˆ|ƒ‘qSrrrÈrÉrrr–>srÊrËrÌrÄrËrrÍ;scs&ˆsˆ||ƒsˆ| ¡ˆ|ƒS|SdSr~rËrÎrÄrrrÏ@srÇT)ÚrawÚretvalZ bulk_replace)rÑr™rÐN)r2Úlisten)    Údescr¼rÆZinclude_removesrÅrÇrÍrÏrÐrrÄrÚ_validator_events s rÕÚp_unionTc
 
s6t ¡}i‰i‰|D]|}||‰tjtjˆdd‰ˆ||<i}ˆjD]B}|j|krdt     d||f¡‚| 
|j¡|||j<|j ˆ|j<qD|ˆˆ<q‡‡‡fdd„‰g}|  ¡D]v\}    ‰|dk    rþ|  tj‡‡fdd„|Dƒt t |    ¡¡ |¡gŽ ˆ¡¡q®|  tj‡‡fd    d„|DƒŽ ˆ¡¡q®tj|Ž |¡S)
a0Create a ``UNION`` statement used by a polymorphic mapper.
 
    See  :ref:`concrete_inheritance` for an example of how
    this is used.
 
    :param table_map: mapping of polymorphic identities to
     :class:`_schema.Table` objects.
    :param typecolname: string name of a "discriminator" column, which will be
     derived from the query, producing the polymorphic identity for
     each row.  If ``None``, no polymorphic discriminator is generated.
    :param aliasname: name of the :func:`~sqlalchemy.sql.expression.alias()`
     construct generated.
    :param cast_nulls: if True, non-existent columns, which are represented
     as labeled NULLs, will be passed into CAST.   This is a legacy behavior
     that is problematic on some backends such as Oracle - in which case it
     can be set to False.
 
    T)Z allow_selectzÂPolymorphic union can't use '%s' as the discriminator column due to mapped column %r; please apply the 'typecolname' argument; this is available on ConcreteBase as '_concrete_discriminator_name'cshzˆ||WStk
rbˆr@t t ¡ˆ|¡ |¡YSt t ¡ˆ|¡ |¡YSYnXdSr~)ÚKeyErrorr4rÚnullÚlabelZ type_coerce)rŠÚtable)Ú
cast_nullsÚ colnamemapsÚtypesrrÚcol~s zpolymorphic_union.<locals>.colNcsg|]}ˆ|ˆƒ‘qSrr©r”rŠ©rÞrÚrrr–sz%polymorphic_union.<locals>.<listcomp>csg|]}ˆ|ˆƒ‘qSrrrßràrrr–™s)r5Z
OrderedSetr8Úexpectr;ZStrictFromClauseRoler­r¼rœZInvalidRequestErrorÚaddÚtypeÚitemsrÇr4ÚselectZliteral_columnÚsql_utilZ_quote_ddl_exprrÙÚ select_fromZ    union_allÚalias)
Z    table_mapZ typecolnameZ    aliasnamerÛZcolnamesr¼Úmr­ÚresultÚtype_r)rÛrÞrÜrÚrÝrÚpolymorphic_unionMsbÿ
 
ûÿ 
 
    ÿþÿÿþ    ÷ÿ ÿþÿrì)ÚinstanceÚrowÚidentity_tokenzOptional[Type[_T]]zUnion[Any, Tuple[Any, ...]]z Optional[_T]z%Optional[Union[Row[Any], RowMapping]]ú Optional[Any]z_IdentityKeyType[_T])Úclass_Úidentrírîrïr}cCsz|dk    rRt|ƒ}|dkrB|dkr*t d¡‚|jtt |¡ƒ|dS|j||dSn$|dk    rlt|ƒ}|     |¡St d¡‚dS)aQGenerate "identity key" tuples, as are used as keys in the
    :attr:`.Session.identity_map` dictionary.
 
    This function has several call styles:
 
    * ``identity_key(class, ident, identity_token=token)``
 
      This form receives a mapped class and a primary key scalar or
      tuple as an argument.
 
      E.g.::
 
        >>> identity_key(MyClass, (1, 2))
        (<class '__main__.MyClass'>, (1, 2), None)
 
      :param class: mapped class (must be a positional argument)
      :param ident: primary key, may be a scalar or tuple argument.
      :param identity_token: optional identity token
 
        .. versionadded:: 1.2 added identity_token
 
 
    * ``identity_key(instance=instance)``
 
      This form will produce the identity key for a given instance.  The
      instance need not be persistent, only that its primary key attributes
      are populated (else the key will contain ``None`` for those missing
      values).
 
      E.g.::
 
        >>> instance = MyClass(1, 2)
        >>> identity_key(instance=instance)
        (<class '__main__.MyClass'>, (1, 2), None)
 
      In this form, the given instance is ultimately run though
      :meth:`_orm.Mapper.identity_key_from_instance`, which will have the
      effect of performing a database check for the corresponding row
      if the object is expired.
 
      :param instance: object instance (must be given as a keyword arg)
 
    * ``identity_key(class, row=row, identity_token=token)``
 
      This form is similar to the class/tuple form, except is passed a
      database result row as a :class:`.Row` or :class:`.RowMapping` object.
 
      E.g.::
 
        >>> row = engine.execute(\
            text("select * from table where a=1 and b=2")\
            ).first()
        >>> identity_key(MyClass, row=row)
        (<class '__main__.MyClass'>, (1, 2), None)
 
      :param class: mapped class (must be a positional argument)
      :param row: :class:`.Row` row returned by a :class:`_engine.CursorResult`
       (must be given as a keyword arg)
      :param identity_token: optional identity token
 
        .. versionadded:: 1.2 added identity_token
 
    Nzident or row is required)rïzclass or instance is required)
r!rœrZidentity_key_from_primary_keyÚtupler5Zto_listZidentity_key_from_rowr%Zidentity_key_from_instance)rñròrírîrïÚmapperrrrÚ identity_keyŸs"G
 ÿÿ
rõc@sheZdZdZe ¡Ze ¡Ze ¡Ze ¡Z    e ¡Z
e ¡Z e ¡Z e ¡Z e ¡Ze ¡Ze ¡ZdS)Ú_TraceAdaptRoleaÓEnumeration of all the use cases for ORMAdapter.
 
    ORMAdapter remains one of the most complicated aspects of the ORM, as it is
    used for in-place adaption of column expressions to be applied to a SELECT,
    replacing :class:`.Table` and other objects that are mapped to classes with
    aliases of those tables in the case of joined eager loading, or in the case
    of polymorphic loading as used with concrete mappings or other custom "with
    polymorphic" parameters, with whole user-defined subqueries. The
    enumerations provide an overview of all the use cases used by ORMAdapter, a
    layer of formality as to the introduction of new ORMAdapter use cases (of
    which none are anticipated), as well as a means to trace the origins of a
    particular ORMAdapter within runtime debugging.
 
    SQLAlchemy 2.0 has greatly scaled back ORM features which relied heavily on
    open-ended statement adaption, including the ``Query.with_polymorphic()``
    method and the ``Query.select_from_entity()`` methods, favoring
    user-explicit aliasing schemes using the ``aliased()`` and
    ``with_polymorphic()`` standalone constructs; these still use adaption,
    however the adaption is applied in a narrower scope.
 
    N)r„r…r†r²ÚenumÚautoÚ ALIASED_INSPZJOINEDLOAD_USER_DEFINED_ALIASZ JOINEDLOAD_PATH_WITH_POLYMORPHICZJOINEDLOAD_MEMOIZED_ADAPTERZMAPPER_POLYMORPHIC_ADAPTERZWITH_POLYMORPHIC_ADAPTERZ#WITH_POLYMORPHIC_ADAPTER_RIGHT_JOINZ DEPRECATED_JOIN_ADAPT_RIGHT_SIDEZADAPT_FROM_STATEMENTZCOMPOUND_EAGER_STATEMENTZLEGACY_SELECT_FROM_ALIASrrrrröùsröc
sHeZdZdZdZdddddddœddd    d
d
d
d
d d œ‡fd d„Z‡ZS)ÚORMStatementAdapterz.ColumnAdapter which includes a role attribute.)ÚroleNFT©Ú equivalentsÚadapt_requiredÚallow_label_resolveÚanonymize_labelsÚadapt_on_namesÚadapt_from_selectablesrördúOptional[_EquivalentColumnMap]ryú!Optional[AbstractSet[FromClause]])rûÚ
selectablerýrþrÿrrrc        s$||_tƒj|||||||ddS)Nrü)rûr¤Ú__init__)    r€rûrrýrþrÿrrrr¨rrr:s ùzORMStatementAdapter.__init__)r„r…r†r²r´rr·rrr¨rrú5sörúc sjeZdZUdZdZded<ded<ddd    ddd    ddd
œd d d ddddddddœ
‡fdd„Zdd„Z‡ZS)Ú
ORMAdapterzaColumnAdapter subclass which excludes adaptation of entities from
    non-matching mappers.
 
    )rûrôÚis_aliased_classÚ aliased_inspryrúOptional[AliasedInsp[Any]]r    NFT)rýrþrÿrrÚlimit_on_entityrrröú_InternalEntityType[Any]rzOptional[Selectable]r)
rûÚentityrýrþrÿrrr rrc
sh||_|j|_|dkr|j}t|ƒr2d|_||_n d|_d|_tƒj||||||rX|jnd|    |
ddS)NTF)rþrÿrZ
include_fnrr)    rûrôrrrr    r¤rÚ _include_fn) r€rûr rýrþrÿrrr rrr¨rrr]s& øzORMAdapter.__init__cCs,|j dd¡}| p*| |j¡p*|j |¡S)NÚ parentmapper)Ú _annotationsÚgetÚisarô)r€Úelemr rrrrszORMAdapter._include_fn)    r„r…r†r²r´rµrrr·rrr¨rrRs
ô($rc @seZdZUdZded<d"dddd    d    d
d d d    d    d œ
dd„Zedddœdd„ƒZdddœdd„Zdddddœdd„Z    ddœdd„Z
ddœd d!„Z dS)#Ú AliasedClassaàRepresents an "aliased" form of a mapped class for usage with Query.
 
    The ORM equivalent of a :func:`~sqlalchemy.sql.expression.alias`
    construct, this object mimics the mapped class using a
    ``__getattr__`` scheme and maintains a reference to a
    real :class:`~sqlalchemy.sql.expression.Alias` object.
 
    A primary purpose of :class:`.AliasedClass` is to serve as an alternate
    within a SQL statement generated by the ORM, such that an existing
    mapped entity can be used in multiple contexts.   A simple example::
 
        # find all pairs of users with the same name
        user_alias = aliased(User)
        session.query(User, user_alias).\
                        join((user_alias, User.id > user_alias.id)).\
                        filter(User.name == user_alias.name)
 
    :class:`.AliasedClass` is also capable of mapping an existing mapped
    class to an entirely new selectable, provided this selectable is column-
    compatible with the existing mapped selectable, and it can also be
    configured in a mapping as the target of a :func:`_orm.relationship`.
    See the links below for examples.
 
    The :class:`.AliasedClass` object is constructed typically using the
    :func:`_orm.aliased` function.   It also is produced with additional
    configuration when using the :func:`_orm.with_polymorphic` function.
 
    The resulting object is an instance of :class:`.AliasedClass`.
    This object implements an attribute scheme which produces the
    same attribute and method interface as the original mapped
    class, allowing :class:`.AliasedClass` to be compatible
    with any attribute technique which works on the original class,
    including hybrid attributes (see :ref:`hybrids_toplevel`).
 
    The :class:`.AliasedClass` can be inspected for its underlying
    :class:`_orm.Mapper`, aliased selectable, and other information
    using :func:`_sa.inspect`::
 
        from sqlalchemy import inspect
        my_alias = aliased(MyClass)
        insp = inspect(my_alias)
 
    The resulting inspection object is an instance of :class:`.AliasedInsp`.
 
 
    .. seealso::
 
        :func:`.aliased`
 
        :func:`.with_polymorphic`
 
        :ref:`relationship_aliased_class`
 
        :ref:`relationship_to_window_function`
 
 
    rwr„NFz_EntityType[_O]zOptional[FromClause]ú Optional[str]ryúOptional[Sequence[Mapper[Any]]]úOptional[ColumnElement[Any]]r
)
Úmapped_class_or_acrèrŠÚflatrÚwith_polymorphic_mappersÚwith_polymorphic_discriminatorÚ
base_aliasÚuse_mapper_pathÚrepresents_outer_joinc  Cs°tdt |¡ƒ} | j} d} |dkrN| jr<| jjr<| j ¡}qX| jj    ||d}n
| jrXd} |dk    sdt
‚t || |||rv|n| j |dk    r†|n| j ||    ||
| ƒ |_d| jj›d|_dS)Nú_InternalEntityType[_O]F©rŠrTúaliased(ú))rr3ÚinspectrôrrZ _is_subqueryrèZ_with_polymorphic_selectableÚ_anonymous_fromclauseÚAssertionErrorÚ AliasedInsprÚpolymorphic_onÚ _aliased_insprñr„)r€rrèrŠrrrrrrrZinsprôÚ nest_adaptersrrrrÆsF ÿ þÿ ÿÿñzAliasedClass.__init__úAliasedInsp[_O]úAliasedClass[_O])r    r}cCs\| |¡}d|jjj›d|_||_|jrX|jD]&}||k    r0t |¡}t    ||jj|ƒq0|S)Nr!r")
r¥rôrñr„r(Ú_is_with_polymorphicÚ_with_polymorphic_entitiesrÚ_reconstitute_from_aliased_inspÚsetattr)rzr    rÁZsub_aliased_inspÚentrrrr.üs
 
ÿz,AliasedClass._reconstitute_from_aliased_inspr)r¼r}cCs–z|jd}Wntk
r(tƒ‚YnX|j}t||ƒ}t|dƒr\t|dƒr\t |j|¡St|dƒrr|     d|¡}t|dƒr’| 
|¡}t |||ƒ|S)Nr(r‚Ú__self__Ú__get__Úadapt_to_entity) Ú__dict__r×ÚAttributeErrorÚ_targetÚgetattrÚhasattrrÝÚ
MethodTypeÚ__func__r2r3r/)r€r¼r(ÚtargetÚattrrrrÚ __getattr__s 
 
 
 
 zAliasedClass.__getattr__r)r¼Ú mapped_classr    r}cCsrt||ƒ}t|dƒr,t|dƒr,t |j|¡St|dƒrB| d|¡}t|dƒrnt |¡|_|     |¡}t
|||ƒ|S)Nr‚r1r2r3) r7r8rÝr9r:r2ÚweakrefÚrefÚ _weak_entityr3r/)r€r¼r>r    r<rrrÚ_get_from_serialized+s
 
 
 
 z!AliasedClass._get_from_serialized©r}cCsdt|ƒ|jjjfS)Nz<AliasedClass at 0x%x; %s>)Úidr(r6r„r«rrrr¬BsþzAliasedClass.__repr__cCs
t|jƒSr~)rwr(r«rrrÚ__str__HszAliasedClass.__str__)    NNFFNNNFF) r„r…r†r²rµrr¶r.r=rBr¬rErrrrr‡s$
:õ"6rr*c @sòeZdZUdZdZdejjfdejjfdejjfdejj    fdejj
fdej j fd    ej j
fgZ d
ed <d ed<d ed<ded<ded<ded<ded<ddd dddddddddœ dd„Zed\d!d"dddd#d$œd%d&„ƒZed]d'd(d)dddddddd*œ
d+d,„ƒZedd-œd.d/„ƒZd0Zd d-œd1d2„Zedd-œd3d4„ƒZed5d-œd6d7„ƒZed8d-œd9d:„ƒZd;d-œd<d=„Zd;d>d?œd@dA„ZdBdBdCœdDdE„Zd^dFddFdGœdHdI„Zer²d_dJddJdKœdLdM„ZneZdNdO„Z dPdQ„Z!dRdS„Z"dTdU„Z#dVdW„Z$dXdY„Z%dZd[„Z&dS)`r&aûProvide an inspection interface for an
    :class:`.AliasedClass` object.
 
    The :class:`.AliasedInsp` object is returned
    given an :class:`.AliasedClass` using the
    :func:`_sa.inspect` function::
 
        from sqlalchemy import inspect
        from sqlalchemy.orm import aliased
 
        my_alias = aliased(MyMappedClass)
        insp = inspect(my_alias)
 
    Attributes on :class:`.AliasedInsp`
    include:
 
    * ``entity`` - the :class:`.AliasedClass` represented.
    * ``mapper`` - the :class:`_orm.Mapper` mapping the underlying class.
    * ``selectable`` - the :class:`_expression.Alias`
      construct which ultimately
      represents an aliased :class:`_schema.Table` or
      :class:`_expression.Select`
      construct.
    * ``name`` - the name of the alias.  Also is used as the attribute
      name when returned in a result tuple from :class:`_query.Query`.
    * ``with_polymorphic_mappers`` - collection of :class:`_orm.Mapper`
      objects
      indicating all those mappers expressed in the select construct
      for the :class:`.AliasedClass`.
    * ``polymorphic_on`` - an alternate column or SQL expression which
      will be used as the "discriminator" for a polymorphic load.
 
    .. seealso::
 
        :ref:`inspection_toplevel`
 
    )Ú __weakref__rArôrrŠÚ_adapt_on_namesrr'Ú_use_mapper_pathÚ _base_aliasrÚpersist_selectableÚ local_tabler,r-Ú_adapterr6Ú__clause_element__Ú_memoized_valuesZ_all_column_expressionsÚ_nest_adaptersrŠrGrHr6rrr'z
Mapper[_O]rôrDrrLzSequence[Mapper[Any]]zSequence[AliasedInsp[Any]]r-zweakref.ref[AliasedClass[_O]]rAzUnion[_O, AliasedClass[_O]]r+rrrrr
ry) r Ú    inspectedrrŠrr'rIrHrrr)c 
s0|j} |j} t |¡|_| |_||_|_|_||_||_    t |pF|¡|_
||_ |
|_ | |_ |r¾d|_||_g|_|jD]@}|| k    rzt|j||ˆ|d}t|j|jj|ƒ|j |j¡qznd|_| g|_ttj| || jˆd‡fdd„|jDƒdd|_| r t|tƒst‚|j |j¡|_ˆ|_ | |_!dS)NT)rrrFcsh|]}ˆs|j’qSr)r)r”ré©rrrÚ    <setcomp>ïsþz'AliasedInsp.__init__.<locals>.<setcomp>)rrýrrrr )"r rôr?r@rArrJrKrŠr'rIrHrrOr,rr-rrñr/r„rÇr(rrörùZ_equivalent_columnsrLr—r&r%ÚwraprGr6)r€r rPrrŠrr'rIrHrrr)rrôZpolyr0rrQrr²s` þ
û
þñzAliasedInsp.__init__NFz"Union[_EntityType[_O], FromClause]z Optional[Union[Alias, Subquery]]z#Union[AliasedClass[_O], FromClause])ÚelementrèrŠrrr}cCsTt|tƒr>|rt d¡‚|r*|j||dStjtj||dSnt    |||||dSdS)Nz+adapt_on_names only applies to ORM elementsr ©r)rèrrŠr)
r—rDrœrrèr8rár;ZAnonymizedFromClauseRoler)rzrTrèrŠrrrrrÚ_alias_factoryÿs&
 
ÿÿûzAliasedInsp._alias_factoryzUnion[Type[_O], Mapper[_O]]z/Union[Literal['*'], Iterable[_EntityType[Any]]]z)Union[Literal[(False, None)], FromClause])
ÚbaseÚclassesrrr'ÚaliasedÚ    innerjoinrrHr}c
    Csjt|ƒ}
|dkr|rt d¡‚|
j|||d\} }|s:|rR|dk    sFt‚|j|d}t||| |||    | dS)Nr¾z[the 'flat' and 'selectable' arguments cannot be passed simultaneously to with_polymorphic()©rZrU)rrrrr)rrœrÚ_with_polymorphic_argsr%r$r) rzrWrXrrr'rYrZrrHÚprimary_mapperÚmappersrrrÚ_with_polymorphic_factorys, ÿÿ
  ùz%AliasedInsp._with_polymorphic_factoryrCcCs*| ¡}|dkr&t |¡}t |¡|_|Sr~)rArr.r?r@)r€r0rrrr Ds
 
 zAliasedInsp.entityTcCs"|j |j||dœ¡ d|dœ¡S)N)rÚ parententityÚentity_namespaceÚorm©Zcompile_state_pluginÚplugin_subject)rÚ    _annotaterôÚ_set_propagate_attrsr«rrrÚ#_memoized_method___clause_element__Usýÿùz/AliasedInsp._memoized_method___clause_element__cCs|jSr~)r r«rrrra`szAliasedInsp.entity_namespaceúType[_O]cCs|jjS)zUReturn the mapped class ultimately represented by this
        :class:`.AliasedInsp`.)rôrñr«rrrrñdszAliasedInsp.class_r0cCs|jr|jjSt |¡SdSr~)rHrôÚ_path_registryr0Z
per_mapperr«rrrrijszAliasedInsp._path_registryzDict[str, Any]c Cs4|j|j|j|j|j|j|j| ¡|j|j    |j
dœ S)N) r rôrèrŠrrrrrrr)) r rôrrŠrGrr'rIrHrrOr«rrrÚ __getstate__qsõzAliasedInsp.__getstate__ÚNone)rºr}cCsN| |d|d|d|d|d|d|d|d|d    |d
|d ¡ dS) Nr rôrèrŠrrrrrrr))r)r€rºrrrÚ __setstate__€sõzAliasedInsp.__setstate__r*)Úotherr}cCs|j}|j|kst‚t dd„|jDƒ¡}dd„|jDƒ}||krF|S| |¡}|j|d|j d\}}|jdd}t    ||||j
|j |jdj S)    Ncss|] }|jVqdSr~©rñ©r”ÚmprrrÚ    <genexpr>—sz*AliasedInsp._merge_with.<locals>.<genexpr>cSsh|]
}|j’qSrrnrorrrrRšsz*AliasedInsp._merge_with.<locals>.<setcomp>r[TrU)rrrr) rôr%r5Zto_setrÚunionr\rr$rr'rHr()r€rmr]Z our_classesZ new_classesrXr^rrrrÚ _merge_withs.
ÿ
ÿ
 úzAliasedInsp._merge_withrP)Úexprr¼r}cCsDt|tƒst‚||jdœ}|r&||d<|j |¡ |¡ d|dœ¡S)N)r`rÚ    proxy_keyrbrc)r—rBr%rôrLÚtraversererf)r€rtr¼ÚdrrrÚ_adapt_element­sþ ÿýÿzAliasedInsp._adapt_elementrX)rÁr¼r}cCsdSr~r)r€rÁr¼rrrÚ_orm_adapt_elementÆszAliasedInsp._orm_adapt_elementcCsX|j}||kr0||jkr|St|j|jjƒjSn$| |j¡r@|SdsTtd||fƒ‚dS)NFz"mapper %s doesn't correspond to %s)    rrôr7r rñr„r(rr%)r€rôZ    self_polyrrrÚ_entity_for_mapperÐs
ÿ zAliasedInsp._entity_for_mappercs.ˆjj\}}ˆj |¡‡fdd„| ¡DƒfS)Ncsi|]\}}ˆj |¡|“qSr)rLrv)r”rÞÚparamr«rrÚ
<dictcomp>âsÿ
z:AliasedInsp._memoized_attr__get_clause.<locals>.<dictcomp>)rôZ _get_clauserLrvrä)r€ÚonclauseZ
replacemaprr«rÚ_memoized_attr__get_clauseÞs  
 
þþz&AliasedInsp._memoized_attr__get_clausecCsiSr~rr«rrrÚ_memoized_attr__memoized_valuesèsz+AliasedInsp._memoized_attr__memoized_valuescsDˆjr ˆj dd„ˆjDƒ¡}n
ˆj ¡}‡fdd„|Dƒ}t|ƒS)NcSsg|]
}|j‘qSr)rô)r”r0rrrr–îszFAliasedInsp._memoized_attr__all_column_expressions.<locals>.<listcomp>csg|]\}}|ˆ |¡f‘qSr)rx)r”r¼rÞr«rrr–ós)r,rôZ_columns_plus_keysr-r?)r€Zcols_plus_keysrr«rÚ&_memoized_attr__all_column_expressionsësÿ
 
ÿz2AliasedInsp._memoized_attr__all_column_expressionscOs0||jkr|j|S|||Ž|j|<}|SdSr~)rN)r€r¼Z    callable_ÚargsÚkwrÃrrrÚ_memoùs
 
zAliasedInsp._memocCs<|jr"dd dd„|jDƒ¡}nd}dt|ƒ|jj|fS)Nz(%s)r‘css|]}|jjVqdSr~)rñr„rorrrrqsz'AliasedInsp.__repr__.<locals>.<genexpr>r®z<AliasedInsp at 0x%x; %s%s>)rržrDrñr„)r€Z    with_polyrrrr¬s ÿ ýzAliasedInsp.__repr__cs>ˆjr,dˆjjd ‡fdd„ˆjDƒ¡fSdˆjjfSdS)Nzwith_polymorphic(%s, [%s])r‘c3s |]}|ˆjk    r|jjVqdSr~)rôrñr„ror«rrrqs
þz&AliasedInsp.__str__.<locals>.<genexpr>z aliased(%s))r,r6r„ržrr«rr«rrE sþþ    zAliasedInsp.__str__)NNFF)FFNFFFF)N)N)'r„r…r†r²r´r<ÚExtendedInternalTraversalZ    dp_stringÚ
dp_booleanZdp_inspectableÚdp_clauseelementÚInternalTraversalZdp_has_cache_key_listZ_cache_key_traversalrµrr¶rVr_Úpropertyr rrgrarñrirjrlrsrxrryrzr~rr€rƒr¬rErrrrr&Lsz
 
&
 
 
 
 
þ
ö "Múö$&  ÿý
 r&c@s.eZdZdZdZdd„Ze d¡dd„ƒZdS)    Ú_WrapUserEntityaA wrapper used within the loader_criteria lambda caller so that
    we can bypass declared_attr descriptors on unmapped mixins, which
    normally emit a warning for such use.
 
    might also be useful for other per-lambda instrumentations should
    the need arise.
 
    ©ÚsubjectcCs
||_dSr~rŠ)r€r‹rrrr'sz_WrapUserEntity.__init__zsqlalchemy.orm.decl_apicCsPtjjj}t |d¡}||jkrBt|j||jƒrB|j|     |¡St
||ƒSdS)Nr‹) r5Z    preloadedrbÚdecl_apiÚobjectÚ__getattribute__r4r—Z declared_attrÚfgetr7)r€rŠrŒr‹rrrrŽ*s
  ÿz _WrapUserEntity.__getattribute__N)    r„r…r†r²r´rr5Zpreload_modulerŽrrrrr‰s
    r‰c@seZdZUdZdZdejjfdejjfdej    j
fdej    j fdej    j fgZ de d<d    e d<d
e d<d e d <d e d<d e d<d e d<d3ddd d d d dœdd„Zedd„ƒZdd„Zddœdd„Zdd dœd d!„Zd"d#d$œd%d&„Zdd'd(d)œd*d+„Zdd(dœd,d-„Zd.d(d/œd0d1„Zd2S)4ÚLoaderCriteriaOptiona
Add additional WHERE criteria to the load for all occurrences of
    a particular entity.
 
    :class:`_orm.LoaderCriteriaOption` is invoked using the
    :func:`_orm.with_loader_criteria` function; see that function for
    details.
 
    .. versionadded:: 1.4
 
    )Ú root_entityr Údeferred_where_criteriaÚwhere_criteriaÚ_where_crit_origÚinclude_aliasesÚpropagate_to_loadersr‘r r“r•r–zOptional[Type[Any]]z"Optional[_InternalEntityType[Any]]z9Union[ColumnElement[bool], lambdas.DeferredLambdaElement]ryr’rr”FTz_EntityType[Any]z_ColumnExpressionArgument[bool])Úentity_or_baser“Ú loader_onlyr•r–Útrack_closure_variablesc    Cs¾tdt |d¡ƒ}|dkr.td|ƒ|_d|_n d|_||_||_t|ƒr˜|jdk    rZ|j}n|dk    sft‚|j}d|_t    j
|t j t |ƒft    j|dd|_nd|_t t j |¡|_||_||_dS)Nr FrvT)r™)Z lambda_argsÚopts)rr3r#r‘r r”Úcallabler%r’r:ZDeferredLambdaElementr;ZWhereHavingRoler‰Z LambdaOptionsr“r8rár•r–)    r€r—r“r˜r•r–r™r Z wrap_entityrrrr^s>    
þ 
 ÿü
    ÿzLoaderCriteriaOption.__init__cCst||||dS)N)r•r–)r)rzr r“r•r–rrrÚ    _unreduceŒs üzLoaderCriteriaOption._unreducecCs(tj|jr|jjn|j|j|j|jffSr~)rrœr rñr‘r”r•r–r«rrrÚ
__reduce__—süþzLoaderCriteriaOption.__reduce__zIterator[Mapper[Any]]rCccsz|jr|jjjEdHn^|js"t‚t|j ¡ƒ}|rv| d¡}tdt    j
|ddƒ}|rf|jjEdHq0|  | ¡¡q0dS)Nrr F)Úraiseerr) r rôZself_and_descendantsr‘r%ÚlistÚ__subclasses__Úpoprr3r#Úextend)r€ÚstackÚsubclassr0rrrÚ _all_mappers¢s
 
 þz!LoaderCriteriaOption._all_mappersrR)Ú compile_stater}cCs|jj dd¡|krdSdS)NÚfor_loader_criteriaFT)Zselect_statementrr©r€r¦rrrÚ_should_include´sÿýÿz$LoaderCriteriaOption._should_includer úColumnElement[bool])Úext_infor}cCsF|jrtd|j |j¡ƒ}n|j}t|tƒs0t‚tj    |d|idddS)Nrªr§T)Zdetect_subquery_colsZind_cols_on_fromclause)
r’rr“Z_resolve_with_argsr r—rBr%ræÚ_deep_annotate)r€r«ÚcritrrrÚ_resolve_where_criteria¾s þüz,LoaderCriteriaOption._resolve_where_criteriazIterable[_MapperEntity]rk)r¦Úmapper_entitiesr}cCs| |¡dSr~)Úprocess_compile_state)r€r¦r¯rrrÚ'process_compile_state_replaced_entitiesÐsz<LoaderCriteriaOption.process_compile_state_replaced_entitiescCs| |j¡dS)z7Apply a modification to a given :class:`.CompileState`.N)Úget_global_criteriaZglobal_attributesr¨rrrr°×sz*LoaderCriteriaOption.process_compile_statezDict[Any, Any])rr}cCs,| ¡D]}| d|fg¡}| |¡qdS)NZadditional_entity_criteria)r¥Ú
setdefaultrÇ)r€rrpZ load_criteriarrrr²ßs  ÿz(LoaderCriteriaOption.get_global_criteriaN)FFTT)r„r…r†r²r´r<r„Z dp_plain_objZdp_has_cache_keyr‡r†r…Z_traverse_internalsrµrr¶rœrr¥r©r®r±r°r²rrrrr7s:
 
 
 
 
 
ûù.
 
 
rcCs|jSr~)r()r;rrrÚ<lambda>èór´rhzOptional[Mapper[_O]])rñr}cCsHz&t|ƒ}|dks|jsWdS|j}Wntjk
r>YdSX|SdSr~)r'Z    is_mappedrôrZNO_STATE)rñZ class_managerrôrrrÚ _inspect_mcës
r¶cCstdt|ƒƒ}t|ƒS)Nrh)rrLr¶)rñÚoriginrrrÚ_inspect_generic_aliasÿsr¸c@sæeZdZUdZdZdZdZdZdZe     
¡Z de d<e    j Zde d<dd    d
d œd d „Zddddœdd„Zeddœdd„ƒZeddœdd„ƒZeddœdd„ƒZde d<de d<d d!„Zd"d#„Zed$d%„ƒZd&d'„Zd(d)d*d+d,œd-d.„Zd/S)0ÚBundlea+A grouping of SQL expressions that are returned by a :class:`.Query`
    under one namespace.
 
    The :class:`.Bundle` essentially allows nesting of the tuple-based
    results returned by a column-oriented :class:`_query.Query` object.
    It also
    is extensible via simple subclassing, where the primary capability
    to override is that of how the set of expressions should be returned,
    allowing post-processing as well as custom return types, without
    involving ORM identity-mapped classes.
 
    .. seealso::
 
        :ref:`bundles`
 
 
    FTr]Ú_propagate_attrszList[_ColumnsClauseElement]Úexprsrwz_ColumnExpressionArgument[Any]r)rŠr»r‚cs`|ˆ_ˆ_‡fdd„|Dƒ}|ˆ_tdd„dd„|DƒDƒƒ ¡ˆ_ˆ_| dˆj¡ˆ_dS)aQConstruct a new :class:`.Bundle`.
 
        e.g.::
 
            bn = Bundle("mybundle", MyClass.x, MyClass.y)
 
            for row in session.query(bn).filter(
                    bn.c.x == 5).filter(bn.c.y == 4):
                print(row.mybundle.x, row.mybundle.y)
 
        :param name: name of the bundle.
        :param \*exprs: columns or SQL expressions comprising the bundle.
        :param single_entity=False: if True, rows for this :class:`.Bundle`
         can be returned as a "single entity" outside of any enclosing tuple
         in the same manner as a mapped entity.
 
        csg|]}tjtj|ˆd‘qS))Zapply_propagate_attrs)r8rár;ÚColumnsClauseRole©r”rtr«rrr–Is ýÿz#Bundle.__init__.<locals>.<listcomp>css |]}t|d|jƒ|fVqdS)r¼N)r7Ú_label)r”rÞrrrrqQsÿz"Bundle.__init__.<locals>.<genexpr>cSsg|]}|j d|¡‘qS©Úbundle©rr©r”Úerrrr–SsÚ single_entityN)    rŠr¾r»r?Z as_readonlyr­Úcolumnsr¡rÄ)r€rŠr»r‚Z coerced_exprsrr«rr4s 
ü þzBundle.__init__rfzList[BindParameter[Any]]zTuple[Any, ...])rfÚ
bindparamsr}cs*|j|j|jft‡‡fdd„|jDƒƒS)Ncsg|]}| ˆˆ¡‘qSr)Ú_gen_cache_keyr½©rfrÆrrr–[sz)Bundle._gen_cache_key.<locals>.<listcomp>)r©rŠrÄrór»)r€rfrÆrrÈrrÇWsÿzBundle._gen_cache_keyú Mapper[Any]rCcCs|jdj dd¡S)Nrr©r»rrr«rrrrô^sz Bundle.mapperr cCs|jdj dd¡S)Nrr`rÊr«rrrr bsz Bundle.entityz6ReadOnlyColumnCollection[str, KeyedColumnElement[Any]]cCs|jSr~)r­r«rrrrafszBundle.entity_namespacerÅr­cCs |j |j¡}|j |j¡|Sr~)r©r¥r4r )r€ÚclonedrrrÚ_clone‰sz Bundle._clonecCs^||dœ}| |j¡|jdj d|j¡}tjdd„|jDƒtj    ddœŽ 
|¡  d|d    œ¡S)
N)rÀrarrdcSsg|]}|j d|¡‘qSr¿rÁrÂrrrr–šsz-Bundle.__clause_element__.<locals>.<listcomp>F)Z_literal_as_text_roleÚgrouprbrc) r rr»rºrr r9Z
ClauseListr;r¼rerf)r€rrdrrrrMŽs$
  ÿþþû
þ÷ÿzBundle.__clause_element__cCs
| ¡jSr~)rMÚclausesr«rrrrΧszBundle.clausescCs| ¡}||_|S)z<Provide a copy of this :class:`.Bundle` passing a new label.)rÌrŠ)r€rŠrËrrrrÙ«sz Bundle.labelz Select[Any]z#Sequence[Callable[[Row[Any]], Any]]z Sequence[str]zCallable[[Row[Any]], Any])ÚqueryÚprocsÚlabelsr}cs.t|dd„|Dƒƒ‰dddœ‡‡fdd„ }|S)agProduce the "row processing" function for this :class:`.Bundle`.
 
        May be overridden by subclasses to provide custom behaviors when
        results are fetched. The method is passed the statement object and a
        set of "row processor" functions at query execution time; these
        processor functions when given a result row will return the individual
        attribute value, which can then be adapted into any kind of return data
        structure.
 
        The example below illustrates replacing the usual :class:`.Row`
        return structure with a straight Python dictionary::
 
            from sqlalchemy.orm import Bundle
 
            class DictBundle(Bundle):
                def create_row_processor(self, query, procs, labels):
                    'Override create_row_processor to return values as
                    dictionaries'
 
                    def proc(row):
                        return dict(
                            zip(labels, (proc(row) for proc in procs))
                        )
                    return proc
 
        A result from the above :class:`_orm.Bundle` will return dictionary
        values::
 
            bn = DictBundle('mybundle', MyClass.data1, MyClass.data2)
            for row in session.execute(select(bn)).where(bn.c.data1 == 'd1'):
                print(row.mybundle['data1'], row.mybundle['data2'])
 
        cSsg|]}d‘qS)rr)r”Úlrrrr–Ùsz/Bundle.create_row_processor.<locals>.<listcomp>zRow[Any]r)rîr}csˆ‡fdd„ˆDƒƒS)Ncsg|] }|ˆƒ‘qSrr)r”Úproc©rîrrr–Üsz=Bundle.create_row_processor.<locals>.proc.<locals>.<listcomp>rrÔ©Z keyed_tuplerÐrÔrrÓÛsz)Bundle.create_row_processor.<locals>.procr6)r€rÏrÐrÑrÓrrÕrÚcreate_row_processor²s'zBundle.create_row_processorN)r„r…r†r²rÄZis_clause_elementZ    is_mapperrZ    is_bundler5Ú immutabledictrºrµÚ    EMPTY_SETZ    proxy_setrrÇrˆrôr rarÌrMrÎrÙrÖrrrrr¹s2
#
r¹z
Bundle[_T]r^)rTÚexcluder}cCst |ddi|¡S)z®Deep copy the given ClauseElement, annotating each element with the
    "_orm_adapt" flag.
 
    Elements within the exclude collection will be cloned but not annotated.
 
    Ú
_orm_adaptT)rær¬)rTrÙrrrÚ _orm_annotateásrÛ)rTr}cCstj|ddS)zÔRemove annotations that link a column to a particular mapping.
 
    Note this doesn't affect "remote" and "foreign" annotations
    passed by the :func:`_orm.foreign` and :func:`_orm.remote`
    annotators.
 
    )rÚr`)r§©ræZ_deep_deannotate©rTrrrÚ_orm_deannotateës    ÿrÞcCs
t |¡Sr~rÜrÝrrrÚ_orm_full_deannotateùsrßc
@speZdZdZejjZdZddddddd    d    d
d œd d „Zdd„Z    dddddddœdd„Z
ddddddœdd„Z dS)Ú_ORMJoinz/Extend Join to support ORM constructs as input.TNFrr[zOptional[_OnClauseArgument]ryrðzTuple[ColumnElement[bool], ...])ÚleftÚrightr}ÚisouterÚfullÚ
_left_memoÚ _right_memoÚ_extra_criteriac    Cs(tdt |¡ƒ}    tdt |¡ƒ}
|
j} ||_||_t|tjƒrpt    rTt|j
t j ƒsTt ‚|j
 ¡} |j} ||j7}n t|tƒrˆ|} | jj} nd} d} | rz|    j}t | |¡r®| }nt|tƒs¼t ‚|}| j|| d|
d|d\}}}}}}|dk    r|rt |||¡}|}nt ||||¡}|}n|}||_t|    ƒr@|j dd¡}nt|    ƒsTt|    ƒrZ|    }nd}|dk    rz|j d|i¡|_|dko†|}t j! "||||||¡|j#dk    s®t ‚|rÈ|j#tj$|ŽM_#| s$t%|
ddƒr$|
j&j'r$td|
ƒ}
|
j&j(}|dk    r$t|
ƒr|
j) *|¡}|j#|@|_#dS)Nz+Union[FromClause, _InternalEntityType[Any]]T)Zsource_selectableZdest_selectableZsource_polymorphicZof_type_entityZalias_secondaryZextra_criteriar`rôr )+rr3r#rrårær—rÚQueryableAttributerZ
comparatorrUZ
Comparatorr%Z_source_selectablerˆrçr,ÚparentræZclause_is_presentrDZ _create_joinsr4ržZ_target_adapterr=rrrrrrr9ÚJoinrr}Úand_r7rôZsingleZ_single_table_criterionrLrv)r€rárâr}rãrärårærçZ    left_infoZ
right_infoZadapt_toZ on_selectableÚpropZleft_selectableZ
adapt_fromZpjZsjÚsourceÚdestZ    secondaryZtarget_adapterr`Zaugment_onclauseZ single_critrrrrs¦ þþ ÿ
 
 
     úù
 
 
ÿ
ÿÿ
þý
 
 
 z_ORMJoin.__init__cCs`|}t|tjƒr|j}q|j|ks&t‚t|j|j|j|j|j    |j    d}t||j|j|j|j
dS)zlSplice a join into the center.
 
        Given join(a, b) and join(b, c), return join(a, b).join(c)
 
        )rãråræ)rãræ) r—r4rêrárâr%ràr}rãråræ)r€rmZleftmostrárrrÚ_splice_into_center}s& ú    ûz_ORMJoin._splice_into_center)râr}rãrär}cCst|||||dS)N)rärã©rà)r€râr}rãrärrrržšsz _ORMJoin.join)râr}rär}cCst|||d|dS)NT)rãrärð)r€râr}rärrrÚ    outerjoin£sz_ORMJoin.outerjoin)NFFNNr)NFF)NF) r„r…r†r²r9rêZ__visit_name__Z inherit_cacherrïržrñrrrrràýs$÷y û üràrz"attributes.QueryableAttribute[Any]zOptional[_EntityType[Any]]rª)rírìÚ from_entityr}cCslt|tƒrt d¡‚nHt|tjƒrZ|jr.|j}|j}|dksDt|ƒsTt d|›¡‚|}n|}|j    ||dS)a Create filtering criterion that relates this query's primary entity
    to the given related instance, using established
    :func:`_orm.relationship()`
    configuration.
 
    E.g.::
 
        stmt = select(Address).where(with_parent(some_user, User.addresses))
 
 
    The SQL rendered is the same as that rendered when a lazy loader
    would fire off from the given parent on that attribute, meaning
    that the appropriate state is taken from the parent object in
    Python without the need to render joins to the parent table
    in the rendered statement.
 
    The given property may also make use of :meth:`_orm.PropComparator.of_type`
    to indicate the left side of the criteria::
 
 
        a1 = aliased(Address)
        a2 = aliased(Address)
        stmt = select(a1, a2).where(
            with_parent(u1, User.addresses.of_type(a2))
        )
 
    The above use is equivalent to using the
    :func:`_orm.with_parent.from_entity` argument::
 
        a1 = aliased(Address)
        a2 = aliased(Address)
        stmt = select(a1, a2).where(
            with_parent(u1, User.addresses, from_entity=a2)
        )
 
    :param instance:
      An instance which has some :func:`_orm.relationship`.
 
    :param property:
      Class-bound attribute, which indicates
      what relationship from the instance should be used to reconcile the
      parent/child relationship.
 
    :param from_entity:
      Entity in which to consider as the left side.  This defaults to the
      "zero" entity of the :class:`_query.Query` itself.
 
      .. versionadded:: 1.2
 
    z@with_parent() accepts class-bound mapped attributes, not stringsNz6Expected relationship property for with_parent(), got )rò)
r—rwrœrrrèZ_of_typerˆrZ _with_parent)rírìròZmapper_propertyZprop_trrrÚ with_parent¬s"9
ÿ 
ÿÿróry)Úobject_r}cCst |¡}|jS)zÖReturn True if the given object has a database
    identity.
 
    This typically corresponds to the object being
    in either the persistent or detached state.
 
    .. seealso::
 
        :func:`.was_deleted`
 
    )rÚinstance_stateÚ has_identity©rôrºrrrröûs
röcCst |¡}|jS)zßReturn True if the given object was deleted
    within a session flush.
 
    This is regardless of whether or not the object is
    persistent or detached.
 
    .. seealso::
 
        :attr:`.InstanceState.was_deleted`
 
    )rrõÚ was_deletedr÷rrrrø s
rør )Úgivenr r}cCs^t|ƒr(t|ƒr$| ¡| ¡kr$dSdSt|ƒrH|jr@||jkS||kSt|ƒsTt‚| |¡S)z¬determine if 'given' corresponds to 'entity', in terms
    of an entity passed to Query that would match the same entity
    being referred to elsewhere in the query.
 
    TF)rrIrHrrr%Z common_parent©rùr rrrÚ_entity_corresponds_tos
 rûcCsRt|ƒr*t|ƒo(|j o(||kp(||jkSt|ƒs>| |j¡S|joL||jkSdS)adetermine if 'given' corresponds to 'entity', in terms
    of a path of loader options where a mapped attribute is taken to
    be a member of a parent entity.
 
    e.g.::
 
        someoption(A).someoption(A.b)  # -> fn(A, A) -> True
        someoption(A).someoption(C.d)  # -> fn(A, C) -> False
 
        a1 = aliased(A)
        someoption(a1).someoption(A.b) # -> fn(a1, A) -> False
        someoption(a1).someoption(a1.b) # -> fn(a1, a1) -> True
 
        wp = with_polymorphic(A, [A1, A2])
        someoption(wp).someoption(A1.foo)  # -> fn(wp, A1) -> False
        someoption(wp).someoption(wp.A1.foo)  # -> fn(wp, wp.A1) -> True
 
 
    N)rrHr-rrôrrúrrrÚ$_entity_corresponds_to_use_path_impl3sÿý þrürÉ)rùrôr}cCs:|jr||jkp|j |¡S|jr,||jkS| |¡SdS)zedetermine if 'given' "is a" mapper, in terms of the given
    would load rows of type 'mapper'.
 
    N)rrrôr)rùrôrrrÚ _entity_isaXsÿ
rýz
Query[Any]r)Úiterable_queryÚitemr}cCsÎdd„}t|tƒr¢t |¡\}}}t|tƒrFt|tƒrF||dkrFgSt|tƒrX|dksjt|tƒrp|dkrp|ƒ| ||¡}|dk    r˜t|ƒdd|j…St|ƒSn(|dkr²|ƒnt|||d…ƒdSdS)zdcalculate __getitem__ in terms of an iterable query object
    that also has a slice() method.
 
    cSs tdƒ‚dS)Nz@negative indexes are not accepted by SQL index / slice operators)Ú
IndexErrorrrrrÚ_no_negative_indexesmsÿz&_getitem.<locals>._no_negative_indexesrNéÿÿÿÿr)r—Úslicer5Z decode_sliceÚintrŸÚstep)rþrÿrÚstartÚstoprÚresrrrÚ_getitemgs.
ÿþ
ýÿÿ 
r    rgrv)Úraw_annotationrzÚoriginating_clsr}cCs8zt|||jƒ}Wntk
r(YdSXt|tƒSdSr¾)rFr…Ú    NameErrorrIr)r
rzr Ú    annotatedrrrÚ_is_mapped_annotationŽsÿrc@s eZdZdS)Ú _CleanupErrorN)r„r…r†rrrrr£srrw)r{r|r}c    
s\t d|¡}|s|Szt| d¡|ƒ}Wn@tk
rh}z"td|›d| d¡›dƒ|‚W5d}~XYnXzt|tƒr~|j}n|WSWnt    k
rž|YSXg}|}| 
||kr¸|n| d¡¡| d¡}t d|¡}|dkr¨| 
|¡qðq¨t d|d¡sXt d    |d¡sXd
‰d   ‡fd d „|d  d¡Dƒ¡|d<d  |¡dt |ƒd}|S)Nz^(.+?)\[(.+)\]$rzFor annotation "z%", could not resolve container type "z[".  Please ensure this type is imported at the module level outside of TYPE_CHECKING blocksr1z ^["'].*["']$rz.*\[.*\]z"' r‘c3s |]}d| ˆ¡›dVqdS)ú"N)Ústrip)r”r©Z
stripcharsrrrqósz1_cleanup_mapped_str_annotation.<locals>.<genexpr>rªú[ú])r¯ÚmatchrHrÍr rÚ
issubclassrr„Ú    TypeErrorrÇržr°Úlen)    r{r|ÚmmrÁÚneZ real_symbolr£ÚinnerZg2rrrÚ_cleanup_mapped_str_annotation§sF ÿû
 
 
 
 
ýú ÿ rzOptional[_AnnotationScanType]rãz1Optional[Tuple[Union[type, str], Optional[type]]])
r
rzr|r¼Úattr_clsÚrequiredÚis_dataclass_fieldÚ expect_mappedržr}c    
Csb|dkr2|r.t d|j›d|›d|j›d¡‚dSzt|||td}    Wnztk
r|}
zt d|›d¡|
‚W5d}
~
XYnFtk
rÀ} z(|r¬d    |kr¬t d|›d¡| ‚|}    W5d} ~ XYnX|rÎ|    dfSt|    d
ƒrät|    t    ƒs4|r,t
|    d
dƒt j krdS|s dStjd |j›d|›d d d‚n|    dfSt |    jƒdkrNt d¡‚|    jd|    jfSdS)z¨given an annotation, figure out if it's ``Mapped[something]`` and if
    so, return the ``something`` part.
 
    Includes error raise scenarios and other options.
 
    Nz4Python typing annotation is required for attribute "Ú.z " when primary argument(s) for "z#" construct are None or not presentrˆzCould not interpret annotation zt.  Check that it uses names that are correctly imported at the module level. See chained stack trace for more hints.zMapped[Ú
__origin__zType annotation for "a" can't be correctly interpreted for Annotated Declarative Table form.  ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[].  To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class.Zzlpr)Úcoderz)Expected sub-type for Mapped[] annotationr)rœrr„rFrrr r8rIrr7ÚtypingÚClassVarrÚ__args__r") r
rzr|r¼rrrr ržr ZcerrrrÚ_extract_mapped_subtypeüs`ÿü
 
ÿü 
ÿü ÿ òÿr')rÖT)NN)N)N)TT)´Ú
__future__rr÷Ú    functoolsr¯rÝr$rrrrrrr    r
r r r rrrrrrrr?r®rrÚ_typingrrrrrWrrrrr r!r"r#r$r%r&r'r(r)r*Z
interfacesr+r,r-r.r/Z path_registryr0r2rœr3r4r5Z engine.resultr7r8r9r:r;rær<Z sql._typingr=Zsql.annotationr>Zsql.baser?Z sql.cache_keyr@rAZ sql.elementsrBrCZsql.selectablerDZutil.langhelpersrEZ util.typingrFZ_de_stringify_annotationrGZ_de_stringify_union_elementsrHZ_eval_name_onlyrIrJrKrLrMrNrOrPÚcontextrQrRrôrSrÏrTZ relationshipsrUZenginerVrWrXrYrZr[r\r]r^r_r`rarbrcrdreZ sql.visitorsrfrgrhriÚ    frozensetr³Úpartialr×Z_de_stringify_partialrsr‡r‰rwrŒrÕrìrõÚEnumröZ ColumnAdapterrúrZ InspectablerZ_self_inspectsr&r‰rZ    _inspectsrãr¶Z GenericAliasr¸r¹rÛrÞrßrêràrórörørûrürýr    rÚ    Exceptionrrr'rrrrÚ<module>    sŒ                                                                                                       ÿ ÿ ÿ þKCÿ
SþúZ<5
ÿF
ùQ2 
ûY
3ýO%']÷