UOj`dZddlZddlZddlZddlmZmZddlmZddlm Z ddl m Z m Z m Z eejjdz dz Zd Zd Zhd Ze j(eed d ddZdZdededdfdZefdedededzfdZdeddfdZddZddZedk(reyy)a/ Daemon che monitora inbox/ e ingerisce nuovi documenti. Polling ogni 30 secondi. Avviato come systemd service. Classificazione: delega ad Adrian (via classify-request in vault.db). Adrian legge il file, classifica e scrive classify-result entro 5 minuti. Fallback API se Adrian non risponde in tempo. N)datetimetimezone)Path)logger)INBOXVAULT_DBcompute_doc_idlogszinbox_watch.logi,>.md.doc.pdf.txt.docxz10 MBz30 daysINFO)rotation retentionlevelcbtjt}tj|_|S)N)sqlite3connectrRow row_factory)conns 0/mnt/ssd/adrian/vault-secondbrain/inbox_watch.py_dbrs! ??8 $D{{D Kcftjtjj dS)Nz%Y%m%dT%H%M%S%fZ)rnowrutcstrftimerr_tsr#"s! << % . ./A BBrdoc_idpathreturncd|}tj|t|td}t }|j d|dt||f|j |jy)z,Scrive classify-request-{doc_id} per Adrian.classify-request-)r$r%tszNINSERT OR REPLACE INTO items(id, type, body, file, meta) VALUES (?,?,?,NULL,?)osN)jsondumpsstrr#rexecutecommitclose)r$r%req_idmetars rrequest_classifyr3&sc  )F ::T#%H ID 5DLLX s4y$' KKMJJLrtimeoutcd|}tj|z}tj|krt}|jd|fj}|j |r|dr t j |dStjdtj|kry#t$rYywxYw)zNAspetta classify-result-{doc_id} da Adrian. Ritorna il dict o None se timeout.classify-result-z!SELECT body FROM items WHERE id=?bodyN) timerr.fetchoner0r+loads Exceptionsleep)r$r4 result_iddeadlinerrows rpoll_classify_resultrA3s"6(+Iyy{W$H ))+ ull /) (*  3v; zz#f+.. 1  ))+    s7B== C C ct}|jdd|d|f|j|jy)z$Rimuove request e result dopo l'uso.z#DELETE FROM items WHERE id IN (?,?)r(r6N)rr.r/r0)r$rs rcleanup_classifyrCFsB 5DLL6%fX.2B6(0KLNKKMJJLrcddlm}m}m}t t j dD]<}|jr|jjdr0|jjtvr#tjd|jst|}||rt!}|j#dd|fj%}|j'|rHt)|d }|r7tj*d |jt-|||||tj*d |jt/||?y) Nr) extract_textis_already_ingestedingest_file_with_classify*.zTipo non supportato, skip: zSELECT id FROM items WHERE id=?r(r8)r4z$Classificazione ricevuta da Adrian: z1Nuovo file, richiesta classificazione ad Adrian: )ingestrErFrGsortedrrglobis_filename startswithsuffixlower SUPPORTED_EXTrwarningr rr.r:r0rAinforCr3)rErFrGr%r$rreqresults r scan_inboxrWOs(SSu{{3'('||~!5!5c!:  ;;   m 3 NN8 D E % v & ull -2CF80L/N (*  )&!rls  '22X%%,,v58II 8  3x=7ivN C S   6Dst &ST 'F" zFr