관리-도구
편집 파일: reflection.cpython-38.pyc
U -?�fw% � @ 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. e�r dd&l/m0Z0 dd'l/m1Z1 dd(l/m2Z2 dd)l/m3Z3 dd*l/m4Z4 dd+l/m5Z5 dd,l/m6Z6 dd-l/m7Z7 dd.l/m8Z8 ed/�Z9e j:d0d1d2d3d3d/d4�d5d6��Z;d7d8d9�d:d;�Z<e G d<d=� d=e��Z=e G d>d?� d?e��Z>ej?G d@dA� dAej@dA ��ZAe.G dBdC� dC��ZBeG dDdE� dE��ZCdS )Fa� 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)� TextClause)� TypeEngine)�InternalTraversal)�topological)�final)�Dialect)�ReflectedCheckConstraint)�ReflectedColumn)�ReflectedForeignKeyConstraint)�ReflectedIndex)�ReflectedPrimaryKeyConstraint)�ReflectedTableComment)�ReflectedUniqueConstraint)�TableKey�_R�Callable[..., _R]r% r r ��fn�self�con�args�kw�returnc s� |� dd �}|d kr&| ||f|�|�S ddh� | jtdd� |D ��t� fdd�|�� D ��f}|� |�}|d kr�| ||f|�|�}|||<