3
g,                 @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZ G dd dZG dd dZdZdZdS )    N)import_module)get_version)apps)SettingsReference)
migrations)MigrationLoader)
Serializerserializer_factory)get_func_args)
module_dir)nowc               @   s>   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd ZdS )OperationWriter   c             C   s   || _ g | _|| _d S )N)	operationbuffindentation)selfr   r    r   Y/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django/db/migrations/writer.py__init__   s    zOperationWriter.__init__c       
         s
   fdd}t   jj \}}}tjj}tt|d jjkrTjd|  n, j	djjj
  jdjjj
|f  j  x*t|D ]\}}|}|| }	||	| qW t|}x.||d  D ]}	|	|kr||	 }||	| qW j  jd j  fS )Nc                sF  | j jkot|tttfrt|tr
jd|   j  x|j D ]\}}t	j
|\}}t	j
|\}}|j }t|dkr̈jd||d f  x|dd D ]}	j|	 qW jd|d   njd||f   j|  j| qJW j  jd njd|   j  x|D ]x}
t	j
|
\}}|j }t|dkrx |d d D ]}	j|	 q\W jd|d   njd|   j| q&W j  jd	 nt	j
|\}}|j }t|dkr&jd
| |d f  x |dd D ]}	j|	 qW jd|d   njd| |f   j| d S )Nz%s={   z%s: %sr   z%s,z%s: %s,z},z%s=[z],z%s=%sz%s=%s,r   r   r   r   r   )r   Zserialization_expand_args
isinstancelisttupledictfeedindentitemsMigrationWriter	serialize
splitlineslenupdateunindent)Z	_arg_nameZ
_arg_valuekeyvalueZ
key_stringZkey_imports
arg_stringZarg_importsargsargitem)importsr   r   r   _write   sR    

z)OperationWriter.serialize.<locals>._writezmigrations.%s(z	import %sz%s.%s(z),)setr   Zdeconstructr
   r   getattrr   	__class__r   add
__module__r   	enumerater"   r$   render)
r   r,   namer(   kwargsZoperation_argsir)   	arg_valueZarg_namer   )r+   r   r   r       s*    0
zOperationWriter.serializec             C   s   |  j d7  _ d S )Nr   )r   )r   r   r   r   r   i   s    zOperationWriter.indentc             C   s   |  j d8  _ d S )Nr   )r   )r   r   r   r   r$   l   s    zOperationWriter.unindentc             C   s   | j jd| jd  |  d S )N    )r   appendr   )r   liner   r   r   r   o   s    zOperationWriter.feedc             C   s   dj | jS )N
)joinr   )r   r   r   r   r3   r   s    zOperationWriter.renderN)r   )	__name__r1   __qualname__r   r    r   r$   r   r3   r   r   r   r   r      s   
Qr   c               @   sj   e Zd ZdZdddZdd Zedd Zed	d
 Zedd Z	e
dd Ze
dd Ze
dd ZdS )r   zj
    Take a Migration instance and is able to produce the contents
    of the migration file from it.
    Tc             C   s   || _ || _d| _d S )NF)	migrationinclude_headerneeds_manual_porting)r   r@   rA   r   r   r   r   |   s    zMigrationWriter.__init__c             C   s  ddd}t  }g }x4| jjD ](}t|j \}}|j| |j| qW |r\dj|d nd|d< g }xR| jjD ]F}|d dkr|jd|d   |j	d	 qr|jd
| j|d   qrW |rdj|d nd|d< t  }	xDt
|D ]8}
tjd|
r|	j	|
jdd j  |j|
 d| _qW d|krB|jd |j	d n
|j	d t|dd d}|rpdj|d nd|d< |	r|d  ddjt|	 7  < | jjrd| j| jjd  |d< | jrtt t jdd |d< nd|d< | jjr d|d< t| S )z%Return a string of the file contents. )replaces_strinitial_strr<   
operationsr   Z__setting__z5        migrations.swappable_dependency(settings.%s),r   z from django.conf import settingsz        %s,dependenciesz^import (.*)\.\d+[^\s]*$importTzfrom django.db import modelsz(from django.db import migrations, modelsz from django.db import migrationsc             S   s   | j  d S )Nr   )split)r6   r   r   r   <lambda>   s    z+MigrationWriter.as_string.<locals>.<lambda>)r%   r+   z

# Functions from the following migrations need manual copying.
# Move them and any dependencies into this file, then update the
# RunPython operations to refer to the local versions:
# %sz
# z
    replaces = %s
rD   z%Y-%m-%d %H:%M)version	timestampZmigration_headerz
    initial = True
rE   )r-   r@   rF   r   r    r#   r:   r=   rG   r0   r   rematchrI   stripremoverB   discardsortedZreplacesrA   MIGRATION_HEADER_TEMPLATEr   r   strftimeinitialMIGRATION_TEMPLATE)r   r   r+   rF   r   Zoperation_stringZoperation_importsrG   
dependencyZmigration_importsr;   Zsorted_importsr   r   r   	as_string   sT    







zMigrationWriter.as_stringc          #   C   s  t j| jj\}}|d kr*td| jj yt|}W n tk
rJ   Y n X yt|S  tk
rh   Y nX tj	| jj}|j
d\}}}|j|krtjj|j|S |jdg  }}x|r&|jd|jd
 ytdj|}	W n ttfk
 r   wY qX yt|	}
W n tk
r    wY qX P qW td| tjj|
f| }tj|dd x<|D ]4}tjj|
|}
ttjj|
dd	 W d Q R X qZW |S )NztDjango can't create migrations for app '%s' because migrations have been disabled via the MIGRATION_MODULES setting..r   r   zCould not locate an appropriate location to create migrations package %s. Make sure the toplevel package exists and can be imported.T)exist_okz__init__.pywr   )r   migrations_moduler@   Z	app_label
ValueErrorr   ImportErrorr   r   Zget_app_config
rpartitionr4   ospathr=   rI   insertpopmakedirsopen)r   Zmigrations_package_name_r\   Z
app_configZmaybe_app_nameZmigrations_package_basenameZexisting_dirsZmissing_dirsbase_modulebase_dirZ	final_dirZmissing_dirr   r   r   basedir   sN    

zMigrationWriter.basedirc             C   s   d| j j S )Nz%s.py)r@   r4   )r   r   r   r   filename  s    zMigrationWriter.filenamec             C   s   t jj| j| jS )N)r`   ra   r=   ri   rj   )r   r   r   r   ra   	  s    zMigrationWriter.pathc             C   s   t |j S )N)r	   r    )clsr&   r   r   r   r      s    zMigrationWriter.serializec             C   s   t j|| d S )N)r   register)rk   type_
serializerr   r   r   register_serializer  s    z#MigrationWriter.register_serializerc             C   s   t j| d S )N)r   
unregister)rk   rm   r   r   r   unregister_serializer  s    z%MigrationWriter.unregister_serializerN)T)r>   r1   r?   __doc__r   rX   propertyri   rj   ra   classmethodr    ro   rq   r   r   r   r   r   v   s   
H<r   z4# Generated by Django %(version)s on %(timestamp)s

z%(migration_header)s%(imports)s

class Migration(migrations.Migration):
%(replaces_str)s%(initial_str)s
    dependencies = [
%(dependencies)s    ]

    operations = [
%(operations)s    ]
)r`   rM   	importlibr   Zdjangor   Zdjango.appsr   Zdjango.confr   Z	django.dbr   Zdjango.db.migrations.loaderr   Zdjango.db.migrations.serializerr   r	   Zdjango.utils.inspectr
   Zdjango.utils.module_loadingr   Zdjango.utils.timezoner   r   r   rS   rV   r   r   r   r   <module>   s    d (