
    6g&                     h    d dl  d dlmZ d dlZd dlZd dlmZ d dlZ G d dej                        Zy)    )*)
cmf_exportN)Pathc                   4   e Zd ZU ej                  j
                  dgz   Zeed<   eed<   ej                  ed<   e
ed<   eed<   d Zd Zdd
ededefdZd Zdded
efdZddedefdZdefdZd
edefdZd
edefdZd Ze edddd      d               Zy	) 	CmfExportcreate_backup_dumped_workflows_dumped_workflows_scheme_zipf
_dump_info_errorsc                 ^   ddl m } |j                         j                  d      }d| d}| j                  dg       | j                  r| j                  d   }n't
        j                  | |      }|j                          t        | j                  | j                  j                  g       |S )	Nr   )datetimez%Y%m%d%H%M%Sbackup_z.zipzbackup_files.url)parentname)args)r   nowstrftimeload_fieldsbackup_filesmodelsCmfAttachmentsaveschedule_deferred_jobjob_create_backupidvalue)selfr   current_timebackup_file_nameattachs        %./modules/export/models/cmf_export.pyr   zCmfExport.create_backup   s    %||~..~>$\N$7,-.&&q)F))<L)MFKKMd44DGGMM?K    c                     || j                   D cg c]  }|d   	 c}v ryt        j                  j                  |ddg      }| j                   j	                  |j                  d             yc c}w )u   Собираем данные по воркфлоу в отдельный список чтобы потом его сохранить

        Args:
            workflow_id (str): TUUID воркфлоу
        r   Nz
statuses.*ztrans.**r   fieldsdict)type)r	   r   CmfWorkflowgetappenddumps)r   workflow_idobjworkflows       r#   _dump_workflowzCmfExport._dump_workflow!   sj     0F0FG3t9GG%%))[,PZA[)\%%hnn&n&AB Hs   A0Ndump_dirattachmentsroot_dirc                    ||}|dz  }|D ]l  }	 | j                  d       | j                  j                  |j                  t	        ||j
                  j                  z               | j                  ||       n y # t        $ r>}| j                  j                  dt	        |      d|j
                   g       Y d }~d }~ww xY w)Nr3   
attachment_dump_attachmentsu.   Ошибка дампа вложения id = )_inc_dump_infor   writefull_path_filestrr   r   _dump_users	Exceptionr   r,   )r   r2   r3   r4   attach_pathr"   es          r#   r7   zCmfExport._dump_attachments,   s    H.! 	AFA##L1

  !6!6K&))//<Y8Z[  62		A
  A##%8#a&Drsys|s|r}B~$  A  AAs   A)A<<	C4B>>Cc                 j   |j                  ddg       t               }|dz  }dD ]l  }t        ||      st        ||      st        ||      j                  }t        ||z        | j                  j                         v r\|j                  |       n dD ]  }t        ||      st        ||      st        ||      j                         D ]d  }t        ||j                  j                  z        | j                  j                         v r@|j                  |j                  j                         f  t        j                  j                  ddgdd	t        |      g
      D ]L  }| j                  j                  t        ||j                  j                  z        |j                                N y )N	executors
spectatorsusers)cmf_author_idcmf_owner_idresponsible_idcmf_modified_by_idwaiting_for_id)rA   rB   r   zrg_member_of.*r   IN)r'   filter)r   sethasattrgetattrr   r;   r   namelistadd
all_nestedr   r   	CmfPersonlistwritestrr-   )	r   r2   r/   user_ids	users_diruser_keyuser_id
field_nameusers	            r#   r<   zCmfExport._dump_users8   sr   l345w&	s 	&HsH%'#x*@!#x066y7*+tzz/B/B/DDW%	& 6 	0JZ(WS*-E$S*5@@B 0T9tww}}459L9L9NN LL/0	0 $$))#7G1HRVX\^bck^lQm)n 	NDJJI$= >

M	Nr$   c                 P   dd|g}||dz  }t         j                  j                  |g d      D ]  }||j                  j                  z  }| j
                  j                  t        |dz        |j                                | j                  d       | j                  |||d	z         | j                  ||j                  |       | j                  ||        t         j                  j                  |g d      D ]  }||j                  j                  z  }| j
                  j                  t        |dz        |j                                | j                  d
       | j                  |||d	z         | j                  ||j                  |       | j                  ||        y)u   Дампим документы сохраняя иерархию

        Args:
            dump_dir (Path): директория для дампа
            tree_parent (CmfProject, CmfFolder, CmfDocument): родитель в дереве
        tree_parentz==N	documents**zattachments.*rA   rB   )rJ   r'   	info.jsondocumentchildrenfolder)r   CmfDocumentrR   r   r   r   rS   r;   r-   r8   _dump_documentsr7   r3   r<   	CmfFolder)r   r4   r[   r2   _filterdocdoc_dirs          r#   rd   zCmfExport._dump_documentsM   sp    !$4+-H%%**'Bs*t 	,C-GJJGk$9 :CIIKH
+  3*0DE""7COOXFXs+	, ##((@q(r 	,C-GJJGk$9 :CIIKH)  3*0DE""7COOXFXs+	,r$   keyvalc                 n    || j                   vr|| j                   |<   y | j                   |xx   |z  cc<   y N)r   )r   ri   rj   s      r#   r8   zCmfExport._inc_dump_infog   s0    doo%#&DOOC OOC C' r$   	scheme_idc                 b   || j                   D cg c]  }|d   	 c}v ryt        j                  j                  |ddg      }| j                   j	                  |j                  d             | j                  |j                         | j                  |j                         | j                  |j                         | j                  |j                         | j                  |j                         | j                  |j                         | j                  |j                         yc c}w )ub   Дампим схему БП

        Args:
            scheme_id (str): TUUID схемы
        r   Nr^   zscheme_wf.scheme_wf_rulesr&   r(   )r
   r   CmfSchemeWfr+   r,   r-   r1   default_list_workflow_iddefault_epic_workflow_iddefault_subproject_workflow_iddefault_release_workflow_iddefault_document_workflow_iddefault_task_workflow_iddefault_subtask_workflow_id)r   rm   r/   schemes       r#   _dump_workflow_schemezCmfExport._dump_workflow_schemem   s     d.K.KLsTLL##''9dD_=`'a%%,,V\\&-ABF;;<F;;<FAABF>>?F??@F;;<F>>? Ms   D,
project_idc                    t         j                  j                  |g d      D ]  }| j                  d       | j                  j                  t        |dz  |j                  j                  z  dz        |j                                | j                  |j                         | j                  |j                         | j                  ||        y )N)r   rA   rB   )projectr'   rR   listsr_   )r   CmfListrR   r8   r   rS   r;   r   r   r-   rx   scheme_wf_idr1   r.   r<   )r   r2   ry   cmf_lists       r#   _dumps_listszCmfExport._dumps_lists   s    ++JGg+h 	1H'JJHw$69J9J$J[$X Y[c[i[i[kl&&x'<'<= 4 45Xx0	1r$   c                    dd l }|dz  }d}t        j                  j                  |      }t	        d|j                  ||z              D ]  }t        j                  j                  |g d||z  ||z  |z   g      D ]  }| j                  d       ||j                  j                  z  }	|	dz  }
| j                  j                  t        |
      |j                                | j                  |	|j                         | j!                  |j"                         | j%                  |j&                         | j)                  ||         y )	Nr   tasks2   )r{   r]   )r{   r'   slicetaskr_   )mathr   CmfTaskcountrangeceilrR   r8   r   r   r   rS   r;   r-   r7   r3   rx   r~   r1   r.   r<   )r   r2   ry   r   	tasks_dirstepcntchunkr   task_dirtask_file_paths              r#   _dumps_taskszCmfExport._dumps_tasks   s*   w&	nn"":"61diid
34 	1E++J Hc384<PTAT2U , W 
1 ##F+$tww}}4!)i!8

##C$7F&&x1A1AB**4+<+<=##D$4$45  40
1	1r$   c           
      d   t        g d      | _        t        j                         5 }t	        |d      }t	        |d      }t        j                  |dt
        j                        5 | _        | j                  j                  dd       t	        d      }g d}t        j                  j                  |	      D ]  }	 t               | _        t               | _        t               | _        | j!                  |j"                  j$                         ||j&                  j$                  z  }	| j                  j)                  t+        |	d
z        |j-                                | j/                  |	|j&                         | j1                  |	|j&                         | j3                  |	|       | j                  j)                  t+        |	dz        t4        j-                  | j                               | j                  j)                  t+        |	dz        t4        j-                  | j                               | j                  j)                  t+        |	dz        t4        j-                  d| j                  i              t=        |dd      5 }t?        j@                  |      jC                  | j                  g       d d d        | j                  j                  |d       d d d        t        jD                  jG                  |       }t=        |d      5 }|jI                  |d       d d d        d d d        y # t6        $ r?}
| j                  j9                  dt+        |
      d|j:                   g       Y d }
~
d }
~
ww xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   uxY w# 1 sw Y   y xY w)N)FunctionErrorDetailszerror_log.csvz
backup.tmpwz/opt/eva_versioneva_versionprojects)r^   rA   rB   )r'   r_   )ry   zworkflows.jsonzwf_schemes.jsonzdump_info.jsonstatsprocess_backupu,   Ошибка дампа проекта href= )newline)r   rbF)backup)%rR   r   tempfileTemporaryDirectoryr   zipfileZipFileZIP_DEFLATEDr   r9   r   
CmfProjectr	   r
   r(   r   r1   r.   r   r   rS   r;   r-   r   r   rd   jsonr=   r,   hrefopencsvwriter	writerowsr   r+   upload_stream_file)r   r   kwargstmp_direrror_log_filebackup_fileprojects_dir_fieldsr{   project_dirr?   csvfiler"   fs                 r#   r   zCmfExport.process_backup   s#   <=((*  	;g!'?;Nw5Kc73G3GH BDJ

  !3]C#J/;%0055W5E GGG15.8<5*.&++G,?,?,E,EF&2WZZ5E5E&E

++Ck0I,JGMMO\))+'**)M))+'**)M,,['B

++C>N0N,OQUQ[Q[\`\r\rQst

++C>O0O,PRVR\R\]a]z]zR{|

++C>N0N,OQUQ[Q[]dfjfufu\vQwxG$ .#r: BgJJw'114<<.AB 

  A3B6 ))--T-:Fk4( ;A))!E):;? 	;  	;. % G++-=s1vIuv}  wC  wC  vD  HE  -F  G  GGB B-B B8; ;? 	;  	;s   >N&%AN;F>L79N
0N:$N4N&N&N&7	M?	 4M:	4N:M?	?NNNN	N&N#	N&&N/u   Экспорт проектовTF)descriptionshow_bg_progressbar
system_job	only_oncec                 d    t         j                  j                  |       } |j                         S )N)r   )r   r   r+   r   )cmf_export_idr   s     r#   r   zCmfExport.job_create_backup   s.     %%))]);
(z((**r$   rl   )   )__name__
__module____qualname__r   r   api_methodsrR   __annotations__r   r   r(   r   r1   r   r7   r<   rd   r;   intr8   rx   r   r   r   staticmethodcmf_deferred_jobr    r$   r#   r   r      s    &&226 K !!??M	C
A 
A4 
A$ 
AN*,t ,4 ,4( (# (@c @$1T 1c 11T 1c 1&";J "CY]jo{  A+ A +r$   r   )	cmf.includemodules.export.fieldsr   r   r   pathlibr   r   r   r   r$   r#   <module>r      s(     ,   
}+
$$ }+r$   