o
    h                     @  s  d Z ddlmZ ddlZddlmZ ddlmZ ddlmZ ddlmZ eded	ef d
Z	er1d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/Z0 ddlm1Z2 ddlm3Z4 ddlm5Z6 dd lm7Z8 dd!l9m:Z; dd"l9m<Z= dd#l9m>Z? dd$l9m@ZA dd%l9mBZC dd&l9mDZE dd'l9mFZG dd(l9mHZI dd)l9mJZK dd l9m7ZL eZeZMeZNeZOeZPeZQe ZReZSeZeZTe"ZUe$ZVe(ZWe&ZXe*ZYe,ZZe.Z[e0Z\e4Z]e6Z^e2Z_e8Z`e;Zae=Zbe?ZceAZdeCZeeGZfeKZgeEZheIZieLZjG d*d+ d+Zkek ZleljmZmeljnZndS ),zRsupplies the "preloaded" registry to resolve circular module imports at
runtime.

    )annotationsN)Any)Callable)TYPE_CHECKING)TypeVar_FN.)bound)dialects)orm)cursor)default)
reflection)result)url)
attributes)base)clsregistry)decl_api)	decl_base)
dependency)descriptor_props)	mapperlib)
properties)relationships)session)state)
strategies)strategy_options)util)default_comparator)dml)elements)	functions)naming)schema)
selectable)sqltypes)
traversalsc                   @  s.   e Zd ZdZdddZdd	d
ZdddZdS )_ModuleRegistrya  Registry of modules to load in a package init file.

    To avoid potential thread safety issues for imports that are deferred
    in a function, like https://bugs.python.org/issue38884, these modules
    are added to the system module cache by importing them after the packages
    has finished initialization.

    A global instance is provided under the name :attr:`.preloaded`. Use
    the function :func:`.preload_module` to register modules to load and
    :meth:`.import_prefix` to load all the modules that start with the
    given path.

    While the modules are loaded in the global module cache, it's advisable
    to access them using :attr:`.preloaded` to ensure that it was actually
    registered. Each registered module is added to the instance ``__dict__``
    in the form `<package>_<module>`, omitting ``sqlalchemy`` from the package
    name. Example: ``sqlalchemy.sql.util`` becomes ``preloaded.sql_util``.
    sqlalchemy.c                 C  s   t  | _|| _d S N)setmodule_registryprefix)selfr-    r/   m/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/sqlalchemy/util/preloaded.py__init__r   s   
z_ModuleRegistry.__init__depsstrreturnCallable[[_FN], _FN]c                 G  s   | j | dd S )zAdds the specified modules to the list to load.

        This method can be used both as a normal function and as a decorator.
        No change is performed to the decorated object.
        c                 S  s   | S r*   r/   )fnr/   r/   r0   <lambda>}   s    z0_ModuleRegistry.preload_module.<locals>.<lambda>)r,   update)r.   r2   r/   r/   r0   preload_modulev   s   z_ModuleRegistry.preload_modulepathNonec                 C  sv   | j D ]5}| jr|| jd dd}n|}|r||r8|| jvr8t|t t  t	j
|  | j|< t |< qdS )z\Resolve all the modules in the registry that start with the
        specified path.
        ._N)r,   r-   splitreplace
startswith__dict__
__import__globalslocalssysmodules)r.   r:   modulekeyr/   r/   r0   import_prefix   s   

z_ModuleRegistry.import_prefixN)r)   )r2   r3   r4   r5   )r:   r3   r4   r;   )__name__
__module____qualname____doc__r1   r9   rJ   r/   r/   r/   r0   r(   ^   s
    

	r(   )orN   
__future__r   rF   typingr   r   r   r   r   
sqlalchemyr	   	_dialectsr
   _ormsqlalchemy.enginer   _engine_cursorr   _engine_defaultr   _engine_reflectionr   _engine_resultr   _engine_urlsqlalchemy.ormr   _orm_attributesr   	_orm_baser   _orm_clsregistryr   _orm_decl_apir   _orm_decl_baser   _orm_dependencyr   _orm_descriptor_propsr   _orm_mapperr   _orm_propertiesr   _orm_relationshipsr   _orm_sessionr   
_orm_stater   _orm_strategiesr   _orm_strategy_optionsr   	_orm_utilsqlalchemy.sqlr   _sql_default_comparatorr    _sql_dmlr!   _sql_elementsr"   _sql_functionsr#   _sql_namingr$   _sql_schemar%   _sql_selectabler&   _sql_sqltypesr'   _sql_traversals	_sql_utilengine_cursorengine_defaultengine_reflectionengine_result
engine_urlorm_clsregistryorm_baseorm_attributesorm_decl_apiorm_decl_baseorm_descriptor_propsorm_dependency
orm_mapperorm_propertiesorm_relationshipsorm_sessionorm_strategiesorm_strategy_options	orm_stateorm_utilsql_default_comparatorsql_dmlsql_elementssql_functions
sql_namingsql_selectablesql_traversals
sql_schemasql_sqltypessql_utilr(   _regr9   rJ   r/   r/   r/   r0   <module>   s   1
