
    s7h                         d dl mZ d dlmZ d dlZd dlmZ d dlZd dlm	Z	 d Z
 G d dej                        Z G d	 d
ej                        Z G d dej                        Zy)    )models)UserN)settings)Pathc                 :    d| j                   j                   d| S )Nuser_/)ownerid)instancefilenames     (/var/www/html/djangosite/dsite/models.pyprotected_file_pathr      s     8>>$$%Qxj11    c                       e Zd Z ej                  d      Z ej                  e      Z ej                  e
ej                  d      Z ej                  e
dd      Z ej                  d	      Z fd
Zd Zd Z xZS )ProtectedFile   
max_length)	upload_toowned_files	on_deleterelated_nameaccessible_filesT)r   blankauto_now_addc                    | j                   st        |   |i | | j                  j                  }| j                  j
                  }t        j                  j                  t        j                  |      }t        j                  t        j                  j                  |      d       t        j                  j                  |      r_t        |d      5 }t        |d      5 }|j                  |j                                d d d        d d d        t        j                   |       y y t        |   |i | y # 1 sw Y   8xY w# 1 sw Y   <xY w)NT)exist_okrbwb)r   supersavefilepathnameosjoinr   PROTECTED_MEDIA_ROOTmakedirsdirnameexistsopenwritereadremove)	selfargskwargsoriginal_pathrelative_pathnew_pathf_srcf_dst	__class__s	           r   r$   zProtectedFile.save   s    wwGL$)&) IINNM IINNMww||H$A$A=QH KK1DA ww~~m,-. 2%h- 2EJJL122 		-(	 - GL$)&)	2 22 2s$   E$ D;E;E	 EEc                     t         j                  j                  t        j                  | j
                  j                        S N)r(   r&   r)   r   r*   r%   r'   r2   s    r   get_file_pathzProtectedFile.get_file_path(   s%    ww||H99499>>JJr   c                     |j                   xr; || j                  k(  xs* || j                  j                         v xs |j                  S r<   )is_authenticatedr
   allowed_usersallis_superuser)r2   users     r   user_can_accesszProtectedFile.user_can_access+   sK    %% $# #++//11#""	%r   )__name__
__module____qualname__r   	CharFieldtitle	FileFieldr   r%   
ForeignKeyr   CASCADEr
   ManyToManyFieldrA   DateTimeFielddate_uploadedr$   r>   rE   __classcell__)r:   s   @r   r   r      s|    F,E6&9:DFdfnn=YE*F**4>PX\]M(F((d;M*(K%r   r   c                   8   e Zd ZdZ ej
                  d      Z ej
                  ddd      Z ej                  e	ej                  dd      Z ej                  d      Z ej                  dd      Z ej                   dd      Zd	 Zd
 Zd Zed        Zy)UserFileu   
    Modèle pour suivre les fichiers uploadés par les utilisateurs
    Les fichiers sont stockés dans le dossier uploads/
    r   r   T)r   nullr   )r   rT   r   r   )rT   r   c                     | j                   xs | j                  }| j                  r| d| j                  j                   dS | dS )Nu    (uploadé par )u    (sans propriétaire))display_namer   rD   username)r2   displays     r   __str__zUserFile.__str__=   sI    ##4t}}99Yodii.@.@-ACC/00r   c                 T    t        t        j                        dz  | j                  z  S )u5   Retourne le chemin complet du fichier sur le systèmeuploads)r   r   BASE_DIRr   r=   s    r   r>   zUserFile.get_file_pathC   s!    H%%&2T]]BBr   c                 t    | j                   sy| j                   }dD ]  }|dk  s|dk(  r n|dz  } |dd S )z4Retourne la taille du fichier dans un format lisibleInconnu)BKBMBGBg      @rc   z.2f )	file_size)r2   sizeunits      r   get_size_displayzUserFile.get_size_displayG   sT    ~~ ~~+ 	Df}FND	 s1TF##r   c                    g }| j                   j                         D ]B  }|j                  |j                  r|j                  j                  nd|j
                  d       D t        j                  j                  t        j                  dd      }t        |dd      5 }t        j                  ||dd	
       ddd       |S # 1 sw Y   |S xY w)z1Sauvegarde tous les fichiers dans un fichier JSONN)utilisateurlien_fichierr\   z
files.jsonwzutf-8)encodingF   )ensure_asciiindent)objectsrB   appendrD   rX   r   r(   r&   r)   r   r]   r.   jsondump)clsdata	user_file	json_pathfs        r   save_to_jsonzUserFile.save_to_jsonT   s     * 	IKK:C..y~~66d ) 2 2 	 GGLL!2!2I|L	)S73 	=qIIdAE!<	= 	= s   CCN)rF   rG   rH   __doc__r   rI   r   rW   rL   r   rM   rD   rO   upload_dateGenericIPAddressField
ip_addressPositiveIntegerFieldre   rZ   r>   rh   classmethodrz    r   r   rS   rS   1   s      v3/H#6##sTJL6TV^^$dSD&&&&D9K---4tDJ+++TBI1C$  r   rS   c                       e Zd ZdZ ej
                  eej                  d      Z ej                  d      Z
 ej                  dd      Z ej                  d	      Z ej                  d
      Zd Zy)UserNoteu>   
    Modèle pour les notes persistantes des utilisateurs
    notesr   T)r   r   zMa note)r   defaultr   )auto_nowc                 N    d| j                   j                   d| j                   S )NzNote de z: )rD   rX   rJ   r=   s    r   rZ   zUserNote.__str__n   s$    $)),,-R

|<<r   N)rF   rG   rH   r{   r   rL   r   rM   rD   	TextFieldcontentrI   rJ   rO   
created_at
updated_atrZ   r   r   r   r   r   d   sr     6TV^^'RDfT*GFY?E%%%48J%%%t4J=r   r   )	django.dbr   django.contrib.auth.modelsr   r(   django.confr   rs   pathlibr   r   Modelr   rS   r   r   r   r   <module>r      sN     + 	    2#%FLL #%J1v|| 1f=v|| =r   