o
    DjJ                     @   st   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Zd dlZd dlZd dlZG dd deZdS )    )Command)BaseCommand)DEFAULT_DB_ALIAS)BACKUP_ROOT
MEDIA_ROOTNc                   @   s$   e Zd Zdd Zdd Zdd ZdS )r   c              
   C   sL  | j d t jtddd | j d | j d tjtd}t	
tjt|d'}t
|d	}|t	|  W d    n1 sHw   Y  W d    n1 sWw   Y  zCzt j|td
g dd dd W n ty } z| j dt| W Y d }~nd }~ww | j d W t| d S W t| d S t| w )Nu+   Début du nettoyage de la base de données.   F)database	verbosityinteractiveu*   Nettoyage de la base de données terminé.u;   début insertion de la sauvegarde dans la base de données.ze-colle.jsonrbwbjson)r   formatexcludeignore	app_labelr	   u+   Erreur lors de l'insertion des données: {}u>   Insertion de la sauvegarde dans la base de données terminée.)stdoutwriteFlushhandler   ospathjoinr   bz2open
decompressreadLoaddata	Exceptionr   strremove)selffichierfichier_jsonfichier_bz2fichierjsone r'   =/home/reyt/e-colle-new/accueil/management/commands/restore.py	gere_json   s.   
"zCommand.gere_jsonc                 C   s*  |dkr2t t}dd |D }dd |D }|D ]}t |D ]}|dkr0t t j|| q q|dv r| jd zQz-t	t jt
|d}|t ztd	d
dtg W n tyh   | jd Y nw W n tyy   | jd Y nw | jd W |  dS W |  dS |  w dS )u=   vide la bdd puis y insère les données de la sauvegarde json2c                 S   s   g | ]	}t jt|qS r'   )r   r   r   r   ).0filer'   r'   r(   
<listcomp>$   s    z&Command.gere_media.<locals>.<listcomp>c                 S   s   g | ]
}t j|r|qS r'   )r   r   isdir)r+   dr'   r'   r(   r-   %   s    z
.gitignore23u&   Début restauration des fichiers mediazr:xzchgrpz-Rwebu:   Problème dans l'attribution des droits des fichiers mediaz1Erreur lors de la restauration des fichiers mediau)   Restauration des fichiers media terminéeN)r   listdirr   r    r   r   r   r   tarfiler   r   
extractall
subprocessrunr   close)r!   fichier_mediachoixrepertoires
repertoirefichiermediaarchive_zipr'   r'   r(   
gere_media    s:   

zCommand.gere_mediac           	      O   s  t dd ttD }|s| jd d S ttdt|d |D ]\}}| jd	|| q"t
d}|dksn| rLdt|  k rKt|ksnn | jd	 t
d}|dksn| rLdt|  k rlt|krLn qL|dkrz| jd
 d S t|}||d  }|dd dd }d	|}d}tjtjt|r| jd t
 }|dvr| jd t
 }|dvs|dkr| jd
 n| || |dkr| | d S d S )Nc                 S   s    g | ]}|d d dkr|qS )Nz.bz2r'   )r+   fr'   r'   r(   r-   <   s     z"Command.handle.<locals>.<listcomp>uc   Aucune sauvegarde des données n'est présente,
				impossible de charger des données antérieuresr   z{}: {}uM   Quelle sauvegarde voulez-vous charger? (Taper le numéro ou a pour abandon): ar   u   numéro inexistant, recommencezabandon_.zecolle-media_{}.tar.xz1u1  Il existe une sauvegarde des fichiers media associée, que voulez-vous faire?
1. l'ignorer
2. effacer tous les fichiers media existants et mettre ceux de la sauvegarde à la place
3. conserver les fichiers media existants et ajouter en plus ceux de la sauvegarde (en écrasant les doublons)
a. abandonner
a123zchoix invalide, recommencez)sortedr   r3   r   r   r   ziprangelenr   input	isnumericintsplitr   isfiler   r?   r)   )	r!   
app_labelsoptionsfichiers_bz2numr"   dater9   r:   r'   r'   r(   r   ;   s<    .0
zCommand.handleN)__name__
__module____qualname__r)   r?   r   r'   r'   r'   r(   r      s    r   )(django.core.management.commands.loaddatar   r   %django.core.management.commands.flushr   django.core.management.baser   	django.dbr   ecolle.settingsr   r   r   r   r4   r6   r'   r'   r'   r(   <module>   s    