Your IP : 216.73.217.85


Current Path : /opt/alt/python35/lib64/python3.5/site-packages/playhouse/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/site-packages/playhouse/__pycache__/djpeewee.cpython-35.pyc



R6�W��@s�dZddlmZddlZddlTejd�ZGdd�de�ZGdd	�d	e	�Z
yddlZe
�jZ
Wnek
r�YnXdS)
zE
Simple translation of Django model classes to peewee model classes.
�)�partialN)�*zpeewee.playhouse.djpeeweec@seZdZdd�ZdS)�AttrDictcCs||S)N�)�self�attrrr�E/opt/alt/python35/lib64/python3.5/site-packages/playhouse/djpeewee.py�__getattr__szAttrDict.__getattr__N)�__name__�
__module__�__qualname__r	rrrrrsrc@sUeZdZdd�Zdd�Zdd�Zdddd	d
�Zdd�ZdS)
�DjangoTranslatorcCs|j�|_dS)N)�get_django_field_map�
_field_map)rrrr�__init__szDjangoTranslator.__init__cCs�ddlm}|jtf|jtf|jtf|jtf|jtf|jtf|j	t	f|j
tf|jtf|jtf|j
ttdd�f|jtf|jtf|jjtfgS)Nr)�fields�nullT)�django.db.modelsrZ	AutoField�PrimaryKeyField�BigIntegerField�BooleanField�	CharField�
DateTimeField�	DateField�DecimalFieldZ
FilePathField�
FloatField�IntegerFieldZNullBooleanFieldr�	TextField�	TimeField�relatedZ
ForeignKey�ForeignKeyField)r�djfrrrrsz%DjangoTranslator.get_django_field_mapcCs:d}x-|jD]"\}}t||�r|}PqW|S)N)r�
isinstance)r�field�	convertedZdjango_fieldZpeewee_fieldrrr�
convert_field'szDjangoTranslator.convert_fieldNFcCs;|r||krdS|dkr(d}ddlm}|j}|j|j�rWdSd||j<i}dd�}	x�t|jd|	�D]m}
|j|
�}|tkr�|dkr�|
jj	}|jj}
|
|kr
d||
<|j
||d|dd|d	|�||
dkrOtjd
|
j
|
�td|
j�||
j
<q�|
jjpd|
j�}|jd�r�d
||
j
|jd�f}t||
d|d|
j�||
j
<q�td|
j�||
j
<q�|r�|d|
j�||
j
<q�Wt|jtf|�}|j|j_d|jj_|||j<|r�ydd�|j�D�}Wn+tk
r�dd�|j�D�}YnXxO|D]G\}}|jj|kr�q�|j
||d|dd|d	|�q�WxQ|jD]F}t||jj �sq�|j
|jj!|d|d|d	|�q�WdS)N�r)rcSs|jrdpd|fS)Nr&r)r)r#rrr�<lambda>Csz3DjangoTranslator._translate_model.<locals>.<lambda>�key�	max_depth�backrefs�excludezCycle detected: %s: %s�	db_column�+z
__%s:%s:%s�related_namez%scSsg|]}||jf�qSr)�model)�.0�frrr�
<listcomp>{s	z5DjangoTranslator._translate_model.<locals>.<listcomp>cSsGg|]=}|js|jr|jr|jr||jjf�qSr)Zone_to_manyZ
one_to_oneZauto_createdZconcreter#r/)r0r1rrrr2~s	���)"rr�_meta�getZobject_name�sortedr%r �relZto�_translate_model�logger�warn�namer�columnr.Zrelated_query_name�endswith�stripr,�type�Model�db_table�database�
interpolationZget_all_related_objects�AttributeErrorZ
get_fields�many_to_manyr"rZManyToManyFieldZthrough)rr/�mappingr)r*r+r!�options�attrsZ	field_keyZmodel_fieldr$Z
related_modelZ
model_namer.�klassZall_relatedZrel_objrErrrr8/s�	


	


	

	z!DjangoTranslator._translate_modelc	
Os�t�}|jdd�}|jdd�}|jdd�}|jdd�}|rm|rmtd��n'|s|d	}n|r�|dkr�d}x0|D](}|j||d|d|d|�q�W|S)av
        Generate a group of peewee models analagous to the provided Django
        models for the purposes of creating queries.

        :param model: A Django model class.
        :param options: A dictionary of options, see note below.
        :returns: A dictionary mapping model names to peewee model classes.
        :rtype: dict

        Recognized options:
            `recurse`: Follow foreign keys (default: True)
            `max_depth`: Max depth to recurse (default: None, unlimited)
            `backrefs`: Follow backrefs (default: False)
            `exclude`: A list of models to exclude

        Example::

            # Map Django models to peewee models. Foreign keys and M2M will be
            # traversed as well.
            peewee = translate(Account)

            # Generate query using peewee.
            PUser = peewee['User']
            PAccount = peewee['Account']
            query = (PUser
                     .select()
                     .join(PAccount)
                     .where(PAccount.acct_type == 'foo'))

            # Django raw query.
            users = User.objects.raw(*query.sql())
        �recurseTr)Nr*Fr+z9Error, you cannot specify a max_depth when recurse=False.rr&r3)rr5�
ValueErrorr8)	r�modelsrGrFrJr)r*r+r/rrr�translate_models�s&!	
	
z!DjangoTranslator.translate_models)r
rrrrr%r8rMrrrrr
sdr
)�__doc__�	functoolsr�logging�peewee�	getLoggerr9�dictr�objectr
ZdjangorM�	translate�ImportErrorrrrr�<module>s
�