?????????? ????????? - ??????????????? - /home/agenciai/.local/lib/python3.9/site-packages/sqlalchemy/engine/__pycache__/reflection.cpython-39.pyc
???????
a ��Jh-' � @ s� d Z ddlmZ ddlZddlmZ ddlmZ ddlmZ ddlm Z ddl mZ dd l mZ dd l m Z ddl mZ ddl mZ dd l mZ ddl mZ ddl mZ ddl mZ ddl mZ ddl mZ ddl mZ ddl mZ ddl mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z ddlm!Z! ddlm"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/ e�rdd'l0m1Z1 dd(l0m2Z2 dd)l0m3Z3 dd*l0m4Z4 dd+l0m5Z5 dd,l0m6Z6 dd-l0m7Z7 dd.l0m8Z8 dd/l0m9Z9 ed0�Z:e j;d1d2d3d4d4d0d5�d6d7��Z<d8d9d:�d;d<�Z=e G d=d>� d>e��Z>e G d?d@� d@e��Z?ej@G dAdB� dBejAdB ��ZBe/G dCdD� dD��ZCeG dEdF� dF��ZDdS )Ga� Provides an abstraction for obtaining database schema information. Usage Notes: Here are some general conventions when accessing the low level inspector methods such as get_table_names, get_columns, etc. 1. Inspector methods return lists of dicts in most cases for the following reasons: * They're both standard types that can be serialized. * Using a dict instead of a tuple allows easy expansion of attributes. * Using a list for the outer structure maintains order and is easy to work with (e.g. list comprehension [d['name'] for d in cols]). 2. Records that contain a name, such as the column name in a column record use the key 'name'. So for most return values, each record will have a 'name' attribute.. � )�annotationsN)� dataclass)�auto)�Flag)�unique)�Any)�Callable)� Collection)�Dict)� Generator)�Iterable)�List)�Optional)�Sequence)�Set)�Tuple)� TYPE_CHECKING)�TypeVar)�Union� )� Connection)�Engine� )�exc)� inspection)�sql)�util)� operators)�schema)�_ad_hoc_cache_key_from_args)�quoted_name)� TextClause)� TypeEngine)�InternalTraversal)�topological)�final)�Dialect)�ReflectedCheckConstraint)�ReflectedColumn)�ReflectedForeignKeyConstraint)�ReflectedIndex)�ReflectedPrimaryKeyConstraint)�ReflectedTableComment)�ReflectedUniqueConstraint)�TableKey�_R�Callable[..., _R]r&