Viewing File: /opt/alt/python35/lib64/python3.5/site-packages/playhouse/__pycache__/djpeewee.cpython-35.opt-1.pyc



R6W@sdZddlmZddlZddlTejdZGdddeZGdd	d	e	Z
yddlZe
jZ
Wnek
rYnXdS)
zE
Simple translation of Django model classes to peewee model classes.
)partialN)*zpeewee.playhouse.djpeeweec@seZdZddZdS)AttrDictcCs||S)N)selfattrrr/djpeewee.py__getattr__szAttrDict.__getattr__N)__name__
__module____qualname__r	rrrrrsrc@sUeZdZddZddZddZdddd	d
ZddZdS)
DjangoTranslatorcCs|j|_dS)N)get_django_field_map
_field_map)rrrr__init__szDjangoTranslator.__init__cCsddlm}|jtf|jtf|jtf|jtf|jtf|jtf|j	t	f|j
tf|jtf|jtf|j
ttddf|jtf|jtf|jjtfgS)Nr)fieldsnullT)django.db.modelsrZ	AutoFieldZPrimaryKeyFieldZBigIntegerFieldZBooleanFieldZ	CharFieldZ
DateTimeFieldZ	DateFieldZDecimalFieldZ
FilePathFieldZ
FloatFieldIntegerFieldZNullBooleanFieldrZ	TextFieldZ	TimeFieldrelatedZ
ForeignKeyForeignKeyField)rdjfrrrrsz%DjangoTranslator.get_django_field_mapcCs:d}x-|jD]"\}}t||r|}PqW|S)N)r
isinstance)rfield	convertedZdjango_fieldZpeewee_fieldrrr
convert_field'szDjangoTranslator.convert_fieldNFcCs;|r||krdS|dkr(d}ddlm}|j}|j|jrWdSd||j<i}dd}	xt|jd|	D]m}
|j|
}|tkr|dkr|
jj	}|jj}
|
|kr
d||
<|j
||d|dd|d	|||
dkrOtjd
|
j
|
td|
j||
j
<q|
jjpd|
j}|jdrd
||
j
|jdf}t||
d|d|
j||
j
<qtd|
j||
j
<q|r|d|
j||
j
<qWt|jtf|}|j|j_d|jj_|||j<|rydd|jD}Wn+tk
rdd|jD}YnXxO|D]G\}}|jj|krq|j
||d|dd|d	|qWxQ|jD]F}t||jj sq|j
|jj!|d|d|d	|qWdS)Nr)rcSs|jrdpd|fS)Nrr)r)rrrr<lambda>Csz3DjangoTranslator._translate_model.<locals>.<lambda>key	max_depthbackrefsexcludezCycle detected: %s: %s	db_column+z
__%s:%s:%srelated_namez%scSsg|]}||jfqSr)model).0frrr
<listcomp>{s	z5DjangoTranslator._translate_model.<locals>.<listcomp>cSsGg|]=}|js|jr|jr|jr||jjfqSr)Zone_to_manyZ
one_to_oneZauto_createdZconcreterr%)r&r'rrrr(~s	)"rrZ_metagetZobject_namesortedrrZrelZto_translate_modelloggerwarnnamercolumnr$Zrelated_query_nameendswithstripr"typeZModelZdb_tableZdatabaseZ
interpolationZget_all_related_objectsAttributeErrorZ
get_fieldsmany_to_manyrrZManyToManyFieldZthrough)rr%mappingrr r!roptionsZattrsZ	field_keyZmodel_fieldrZ
related_modelZ
model_namer$klassZall_relatedZrel_objr5rrrr,/s	


	


	

	z!DjangoTranslator._translate_modelc	
Ost}|jdd}|jdd}|jdd}|jdd}|rm|rmtdn'|s|d	}n|r|dkrd}x0|D](}|j||d|d|d|qW|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())
        recurseTrNr Fr!z9Error, you cannot specify a max_depth when recurse=False.rrr))rr*
ValueErrorr,)	rZmodelsr7r6r9rr r!r%rrrtranslate_modelss&!	
	
z!DjangoTranslator.translate_models)r
rrrrrr,r;rrrrr
sdr
)__doc__	functoolsrloggingZpeewee	getLoggerr-dictrobjectr
Zdjangor;	translateImportErrorrrrr<module>s


Back to Directory File Manager