File: //opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/orm/__pycache__/util.cpython-37.pyc
B
��4];� � @ s> d dl Z d dlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z dd lm
Z
dd
lmZ ddlmZ ddlm
Z
dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ed�ZG dd� de�Z dd� Z!dMd!d"�Z"d#d$� Z#G d%d&� d&ej$�Z%G d'd(� d(e&�Z'G d)d*� d*e
�Z(e�)e'�d+d,� � e�)e(�d-d,� � dNd/d0�Z*dOd1d2�Z+dPd3d4�Z,d5d6� Z-d7d8� Z.G d9d:� d:ej/�Z0dQd;d<�Z1dRd=d>�Z2dSd?d@�Z3dAdB� Z4dCdD� Z5dEdF� Z6dGdH� Z7dIdJ� Z8dKdL� Z9dS )T� N� )�
attributes)�_class_to_mapper)�
_never_set)� _none_set)�
attribute_str)�class_mapper)�InspectionAttr)�instance_str)�
object_mapper)�object_state)�state_attribute_str)�state_class_str)� state_str)�MapperProperty)�PropComparator)�PathRegistry� )�event)�exc)�
inspection)�sql)�util)�
expression)�deletez
delete-orphan�all�merge�expungezsave-updatezrefresh-expire�nonec @ sD e Zd ZdZe�dddg�ZeZdZdd� Z dd � Z
ed
d� �ZdS )
�CascadeOptionsz9Keeps track of the options sent to relationship().cascader r z
delete-orphan)�save_updater �refresh_expirer r �
delete_orphanc
C s� t |tj�s|d kr| �|�S t|�}|�| j�r\t�dd� dd� t
|�| j��D �� ��d|krp|�| j� d|kr�|�
� |�d� t�t|�}d|k|_d|k|_d |k|_d
|k|_d|k|_d|k|_|jr�|js�t�d
� |S )NzInvalid cascade option(s): %sz, c S s g | ]}t |��qS � )�repr)�.0�xr# r# �F/opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/orm/util.py�
<listcomp>M s z*CascadeOptions.__new__.<locals>.<listcomp>r r zsave-updater zrefresh-expirer r z
delete-orphanz5The 'delete-orphan' cascade option requires 'delete'.)�
isinstancer �string_types�from_string�set�
difference�_allowed_cascades�sa_exc�
ArgumentError�join�sorted�update�_add_w_all_cascades�clear�discard� frozenset�__new__r r r r! r r r"