Files
scarif/openclaw/workspace/nextcloud-calendar/scripts/__pycache__/ncal.cpython-311.pyc
T

210 lines
31 KiB
Plaintext
Raw Normal View History

2026-03-13 18:47:30 +00:00
§
�iGãó¬—dZddlZddlZddlZddlZddlZddlZddlZddl m Z m
Z
m Z m Z ddl
mcmZejdd¦« d¦«Zejdd¦«Zejdd¦«Zejd d¦«Zd
Zd Zdd„Zd„Zd„Zd d„Zd„Zd„Zd„Zd d„Z d„Z!d„Z"d„Z#d„Z$d„Z%d„Z&d„Z'd„Z(e)dkr e(¦«dSdS)!aú
Unified Nextcloud CalDAV CLI.
Commands:
list - List calendars
events - View events (supports --today, --date, --start/--end, --search)
add - Create event (--summary, --start, --end, --recurrence, --description)
update - Modify event (--uid OR --summary+--date, with --set-* options)
delete - Remove event (--uid OR --summary+--date)
test - Verify connection
Requires environment variables:
NEXTCLOUD_URL, NEXTCLOUD_USER, NEXTCLOUD_PASSWORD, CALDAV_PRINCIPAL
éN)ÚdatetimeÚdateÚ timedeltaÚtimezoneÚ
NEXTCLOUD_URLÚú/ÚNEXTCLOUD_USERÚNEXTCLOUD_PASSWORDÚCALDAV_PRINCIPALz{DAV:}z{urn:ietf:params:xml:ns:caldav}ÚPROPFINDÚ1có —tj ¦«}| dtt
t ¦«tj tj |¦«¦«}tj  ||r| 
¦«nd|¬¦«}|  dd¦«|r|  d|¦«|r|  d|¦«|  dd¦«|  |¦« 
¦« d¦«S) N)ÚdataÚmethodz Content-Typeztext/xml; charset=utf-8ÚDepthzIf-Matchz
User-AgentzOpenClaw-Calendar/1.0zutf-8)ÚurllibÚrequestÚHTTPPasswordMgrWithDefaultRealmÚ add_passwordrr
r Ú build_openerÚHTTPBasicAuthHandlerÚRequestÚencodeÚ
add_headerÚopenÚreadÚdecode)ÚurlrÚbodyÚdepthÚetagÚpwÚopenerÚreqs úA/home/node/.openclaw/workspace/nextcloud-calendar/scripts/ncal.pyÚ make_requestr's €Ý Œ× 7Ò 7Ñ 9Ô 9€B؇O‚O�D�-­Õ9KÑLÔLÐLÝ
Œ^×
(Ò
(­¬×)LÒ)LÈRÑ)PÔ)PÑ
QÔ
Q€FÝ
Œ.×
Ò
 ¸DÐ+J¨4¯;ª;©=¬=¨=ÀdÐSYÐ
Ñ
ZÔ
Z€C؇N‚N�>Ð#<Ñ=Ô=Ð=Ø Ð,ˆc�nŠn˜W eÑ,Ô,Ð,Ø Ð-ˆS�^Š^˜J¨Ñ
-Ô
-Ð
-؇N‚N�<Ð!8Ñ9Ô9Ð9Ø �;Š;�sÑ Ô × Ò Ñ "Ô "× )Ò )¨'Ñ 2Ô 2Ð2ócó\—t›t›�}d}t||d¬¦«}tj|¦«}| dt ›dt›d�¦«}|�;|j  ¦«}| 
d¦«r|n
t›|›�St›dt›d �S)
Nz‘<?xml version="1.0"?>
<d:propfind xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav">
<d:prop><c:calendar-home-set/></d:prop>
</d:propfind>Ú0©r r!z.//zcalendar-home-set/ÚhrefÚhttpz/remote.php/dav/calendars/r ) rr r'ÚETÚ
fromstringÚfindÚ NS_CALDAVÚNS_DAVÚtextÚstripÚ
startswithr
)Ú
principal_urlr ÚrespÚrootÚelemr,s r&Úget_calendar_homer:)s¸€Ý$Ð8Õ&6Ð8Ð8€Mð €Dõ ˜
¨D¸Ð <Ñ <Ô <€DÝ
Œ=˜Ñ Ô €DØ �9Š9ÐD�9ÐDÐD½ÐDÐDÐDÑ EÔ E€DØ ÐØŒy�ŠÑ Ô ˆØ—’ vÑ.Ô.ÐLˆtˆtµ}Ð4LÀdÐ4LÐ4LÐLÝÐ HÐ Hµ~Ð HÐ HÐ HÐHr(cóÊ—t¦«}d}t||d¬¦«}tj|¦«}g}| t
›d�¦«D�] }| t
›d�¦«}|�|j d¦«sŒ=| t
›dt
›d�¦«}|€Œe| t
›d �¦«}|�|jn2|j  d¦« 
d¦«d
} |  | |j|j  d¦«rt›|j›�n|jd œ¦«�Œ
|S) Nz°<?xml version="1.0"?>
<d:propfind xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav">
<d:prop><d:displayname/><c:supported-calendar-component-set/></d:prop>
</d:propfind>rr+Úresponser,r z propstat/ÚpropÚ displaynameéÿÿÿÿ)Únamer,r)r:r'r.r/Úfindallr2r0r3Úendswithr4ÚsplitÚappendr5r)
Úhomer r7r8ÚcalsÚrÚhref_elr=Úname_elr@s
r&Ú
get_calendarsrJ7sp€Ý Ñ Ô €Dð €Dõ ˜ 4¨sÐ 3Ñ 3Ô 3€DÝ
Œ=˜Ñ Ô €DØ
€DØ
�\Š\�VÐ-Ð-Ð-Ñ
.Ô
.ð
 ñ
 ˆØ—&’&�F˜˜˜Ñ)Ô)ˆØ ˆ? '¤,×"7Ò"7¸Ñ"<Ô"<ˆ?Ø Ø�vŠv�Ð6Ð6­&Ð6Ð6Ð6Ñ7Ô7ˆØ ˆ<Ø Ø—)’)�vÐ2Ð2Ð2Ñ3Ô3ˆØ&Ð2ˆwŒ|ˆ|¸¼ ×8JÒ8JÈ3Ñ8OÔ8O×8UÒ8UÐVYÑ8ZÔ8ZÐ[]Ô8^ˆØ � Š ØØ”LØ7>´|×7NÒ7NÈsÑ7SÔ7SÐe•mÐ3 W¤\Ð3Ð3Ð3ÐY`ÔYeð
ð
ñ ô ð ñ ð
€Kr(cóò—t¦«}|std¦«‚|r.|D]}|d|kr
|dcSŒtd|›d�¦«‚|D]}|ddkr
|dcSŒ|ddS)NzNo calendars foundr@rz
Calendar 'z ' not foundÚPersonalr)rJÚ Exception)r@rFÚcals r&Úget_calendar_url_by_namerOPs¸€Ý ‰?Œ?€DØ ð.ÝÐ,Ñ-Ô-Ð-Ø ð8Øð "ð "ˆCØ�6Œ{˜dÒ"Ð"ؘ5”zÐ!Ð!Ð!ð#åÐ6 TÐ6Ð6Ð6Ñ7Ô7Ð7àððˆØ ˆvŒ;˜*Ò $Ð $Ø�u”:Ð Ð Ð ð %à �Œ7�5Œ>Ðr(có|—| ¦«}| d¦«rD tj|d¦« t
j¬¦«S#t$rYnwxYw tj|d¦«S#t$r- tj|d¦«cYS#t$r|cYcYSwxYwwxYw)NÚZú%Y%m%dT%H%M%SZ)Útzinfoú
%Y%m%dT%H%M%Sú%Y%m%d)r4rBrÚstrptimeÚreplacerÚutcÚ
ValueError)Údt_strs r&Úparse_datetime_icalr[_sè€Ø
�\Š\‰^Œ^€FØ
‡‚�sÑÔðð ÝÔ$ VÐ-=Ñ>Ô>×FÒFÍhÌlÐFÑ[Ô[Ð [øÝð ð ð Ø ˆDð øøøðÝÔ  ¨Ñ9Ô9Ð9øÝ ðððð ÝÔ$ V¨XÑ6Ô6Ð 6Ð 6Ð 6øÝð ð ð ØˆMˆMˆMˆMˆMð øøøðøøøsA«2AÁ
A+Á*A+Á/BÂ
B;ÂB&Â#B;Â& B7Â2B;Â6B7Â7B;cóÈ—t|t¦«r| d¦«St|t¦«r| d¦«St |¦«S)Nz%Y-%m-%d %H:%Mz%Y-%m-%d)Ú
isinstancerÚstrftimerÚstr)Údts r&Ú format_dtransV€Ý�"•hÑÔð-Ø�{Š{Ð+Ñ,Ô,Ð,Ý�"•dÑÔð'Ø�{Š{˜:Ñ&Ô&Ð&Ý ˆr‰7Œ7€Nr(cóþ—| d¦«}dddddddœ}d}d}|D�]5}| ¦«}| d¦«r|r
||dd…z
}Œ<|rŸ|dkr||d<n“|d kr||d
<n‡|d kr2td |vr| d ¦«dn|¦«|d
<nO|dkr2td |vr| d ¦«dn|¦«|d<n|dkr||d<n |dkr||d<d|vrT| dd¦«}|d d ¦«d}t |¦«dkr|dnd}�Œ7|rŸ|dkr||d<n“|d kr||d
<n‡|d kr2td |vr| d ¦«dn|¦«|d
<nO|dkr2td |vr| d ¦«dn|¦«|d<n|dkr||d<n |dkr||d<|S)Nú
zNo titler)ÚsummaryÚstartÚendÚ descriptionÚuidÚrrule)ú ú éÚSUMMARYrdÚ DESCRIPTIONrgÚDTSTARTú;reÚDTENDrfÚUIDrhÚRRULEriú:r)rCr4r5r[Úlen)Ú ical_textÚlinesÚevÚkeyÚvalÚlineÚstrippedÚpartss r&Úparse_ical_eventr~us…€Ø �OŠO˜DÑ !Ô !€Eب$°tÈBÐW[ÐfjÐ kÐ k€BØ
€CØ
€CØð5ñ5ˆØ—:’:‘<”<ˆØ × Ò ˜{Ñ +Ô +ð Øð
$Ø�x   ”|Ñ#�Ø Ø ð 3Ø�iÒа  I¡ Ø˜
Ò%Ð%¸3 r¨-Ñ'8Ð'8ؘ Ò!Ð!Õ1DÐZ]ÐadÐZdÐZdÀSÇYÂYÈsÁ^Ä^ÐTUÔEVÐEVÐjmÑ1nÔ1n 2 g¡; ;ؘ’�Õ-@ÐVYÐ]`ÐV`ÐV`ÀÇÂÈ3ÁÄÐPQÔARÐARÐfiÑ-jÔ-j  E¡ Ø˜’�¨3˜r %™y˜yؘ’�¨s  G¡Ø �(ˆ?ˆ?Ø—N’N 3¨Ñ*Ô*ˆEؘ”(—.’. Ñ%Ô% aÔ(ˆCÝ! %™jœj¨1šn˜n�%˜”(�(°"ˆCùØ
ð/Ø �)Ò Ð ¨S˜R  ™]˜]Ø
�MÒ
!Ð
!°s 2 mÑ#4Ð#4Ø
�IÒ
Ð
Õ-@ÐVYÐ]`ÐV`ÐV`ÀÇÂÈ3ÁÄÐPQÔARÐARÐfiÑ-jÔ-j˜r '™{˜{Ø
�GŠ^ˆ^Õ)<ÐRUÐY\ÐR\ÐR\¸S¿YºYÀs¹^¼^ÈAÔ=NÐ=NÐbeÑ)fÔ)f˜R ™Y˜YØ
�EŠ\ˆ\ s˜2˜e™9˜9Ø
�GŠ^ˆ^¨3˜R ™[Ø
€Ir(cóè—| d¦«}| d¦«}d|›d|›d�} t|d|d¬¦«}n#t$rgcYSwxYwtj|¦«}g} | t ›d�¦«D�]b}
|
 t ›d �¦«} |
 t ›d
�¦«} | �| €ŒB|  t ›d �¦«}
|
€Œb|
 t ›d �¦«}|
 t›d
�¦«}|�Ä|j r½t|j ¦«}|r§|rx|  ¦«|  dd¦«  ¦«vs<|  ¦«|  dd¦«  ¦«vr-|�|j nd|d<| j |d <|  
|¦«�Œd| S)NrRzï<c:calendar-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav">
<d:prop><d:getetag/><c:calendar-data/></d:prop>
<c:filter>
<c:comp-filter name="VCALENDAR">
<c:comp-filter name="VEVENT">
<c:time-range start="z" end="zQ"/>
</c:comp-filter>
</c:comp-filter>
</c:filter>
</c:calendar-query>ÚREPORTr)rr r!r<r,Úpropstatr=Úgetetagz
calendar-datardrrgr")r^r'rMr.r/rAr2r0r1r3r~ÚlowerÚgetrD)Ú calendar_urlÚstart_dtÚend_dtÚsearchÚ start_strÚend_strr r7r8ÚeventsrGr,r�r=r"Úcaldatarxs r&Ú query_eventsr�”sD€Ø×!Ò!Ð"2Ñ3Ô3€IØ�oŠoÐ.Ñ/Ô/€Gð ð
(ð ð ð
18ð ð ð €DðݘL°ÀÈCÐPÑPÔPˆˆøÝ ðððØˆ ˆ ˆ ðøøøå
Œ=˜Ñ Ô €DØ
€FØ
�\Š\�VÐ-Ð-Ð-Ñ
.Ô
.ð"ñ"ˆØ�vŠv��o�o�oÑ&Ô&ˆØ—6’6�VÐ-Ð-Ð-Ñ.Ô.ˆØ ˆ<˜8Ð+Ø Ø�}Š}¥˜_˜_˜_Ñ-Ô-ˆØ ˆ<Ø Ø�yŠy�FÐ+Ð+Ð+Ñ,Ô,ˆØ—)’)�yÐ7Ð7Ð7Ñ8Ô8ˆØ Ð  7¤<Ð Ý! '¤,Ñ/Ô/ˆBØð
"˜6ð
" V§\¢\¡^¤^°r·v²v¸iÈÑ7KÔ7K×7QÒ7QÑ7SÔ7SÐ%SÐ%SÐW]×WcÒWcÑWeÔWeÐik×ioÒioÐp}ðAñjBôjB÷jHòjHñjJôjJðXJðXJØ*.Ð*:˜TœY˜YÀ��6‘
Ø!œY��6‘
Ø—
’
˜bÑ!Ô!Ð!ùØ €MsµA Á AÁAcó`—gd¢}| d¦«r| d|d›�¦«| d¦«r| d|d›�¦«| d¦«}t|t¦«r,| d| d¦«›�¦«n@t|t
¦«r+| d| d ¦«›�¦«| d
¦«}t|t¦«r,| d | d¦«›�¦«n@t|t
¦«r+| d | d ¦«›�¦«| d | d
d¦«›�¦«| d¦«r,| d| dd¦«›�¦«| ddg¦«d |¦«S)N)úBEGIN:VCALENDARú VERSION:2.0ú PRODID:-//OpenClaw//Calendar//ENú BEGIN:VEVENTrhúUID:riúRRULE:reúDTSTART:rTrUrfúDTEND:úSUMMARY:rdrrgú DESCRIPTION:ú
END:VEVENTú
END:VCALENDARrc)r„rDr]rr^rÚextendÚjoin)rxÚicsrerfs r&Ú ical_dumprž¹s €ð ð ð €Cð 
‡v‚vˆe�}„}ð'Ø �
Š
Ð%˜"˜Uœ)Ð%Ð%Ñ&Ô&Ð&Ø ‡v‚vˆg�„ð+Ø �
Š
Ð)˜B˜wœKÐ)Ð)Ñ*Ô*Ð*Ø �FŠF�7‰OŒO€EÝ�%�Ñ"Ô"ð:Ø �
Š
Ð?˜eŸnšn¨_Ñ=Ô=Ð?Ð?Ñ@Ô@Ð@Ð@Ý �E�4Ñ Ô ð:Ø �
Š
Ð8˜eŸnšn¨XÑ6Ô6Ð8Ð8Ñ9Ô9Ð9Ø
�&Š&�‰-Œ-€CÝ�#•xÑ Ô ð6Ø �
Š
Ð;˜CŸLšL¨Ñ9Ô9Ð;Ð;Ñ<Ô<Ð<Ð<Ý �C�Ñ Ô ð6Ø �
Š
Ð4˜CŸLšL¨Ñ2Ô2Ð4Ð4Ñ5Ô5Ð5؇J‚JÐ0˜"Ÿ&š& ¨2Ñ.Ô.Ð0Ð0Ñ1Ô1Ð1Ø ‡v‚vˆmÑÔð>Ø �
Š
Ð< "§&¢&¨°rÑ":Ô":Ð<Ð<Ñ=Ô=Ð=؇J‚J� ˜oÐ.Ñ/Ô/Ð/Ø �9Š9�S‰>Œ>Ðr(có —t¦«}|std¦«dStd¦«|D]}td|d›�¦«ŒdS)NzNo calendars found.z
Calendars:ú- r@)rJÚprint)ÚargsrFÚcs r&Úcmd_listr¤Ôsl€Ý ‰?Œ?€DØ ðÝ
Ð#Ñ$Ô$Ð$ØˆÝ ˆ,ÑÔÐØ
ð ð ˆÝ
Ð�1�V”9ÐÐÑÔÐÐð ð r(c
óf—t|j¦«}tj¦«}|jrdt |j|j|j¦«}tj |td¬¦«ztj   ¦«¦«}�n|jr\t j
|j¦«}tj |td¬¦«ztj   ¦«¦«}n£|jr:|jr3tj
|j¦«}tj
|j¦«}nbt |j|j|j¦«}tj |td¬¦«ztj   ¦«¦«}t!||||j¬¦«}|st%d¦«dS| d„¬¦«|D]S}| d¦«}|rt+|¦«nd}t%d |›d
| d d ¦«›�¦«ŒTdS)
Nrl©Údays©rˆzNo events found.cóD—| d¦«p tjS)Nre)r„rÚmin)Úes r&ú<lambda>zcmd_events.<locals>.<lambda>ðs€˜aŸeše G™nœnÐ<µ´ €r()ryrezAll-dayú[z] rdr)rOÚcalendarrÚnowÚtodayrÚyearÚmonthÚdayÚcombinerrªÚtimeÚ
fromisoformatrerfr�rˆr¡Úsortr„ra) r¢Úcal_urlr¯r†r‡r‹rxreÚtime_strs r&Ú
cmd_eventsrºÝsü€Ý& t¤}Ñ5Ô5€GÝ
Œ,‰.Œ.€CØ „zð Uݘœ #¤)¨S¬WÑ5Ô5ˆÝÔ! (­Y¸AÐ->Ñ->Ô->Ñ">ÅÄ ×@QÒ@QÑ@SÔ@SÑTÔTˆ‰Ø
ŒðUÝÔ% d¤iÑ0Ô0ˆÝÔ! (­Y¸AÐ->Ñ->Ô->Ñ">ÅÄ ×@QÒ@QÑ@SÔ@SÑTÔTˆˆØ
ŒðU˜œðUÝÔ)¨$¬*Ñ5Ô5ˆÝÔ'¨¬Ñ1Ô1ˆˆå˜œ #¤)¨S¬WÑ5Ô5ˆÝÔ! (­Y¸AÐ->Ñ->Ô->Ñ">ÅÄ ×@QÒ@QÑ@SÔ@SÑTÔTˆÝ
˜' 8¨V¸D¼KÐ
HÑ
HÔ
H€FØ ðÝ
Ð Ñ!Ô!Ð!؈Ø
‡K‚KÐ<Ð<€KÑ=Ô=Ð=Øð6ð6ˆØ—’�w‘”ˆØ',Ð;•9˜UÑ#Ô#Ð#°)ˆÝ
Ð4�(Ð4Ð4˜bŸfšf Y¨rÑ2Ô2Ð4Ð4Ñ5Ô5Ð5Ð5ð6ð6r(c
óü—t|j¦«}tj|j¦«}|jrtj|j¦«n|t
d¬¦«z}ttj ¦«¦«}tj
tj ¦« 
d¦«}| 
d¦«}| 
d¦«}ddddd |›�d
|›�d |j›�d |›�d
|›�g }|jr| d|j›�¦«|jr| d|j›�¦«| ddg¦«| d¦«›d|›d�} t)| dd |¦«¬¦«t-d|j›�¦«dS#t.$r=}
t-d|
›�t0j¬¦«t1jd¦«Yd}
~
dSd}
~
wwxYw)Nrl)ÚhoursrRrTr�r�r‘r’r“zDTSTAMP:r—r•r–r”r˜r™ršr z.icsÚPUTrc)rr z
Added event: zFailed to add event: ©Úfile)rOr®rr¶rerfrr_ÚuuidÚuuid4r¯rrXr^rdÚ
recurrencerDrgr›Úrstripr'rœr¡rMÚsysÚstderrÚexit) r¢r¸r†r‡rhÚdtstampr‰rŠr�Ú event_urlr«s r&Úcmd_addrÉös€Ý& t¤}Ñ5Ô5€GÝÔ% d¤jÑ1Ô1€HØ15´Ð
\�XÔ
# D¤HÑ
-Ô
-Ð
-¸xÍ)ÐZ[ÐJ\ÑJ\ÔJ\Ñ?\€FÝ
�dŒj‰lŒlÑ