wOj0UddlZddlZddlZddlmZddlmZdZejej dej ddZ ej dd Z d Zdaedzed <d efd Zd efdZd efdZdZd efdZd efdZded efdZdZded efdZdedefdZd edzfdZd efdZd efdZ d e!efdZ"ded edzfd Z#ded e$edzedzffd!Z%d"Z&d#efd$Z'dS)%N)datetime)loggerzU\\Mediaset.it\cologno\Osservatorio_Progetti\MonitorOsservatorio\MonitorOsservatorioPyAPPDATA~MonitorOsservatorioUSERNAMEunknown _data_dirreturnc2ttStjtdt } tj|dtj|d}t|d5}|ddddn #1swxYwYtj ||atj dtn3#t$r&}tj d|taYd}~nd}~wwxYwtS) NutentiTexist_okz.probewokzSession storage: {}z0Server share non raggiungibile ({}), uso APPDATA)r ospathjoin _SERVER_BASE _USERNAMEmakedirsopenwriteunlinkrinfo Exceptionwarning _APPDATA_BASE)server_user_dirprobefes .C:\PYTHON\MonitorOsservatorioPy\app\session.py_resolve_data_dirr%s9gll<9EEO " Od3333 _h77 %    GGDMMM                %#  )95555 """I1MMM! " s<ACB# C#B''C*B'+3C D)D  Dct}tj|dtjtj|dd|S)NTrexport)r%rrrrds r$_ensurer*(sLAKD!!!!K Q))D9999 HcZtjtdS)Nz monitor.logrrrr%r+r$ _log_pathr//s 7<<)++] ; ;;r+cTt}tj|dddddS)Nz1 MBr utf-8INFO)rotation retentionencodinglevel)r/radd)log_files r$ init_loggingr93s,{{H Jx&AvVVVVVVr+cZtjtdS)Ncurrent_source.xlsxr-r.r+r$ _src_filer<8s 7<<)++-B C CCr+cZtjtdS)Ncurrent_session.jsonr-r.r+r$ _ses_filer?<s 7<<)++-C D DDr+ncbtjtd|dS)Nsession_backup_z.jsonr-)r@s r$ _backup_filerC@s+ 7<<)++-Gq-G-G-G H HHr+ct}tj|sdSt t ddD]W}t |dz }t |}tj|rtj||Xtj|t ddS)N) r?rrexistsrange _NUM_BACKUPSrCshutilcopy2)sesisrcdsts r$_rotate_backupsrPDs ++C 7>>#   <B ' '##1q5!!1oo 7>>#   # Lc " " " Ll1oo&&&&&r+src_pathctt}tj||t jd||S)NzSource salvato: {})r*r<rJrKrr)rQrOs r$ save_sourcerSQs> III ++C L3 K$c*** Jr+source_basenamepaesecTttd||tjdt d|Dd}t tdd5}tj ||d ddddS#1swxYwYdS) NrEseconds)timespeccPg|]#}|j|j|j|j|jd$S) source_rowprima_tvcod_oss agganciatotooltiprZ).0rs r$ z$save_annotations..bsJ      ljili       r+)versionrTrUsaved_atusername annotationsrr1r5F) ensure_ascii) r*rPrnow isoformatrrr?jsondump)recordsrTrUdatar"s r$save_annotationsroYs III*LNN,,i,@@         D" ikk3 1 1 1/Q $....//////////////////s8BB!$B!ct}t}tj|rtj|st dt dzD]{}t|}tj|rKtj|r,tj d|tj ||n|dS ttdd5}tj|cdddS#1swxYwYdS#t$r }tjd|Yd}~dSd}~wwxYw)NrEz&Session corrotta, ripristino backup_{}rar1rgzErrore lettura session: {})r?r<rrrGrHrIrCrrrJrKrrkloadrerror)rLrNrMbakr"r#s r$ load_sessionrtqs ++C ++C 7>>#   bgnnS&9&9 q,*++  Aq//Cw~~c"" rw~~c':': GKKK S#&&&4 )++sW 5 5 5 9Q<<                   11555ttttts<2D>D1$ D>1D55D>8D59D>> E(E##E(ctS)N)r<r.r+r$ source_pathrvs ;;r+ctjtd}tj|d|S)Nr'Tr)rrrr%rr(s r$ export_dirrxs8  &(((33AKD!!!! Hr+c $g}tjtd}t} tj|D]}||kr tj||d}tj||d}tj|rtj|s t|dd5}tj |}dddn #1swxYwY| || dd | d d d  #t$rYwxYwn-#t$r }tjd ||Yd}~nd}~wwxYw|S) zNReturns [{username, filename, saved_at}] for all users with an active session.rr>r;rar1rgNrTrd)refilenamerdz$Impossibile leggere utenti da {}: {})rrrrrlistdirrGrrkrqappendgetrrr) result utenti_dir current_usernameses_pathrQr"rnr#s r$ list_usersrs FlH55JLNJz**  D|##w||J6LMMHw||J6KLLH7>>(++ 27>>(3K3K  (C':::(a9Q<STTHw~~h// 988T9r+c2tjtd}tj||d}tj||d}tj|rtj|sdS t |dd5}t j|}dddn #1swxYwY||fS#t$r!}tj d ||Yd}~dSd}~wwxYw) zBReturns (session_dict, xlsx_path) for given user, or (None, None).rr>r;)NNrar1rgNz!Errore lettura sessione di {}: {}) rrrrrGrrkrqrrrr)rerrrQr"sessionr#s r$load_session_from_userrs<lH55Jw||J2HIIHw||J2GHHH 7>>( # #27>>(+C+Cz (C' 2 2 2 #aillG # # # # # # # # # # # # # # #   8(AFFFzzzzzs<)C+;C C+C  C+#C $C++ D5DDcttfD]c} tj|rtj|7#t $r }tjd||Yd}~\d}~wwxYwdS)NzImpossibile cancellare {}: {}) r?r<rrrGrrrr)rr#s r$ clear_sessionrsikk*EE Ew~~d##  $ E E E N:D! D D D D D D D D E EEs3A A>A99A>rc`d|dgD}|D]}||j}|rl|dd|_|dd|_|dd|_|dd|_dS) Nc i|] }|d| S)r[r.)r`as r$ z%apply_annotations..sMMM!L/1MMMr+rfr\rzr]r^Fr_)r~r[r\r]r^r_)rmr ann_by_rowraanns r$apply_annotationsrsMMgkk-.L.LMMMJ 66nnQ\**  677:44AJ779"55AI77<%88AL779"55AI 66r+)(rkrrJrlogururrrrenvironr~ expanduserrrrIr str__annotations__r%r*r/r9r<r?intrCrPrSrodictrtrvrxlistrrtuplerrrr.r+r$rs g  JNN9bg005566  JNN:y 1 1   3:3,     <3<<<<WWW D3DDDDE3EEEEICICIIII ' ' '##/s/3////0dTk*S C    DJ8:3:3::::: S U4$;d 3J-K     EEE6666666r+