# sqlalchemy/inspect.py # Copyright (C) 2005-2021 the SQLAlchemy authors and contributors # <see AUTHORS file> # # This module is part of SQLAlchemy and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php """The inspection module provides the :func:`_sa.inspect` function, which delivers runtime information about a wide variety of SQLAlchemy objects, both within the Core as well as the ORM. The :func:`_sa.inspect` function is the entry point to SQLAlchemy's public API for viewing the configuration and construction of in-memory objects. Depending on the type of object passed to :func:`_sa.inspect`, the return value will either be a related object which provides a known interface, or in many cases it will return the object itself. The rationale for :func:`_sa.inspect` is twofold. One is that it replaces the need to be aware of a large variety of "information getting" functions in SQLAlchemy, such as :meth:`_reflection.Inspector.from_engine`, :func:`.orm.attributes.instance_state`, :func:`_orm.class_mapper`, and others. The other is that the return value of :func:`_sa.inspect` is guaranteed to obey a documented API, thus allowing third party tools which build on top of SQLAlchemy configurations to be constructed in a forwards-compatible way. """ from . import exc from . import util _registrars = util.defaultdict(list) def inspect(subject, raiseerr=True): """Produce an inspection object for the given target. The returned value in some cases may be the same object as the one given, such as if a :class:`_orm.Mapper` object is passed. In other cases, it will be an instance of the registered inspection type for the given object, such as if an :class:`_engine.Engine` is passed, an :class:`_reflection.Inspector` object is returned. :param subject: the subject to be inspected. :param raiseerr: When ``True``, if the given subject does not correspond to a known SQLAlchemy inspected type, :class:`sqlalchemy.exc.NoInspectionAvailable` is raised. If ``False``, ``None`` is returned. """ type_ = type(subject) for cls in type_.__mro__: if cls in _registrars: reg = _registrars[cls] if reg is True: return subject ret = reg(subject) if ret is not None: break else: reg = ret = None if raiseerr and (reg is None or ret is None): raise exc.NoInspectionAvailable( "No inspection system is " "available for object of type %s" % type_ ) return ret def _inspects(*types): def decorate(fn_or_cls): for type_ in types: if type_ in _registrars: raise AssertionError( "Type %s is already " "registered" % type_ ) _registrars[type_] = fn_or_cls return fn_or_cls return decorate def _self_inspects(cls): _inspects(cls)(True) return cls
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
connectors | Folder | 0755 |
|
|
databases | Folder | 0755 |
|
|
dialects | Folder | 0755 |
|
|
engine | Folder | 0755 |
|
|
event | Folder | 0755 |
|
|
ext | Folder | 0755 |
|
|
orm | Folder | 0755 |
|
|
pool | Folder | 0755 |
|
|
sql | Folder | 0755 |
|
|
testing | Folder | 0755 |
|
|
util | Folder | 0755 |
|
|
__init__.py | File | 4.68 KB | 0644 |
|
cprocessors.cpython-311-x86_64-linux-gnu.so | File | 18.89 KB | 0755 |
|
cresultproxy.cpython-311-x86_64-linux-gnu.so | File | 23.58 KB | 0755 |
|
cutils.cpython-311-x86_64-linux-gnu.so | File | 12.35 KB | 0755 |
|
events.py | File | 52.37 KB | 0644 |
|
exc.py | File | 17.46 KB | 0644 |
|
inspection.py | File | 2.96 KB | 0644 |
|
interfaces.py | File | 12.44 KB | 0644 |
|
log.py | File | 6.55 KB | 0644 |
|
processors.py | File | 5.61 KB | 0644 |
|
schema.py | File | 2.41 KB | 0644 |
|
types.py | File | 3.3 KB | 0644 |
|