File: //opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/orm/__pycache__/events.cpython-37.pyc
B
��4]�p � @ sZ d Z ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlm Z dd l
mZ dd
lm
Z
ddlmZ ddlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ G dd� dej�ZG dd� de�ZG dd� dej�ZG dd� dej�ZG dd� de�ZG dd� dej�ZG dd� de�ZG d d!� d!ej�Z G d"d#� d#ej�Z!G d$d%� d%ej�Z"dS )&zORM event interfaces.
� N� )�instrumentation)�
interfaces)� mapperlib)�QueryableAttribute)�_mapper_or_none)�Query)�scoped_session)�Session)�sessionmaker� )�event)�exc)�util)�inspect_getfullargspecc s` e Zd ZdZdZejZedd� �Z eddd��Z
e� fdd ��Zd
d� Zdd
� Z
dd� Z� ZS )�InstrumentationEventsa Events related to class instrumentation events.
The listeners here support being established against
any new style class, that is any object that is a subclass
of 'type'. Events will then be fired off for events
against that class. If the "propagate=True" flag is passed
to event.listen(), the event will fire off for subclasses
of that class as well.
The Python ``type`` builtin is also accepted as a target,
which when used has the effect of events being emitted
for all classes.
Note the "propagate" flag here is defaulted to ``True``,
unlike the other class level events where it defaults
to ``False``. This means that new subclasses will also
be the subject of these events, when a listener
is established on a superclass.
Z
SomeBaseClassc C s t |t�rt|�S d S d S )N)�
isinstance�type�_InstrumentationEventsHold)�cls�target� r �H/opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/orm/events.py�_accept_with5 s
z"InstrumentationEvents._accept_withTc s` |j |j|j ��� � ��fdd����fdd�}t��j|��|�tj�� ��j
f |� d S )Nc s@ �� }�r"t | |�r"� | f|�� S �s<| |kr<� | f|�� S d S )N)�
issubclass)Z
target_cls�argZ
listen_cls)�fn� propagater r r �listenD s
z-InstrumentationEvents._listen.<locals>.listenc s, t j�d � �tj�}ttjj� ��|� d S )N)r
�registryZ _EventKeyr �_instrumentation_factory�getattr�dispatch�remove)�ref�key)�
identifierr r r r# K s z-InstrumentationEvents._listen.<locals>.remove)�dispatch_targetr&