o
    `©Zh]-  ã                   @   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   úR/var/www/html/lang_env/lib/python3.10/site-packages/django/db/migrations/writer.pyÚ__init__   ó   
zOperationWriter.__init__c           
         s  ‡ ‡fdd„}t ƒ ‰ ˆj ¡ \}}}tˆjjƒ}tt|d ƒˆjjkr*ˆ d| ¡ nˆ  	dˆjjj
 ¡ ˆ dˆjjj
|f ¡ ˆ ¡  t|ƒD ]\}}|}|| }	||	|ƒ qHt|ƒ}||d … D ]}	|	|v rq||	 }||	|ƒ qbˆ ¡  ˆ d¡ ˆ ¡ ˆ fS )Nc                    s*  | ˆj jv rÐt|tttfƒrÐt|tƒr€ˆ d|  ¡ ˆ ¡  | ¡ D ]R\}}t	 
|¡\}}t	 
|¡\}}| ¡ }t|ƒdkraˆ d||d f ¡ |dd… D ]}	ˆ |	¡ qOˆ d|d  ¡ n	ˆ d||f ¡ ˆ  |¡ ˆ  |¡ q"ˆ ¡  ˆ d¡ d S ˆ d	|  ¡ ˆ ¡  |D ]7}
t	 
|
¡\}}| ¡ }t|ƒdkr¸|d d… D ]}	ˆ |	¡ q¦ˆ d|d  ¡ nˆ d| ¡ ˆ  |¡ qˆ ¡  ˆ d
¡ d S t	 
|¡\}}| ¡ }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   sT   
ÿ

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_valueÚ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   ó   zOperationWriter.indentc                 C   s   |  j d8  _ d S r<   r=   r>   r   r   r   r&   l   r?   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   r6   r   s   zOperationWriter.renderN)r   )	Ú__name__r4   Ú__qualname__r   r"   r   r&   r   r6   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   rH   rI   r   r   r   r   |   r   zMigrationWriter.__init__c                 C   sô  dddœ}t ƒ }g }| jjD ]}t|ƒ ¡ \}}| |¡ | |¡ q|r,d |¡d nd|d< g }| jjD ]#}|d dkrM| d|d  ¡ | 	d	¡ q6| d
|  |¡d  ¡ q6|red t
|ƒ¡d nd|d< t ƒ }	t|ƒD ]}
t d|
¡rŒ|	 	|
 d¡d  ¡ ¡ | |
¡ d| _qpd|v rœ| d¡ | 	d¡ n| 	d¡ t
|dd„ d}|r²d |¡d nd|d< |	rÇ|d  dd t
|	ƒ¡ 7  < | jjrØd|  | jj¡d  |d< | jrêttƒ tƒ  d¡dœ |d< nd|d< | jjröd|d< t| S )z%Return a string of the file contents.Ú )Úreplaces_strÚinitial_strrD   Ú
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 dk|   ¡ d fS )Nr   Úfromr   )Úsplit)r9   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
rL   z%Y-%m-%d %H:%M)ÚversionÚ	timestampZmigration_headerz
    initial = True
rM   )r0   rH   rN   r   r"   r%   rB   rE   rO   r3   Úsortedr   ÚreÚmatchrR   ÚstripÚremoverJ   ÚdiscardZreplacesrI   ÚMIGRATION_HEADER_TEMPLATEr   r   ÚstrftimeÚinitialÚMIGRATION_TEMPLATE)r   r    r.   rN   r   Zoperation_stringZoperation_importsrO   Ú
dependencyZmigration_importsrC   Zsorted_importsr   r   r   Ú	as_string   sl   þ
ÿÿÿ
€

ÿûÿ
þzMigrationWriter.as_stringc              	   C   s  t  | jj¡\}}|d u rtd| jj ƒ‚zt|ƒ}W n	 ty$   Y nw zt|ƒW S  ty3   Y nw t 	| jj¡}| 
d¡\}}}|j|krPtj |j|¡S | d¡g }}|r‰| d| d¡¡ z	td |¡ƒ}	W n ttfyw   Y qXw zt|	ƒ}
W n	 ty‡   Y qXw ntd| ƒ‚tjj|
g|¢R Ž }tj|dd |D ]#}tj |
|¡}
ttj |
d¡d	ƒ W d   ƒ n1 sÀw   Y  q¢|S )
NztDjango can't create migrations for app '%s' because migrations have been disabled via the MIGRATION_MODULES setting.Ú.r   r   z„Could 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_modulerH   Z	app_labelÚ
ValueErrorr   ÚImportErrorr   r   Zget_app_configÚ
rpartitionr7   ÚosÚpathrE   rR   ÚinsertÚpopÚmakedirsÚopen)r   Zmigrations_package_nameÚ_re   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)rH   r7   r>   r   r   r   Úfilename  ó   zMigrationWriter.filenamec                 C   s   t j | j| j¡S r   )ri   rj   rE   rr   rs   r>   r   r   r   rj     s   zMigrationWriter.pathc                 C   s   t |ƒ ¡ S r   )r	   r"   )Úclsr(   r   r   r   r"     rt   zMigrationWriter.serializec                 C   s   t  ||¡ d S r   )r   Úregister)ru   Útype_Ú
serializerr   r   r   Úregister_serializer!  s   z#MigrationWriter.register_serializerc                 C   s   t  |¡ d S r   )r   Ú
unregister)ru   rw   r   r   r   Úunregister_serializer%  s   z%MigrationWriter.unregister_serializerN)T)rF   r4   rG   Ú__doc__r   ra   Úpropertyrr   rs   rj   Úclassmethodr"   ry   r{   r   r   r   r   r!   v   s     
R
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    ]
)ri   rW   Ú	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!   r\   r_   r   r   r   r   Ú<module>   s"    d 5