o
    g                     @  s  d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 dd	lm
Z
 dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ  ddlmZ ddl!m"Z" ddl#m$Z$ ddl#m%Z% dd l#m&Z& dd!l'm(Z( ddl'mZ) dd"l*m+Z+ dd#l*m,Z, dd$l*m-Z- dd%lm.Z. erdd&l/m0Z0 dd'lm1Z1 dd(l2m3Z3 dd)l4m5Z5 dd*l6m7Z7 dd+l8m9Z9 dd,l:m;Z; dd-l<m=Z= dd.l>m?Z? dd/l#m@Z@ dd0l'mAZA ed1ed2ZBed3eCd2ZDeE ZFeeGeeeGef  f ZHdd:d;ZIeJd<dd>d?ZKejLd@dAdBeJd<	=dddJdKZMddUdVZNdWdWdWdWdXej.ej.dXdXdY	ddldmZOdWdWdWdWdWdXej.ej.dXdXdn
ddsdtZP	W	W	W	W	W	WddudvZQ	W	W	WddwdxZRdydz ZS	W	W	W	Wdd{d|ZTd}d~ ZUdd ZVdd ZWdd ZXdd ZYG dd dZZdd Z[dWS )zprivate module containing functions used to convert database
rows into object instances and associated state.

the functions here are called primarily by Query, Mapper,
as well as some of the attribute loading strategies.

    )annotations)Any)Dict)Iterable)List)Mapping)Optional)Sequence)Tuple)TYPE_CHECKING)TypeVar)Union   )
attributes)exc)path_registry)_DEFER_FOR_STATE)_RAISE_FOR_STATE)_SET_DEFERRED_EXPIRED)PassiveFlag)FromStatement)ORMCompileState)QueryContext)	_none_set)	state_str   )util)result_tuple)ChunkedIteratorResult)FrozenResult)SimpleResultMetaData)select)ForUpdateArg)LABEL_STYLE_TABLENAME_PLUS_COL)SelectState)
EMPTY_DICT)_IdentityKeyType)LoaderCallableStatus)	ORMOption)Mapper)Query)Session)InstanceState)CursorResult)_ExecuteOptions)Result)Select_T)bound_OcursorCursorResult[Any]contextr   returnResult[Any]c                   s  t  _jrdjj_ndi _j}|j}jj o+t|j	dko+|j	d j
z#ttfddjj	D  \}}jrNjsIjrNtdW n! typ   t    W d   n1 siw   Y  Y nw d	d
  ddddd fddjj	D }t|||d}fdd}jddrt|dfdd}t||jjd}	|	jt|d|	_jjrdd }
d|
f|	_ jr|	j |	S )a  Return a :class:`.Result` given an ORM query context.

    :param cursor: a :class:`.CursorResult`, generated by a statement
     which came from :class:`.ORMCompileState`

    :param context: a :class:`.QueryContext` object

    :return: a :class:`.Result` object representing ORM results

    .. versionchanged:: 1.4 The instances() function now uses
       :class:`.Result` objects and has an all new interface.

    FTr   r   c                   s   g | ]}|  qS  )row_processor).0query_entity)r6   r4   r9   X/var/www/html/ecg_monitoring/venv/lib/python3.10/site-packages/sqlalchemy/orm/loading.py
<listcomp>q   s    
zinstances.<locals>.<listcomp>zCan't use yield_per with eager loaders that require uniquing or row buffering, e.g. joinedload() against collections or subqueryload().  Consider the selectinload() strategy for better flexibility in loading objects.Nc                 S  
   t d)Nz@Can't use the ORM yield_per feature in conjunction with unique()sa_excInvalidRequestError)entryr9   r9   r=   
_no_unique      zinstances.<locals>._no_uniquelegacy	uncertainc                  s2   |sfdd}|S st S d  fdd}|S )Nc                   s8   rzt | W S    Y td drdnd d)Nz=Can't apply uniqueness to row tuple containing value of type z; z the values returned appear to bezthis datatype producesz non-hashable values)hashrA   rB   obj)datatyperH   r9   r=   go   s   
z,instances.<locals>._not_hashable.<locals>.goFc                   s$    szt | W S    Y d t| S )NT)rI   idrJ   )_use_idr9   r=   rM      s   
)rN   )rL   rG   rH   rM   r9   )rO   rL   rH   r=   _not_hashable   s   z instances.<locals>._not_hashablec                   sN   g | ]#}j r	 n|js|js|jr|jjjj|jd n|jr#tndqS )rF   N)		yield_peruse_id_for_hash_non_hashable_value_null_column_typecolumntypeload_options_legacy_uniquingrN   r;   ent)rD   rP   r6   r9   r=   r>      s     		)_unique_filtersc                 3  s    	 | }i _ |r|}|sd S n }r'd   fdd|D }n	fdd|D }rg|r;tj }jrZtj }j  |D ]
\}}|| qLjs>|rgj  j| |V  |snd S q)NTr   c                   s   g | ]} |qS r9   r9   )r;   rowprocr9   r=   r>          z-instances.<locals>.chunks.<locals>.<listcomp>c                   s"   g | ] t  fd dD qS )c                   s   g | ]}| qS r9   r9   )r;   r^   r\   r9   r=   r>      r_   z8instances.<locals>.chunks.<locals>.<listcomp>.<listcomp>)tuple)r;   )processr`   r=   r>      s    )	partials	fetchmany_raw_all_rowslistpost_load_pathsitemsclearinvokeupdate)sizerQ   fetchrowstop_level_post_loads
post_loadspath	post_load)r6   r4   is_top_levelrb   single_entityr]   r=   chunks   sD   

	

zinstances.<locals>.chunksprebuffer_rowsc                   s   t  S N)iter)rl   )_prebufferedr9   r=   ru     s   )source_supports_scalarsrawdynamic_yield_per)filteredis_single_entityc                 S  r?   )Nz~The unique() method must be invoked on this Result, as it contains results that include joined eager loads against collectionsr@   rJ   r9   r9   r=   require_unique  rE   z!instances.<locals>.require_unique)!
_new_runidrunidtop_level_contextrg   compile_state_has_mapper_entitiesrW   _only_return_tupleslen	_entitiessupports_single_entityrf   ziprQ   loaders_require_bufferingloaders_require_uniquingrA   rB   	Exceptionr   safe_reraisecloser    execution_optionsgetr   r6   _is_server_side_attributesuniondictmulti_row_eager_loaders_unique_filter_state)r4   r6   r   r}   labelsextraunique_filtersrow_metadataru   resultr   r9   )rD   rP   ry   r6   r4   rs   rb   rt   r=   	instancesN   s   


	

+2

r   zsqlalchemy.orm.contextTc              	     s   t jj |r
|    jj|dd}| j}z\d| _ fddt|jD }dd |jD }t	|dd |jD }g }	|
 D ]*}
|D ]}|
| dur`| jt|
| t|
| |i i d|
|< qB|	||
 q>||	W || _S || _w )	az  Merge a :class:`_engine.FrozenResult` back into a :class:`_orm.Session`,
    returning a new :class:`_engine.Result` object with :term:`persistent`
    objects.

    See the section :ref:`do_orm_execute_re_executing` for an example.

    .. seealso::

        :ref:`do_orm_execute_re_executing`

        :meth:`_engine.Result.freeze`

        :class:`_engine.FrozenResult`

    FrG   c                       g | ]\}}t | jr|qS r9   
isinstance_MapperEntityr;   iequerycontextr9   r=   r>   I      
z'merge_frozen_result.<locals>.<listcomp>c                 S     g | ]}|j qS r9   _label_namerY   r9   r9   r=   r>   N      c                 S  r   r9   _extra_entitiesrY   r9   r9   r=   r>   Q  r   Nload
_recursive_resolve_conflict_map)r   	preloadedorm_context
_autoflushORMSelectCompileState_create_entities_collection	autoflush	enumerater   r   rewrite_rows_merger   instance_stateinstance_dictappendwith_new_rows)session	statementfrozen_resultr   ctxr   mapped_entitieskeyskeyed_tupler   newrowr   r9   r   r=   merge_frozen_result+  s>   


r   z:func:`_orm.merge_result`zyThe function as well as the method on :class:`_orm.Query` is superseded by the :func:`_orm.merge_frozen_result` function.)alternativequery
Query[Any]iterator>Union[FrozenResult, Iterable[Sequence[Any]], Iterable[object]]r   bool"Union[FrozenResult, Iterable[Any]]c              	     sr  t jj| j r  t|tr|}t|j}nd}j	j
| dd}j}zd_| o4t|jdk}|rPt|jd jrK fdd|D }nWt|}nRfd	dt|jD }g }d
d |jD }	t|	dd |jD }
|D ].}t|}|D ]}|| durjt|| t||  i i d||< q{||
| qs|r||W |_S t|W |_S |_w )zMerge a result into the given :class:`.Query` object's Session.

    See :meth:`_orm.Query.merge_result` for top-level documentation on this
    function.

    NTr   Fr   r   c              	     s,   g | ]}j t|t| i i d qS )r   )r   r   r   r   )r;   instance)r   r   r9   r=   r>     s    z merge_result.<locals>.<listcomp>c                   r   r9   r   r   r   r9   r=   r>     r   c                 S  r   r9   r   rY   r9   r9   r=   r>     r   c                 S  r   r9   r   rY   r9   r9   r=   r>     r   r   )r   r   r   r   r   r   r   rx   datar   r   r   r   r   r   rf   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   rt   r   r   r   r   r\   r   r   r9   )r   r   r   r=   merge_resultg  s^   




r   r   r+   mapper
Mapper[_O]key_IdentityKeyType[_O]passiver   )Union[LoaderCallableStatus, Optional[_O]]c                 C  s   | j |}|durJt|}|jr|j|stjS |jrH|tj	@ s&tj
S |tj@ s-|S z	||| W |S  tjyG   | |g Y dS w |S dS )zqLook up the given key in the given session's identity map,
    check the object for expired state if found.

    N)identity_mapr   r   r   inheritsr   isaPASSIVE_CLASS_MISMATCHexpiredSQL_OKPASSIVE_NO_RESULTRELATED_OBJECT_OK_load_expiredorm_excObjectDeletedError_remove_newly_deleted)r   r   r   r   r   stater9   r9   r=   get_from_identity  s&   



r   NF)	rW   refresh_statewith_for_updateonly_load_propsno_autoflushbind_argumentsr   require_pk_colsis_user_refreshr   Union[Select, FromStatement]Optional[_IdentityKeyType]rW   Optional[Sequence[ORMOption]]r   Optional[InstanceState[Any]]r   Optional[ForUpdateArg]r   Optional[Iterable[str]]r   r   Mapping[str, Any]r   r.   r   r   c       	         C  sD   |dur|d }|d }nd }}t | ||||||||||	|
|dS )z.Load the given identity key from the database.Nr   r   
rW   r   r   r   identity_tokenr   r   r   r   r   )load_on_pk_identity)r   r   r   rW   r   r   r   r   r   r   r   r   identr   r9   r9   r=   load_on_ident  s&   
r   r   primary_key_identityOptional[Tuple[Any, ...]]r   Optional[Any]c       
      	     s0  |}|  }|jrJ |du rtj}|jtju rtj}n|j}|duri|j	d }|j
\} d|v rQ fddt|j|D }t||}t|t|krQtd t|ddif|_ fdd	t||jD }nd}|durud}||_n|jdurd}|j|_nd
}|r|rstdjj}fdd||D }|rtd| dj djj}|D ]}|| jr||} nqrՈjr|djj i7 }|j!j }t"||||||d\}}||_d|_#|r|dd
i7 }tj$%|
d|i}
| j&|||
|	d' ( }z|) W S  t*j+y   Y dS w )z6Load the given primary key identity from the database.Nplugin_subjectc                   s"   h | ]\}}|d u r | j qS rw   r   )r;   colvalue_get_paramsr9   r=   	<setcomp>8  s
    z&load_on_pk_identity.<locals>.<setcomp>zofully NULL primary key identity cannot load any object.  This condition may raise an error in a future release.
_orm_adaptTc                   s   i | ]
\}} | j |qS r9   r   )r;   id_valprimary_keyr   r9   r=   
<dictcomp>K  s    
z'load_on_pk_identity.<locals>.<dictcomp>Fz9refresh_state is required when require_pk_cols is presentc                   s    h | ]} j | j r|qS r9   )attrshistoryhas_changes)r;   r   )r   r9   r=   r  d  s    z7Please flush pending primary key changes on attributes z for mapper z! before proceeding with a refresh_current_path)version_checkr   r   r   r   r   _sa_orm_load_options)paramsr   r   ),_clone_is_lambda_elementr   default_load_options_compile_optionsr$   default_select_compile_optionsr   default_compile_options_propagate_attrs_get_clauser   r  sql_utiladapt_criterion_to_nullr   r   warn_deep_annotate_where_criteria_for_update_argrA   ArgumentErrorr   _primary_key_propkeys
differencerB   _props_is_relationshipr   rW   	load_pathparentoptions_set_get_options	_order_byr%   
merge_withexecuteuniquescalarsoner   NoResultFound)r   r   r   rW   r   r   r   r   r   r   r   r   r   r   qcompile_optionsr   r  nonesr  r  refresh_state_prokeysr	  mppnew_compile_optionsr   r9   )r  r   r=   r     s   








"





r   c           
      C  s|   i }i }	|r
||	d< |r||	d< |r||	d< d|d< |r"t ||d< |r(||	d< |r.||	d< |	r4||	7 }|r:| |7 } | |fS )	N_version_check_populate_existing_refresh_stateT_for_refresh_state_only_load_props_identity_token_is_user_refresh)	frozenset)
compile_optload_optpopulate_existingr  r   r   r   r   r-  rW   r9   r9   r=   r$    s(   
r$  c	                 K  s   |r| |}
n|j}
i }|| jd| |o!t|dko!|d j}|
D ]}|r.|j|vr.q$|j| |||f||||d|	 q$|d urZ||jur\|rQ|j	| }n|}|
| d S d S d S )Nmemoized_setupsr   )r   column_collectionmemoized_populatorscheck_for_adapt)_iterate_polymorphic_properties_polymorphic_propertiessetr   r   is_aliased_classr   setuppolymorphic_oncolumnsr   )r   r   r<   rq   adapterr@  with_polymorphicr   polymorphic_discriminatorkwpoly_propertiesquick_populatorsrB  r   pdr9   r9   r=   _setup_entity_query  s@   	
rQ  c                 C  s   t dt| f  d S )Nam  Loading context for %s has changed within a load/refresh handler, suggesting a row refresh operation took place. If this event handler is expected to be emitting row refresh operations within an existing load or refresh operation, set restore_load_context=True when establishing the listener to ensure the context remains unchanged when the event handler completes.)r   r  r   )r   r9   r9   r=   _warn_for_runid_changed  s
   rR  c
                    s  
j j}
d
f}||
j|d}|du rو
j}dur)|
fddD }|jdt}g }g g g g g g d}du rT
j} rN fdd|D }||nd||d	}|D ]r}||v r|| }|t	u rx|d
 
|j|jf q^|tu r|d 
|jdf q^|tu r|d
 
|j|jf q^d} r j| }|dur||d}|s||d}|r|d 
|j|f q^|| |
| | q^|
| q^||
j|| |d }dd | D |d D ]}|| |
|  qjjjjrjj| n|jjjp
jt
jjjt
jjj tjjj!r1jjj!	tj"tj#jj$j%j&j'r_
j(}|dur] rW j| }||nds|	durd|jf}|jv rj| j)dkrj| j*d }nd}
+||	}|r||	urdu sJ |j,rg }|}|r||	ur|
| |j-}|r||	usn|g}|D ] }t./|r͐qt0|||	|}t.1|j2||| qt.3rjdu r
4nd|d 
j5rt6j7nt6j	
fdd}
j8rH|	sHsHfdd}t9|| 
||| |	}|S )z]Produce a mapper level row processor callable
    which processes rows into mapped instances.gettersNc                 3  s    | ]} j | V  qd S rw   )r  )r;   kr   r9   r=   	<genexpr>U  s    

z&_instance_processor.<locals>.<genexpr>r>  )newquickdeferredexpireexistingeagerc                   s   g | ]} j | qS r9   )rI  )r;   c)rJ  r9   r=   r>   l  s    z'_instance_processor.<locals>.<listcomp>)cached_populatorstodoprimary_key_getterrW  rZ  FrX  r^  c                 S  s   i | ]	\}}|t |qS r9   )rf   )r;   r   r   r9   r9   r=   r    s    z'_instance_processor.<locals>.<dictcomp>r_  loader))selectinload_polymorphicTentitiesr`  c              
     s  r}|  }|}|jk}d}d}n[| f}|}|d urG|}|}|jk}| }d}rFrF|sFt	|||  n*|d rOd S d}d}d}	j }|}|}||_|_|_	|| }|u ryd}|s}|r|rs|s|_
|_t | |||||	 |r|j}	|rr|jj|  |j|	krt| r j| |j|	krt| nr|jj| 
 |jkrt| |s|jrr
r||
 n|| r|d |S |j}
| jv}|r|
sd r5t | ||||
}|r5r/|j}	|jj| | |j|	kr/t| ||| rB jrB|d |S )NTFr   r\  )rK   r   r   _validate_version_idclass_managernew_instancer   r   
session_id_add_unpresentrW   r!  _populate_fullmanagerdispatchr   rR  r   refreshmodified_commit_commit_all	add_stateunloadedrc   _populate_partialinvoke_all_eagers)r\   r   r   dict_isnewcurrentloadloaded_instanceidentitykeyeffective_populate_existingexisting_runidrq  to_load)r6   identity_classr   r   r   is_not_primary_keyload_evtr!  loaded_as_persistentr   r   persistent_evtr=  
populatorsrr   r`  propagated_loader_optionsrefresh_evtrefresh_identity_keyr   r   rg  session_identity_mapr  version_id_getterr9   r=   	_instance+  s   



	




%
z&_instance_processor.<locals>._instancec                   s"    | f}|d s|S d S )Nr   r9   )r\   rx  )r|  r   r}  r`  r9   r=   ensure_no_pk  s   z)_instance_processor.<locals>.ensure_no_pk):_identity_classr   r   r   	_prop_setintersectionr%   r  _tuple_getterr   r   r   _deferred_column_loaderr   r   _raise_column_loaderrI  _gettercreate_row_processorrE  rh   r  current_pathrq   r   r   r=  always_refreshr   re  rk  r   rl  r  r   r   hash_keyr   r   r  version_id_colstrategy
local_opts_should_selectin_load	is_mapperr   PostLoadpath_exists_load_subclass_via_incallable_for_pathr   for_context_identity_key_from_stateallow_partial_pksr   
issupersetpolymorphic_map_decorate_polymorphic_switch) r<   r   r6   r   rq   rJ  r   r   rL  _polymorphic_fromr   
getter_keyrS  propsrO  r_  r^  pk_colspropr   getteradapted_colr  r   option_entitiesselectin_load_via_load_supers_endmost_mapper_selectinload_entity	callable_r  r  r9   )rJ  r6   r|  r   r   r   r}  r~  r!  r  r   r   r  r=  r  rr   r`  r  r  r  r   r   rg  r  r  r  r=   _instance_processor+  sP  	









	
< !r  c                   sj   |j |j }|jd u}tjjdk|js|r"||\ nj\  fdd}|S )Nr   c           
        s   sfdd|D }|sd S | j }|jr |} |}n} }|f|j |f }j| }	| jj|	_|	 jd|ji7  _| jrJ|	j	dd}	| j
|	tfdd|D d    d S )Nc                   s$   g | ]\}}|j  r||fqS r9   )r   +_would_selectin_load_only_from_given_mapper)r;   svrU  r9   r=   r>     s    
z:_load_subclass_via_in.<locals>.do_load.<locals>.<listcomp>r
  T)r=  c                   s,   g | ]\}} r|j d  d n|j d  qS )r   r   r   )r;   r   
load_attrs)zero_idxr9   r=   r>   #  s    )primary_keys)r   r"  _prepend_path_with_optionsr#  r   r  r  r=  r   r   r'  r   r(  r)  all)
r6   rq   states	load_onlyeffective_entity
orig_queryenable_opt_lcldisable_opt_lclr#  q2disable_opt
enable_optr   r  r,  r  r9   r=   do_load  s8   




z&_load_subclass_via_in.<locals>.do_load)r   r   r   base_mapperr  rF  _subclass_load_via_in_subclass_load_via_in_mapper)r6   rq   entitypolymorphic_fromr  polymorphic_from_mappernot_against_basemostr  r9   r  r=   r    s   

.r  c	                 C  s  |rQ| j |_ |d D ]
\}	}
|
|||	< q
|r/|d D ]\}	}||	d  |r-|j|	 qn|d D ]\}	}|r?|j|	 q3|d D ]
\}	}|||| qDd S ||jkr}||_|d D ]\}	}
|	|vrk|
|||	< q]|d D ]
\}	}|||| qpd S |d D ]
\}	}|||| qd S )NrX  rZ  rW  r[  )r   popexpired_attributesaddr!  )r6   r\   r   rt  ru  r!  rw  r=  r  r   r  set_callable	populatorr9   r9   r=   ri  -  s<   
ri  c                 C  s  |s0|r|d D ]\}}	||v r|	|||< q| j | }
|d D ]\}}||
v r.|||| q nH|}
|
| j |< |d D ]\}}	||
v rI|	|||< q;|d D ]\}}||
v rd||d  |rd|j| qN|d D ]\}}||
v rw|||| qi|d D ]\}}||vr|||| q||
S )NrX  r[  rZ  rW  r\  )rc   r  r  r  )r6   r\   r   rt  ru  r!  rq  r  r   r  r{  r  r  r9   r9   r=   rr  f  sB   

rr  c              	   C  sD   |  ||| j||kr tdt||  ||| j||f d S )NzWInstance '%s' has version id '%s' which does not match database-loaded version id '%s'.)_get_state_attr_by_columnr  r   StaleDataErrorr   )r   r   rt  r\   r  r9   r9   r=   rd    s    rd  c	                   sr   |d ur|nj d u rS  r j  	
fdd}	t|	
fdd}
|
S )Nc              	     sZ   zj |  }W n ty   td|  w |u rd S |s"dS t| dS )Nz*No such polymorphic_identity %r is definedF)r  )r  KeyErrorAssertionErrorr   r  )discriminator
sub_mapper)rJ  r6   r   rq   r<   r   r9   r=   configure_subclass_mapper  s(   
z?_decorate_polymorphic_switch.<locals>.configure_subclass_mapperc                   s   | }|d ur0| }|r|| S |du r, | }|r*t d|j| f d S | S  | }|r?t d|f d S )NFzRow with identity key %s can't be loaded into an object; the polymorphic discriminator column '%s' refers to %s, which is not a sub-mapper of the requested %szjRow with identity key %s can't be loaded into an object; the polymorphic discriminator column '%s' is NULL)rA   rB   r  )r\   r  r  rx  )r  r  instance_fnr   polymorphic_instancesrH  r9   r=   polymorphic_instance  s6   z:_decorate_polymorphic_switch.<locals>.polymorphic_instance)rH  rI  r   PopulateDictr  )r  r6   r<   r   r   rq   rL  rJ  r  r  r  r9   )rJ  r6   r  r  r  r   rq   r  rH  r<   r   r=   r    s   


&r  c                   @  sP   e Zd ZdZdZdd Zdd Zdd Zed	d
 Z	edd Z
edd ZdS )r  z4Track loaders and states for "post load" operations.)loadersr  	load_keysc                 C  s   i | _ t | _d | _d S rw   )r  r   OrderedDictr  r  )selfr9   r9   r=   __init__  s   

zPostLoad.__init__c                 C  s   || j |< d S rw   )r  )r  r   	overwriter9   r9   r=   rp    s   zPostLoad.add_statec           	        sz   | j sd S tj|}| j D ]%\}} }}} fdd| j  D }|r5||||| jg|R i | q| j   d S )Nc                   s&   g | ]\}}|j j r||fqS r9   )rj  r   r   )r;   r   r  limit_to_mapperr9   r=   r>     s    z#PostLoad.invoke.<locals>.<listcomp>)	r  r   PathRegistrycoercer  valuesrh   r  ri   )	r  r6   rq   effective_contexttokenra  argrM  r  r9   r  r=   rj     s0   

zPostLoad.invokec                 C  s$   |j |j}|d ur|r||_|S rw   )rg   r   rq   r  )clsr6   rq   r   plr9   r9   r=   r    s   zPostLoad.for_contextc                 C  s   |j |jv o||j|j  jv S rw   )rq   rg   r  )r  r6   rq   r   r9   r9   r=   r  $  s   zPostLoad.path_existsc           	      O  sF   |j |jv r|j|j  }n	t  }|j|j < ||||||f|j|< d S rw   )rq   rg   r  r  )	r  r6   rq   r  r  loader_callabler  rM  r  r9   r9   r=   r  +  s   zPostLoad.callable_for_pathN)__name__
__module____qualname____doc__	__slots__r  rp  rj   classmethodr  r  r  r9   r9   r9   r=   r    s    

r  c                   s8  |j }|stdt| t|tj@ }|r| j	 } j
r> js> ||}|dur>t |}t||d|||dS t|j}|rI|j}	n fdd jD }
|j|
rbtdt|  |}	t|	ro jrtt|	r~tdt| dS t|t t|	|||d}|r|du rt|dS dS )	z4initiate a column-based attribute refresh operation.zQInstance %s is not bound to a Session; attribute refresh operation cannot proceedN)r   r   r   c                   s   g | ]} j | jqS r9   )_columntopropertyr   )r;   r   rU  r9   r=   r>   p  s    z*load_scalar_attributes.<locals>.<listcomp>z_Instance %s cannot be refreshed - it's not  persistent and does not contain a full primary key.zwInstance %s to be refreshed doesn't contain a full primary key - can't be refreshed (and shouldn't be expired, either).)r   r   r   )r   r   DetachedInstanceErrorr   r   r   NO_AUTOFLUSHr  r  r   r   concrete_optimized_get_statementr   r   r   r  r  rA   rB   r  r   issubsetr  r  r   warn_limitedr!   set_label_styler#   r   )r   r   attribute_namesr   r   r   r   stmthas_keyidentity_keypk_attrsr   r9   rU  r=   load_scalar_attributes=  sr   





r   )r4   r5   r6   r   r7   r8   )T)r   r   r   r   r   r   r7   r   )
r   r+   r   r   r   r   r   r   r7   r   )r   r+   r   r   r   r   rW   r   r   r   r   r   r   r   r   r   r   r   r   r.   r   r   r   r   )r   r+   r   r   r   r   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r   r   r   r   )NNNNNN)NNN)NNNN)\r  
__future__r   typingr   r   r   r   r   r   r	   r
   r   r   r    r   r   r   r   baser   r   r   r   r6   r   r   r   r   r   r   rA   enginer   engine.resultr   r   r    sqlr!   r  sql.selectabler"   r#   r$   r%   _typingr&   r'   
interfacesr(   r   r)   r   r*   r   r+   r   r,   engine.cursorr-   engine.interfacesr.   r/   r0   r1   objectr3   counterr   str_PopulatorDictr   preload_moduler   became_legacy_20r   r   r   r   r$  rQ  rR  r  r  ri  rr  rd  r  r  r   r9   r9   r9   r=   <module>   s   	
 ^;
T+, <
)
7
   @E9%YH