U
    ߟi,                     @   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   Q/var/www/SKSBV.IN/venv/lib/python3.8/site-packages/django/db/migrations/writer.py__init__   s    zOperationWriter.__init__c           
         s   fdd}t   j \}}}tjj}tt|d jjkrTd|  n, 	djjj
  djjj
|f    t|D ]\}}|}|| }	||	| qt|}||d  D ]}	|	|kr||	 }||	| qĈ  d   fS )Nc                    s4  | j jkrt|tttfrt|trd|     | D ]\}}t	
|\}}t	
|\}}| }t|dkrȈd||d f  |dd D ]}	|	 qd|d   nd||f   |  | qJ  d nd	|     |D ]t}
t	
|
\}}| }t|dkrx|d d D ]}	|	 qRd|d   nd|   | q  d
 nt	
|\}}| }t|dkrd| |d f  |dd D ]}	|	 qd|d   nd| |f   | d S )Nz%s={   z%s: %sr   z%s,z%s: %s,z},z%s=[z],z%s=%sz%s=%s,)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   sV     
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!      s*    1
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 r:   r;   r<   r   r   r   r%   l   s    zOperationWriter.unindentc                 C   s   | j d| jd  |  d S )N    )r   appendr   )r   liner   r   r   r   o   s    zOperationWriter.feedc                 C   s   d | jS )N
)joinr   r<   r   r   r   r5   r   s    zOperationWriter.renderN)r   )	__name__r3   __qualname__r   r!   r   r%   r   r5   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   rE   rF   r   r   r   r   |   s    zMigrationWriter.__init__c                 C   s  ddd}t  }g }| jjD ](}t| \}}|| || q|rXd|d nd|d< g }| jjD ]F}|d dkr|d|d   |	d	 ql|d
| |d   ql|rd|d nd|d< t  }	t
|D ]8}
td|
r|		|
dd   ||
 d| _qd|kr6|d |	d n
|	d t|dd d}|rdd|d nd|d< |	r|d  ddt|	 7  < | jjrd| | jjd  |d< | jrtt t dd |d< nd|d< | jjrd|d< t| S )z%Return a string of the file contents. )replaces_strinitial_strrA   
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   |   d S r:   )split)r8   r   r   r   <lambda>       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
rI   z%Y-%m-%d %H:%M)version	timestampZmigration_headerz
    initial = True
rJ   )r/   rE   rK   r   r!   r$   r?   rB   rL   r2   r   rematchrN   stripremoverG   discardsortedZreplacesrF   MIGRATION_HEADER_TEMPLATEr   r   strftimeinitialMIGRATION_TEMPLATE)r   r   r-   rK   r   Zoperation_stringZoperation_importsrL   
dependencyZmigration_importsr@   Zsorted_importsr   r   r   	as_string   sd    







zMigrationWriter.as_stringc              
   C   s  t | jj\}}|d kr*td| jj zt|}W n tk
rJ   Y n"X z
t|W S  tk
rj   Y nX t	| jj}|
d\}}}|j|krtj|j|S |dg  }}|r,|d|d ztd|}	W n ttfk
 r   Y qY qX zt|	}
W n tk
r$   Y qY qX q8qtd| tjj|
f| }tj|dd |D ]4}tj|
|}
ttj|
dd	 W 5 Q R X q\|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w)r   migrations_modulerE   Z	app_label
ValueErrorr   ImportErrorr   r   Zget_app_config
rpartitionr6   ospathrB   rN   insertpopmakedirsopen)r   Zmigrations_package_name_rb   Z
app_configZmaybe_app_nameZmigrations_package_basenameZexisting_dirsZmissing_dirsbase_modulebase_dirZ	final_dirZmissing_dirr   r   r   basedir   sb    



zMigrationWriter.basedirc                 C   s   d| j j S )Nz%s.py)rE   r6   r<   r   r   r   filename  s    zMigrationWriter.filenamec                 C   s   t j| j| jS r   )rf   rg   rB   ro   rp   r<   r   r   r   rg     s    zMigrationWriter.pathc                 C   s   t | S r   )r	   r!   )clsr'   r   r   r   r!     s    zMigrationWriter.serializec                 C   s   t || d S r   )r   register)rq   type_
serializerr   r   r   register_serializer  s    z#MigrationWriter.register_serializerc                 C   s   t | d S r   )r   
unregister)rq   rs   r   r   r   unregister_serializer   s    z%MigrationWriter.unregister_serializerN)T)rC   r3   rD   __doc__r   r^   propertyro   rp   rg   classmethodr!   ru   rw   r   r   r   r   r    v   s   
M
A



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    ]
)rf   rS   	importlibr   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    rY   r\   r   r   r   r   <module>   s    d 0