
    Zjx                        d Z ddlZddlZddlZddlZddlZddlZddlm	Z	 ddl
m
Z
 dZdZdZdZd	Zd
ZdZh dZdddddddddddddddZd Zd Zd Zd Zd Z e       Zej6                  j9                  e      r; ee      5 Z ej>                  e      Z  e!e e"      r ee       n e       Zddd       g Z# ejH                  e      D ]i  \  Z%Z&Z'e&D  cg c]	  } | evs|  c} e&dd e'D ]F  Z(e(jS                  d      sej6                  jU                  e%e(      Zeevs6e#jW                  e       H k  e,d e-e#       d e-e              dZ.dZ/dZ0g Z1e#D ]  Z2	  ee2ddd      5 Zejg                         Z4ddd        ee4      Z6 e-e6      ek  re/dz  Z/C ee6e2      Z7 ee2      Z8 e9 e	e2      ju                  e            Z; e
jx                  ej6                  j{                  e2            j}                         Z?e7 e@d      z    e@d      z   e6z   ZAeAdd ZAd e8 d!e; ZBe1jW                  e2eAeBe?f        e-e1      ek\  se1D ]X  \  ZCZDZEZF eeDd"d#eEeF      ZGeGrej                  eC       e.dz  Z.-e0dz  Z0 e,d$e d%ej6                  j                  eC              Z  eed&      5 Z ej                   e"e      e       ddd        e-e#      e/z
  ZK e,d'e. d(eK d)e0        g Z1 ej                  d        e1D ]1  \  ZCZDZEZF eeDd"d#eEeF      ZGeGrej                  eC       e.dz  Z.-e0dz  Z03  eed&      5 Z ej                   e"e      e       ddd        e,d*e. d+e/ d,e0 d-       y# 1 sw Y   xY wc c} w # 1 sw Y   xY w# e5$ r	 e0dz  Z0Y Jw xY w# 1 sw Y   xY w# 1 sw Y   XxY w).u   
Obsidian -> Graphiti Import — einfach, robust, kein Cascade
Modell: deepseek/deepseek-chat (bewährt)
Bei Fehler: 30s warten, dann nochmal versuchen (max 3x)
    N)Path)datetimez/opt/struktur/obsidian/vaultzhttp://127.0.0.1:8644/episodesz&/opt/struktur/graphiti/import_log.json
         >   .claude	.claudian	.obsidian08-AttachmentsINSTALLproject
reflectionnoteresourcestrategy)z03-Projektez06-Daily-Notesz04-Bereichez05-Ressourcenz
00-Stagingz
01-Kontextz	07-Archivz
AG-CONTEXTzAG-SPECIFICz
LP-CONTEXTzLP-SPECIFICMasterzAgent-SystemSystemc                     t        |       j                  t              j                  }|rt        j                  |d   d      S dS )Nr   r   )r   relative_toVAULTpartsTYPE_MAPget)filepathr   s     )/opt/struktur/graphiti/import_obsidian.pyget_typer      s8    N&&u-33E-28<<a&)>>    c                     t        j                  d| t         j                        }|r|j                  d      j	                         S t        |      j                  S )Nz
^#\s+(.+)$   )research	MULTILINEgroupstripr   stem)contentfilenamems      r   extract_titler)   #   s@    
		-",,7A!"1771:;X(;(;;r   c                 (   t        j                  dd| t         j                        } t        j                  dd|       } t        j                  dd|       } t        j                  dd|       } t        j                  dd|       } | j                         S )	Nz^---\n.*?\n---\n )flagsz!\[.*?\]\(.*?\)z<[^>]+>z!\[\[.*?\]\]z\n{3,}z

)r    subDOTALLr$   )r&   s    r   clean_markdownr/   '   sp    ff("gRYYGGff'W5GffZW-Gff_b'2GffY0G==?r   c                    t        j                  | ||||d      j                  d      }t        j                  j                  t        |ddid      }	 t        j                  j                  |d      5 }|j                  d	k(  cd d d        S # 1 sw Y   y xY w# t        j                  j                  $ r}d
|j                   cY d }~S d }~wt        $ r}t        |      d d cY d }~S d }~ww xY w)N)r&   sourceactorcontext	timestamputf-8zContent-Typezapplication/jsonPOST)dataheadersmethodi,  )timeoutr   zHTTP P   )jsondumpsencodeurllibrequestRequestGRAPHITI_URLurlopenstatuserror	HTTPErrorcode	Exceptionstr)	r&   r1   r2   r3   r4   r7   reqrespes	            r   post_episoderM   /   s    ::f7  vg 	 ..
 
 D+9;M*N)/ ! 1C^^##C#5 	&;;#%	& 	& 	&<<!!  qvvh 1vcr{sN   !B 6B	B BB B C08CC0C0C+%C0+C0c           	          t        t              D ]k  }t        | ||||      }|du r yt        d|dz    dt         d|        |t        dz
  k  s@t        dt         d       t        j                  t               m y)	NTz    Versuch r   /z fehlgeschlagen: z
    Warte zs...F)rangeMAX_RETRIESrM   print
RETRY_WAITtimesleep)r&   r1   r2   r3   r4   attemptresults          r   post_with_retryrX   ?   s    % #gvugyIT>WQYKq5FvhOP[1_$Jzl$/0JJz"# r   z.mdz
Gefunden: z Dateien | bereits importiert: rr5   ignore)encodingerrorsr   i  ztype:z
 filename:obsidianimportz  FEHLER (nach zx): wzFortschritt: rO   z | Fehler: z	
Fertig: z importiert | z zu kurz | z Fehler)M__doc__osr    r<   rT   urllib.requestr?   urllib.errorpathlibr   r   r   rB   LOG_FILE
BATCH_SIZE	MIN_CHARSrQ   rS   	SKIP_DIRSr   r   r)   r/   rM   rX   setimportedpathexistsopenfloadr7   
isinstancelist	all_fileswalkrootdirsfilesfileendswithjoinappendrR   lensuccessskippedr\   batchr   readrawrH   cleantitledoc_typerI   r   rel_pathfromtimestampgetmtime	isoformattschrr&   r3   fpcctxtokaddbasenamedumptotalrU   )ds   0r   <module>r      sd  
   #  -/7
	
Q	 zFJJ
?< 	 577>>(	h B1tyy| *4 63t9CEB
 	  'D$5Q!9"4q5DG '==77<<d+D8#  &	'' 
3y>""A#h-Q R



 &H(C'(C 	q&&(C	 3E
5zI1UH-E!H4>--e45H%x%%bgg&6&6x&@AKKMBs2wR(50Gu~Gxj
8*5G	LL(GWb12
5zZ" 	QMB3 J#qABR 1!}D9I9I"9M8NOP	Q (C  	)ADIId8na(	)I(gYawk&BC

1M&R  MB3	J#q	9B	R1! 
(C !ADIId8na ! 
7)>'+fXWM NSB B 6 	 	 !:	) 	) ! !sZ   +M8	NNN+N
<N/N(N48N
N	N
N%$N%(N1	4N=