commit 54e6daee09e01c1df742a0de92e0f4889a262781 Author: Hans-Christian Payer Date: Tue May 12 12:31:18 2026 +0200 mit config.ini diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..d0ab4fc --- /dev/null +++ b/Pipfile @@ -0,0 +1,13 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +caldav = "*" +icalendar = "*" + +[dev-packages] + +[requires] +python_version = "3.14" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..4e844a4 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,723 @@ +{ + "_meta": { + "hash": { + "sha256": "9054d163ae11d3340046ee5035c05385631e1acc0c9d054a174ef809369b6c78" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.14" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "caldav": { + "hashes": [ + "sha256:39361f460a96599b8e4efbbdd711382adb1bbe8fc278eac4650f23cb6155eca5", + "sha256:d4df2c73843162af2fe7d324149830de8903690bfa094244029481d9bba320d0" + ], + "index": "pypi", + "markers": "python_version >= '3.10'", + "version": "==3.2.0" + }, + "charset-normalizer": { + "hashes": [ + "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc", + "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", + "sha256:07d9e39b01743c3717745f4c530a6349eadbfa043c7577eef86c502c15df2c67", + "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4", + "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", + "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", + "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", + "sha256:12a6fff75f6bc66711b73a2f0addfc4c8c15a20e805146a02d147a318962c444", + "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153", + "sha256:14265bfe1f09498b9d8ec91e9ec9fa52775edf90fcbde092b25f4a33d444fea9", + "sha256:16d971e29578a5e97d7117866d15889a4a07befe0e87e703ed63cd90cb348c01", + "sha256:177a0ba5f0211d488e295aaf82707237e331c24788d8d76c96c5a41594723217", + "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b", + "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c", + "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", + "sha256:1dc8b0ea451d6e69735094606991f32867807881400f808a106ee1d963c46a83", + "sha256:1efde3cae86c8c273f1eb3b287be7d8499420cf2fe7585c41d370d3e790054a5", + "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7", + "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", + "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", + "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", + "sha256:2cd4a60d0e2fb04537162c62bbbb4182f53541fe0ede35cdf270a1c1e723cc42", + "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", + "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df", + "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e", + "sha256:320ade88cfb846b8cd6b4ddf5ee9e80ee0c1f52401f2456b84ae1ae6a1a5f207", + "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", + "sha256:36836d6ff945a00b88ba1e4572d721e60b5b8c98c155d465f56ad19d68f23734", + "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38", + "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", + "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", + "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", + "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", + "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", + "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", + "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", + "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", + "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53", + "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790", + "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c", + "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", + "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", + "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", + "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", + "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", + "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", + "sha256:6370e8686f662e6a3941ee48ed4742317cafbe5707e36406e9df792cdb535776", + "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", + "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265", + "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008", + "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943", + "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374", + "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", + "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", + "sha256:6e0d51f618228538a3e8f46bd246f87a6cd030565e015803691603f55e12afb5", + "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616", + "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", + "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", + "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", + "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752", + "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", + "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", + "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7", + "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", + "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", + "sha256:813c0e0132266c08eb87469a642cb30aaff57c5f426255419572aaeceeaa7bf4", + "sha256:82b271f5137d07749f7bf32f70b17ab6eaabedd297e75dce75081a24f76eb545", + "sha256:84c018e49c3bf790f9c2771c45e9313a08c2c2a6342b162cd650258b57817706", + "sha256:8751d2787c9131302398b11e6c8068053dcb55d5a8964e114b6e196cf16cb366", + "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", + "sha256:87fad7d9ba98c86bcb41b2dc8dbb326619be2562af1f8ff50776a39e55721c5a", + "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", + "sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00", + "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", + "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a", + "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", + "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", + "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", + "sha256:a6c5863edfbe888d9eff9c8b8087354e27618d9da76425c119293f11712a6319", + "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", + "sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad", + "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d", + "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", + "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", + "sha256:aef65cd602a6d0e0ff6f9930fcb1c8fec60dd2cfcb6facaf4bdb0e5873042db0", + "sha256:af21eb4409a119e365397b2adbaca4c9ccab56543a65d5dbd9f920d6ac29f686", + "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34", + "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", + "sha256:bb8cc7534f51d9a017b93e3e85b260924f909601c3df002bcdb58ddb4dc41a5c", + "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1", + "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", + "sha256:bd9b23791fe793e4968dba0c447e12f78e425c59fc0e3b97f6450f4781f3ee60", + "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", + "sha256:c0f081d69a6e58272819b70288d3221a6ee64b98df852631c80f293514d3b274", + "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", + "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", + "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", + "sha256:c593052c465475e64bbfe5dbd81680f64a67fdc752c56d7a0ae205dc8aeefe0f", + "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d", + "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", + "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", + "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393", + "sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1", + "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af", + "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", + "sha256:d61f00a0869d77422d9b2aba989e2d24afa6ffd552af442e0e58de4f35ea6d00", + "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c", + "sha256:dca4bbc466a95ba9c0234ef56d7dd9509f63da22274589ebd4ed7f1f4d4c54e3", + "sha256:dd915403e231e6b1809fe9b6d9fc55cf8fb5e02765ac625d9cd623342a7905d7", + "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", + "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e", + "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", + "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8", + "sha256:e5f4d355f0a2b1a31bc3edec6795b46324349c9cb25eed068049e4f472fb4259", + "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", + "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", + "sha256:e80c8378d8f3d83cd3164da1ad2df9e37a666cdde7b1cb2298ed0b558064be30", + "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", + "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", + "sha256:ed065083d0898c9d5b4bbec7b026fd755ff7454e6e8b73a67f8c744b13986e24", + "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", + "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", + "sha256:f22dec1690b584cea26fade98b2435c132c1b5f68e39f5a0b7627cd7ae31f1dc", + "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", + "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", + "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", + "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", + "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", + "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464" + ], + "markers": "python_version >= '3.7'", + "version": "==3.4.7" + }, + "click": { + "hashes": [ + "sha256:398329ad4837b2ff7cbe1dd166a4c0f8900c3ca3a218de04466f38f6497f18a2", + "sha256:a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b8314305613" + ], + "markers": "python_version >= '3.10'", + "version": "==8.3.3" + }, + "dnspython": { + "hashes": [ + "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", + "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f" + ], + "markers": "python_version >= '3.10'", + "version": "==2.8.0" + }, + "h11": { + "hashes": [ + "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", + "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + ], + "markers": "python_version >= '3.8'", + "version": "==0.16.0" + }, + "icalendar": { + "hashes": [ + "sha256:10cd223c792fcc43bee4c3ebe3149d4cf32406c85cfef146624df5a0d414260f", + "sha256:6de875370d22fc4aff172ad7c439b39fb109dc2eab9ce358fcb95e8689ad7b56" + ], + "index": "pypi", + "markers": "python_version >= '3.10'", + "version": "==7.1.0" + }, + "icalendar-searcher": { + "hashes": [ + "sha256:66f6f5ece50041ceda5ea91995cd2ed80fa0b065a42b3b3f420f89343614b2a3", + "sha256:abd99bf1ac9c9d675d84151101db4883a97e9958755708804c55abd30df58f6c" + ], + "markers": "python_version >= '3.10' and python_version < '4.0'", + "version": "==1.0.5" + }, + "jh2": { + "hashes": [ + "sha256:05102a4610dde1dc59c630e64ca34a74076d1afd275dbeac954b230a605788b9", + "sha256:070adb3943f306257fff6dff4cbdcb5324afd78cbfa624f6686f198e6381d707", + "sha256:08392b71819ef4dec683010b0366b15da8ed495250110c6009833f25855ab6a4", + "sha256:148195763588b0b8003fc365783838fabdc8450346b7c8df0c7945b80f252fab", + "sha256:1517147850dd3bcf8e3204e7e4b4016e47440a889accfd6b055734dd2686bc89", + "sha256:176f4de35aef5f3eef38d6ae785bb530f911af1fc6a21512da620250cde95a94", + "sha256:18f10dcf0aa9f19833ac0f4d58b195af2d0b056423d428f74bf03f7839db8055", + "sha256:264b93edeb9368cd4ad8b8ba4a23e9404ba6a449ded00f6c1e62b259fabf43c8", + "sha256:27ab9efb8127d1dce11fb6f12cc4ab4339338cf66bb758734ee3e5e7937cf11a", + "sha256:2b7daf269b477e22beedc6767e471a72a3fc988538ad295b80dafceb289f3dc2", + "sha256:2d7e43c6248e3a091e9f6c5aac23236bd7ba0e30d240f4017b644bd3da049688", + "sha256:2f88407c7d2de429346e589ede8f0eaa594d6a8a3e388b658bbf4828998a53a0", + "sha256:31d5c24cc3c20b49ad00e25e2d429d51b240a7f7fc8910c48a1fa11cf84f0c71", + "sha256:31ddace327ac78b3137d79c4ce1a64fb8d5b1256a88078e7806b20280a22ed1c", + "sha256:34c0bbf4688917a3a1b1dba176bc49bb5b1ad4b75765431b989f7767061df432", + "sha256:3581858d586d0dc87bfb47c3446b67dbbbe5f26a0c4aab94bc0f88d9329a4101", + "sha256:37ecb9da2bbc590753593220a80b2c24d7e8411238bad2d1e331e5c2287bb3d1", + "sha256:3c3b06db73cde4e350e8acd5960e6bd9880e512cc8ab9c28003c74414261382b", + "sha256:3dea67e8ae492168e4271351dca8869e4bf79f3bb45d301d54f9639e8cb345ae", + "sha256:3ebfcd80cfcaa17bbb5733871953d1df79e1cc8bdc0f22d7372d9f2ef3524008", + "sha256:4aa8c32df2426f7a9d8633c2c8b5555edcace6e703640cb50f7ecb5732d9b50c", + "sha256:4dc82aee3ab2c4103f3d9092f4463dd6cc4a248ab6a27a4acab79bef0d3ac8dd", + "sha256:52f5c68a736f8f70e9b4f55e9678a5f12b203f244182d261d6ffe8b239ab08f0", + "sha256:5457b5bf89391cd21ab6cd051c2c1e2d78ee9507b2af473841ae5fafcc5bf048", + "sha256:550831792b78e547ad7510c62db98e4feb3c0df4002ac1fd9e9b0e30903bc159", + "sha256:558d4c15bc42419262ef15595d9c488ae53276b562397314e1cc934f4c7e4bdf", + "sha256:559c5ff8034ce36aa7c24c6acb80d4dc2a377ff552ff5c58be6d8762ed8ee048", + "sha256:57601fd1c5f6fce9e63ea1f2a61f83784478cf4d58e8491a7c18cc05abdb8e96", + "sha256:58f4c9da6555923f731e358d975e40d4ae6241c05b29e5a0f4dc8c91781cc229", + "sha256:5d6a1000872f99a2d50316bdab7dcb8a9eccebd1c7ca4ba2e656a74ee48015ac", + "sha256:60c7dc47084ff8d8fe98c7d8e4be6109d861045953a9f2036d791e6d72a7e1db", + "sha256:611c474b2c998fb09f5825dbe88626cc86c991a6d7dbc4c0d2a0848fa2fa437d", + "sha256:63190c909647ec4a5c8718ea8ef89230a1f33ec6588f93cb42555065f210ef87", + "sha256:66c61f837b3e5c897bd2a90149afd615f59d24c72c893526485bca1b40f6ec49", + "sha256:6ba33ff1d1275586bb4d83687c59783dad60b66ef3d420c04982bae7e0d75f9b", + "sha256:6c835b0b38d795dde7aaa4581626490ca5fcfbd4eefe9572ac18d9eb2427d215", + "sha256:6cd51dd02943b703e10eb536722c5fd205b6084333dac5b9c114bdbbc2c46b3a", + "sha256:6d15672b32f0891940691bac16a854af164e694f0b9d21bebfddd13e3c7d2f03", + "sha256:6dc37f78187655cf95032bee0e9578ff89d39734def8e27a6bf930d4caa08042", + "sha256:6df0c5f2a879ea47ec2f88f4abfb0ca14c2af174eda923b7f65e9954a4aecf38", + "sha256:73db6c7374aebb94e2758e1c34c0090b1dee39f13a28b812387c8e9478cdbee1", + "sha256:740e4e489759b749aaed695e8430d28a039c11765fc5e4d1b20bfad9c7e192f1", + "sha256:7a1388738fcce0ddc8e742d2d1c0619911299f339d54a19496bcbecfb4d7e775", + "sha256:7a78e0c94d242aa054f97e503fb05485df63b3d8e66ff5ec8710fc0dcd1fb83b", + "sha256:7c19511733a8ccf998042b64ac2077c334d73f2d0df4ce80b158694191a1f707", + "sha256:842f27673350dc22659cc0dfba035bf610927810fcfb6a9ddea594dcb3cfe774", + "sha256:84c32c68792170bbb19bc94ec5c5d8823ba31d177709d686c63cd6a9e8ef5cd3", + "sha256:84e4ef15d432f914394828f5127482584bd8bb6ca9d95220b25bc32a5bdec501", + "sha256:85cf4f09f7159c29967212af685d2819f960d9136d931420fef107683d121f56", + "sha256:86d1bd875161ce4d5303e667ad19fb7436476d1610aa04b21c14838c1669f32a", + "sha256:89c46416ccf0f457bfd4df67670c79052116f07ffb3951c5103d178c6bf372ec", + "sha256:8afe44228388f9282b4e3804e0212fc7f000ede156e73b2068f61fb821598c9f", + "sha256:8bf2a83fcbcd3dd53b80574655a54459e7ddd591d936ac67e636330764c75907", + "sha256:8d4c26ef61db31c6f33a572b40c6eff312131cac83300bbf6d75fbed1e5f073e", + "sha256:8e9f37f6497f8dbb1c1e254c77224ad06cfde22c1337230d308aeaab043eea27", + "sha256:92ff21001d59d47f929418d0dae55a97be16221c13e1f7ed134bdc79189475fb", + "sha256:963d7c46d8fc824eb5957086702e65ca552de4595a95c5c7906b41162e6459cc", + "sha256:97da940c5bc7f9ca1ddde294fac46f75ca4be2a7b7be5a32e87b6195f2f4203d", + "sha256:985a9eb136e7897bcedba873cf30b51c19481d94ab31a391d05eeecf27c390ba", + "sha256:9c39968cf5547d68f97a893c518f02f6caca94942206a958d8aa9325f8c3e330", + "sha256:a27e7e1ead8fb200a6d909b23031e3adf0dc2be0b2715fae61ca0af6b4a77de8", + "sha256:a3a66bd7612ab626a592d5c0d6b072bd48c0c1f6ab3ed1d1dbb427dbe7472ed2", + "sha256:a433f014c207ffc4b3eda0165fbd4d7d978b53cbdd6e71d441531221b2b1b879", + "sha256:a508df37d162ad523edd05477721e981ca33607ebbcd398eb000b0e7e9dca855", + "sha256:a970e377224e4f2e703e4ed72135a16c1539feb0d7f57f9e1dfa4514aa6fb257", + "sha256:aafd357af8d0de5267d3bc88e2384da30f05c38446a61425ae565925bc2ca9ba", + "sha256:af8d4f64794823fcdaa1ab4d01e40361e0dc0ddda9a6523e96a72b47a9e96e7f", + "sha256:b0008658e6308f71a3aabfbf1051cc71993fb9a993ccfa0cf711b52a1bc029dd", + "sha256:b0ad821964a7701e2b80c6f8b424b6d4ca575fefb1aa04227967ef78fa15fcd5", + "sha256:bf289d6fca3346ef133334bde88c08d4f1b76c9f3ef53cbc6be1e96bae3e3305", + "sha256:c0693e9efcb492f48b61453b6fca3cee60c544c494fa1eb7ab63dbe493189db4", + "sha256:c3c95d6c44d9d2d53bee5f5bbffdb2a1e6174c8c47803ac6ad7465e8d9e6e2d7", + "sha256:c4bc66dcfe87ef776aea114e45db658895e4c812bb044ad3a4d52abcb5d4083c", + "sha256:c5d4d20b96d643fd866d8d49b2fec2826eea99e7852c5aa0326d14e8ca517769", + "sha256:c7834d1000ac856234e7b574ed2ccf2136aab325d84051edb1db06c17e295df4", + "sha256:ca9473848bbf422b1c91c907bed9db66d7c29f37a6406c4614bd3fa782d0e2ab", + "sha256:cd19d6e0f8b82dd92e9e9836baf8c5d3a18d15d06c7838c64dae0f45b0cad24d", + "sha256:cd4187891ebc44e782c5606393e16818d63bc1dbd3a0028bafed62e2d0fdd3f2", + "sha256:cdb4bc4cb82e66a41d4f4ec9fb80f7ed7981cf7786efb6a94cf47ea27ec90e28", + "sha256:cf17baca8873260f6e80861feb8048c898b8a90569c374f430370240bd078995", + "sha256:cf85910f5d8506467e9a6fc9be3140f4ffe49e2baa973b71c83822c6e6e88480", + "sha256:d8115befc7092c4b5d4b32093d38bf4c8a543b84d9a7f7f632055854bd89cb63", + "sha256:d8d971f7e6c13c7e71b566683cdf8fa9569dfdca1443ee2545b3b8c68f3b6338", + "sha256:da8fbddf3e00a9e8e18afda67721e71cc69f1a81ba16a4a7b50f57efa47d2991", + "sha256:daadac34cefe67ea03a7d2324e03fc9b37ec8820604f1563e7d424471bee29b6", + "sha256:dbd90d3b9bba566c36b6613d9e867e69754058a1b8608d9b7c973fd3cd97ef69", + "sha256:dbe27e880218afc123c464359553771cedab793130eb3b0c72bd3f678512a2da", + "sha256:dbf08eead0483ecaf275c2f447b704d1583278f7abd6f0e945fccd6a581c7df4", + "sha256:dd0ac28b9c0e20c3b5e6840f6651a38303718f20c12df104c8e544ad245b2c24", + "sha256:dfb99fe1bd951d2da7d5dd90325c8a3c3834dd614339f536a45cbd1bc1335f1e", + "sha256:dfbb07be66cb96a289c876aaab7ac46da4fb70f6526298f1fda60076b971d5f0", + "sha256:e20f3bcf50192caea969b4bb674c8f6dc607fb5f8abe6b76248f698e9e4cab84", + "sha256:e28dabffcbd5525bf5f36d482764e3e56b513bce06a75b2fb4b540bedad80348", + "sha256:e5616ffeb5b173b540e2db230546a476c5618cf25dac5bb9149c06fc6b0a9e4f", + "sha256:e5c64aa5f61d986a4f1b4cc319056dcb7198c3c25e3a81b3302a396479e5561a", + "sha256:e6998c4e1bd862d58426ab654b99cf1f52163acff767714048711225aaf6fc3f", + "sha256:e6c5421e4eb59f9f15822b9002b26a78a8f9d4e507e4f79d6f3d5f992db4be0a", + "sha256:ebe5ec3b51704119ca66717828631a777bc64132517f445d0b9ac2f30dd38264", + "sha256:f035aa4cdf3193bc03e7e36b4154d9036f87d002ba553839ec73412242de62ef", + "sha256:f26cdbf79bd0792bc65b7825b356040c56c365041a6ae7c44e5655f8fa173fe6", + "sha256:f48bb00711eefaefbfafd791da8bd8796d683aef6a4c320b7a393555f6d23115", + "sha256:f639bbe255623af299f75b2ef8e98b0c88ead8b9f420d20abe487fb8a33238b6", + "sha256:f8e208e3bc3909d82c7ecb936bad35cc2271eb425e7faac352618c26a23568d0", + "sha256:fa18a2886a229a0d53a2c6c3d109079cdd2550466f2ae2286e43a1c66d47d627", + "sha256:fc22823c633e95c6b5298f9ffe2d77f0f1787f2d03c47ccb7dff006e6c30fac3", + "sha256:fc2bdcc2fecb3e3382bbf2834d81b981c3b8978be67c54c2aeeba01dee911161" + ], + "markers": "python_version >= '3.7'", + "version": "==5.0.11" + }, + "lxml": { + "hashes": [ + "sha256:00750d63ef0031a05331b9223463b1c7c02b9004cef2346a5b2877f0f9494dd2", + "sha256:022981127642fe19866d2907d76241bb07ed21749601f727d5d5dd1ce5d1b773", + "sha256:045e387d1f4f42a418380930fa3f45c73c9b392faf67e495e58902e68e8f44a7", + "sha256:05b9b8787e35bec69e68daf4952b2e6dfcfb0db7ecf1a06f8cdfbbac4eb71aad", + "sha256:07f98f5496f96bf724b1e3c933c107f0cbf2745db18c03d2e13a291c3afd2635", + "sha256:08950a23f296b3f83521577274e3d3b0f3d739bf2e68d01a752e4288bc50d286", + "sha256:0d082495c5fcf426e425a6e28daaba1fcb6d8f854a4ff01effb1f1f381203eb9", + "sha256:0f0f08beb0182e3e9a86fae124b3c47a7b41b7b69b225e1377db983802404e54", + "sha256:1081dd10bc6fa437db2500e13993abf7cc30716d0a2f40e65abb935f02ec559c", + "sha256:11a873c77a181b4fef9c2e357d08ed399542c2af1390101da66720a19c7c9618", + "sha256:183bfb45a493081943be7ea2b5adfc2b611e1cf377cefa8b8a8be404f45ef9a7", + "sha256:19f4164243fc206d12ed3d866e80e74f5bc3627966520da1a5f97e42c32a3f39", + "sha256:1ae225f66e5938f4fa29d37e009a3bb3b13032ac57eb4eb42afa44f6e4054e69", + "sha256:1bc4cc83fb7f66ffb16f74d6dd0162e144333fc36ebcce32246f80c8735b2551", + "sha256:1dd6a1c3ad4cb674f44525d9957f3e9c209bb6dd9213245195167a281fcc2bdc", + "sha256:20cf4d0651987c906a2f5cba4e3a8d6ba4bfdf973cfe2a96c0d6053888ea2ecd", + "sha256:2173a7bffe97667bbf0767f8a99e587740a8c56fdf3befac4b09cb29a80276fd", + "sha256:21c3302068f50d1e8728c67c87ba92aa87043abee517aa2576cca1855326b405", + "sha256:23a5dc68e08ed13331d61815c08f260f46b4a60fdd1640bbeb82cf89a9d90289", + "sha256:23cad0cc86046d4222f7f418910e46b89971c5a45d3c8abfad0f64b7b05e4a9b", + "sha256:2593a0a6621545b9095b71ad74ed4226eba438a7d9fc3712a99bdb15508cf93a", + "sha256:264c605ab9c0e4aa1a679636f4582c4d3313700009fac3ec9c3412ed0d8f3e1d", + "sha256:26c5272c6a4bf4cf32d3f5a7890c942b0e04438691157d341616d02cca74d4bd", + "sha256:26dd9f57ee3bd41e7d35b4c98a2ffd89ed11591649f421f0ec19f67d50ec67ac", + "sha256:28902146ffbe5222df411c5d19e5352490122e14447e98cd118907ee3fd6ee62", + "sha256:29f5c00cb7d752bce2c70ebd2d31b0a42f9499ffdd3ecb2f31a5b73ee43031ad", + "sha256:30e7b2ed63b6c8e97cca8af048589a788ab5c9c905f36d9cf1c2bb549f450d2f", + "sha256:32662519149fd7a9db354175aa5e417d83485a8039b8aaa62f873ceee7ea4cad", + "sha256:363e47283bde87051b821826e71dde47f107e08614e1aa312ba0c5711e77738c", + "sha256:3648f20d25102a22b6061c688beb3a805099ea4beb0a01ce62975d926944d292", + "sha256:37448bf9c7d7adfc5254763901e2bbd6bb876228dfc1fc7f66e58c06368a7544", + "sha256:37fabd1452852636cf38ecdcc9dd5ca4bba7a35d6c53fa09725deeb894a87491", + "sha256:398443df51c538bd578529aa7e5f7afc6c292644174b47961f3bf87fe5741120", + "sha256:3ae5d8d5427f3cc317e7950f2da7ad276df0cfa37b8de2f5658959e618ea8512", + "sha256:3f00972f84450204cd5d93a5395965e348956aaceaadec693a22ec743f8ae3eb", + "sha256:40d9189f80075f2e1f88db21ef815a2b17b28adf8e50aaf5c789bfe737027f32", + "sha256:419c58fc92cc3a2c3fa5f78c63dbf5da70c1fa9c1b25f25727ecee89a96c7de2", + "sha256:41dcc4c7b10484257cbd6c37b83ddb26df2b0e5aff5ac00d095689015af868ec", + "sha256:43e4d297f11080ec9d64a4b1ad7ac02b4484c9f0e2179d9c4ef78e886e747b88", + "sha256:45e9dfbd1b661eb64ba0d4dbe762bd210c42d86dd1e5bd2bdf89d634231beb43", + "sha256:4642e04449a1e164b5ff71ffd901ddb772dfabf5c9adf1b7be5dffe1212bc037", + "sha256:468479e52ecf3ec23799c863336d02c05fc2f7ffd1a1424eeeb9a28d4eb69d13", + "sha256:47024feaae386a92a146af0d2aeed65229bf6fff738e6a11dda6b0015fb8fd03", + "sha256:481d6e2104285d9add34f41b42b247b76b61c5b5c26c303c2e9707bbf8bd9a64", + "sha256:4937460dc5df0cdd2f06a86c285c28afda06aefa3af949f9477d3e8df430c485", + "sha256:4a1503c56e4e2b38dc76f2f2da7bae69670c0f1933e27cfa34b2fa5876410b16", + "sha256:4b89b098105b8599dc57adac95d1813409ac476d3c948a498775d3d0c6124bfb", + "sha256:4bd1bdb8a9e0e2dd229de19b5f8aebac80e916921b4b2c6ef8a52bc131d0c1f9", + "sha256:4e2c54d6b47361d0f1d3bc8d4e082ad87201e56ccdcca4d3b9ee3644ff595ec8", + "sha256:52b0ac6903cf74ebf997eb8c682d2fbac7d1ab7e4c552413eec55868a9b73f39", + "sha256:546b66c0dd1bb8d9fa89d7123e5fa19a8aff3a1f2141eb22df96112afb17b842", + "sha256:56971379bc5ee8037c5a0f09fa88f66cdb7d37c3e38af3e45cf539f41131ac1f", + "sha256:5715e0e28736a070f3f34a7ccc09e2fdcba0e3060abbcf61a1a5718ff6d6b105", + "sha256:5cfa1a34df366d9dc0d5eaf420f4cf2bb1e1bebe1066d1c2fc28c179f8a4004c", + "sha256:5d27bbe326c6b539c64b42638b18bc6003a8d88f76213a97ac9ed4f885efeab7", + "sha256:6262b87f9e5c1e5fe501d6c153247289af42eb44ad7660b9b3de17baaf92d6f6", + "sha256:63aeafc26aac0be8aff14af7871249e87ea1319be92090bfd632ec68e03b16a5", + "sha256:690022c7fae793b0489aa68a658822cea83e0d5933781811cabbf5ea3bcfe73d", + "sha256:6fd8b1df8254ff4fd93fd31da1fc15770bde23ac045be9bb1f87425702f61cc9", + "sha256:73becf6d8c81d4c76b1014dbd3584cb26d904492dcf73ca85dc8bff08dcd6d2d", + "sha256:73d658216fc173cf2c939e90e07b941c5e12736b0bf6a99e7af95459cfe8eabb", + "sha256:75c4c7c619a744f972f4451bf5adf6d0fb00992a1ffc9fd78e13b0bc817cc99f", + "sha256:76b958b4ea3104483c20f74866d55aa056546e15ebe83dd7aecd63698f43b755", + "sha256:77b9f99b17cbf14026d1e618035077060fc7195dd940d025149f3e2e830fbfcb", + "sha256:7ba11752e346bd804ea312ec2eea2532dfa8b8d3261d81a32ef9e6ab16256280", + "sha256:7da13bb6fbadfafb474e0226a30570a3445cfd47c86296f2446dafbd77079ace", + "sha256:7e39ab3a28af7784e206d8606ec0e4bcad0190f63a492bca95e94e5a4aef7f6e", + "sha256:7f4a77d6f7edf9230cee3e1f7f6764722a41604ee5681844f18db9a81ea0ec33", + "sha256:80410c3a7e3c617af04de17caa9f9f20adaa817093293d69eae7d7d0522836f5", + "sha256:81ff55c70b67d19d52b6fd118a114c0a4c97d799cd3089ff9bd9e2ff4b414ee2", + "sha256:857efde87d365706590847b916baff69c0bc9252dc5af030e378c9800c0b10e3", + "sha256:89e8d73d09ac696a5ba42ec69787913d53284f12092f651506779314f10ba585", + "sha256:8c11b984b5ce6add4dccc7144c7be5d364d298f15b0c6a57da1991baedc750ce", + "sha256:8c8984e1d8c4b3949e419158fda14d921ff703a9ed8a47236c6eb7a2b6cb4946", + "sha256:8e369cbd690e788c8d15e56222d91a09c6a417f49cbc543040cba0fe2e25a79e", + "sha256:9147d8e386ec3b82c3b15d88927f734f565b0aaadef7def562b853adca45784a", + "sha256:920354904d1cb86577d4b3cfe2830c2dbe81d6f4449e57ada428f1609b5985f7", + "sha256:942454ff253da14218f972b23dc72fa4edf6c943f37edd19cd697618b626fac5", + "sha256:972a6451204798675407beaad97b868d0c733d9a74dafefc63120b81b8c2de28", + "sha256:976a6b39b1b13e8c354ad8d3f261f3a4ac6609518af91bdb5094760a08f132c4", + "sha256:97faa0860e13b05b15a51fb4986421ef7a30f0b3334061c416e0981e9450ca4c", + "sha256:9c03e048b6ce8e77b09c734e931584894ecd58d08296804ca2d0b184c933ce50", + "sha256:9e7b0a4ca6dcc007a4cef00a761bba2dea959de4bd2df98f926b33c92ca5dfb9", + "sha256:9eb667bf50856c4a58145f8ca2d5e5be160191e79eb9e30855a476191b3c3495", + "sha256:9f93d5b8b07f73e8c77e3c6556a3db269918390c804b5e5fcdd4858232cc8f16", + "sha256:a0092f2b107b69601adf562a57c956fbb596e05e3e6651cabd3054113b007e45", + "sha256:a02ca8fe48815bddcfca3248efe54451abb9dbf2f7d1c5744c8aa4142d476919", + "sha256:a1d9b99e5b2597e4f5aed2484fef835256fa1b68a19e4265c97628ef4bf8bcf4", + "sha256:a2853c8b2170cc6cd54a6b4d50d2c1a8a7aeca201f23804b4898525c7a152cfc", + "sha256:a31286dbb5e74c8e9a5344465b77ab4c5bd511a253b355b5ca2fae7e579fafec", + "sha256:a86f06f059e22a0d574990ee2df24ede03f7f3c68c1336293eee9536c4c776cd", + "sha256:ab863fd37458fed6456525f297d21239d987800c46e67da5ef04fc6b3dd93ac8", + "sha256:ac4db068889f8772a4a698c5980ec302771bb545e10c4b095d4c8be26749616f", + "sha256:b6c2f225662bc5ad416bdd06f72ca301b31b39ce4261f0e0097017fc2891b940", + "sha256:bb40648d96157f9081886defe13eac99253e663be969ff938a9289eff6e47b72", + "sha256:bba078de0031c219e5dd06cf3e6bf8fb8e6e64a77819b358f53bb132e3e03366", + "sha256:bc783ee3147e60a25aa0445ea82b3e8aabb83b240f2b95d32cb75587ff781814", + "sha256:be10838781cb3be19251e276910cd508fe127e27c3242e50521521a0f3781690", + "sha256:bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13", + "sha256:c08da09dc003c9e8c70e06b53a11db6fb3b250c21c4236b03c7d7b443c318e7a", + "sha256:c3592631e652afa34999a088f98ba7dfc7d6aff0d535c410bea77a71743f3819", + "sha256:c4a699432846df86cc3de502ee85f445ebad748a1c6021d445f3e514d2cd4b1c", + "sha256:c4e425db0c5445ef0ad56b0eec54f89b88b2d884656e536a90b2f52aecb4ca86", + "sha256:c53fa3a5a52122d590e847a57ccf955557b9634a7f99ff5a35131321b0a85317", + "sha256:c6854e9cf99c84beb004eecd7d3a3868ef1109bf2b1df92d7bc11e96a36c2180", + "sha256:c748ebcb6877de89f48ab90ca96642ac458fff5dec291a2b9337cd4d0934e383", + "sha256:c871299c595ee004d186f61840f0bfc4941aa3f17c8ba4a565ead7e4f4f820ee", + "sha256:cbd7b79cdcb4986ad78a2662625882747f09db5e4cd7b2ae178a88c9c51b3dfe", + "sha256:cc16682cc987a3da00aa56a3aa3075b08edb10d9b1e476938cfdbee8f3b67181", + "sha256:cec05be8c876f92a5aa07b01d60bbb4d11cfbdd654cad0561c0d7b5c043a61b9", + "sha256:d036ee7b99d5148072ac7c9b847193decdfeac633db350363f7bce4fff108f0e", + "sha256:d0d799ff958655781296ec870d5e2448e75150da2b3d07f13ff5b0c2c35beefd", + "sha256:d1392c569c032f78a11a25d1de1c43fff13294c793b39e19d84fade3045cbbc3", + "sha256:d2f17a16cd8751e8eb233a7e41aecdf8e511712e00088bf9be455f604cd0d28d", + "sha256:d3829a6e6fd550a219564912d4002c537f65da4c6ae4e093cc34462f4fa027ad", + "sha256:d43aa26dcda363f21e79afa0668f5029ed7394b3bb8c92a6927a3d34e8b610ea", + "sha256:d6d8efe71429635f0559579092bb5e60560d7b9115ee38c4adbea35632e7fa24", + "sha256:dabecc48db5f42ba348d1f5d5afdc54c6c4cc758e676926c7cd327045749517d", + "sha256:db88156fcf544cdbf0d95588051515cfdfd4c876fc66444eb98bceb5d6db76de", + "sha256:de550d129f18d8ab819651ffe4f38b1b713c7e116707de3c0c6400d0ef34fbc1", + "sha256:e0af85773850417d994d019741239b901b22c6680206f46a34766926e466141d", + "sha256:e3c4f84b24a1fcba435157d111c4b755099c6ff00a3daee1ad281817de75ed11", + "sha256:e3dd5fe19c9e0ac818a9c7f132a5e43c1339ec1cbbfecb1a938bd3a47875b7c9", + "sha256:e69aa6805905807186eb00e66c6d97a935c928275182eb02ee40ba00da9623b2", + "sha256:e80807d72f96b96ad5588cb85c75616e4f2795a7737d4630784c51497beb7776", + "sha256:ebe33f4ec1b2de38ceb225a1749a2965855bffeef435ba93cd2d5d540783bf2f", + "sha256:f0cea5b1d3e6e77d71bd2b9972eb2446221a69dc52bb0b9c3c6f6e5700592d93", + "sha256:f15401d8d3dbf239e23c818afc10c7207f7b95f9a307e092122b6f86dd43209a", + "sha256:f504d861d9f2a8f94020130adac88d66de93841707a23a86244263d1e54682f5", + "sha256:fc46da94826188ed45cb53bd8e3fc076ae22675aea2087843d4735627f867c6d", + "sha256:fc7140d7a7386e6b545d41b7358f4d02b656d4053f5fa6859f92f4b9c2572c4d", + "sha256:fcf3da95e93349e0647d48d4b36a12783105bcc74cb0c416952f9988410846a3", + "sha256:fe022f20bc4569ec66b63b3fb275a3d628d9d32da6326b2982584104db6d3086", + "sha256:ffb34ea45a82dd637c2c97ae1bbb920850c1e59bcae79ce1c15af531d83e7215" + ], + "markers": "python_version >= '3.8'", + "version": "==6.1.0" + }, + "niquests": { + "hashes": [ + "sha256:06244ef4d1c93b067295b22c1d7a8938be948af1227d368c22acf531f61fdf57", + "sha256:9b1a3a378277bfca4b2438877d0954e989e4d3f3f75da7bb83bf7204dfa5f1cf" + ], + "markers": "python_version >= '3.7'", + "version": "==3.18.8" + }, + "python-dateutil": { + "hashes": [ + "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", + "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==2.9.0.post0" + }, + "pyyaml": { + "hashes": [ + "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", + "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a", + "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", + "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", + "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", + "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", + "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", + "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", + "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0", + "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", + "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", + "sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6", + "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7", + "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", + "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007", + "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", + "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", + "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9", + "sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295", + "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", + "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", + "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", + "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", + "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", + "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", + "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", + "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", + "sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b", + "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", + "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5", + "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", + "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", + "sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369", + "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", + "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", + "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", + "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", + "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", + "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", + "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", + "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", + "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", + "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", + "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", + "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", + "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", + "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", + "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", + "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", + "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4", + "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", + "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", + "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", + "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", + "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", + "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", + "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da", + "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", + "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", + "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", + "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", + "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f", + "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917", + "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", + "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", + "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", + "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", + "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", + "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", + "sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3", + "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", + "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926", + "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0" + ], + "markers": "python_version >= '3.8'", + "version": "==6.0.3" + }, + "qh3": { + "hashes": [ + "sha256:0d23a4b8c76a5fb4290b50319f6a77ecbb9572978b64f0cd014a26f12b769124", + "sha256:0ebd0af3fe6208580fa68b4b0be8a40280ab295aaa5c6826447ade597129972d", + "sha256:0f4359882fa2b8653dbf280188529debaf38959a10e60a64e3fa25a3a8b50462", + "sha256:1063d1586dd4ad04c4ac467f31d5f0d6bfd31580b64dcb5b6f6cfb0cc0e49955", + "sha256:1472316833898ea402b2947dec1bf3808935d620b76df857f139674b66fdac8f", + "sha256:182cf18d37eb64d619c1d284381930d8cdf8c889de35a873d490cb555369daf5", + "sha256:1d09950baf910e3cb0053d546a8fd8bdb7dae5f4d217a88f51ffcf2dd7b1397d", + "sha256:2534c4647c8fe84725c115e064c77235865f16ab420e51970f54c2a1d47a3de2", + "sha256:28d5d73903850d5733eb4c7f6cc3a81d40099f98204b5c8482330a1fb7ca92c8", + "sha256:2bc69409c5c49d17a246ac50e0f9c3468963d17a03b2c60b9bb88543b547c298", + "sha256:2bd4b95d4c9e9e5a4df36867aa344feae8d7b5a511d56035603ccbbb41b00a84", + "sha256:2c13604fb90c66e502c7a97ef3a57559765a6dbf2abd3de39b8486e873e592a5", + "sha256:2df3ebda00d1707c190bc4f827343bf43f247a03d3caceae0ed549df9a23a136", + "sha256:2e3f54647b515433704f66ecffc5a81a747621658cb448b95018c0958c18b203", + "sha256:2ebdb31426f5f503108366dbba401b624cf060e6cc80d48537884acd878d49fe", + "sha256:2ec8b3e339561c5fc2e8623b95afb746020528fe0f85b6e879d218dae96182a9", + "sha256:30fa62bd99537c62e73222e00b145bc7c249bd4c7f1c77124bfeb12f562b16e8", + "sha256:3107922294f4c05ef42eaf7bbd85c561f8c7c9ba2b14cf1166a8e4daf38c6646", + "sha256:31669c33fe8c76cca42cf6d9650734904fc7df0a7a6b16e4e7dbc5fe58763ca6", + "sha256:38dd0cfb880b0a6ea7b5d76d5ac666b6c7b21c4bd7a3fa3ffa92b16d187a681a", + "sha256:3d52a652758dc810c0541f86e6149675e78dc3119a93b8c3d052e65996858bdd", + "sha256:3ee3b1d7dd85dea4c3d9606bdcb7f84e5024b4c4649c2921de6fc0ccad4c7d60", + "sha256:40909e358c44f48b49a878490ca3f4bddc3c0d76b23c90e172aa1a2c6464b097", + "sha256:42386c9371fcdac54db0f02f735f251b97a0a35aa23dac921a3c2cf2f7052bad", + "sha256:45d79405a671662f57a5e9bd832842448feac771921ea869376c064d874f9e52", + "sha256:47ede6c3bc533010e07dc86a14793a8dc8b4c61d0a816f2f7a24b292312a5463", + "sha256:4ab5178d09842398f465cecc2b95bf51e54911e18f2e0c7cd4f377893560beee", + "sha256:4ac855e16b5f31022fb4c1191cf9de17b65dd749aa0a2bceeddb1a066e8f5299", + "sha256:4c0a3cc2f6075187b5337febb9933f30d2d7067daa732dd859c9c9bf95c2e843", + "sha256:4c72e064a8dc1357ac2793fad37c631ad2f1cda6da513c6c28bba667ef3b3f66", + "sha256:5218180fffee8dfadd91bbc2927e6aaaf5698df85693f98082aca8efb3ed337f", + "sha256:528364da7fa7e58bff1ef49f714303594e78755d2ec0e9c69dc906aaad7e74e0", + "sha256:558f4883af8631d667254886bf7fcc7f8565ada6fdd81d7aae3872bcebd9c108", + "sha256:576cfd6a657f3b5f574e601500461d586b2e7037fa24ea876f5f724a10f2f552", + "sha256:583eabc49063174e74171451864e1c542ddbbb49b3c3f218b036acbb070fac21", + "sha256:58e2626ce9d8454c5a1a43cbdb616449221027be201b5d9bc1ba4be9d8aeee2a", + "sha256:5b0634d6b5bce36cf22531e25c95c89d56a34d9e27e49872117df30d9daabe1c", + "sha256:5de3c63bc36ff8b4a6f95318646c9fc14aba12eef4bf95a16942a645bf710131", + "sha256:5e8ebb94b7145da71cb53113683d6124cebbac81b93b83432147cf63a325248b", + "sha256:60ec47e3395a71bba5f9d0391e50d31b959c35a5beb7cdb8a32acb886355d6e5", + "sha256:60f3891866a6305bf339c166533e80f265f75c10e856173ca482bfc35a7b0e73", + "sha256:6167d490abea55730e82a88fbca50e2bcba9ca88d83c83968ea59c5a9067ff12", + "sha256:637bd0c8ea5a03fe725ae89b6a3e6e6ca3d3bcbcf74c1449889425e9e9b3c75b", + "sha256:69311438af5553caaafeb5e9b5c30c15a8d9be5d07285dcd492b7592f7d3f69a", + "sha256:6cc769dc57b831d895a7c6a260a6595483f96144d640783d771f55b814074c8b", + "sha256:6f2488c92f2e495c0a18e88258274532acddde4c2542d0ffc2d7614167538451", + "sha256:6fb0e6f1b895df5f507aa98cb30da4a2782a68c1890634d408f29caa8ba8168c", + "sha256:70893e5b3e34b902e096a17a8ebae3a2c5cabd47ec86f9509c59fd36cd54c8ce", + "sha256:7132d3498a985f7588b5f9a6285aed813fa034f0c6f491a943c0f306d7ebb0eb", + "sha256:76e03d577d56cf7a219848c9e3aad44ede24d628ec446487831e92b32a8b4030", + "sha256:7b77aa629ad836cad5a9d46b97e1ec8e00e3124f215c02f5b53ccd85c1f8c28c", + "sha256:7bbf7b808147f1e6568188d75f6b96630d6c6aea5779d9b59eb159c635abbc28", + "sha256:7f4a5383bd239ba4e05a4c93418e0fb8fcc9b1c3fb38f492a1c3f92a6a4f4217", + "sha256:830947509b44e96a89549aacb5768abefb4ccc05379f06a6f8bb0fdbab2c1a9f", + "sha256:83bdb9963cde76a7bd3f7f2e3fc9e7df47e014d5f9d23cce99b213a4275018c5", + "sha256:86cd5e432c2eccecf7bb9bbd03aea8b61b94bc0263148038f2a486ed9d546417", + "sha256:894aa7273d61139970f8abd120f4dcec2cd06ae9b17e9989a5bbe6827abb070a", + "sha256:899d2224771ab4f45306d6787aef3ce748b9350b74a2b4a46eb5f4f3a4ab142a", + "sha256:8e4cfc6d8ae494f0ae052492f1fc51ad1a3ce7eb3f4ed3bc0276fc7e3f4ee1c5", + "sha256:8e75516f5c152ccb69f2290b75510f1ebb5766f07da19d9c0b3208c024979be4", + "sha256:8f716284e10890708e1911df8b60debca8eaae1e752298719f615df492c54c91", + "sha256:91c1355aa36971088626b0492c086bb5e4990fb307a78d3143714ff7522ccffc", + "sha256:9497be6f89ccd27cbbd678b45e73368fc4e0794c9d9196b47f57c2877cab14c5", + "sha256:95452435bdd38a8c5fee4c835de090207cfc4a99c4d799a88016d5284396f405", + "sha256:96259508b1fff9ab5fe8e734e825992ef1aec7c5dfced4afb8839b15831e2082", + "sha256:992753fe1631ae1088e1e4cba2cc3d88bb42834443a03f54f129aa584c41ad11", + "sha256:999bc38706e88bfddf60f1091ba626d8ae3b39feb57345b23a4cd755ab20c362", + "sha256:a246de889fd4a037123b41bbdc3ee5fd8eb8f9254595cf2d47e34d604cad5336", + "sha256:a33b29f79cb35b51cd183046b97317ea17e4fd764f23409d1185ecdfb3281db7", + "sha256:a411ca298f827a43dd8b6b6b9ebbf07667f57a9a4728874bbf191a500cd7958f", + "sha256:a5945d35737d45431543807794a7d06fa38d9440649b3467fb490b26bb81b645", + "sha256:a60fb2f1b363004a8ce7188cf6eb7867a2eddd552b16ae028b266a317528ca69", + "sha256:aaab3a428e3dda57bfc1e7d2c07cacd971721b1b30140f8e7d6b9445ecf4d3b7", + "sha256:ab1baf87092db6f442fd6f8871745bffe0d70603324945fbe0b559b1a3b50255", + "sha256:b1fdb5ce3c51fd83cf4ce1b613d6d0e74207a8e414d405b8f9f6d98c7b30161f", + "sha256:b26a3787963759f8d907273613602219e4a03f6b8f5a88e97db809c6bd003301", + "sha256:b457d73da497029bb8cbffb532538c36676c3a365d8c4fee36780a35a54300e3", + "sha256:b663902cc74fe3f7f4f7d47ff7b42aed1d58172391b116e388e4557a76b3635b", + "sha256:bac42ed5a2991927630be2940d28d40358c9eec89e3e5e31a012aed52da9f158", + "sha256:bb898db0154d0673b94d53e6b0345ec9a97932a0f730dd9140bfefa7a65eb234", + "sha256:bbf293fb4a6aa3721c559e2a7f12cda259eb837b962ddc2fa2246172b0869355", + "sha256:bef5914389fd03864922fd16656ed4c086f854805485cb04013c1e9fed4ccad9", + "sha256:bf8811c2648ad7e43b1537e01ab1ef49ead72ffd40662107340d3fdd610f9552", + "sha256:c23816f4f4e017528cb30eef697aa607578ad42d3111ae7552c73666021d5268", + "sha256:c4e37418e7a0b606348f06dedc5742032ca589478e28e24e5c455005d527ec75", + "sha256:c5a691ae21abd4836c6e6ba7495e2a2b4af2b7e075331e03381e703045c79256", + "sha256:c708733fa1255542c57d6e8b253e226ab096eb5a5a8f0dfed477fb013f0688cb", + "sha256:c751660c8227aeeca6bddf2b1d137e217dcc87058c2076d24d2b4259b04574fd", + "sha256:c7da0930285428a57ae878b2f6f6c2fe8149f5b54c17972a85b77198b05a2c6f", + "sha256:cbb530d1cb322bde0d47266656e0d497a258827c990fbccc029ffed362a6102b", + "sha256:cc310cf8af3ba6fc9a0507a1155c5cc7a161e1427f205a80c6e351abbcfee1b3", + "sha256:cc9dbd73bd30dc3949c05ee0a658244201eb1932e6ed2312c5359a3c09567f11", + "sha256:d05e7264e12b775bb2fca547db08df22f7f909c8b5c2ce58c34ac89e2997c0c4", + "sha256:d16b6bef23b89bb49c4aeb7b15d34e2e3ddb42e14ba2cbf6bf57fa8ff7a03842", + "sha256:d4c53c82f7cef0a2a8714cc3c48fca970f496132542483ad1489fb8f2b9c70c5", + "sha256:d4e381f62eb058c0bd254f54a9de6d37d4ffa1b28253ef616ae437aacfe9b7f0", + "sha256:d9d47c2143a4f7b29737769ab28e9a36ba993740cfecbefd7d6e2156982c5324", + "sha256:da34cfb55561d3f1bef686343df686f4fe149e775f250293d6c56be16594c7c8", + "sha256:da63c2cc1d358ad9be9cd630aa89498041bb292949fdf243364ac019ec6f685a", + "sha256:e0a42c5407b57a96c4408e72beba6ddad7e5540fe8fefeb0aae970525034be44", + "sha256:e43eeff9de9f52f82ced7d45f954457c6108c877c288cdbe66f3aa00af6415de", + "sha256:e638012fe2448e60c302974cba26f6dfee4a7988eae9dd77de2a926f7b4cce47", + "sha256:e74cb0677e532958d1cb105d3defe2dd6786b5a1b73e3bee392aa466310a3286", + "sha256:eb0fda7b99809de4ba31c133f05b7c85f3aa69aa3d95c43acc9e45ee736577f5", + "sha256:eed058868a9f5b37986421ad69712f218ebc08ee7ecada653e306a9d67e89880", + "sha256:f389d6e4cf522757ffbc1ca97976391cf0e7c13f8ea9842c358b9e959897cdd5", + "sha256:f461c75beb8cf30ee00b84f701ca42e4e0086bcad1fb4df838cee3665b29af54", + "sha256:f4b3a0140dee12af9ab9dfac3db60ad80a93d6f10ee194785555ead952098b9e", + "sha256:f4ee58476cbafdf89c53b6afb578a582f35b4989cf217aff38d072c6ac8992cd", + "sha256:f502271b4286c3ea788e76f2e7dba25d562b429ffc78169b7d23be87bfecfbea", + "sha256:f7d947493288a3eee0294f589bcc564831d7fd4811019076f888d04c225421b4", + "sha256:f82ab5fd706a27566519f9842a7ca7c8942982f26c09cd563bb6896d9765946e", + "sha256:f8ae69a6c266b5000bc2ab606ee110d1101505b07b45d1d4a7b2ef8d5cb4a1cc", + "sha256:faa276338276a9005560886565bd230e07d21be80da409bfec7bafcb1cfcac2c", + "sha256:fb5662abc48582c9eac388e43b1e58b9865458d20e3eb667292afd10e9b3e244", + "sha256:fbe895164d31be3c0ab5c3cfdfe13054723d72440d8144239bbd4c8a5be088d0" + ], + "markers": "(platform_python_implementation != 'CPython' or python_full_version > '3.7.10') and (platform_system == 'Darwin' or platform_system == 'Windows' or platform_system == 'Linux') and (platform_machine == 'x86_64' or platform_machine == 's390x' or platform_machine == 'armv7l' or platform_machine == 'ppc64le' or platform_machine == 'ppc64' or platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'arm64' or platform_machine == 'ARM64' or platform_machine == 'x86' or platform_machine == 'i686' or platform_machine == 'riscv64' or platform_machine == 'riscv64gc') and (platform_python_implementation == 'CPython' or (platform_python_implementation == 'PyPy' and python_version < '3.12'))", + "version": "==1.8.1" + }, + "recurring-ical-events": { + "hashes": [ + "sha256:9ad605e27b4fbeb70ee1c66205ade32550be15a57cedc579606522f1c67aef6d", + "sha256:e731af31d0b7dec5cd47a1defacd8549e2f36fab1c1995e8b9f042822a0acf8e" + ], + "markers": "python_version >= '3.8'", + "version": "==3.8.2" + }, + "six": { + "hashes": [ + "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", + "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==1.17.0" + }, + "tzdata": { + "hashes": [ + "sha256:9173fde7d80d9018e02a662e168e5a2d04f87c41ea174b139fbef642eda62d10", + "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7" + ], + "markers": "python_version >= '2'", + "version": "==2026.2" + }, + "urllib3-future": { + "hashes": [ + "sha256:7a9dc11783c97b5013d3271b07c26f946f3f51d4ea7dfd1742e267a245474cce", + "sha256:7c4e783310872869fd99486c8d42ed82eb5bbf9541dea6826b1d531caf73190c" + ], + "markers": "python_version >= '3.7'", + "version": "==2.20.903" + }, + "wassima": { + "hashes": [ + "sha256:4e8bc4b439f91f4da24bd2260be662fcb42d1cc439d7678420237d314e55a854", + "sha256:709f375c778d9be84568d802d1e1b62a2ed3942b1fa4c83830533a69cf36c243" + ], + "markers": "sys_platform != 'emscripten'", + "version": "==2.1.0" + }, + "x-wr-timezone": { + "hashes": [ + "sha256:9166c40e6ffd4c0edebabc354e1a1e2cffc1bb473f88007694793757685cc8c3", + "sha256:e74a53b9f4f7def8138455c240e65e47c224778bce3c024fcd6da2cbe91ca038" + ], + "markers": "python_version >= '3.9'", + "version": "==2.0.1" + } + }, + "develop": {} +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..eb34567 --- /dev/null +++ b/README.md @@ -0,0 +1,167 @@ +# README: ICS-Importer für mailbox.org unter Linux + +Dieses Projekt durchsucht ein mailbox.org-Postfach per IMAP nach `.ics`-Anhängen und importiert enthaltene Termine anschließend per CalDAV in einen mailbox.org-Kalender. mailbox.org dokumentiert Thunderbird/IMAP für E-Mail und CalDAV für Kalender; die CalDAV-URL des Zielkalenders wird in mailbox.org im Kalender über **Eigenschaften** angezeigt. [kb.mailbox](https://kb.mailbox.org/de/privat/e-mail/e-mail-einrichtung-mit-mozilla-thunderbird/) + +## Voraussetzungen + +Benötigt werden ein Linux-System, Python 3, `pipenv`, ein mailbox.org-Konto sowie Zugangsdaten für IMAP und CalDAV. Wenn bei mailbox.org die Zwei-Faktor-Authentifizierung aktiv ist, sollen für externe Anwendungen App-Passwörter beziehungsweise Applikationspasswörter verwendet werden. [kb.mailbox](https://kb.mailbox.org/de/business/adressbuch-und-kalender/caldav-bei-thunderbird/) + +## Projektinhalt + +Die typische Struktur des Projekts sieht so aus: + +```text +ics-importer/ +├── ics_mail_importer.py +├── config.ini.example +├── config.ini +├── imported_uids.txt +├── ics_importer.log +└── cron.log +``` + +`ics_mail_importer.py` ist das Hauptskript, `config.ini` enthält die Zugangsdaten, `imported_uids.txt` dient als Duplikat-Schutz, und `cron.log` kann die Ausgabe des Cron-Jobs aufnehmen. Der Duplikat-Schutz ist sinnvoll, weil bei wiederkehrender IMAP-Prüfung sonst identische ICS-Anhänge mehrfach verarbeitet würden. [github](https://github.com/Vilhjalmr26/import_ics) + +## Installation mit pipenv + +In das Projektverzeichnis wechseln und die Python-Abhängigkeiten installieren: + +```bash +cd ~/ics-importer +pipenv install caldav icalendar +``` + +`caldav` wird für den Zugriff auf den CalDAV-Kalender benötigt, während `icalendar` ICS-Dateien parst; für das Mail-Lesen werden Standardbibliotheken wie `imaplib` und `email` verwendet. [github](https://github.com/python-caldav/caldav) + +Den Interpreter-Pfad des Pipenv-Umfelds kann man mit folgendem Befehl prüfen: + +```bash +cd ~/ics-importer +pipenv --py +``` + +Pipenv dokumentiert virtuelle Umgebungen und deren Interpreter-Pfade explizit; dieser Pfad ist später für Cron praktisch. [pipenv.pypa](https://pipenv.pypa.io/en/latest/virtualenv.html) + +## Konfiguration + +Die Vorlage kopieren und bearbeiten: + +```bash +cp config.ini.example config.ini +nano config.ini +``` + +Beispielinhalt: + +```ini +[imap] +host = imap.mailbox.org +port = 993 +username = ihr-name@mailbox.org +password = IHR_PASSWORT_ODER_APP_PASSWORT +folder = INBOX +unseen_only = true +mark_as_read = false + +[caldav] +url = https://dav.mailbox.org/caldav/IHR_KALENDER_ID +username = ihr-name@mailbox.org +password = IHR_PASSWORT_ODER_APP_PASSWORT +``` + +Die IMAP-Einstellungen orientieren sich an mailbox.org für Thunderbird, und die CalDAV-URL des gewünschten Kalenders wird laut mailbox.org im Kalenderbereich über die Eigenschaften des Kalenders ermittelt. [kb.mailbox](https://kb.mailbox.org/de/privat/e-mail/e-mail-einrichtung-mit-mozilla-thunderbird/) + +### Bedeutung der wichtigsten Optionen + +| Schlüssel | Bedeutung | +|---|---| +| `imap.host` | IMAP-Server von mailbox.org: `imap.mailbox.org`. [kb.mailbox](https://kb.mailbox.org/de/privat/e-mail/e-mail-einrichtung-mit-mozilla-thunderbird/) | +| `imap.port` | Standardport für IMAP über SSL: `993`. [kb.mailbox](https://kb.mailbox.org/de/privat/e-mail/e-mail-einrichtung-mit-mozilla-thunderbird/) | +| `imap.folder` | Zu prüfender Ordner, meist `INBOX`. | +| `imap.unseen_only` | Wenn `true`, werden nur ungelesene Nachrichten gesucht; das reduziert unnötige Prüfungen. | +| `imap.mark_as_read` | Wenn `true`, markiert das Skript verarbeitete Nachrichten als gelesen. | +| `caldav.url` | Vollständige CalDAV-URL des Zielkalenders aus mailbox.org. [kb.mailbox](https://kb.mailbox.org/de/business/adressbuch-und-kalender/caldav-bei-thunderbird/) | +| `caldav.username` | Meist die mailbox.org-E-Mail-Adresse. [kb.mailbox](https://kb.mailbox.org/de/business/adressbuch-und-kalender/caldav-bei-thunderbird/) | +| `caldav.password` | Passwort oder App-/Applikationspasswort bei aktiver 2FA. [kb.mailbox](https://kb.mailbox.org/de/business/adressbuch-und-kalender/caldav-bei-thunderbird/) | + +## Erster Testlauf + +Das Skript kann manuell getestet werden mit: + +```bash +cd ~/ics-importer +pipenv run python3 ics_mail_importer.py +``` + +Dabei werden neue `.ics`-Anhänge gesucht, importiert und im Log protokolliert. Python-Lösungen für IMAP-Anhangsextraktion und ICS-zu-CalDAV-Import folgen genau diesem Muster aus Mail-Abruf, Parsing und Import. [stackoverflow](https://stackoverflow.com/questions/6225763/downloading-multiple-attachments-using-imaplib) + +## Stündliche Ausführung mit Cron + +Die eigene User-Crontab wird mit `crontab -e` bearbeitet; User-Crontabs liegen auf Debian-/Raspberry-Pi-ähnlichen Systemen typischerweise unter `/var/spool/cron/crontabs/`, sollen aber nicht direkt bearbeitet werden. [cronitor](https://cronitor.io/guides/five-places-for-cron-jobs) + +Für eine Ausführung **stündlich zur vollen Stunde** sieht der Eintrag so aus: + +```cron +0 * * * * /home/hans/.local/share/virtualenvs/ics-importer-wOz4rK-o/bin/python /home/hans/ics-importer/ics_mail_importer.py >> /home/hans/ics-importer/cron.log 2>&1 +``` + +Alternativ ist auch `@hourly` möglich; beide Varianten entsprechen einer stündlichen Ausführung, wobei die klassische Cron-Syntax mit `0 * * * *` die Ausführung zur Minute 0 jeder Stunde beschreibt. [wiki.ubuntuusers](https://wiki.ubuntuusers.de/Cron/) + +### Cron-Eintrag ohne eigenes Umleitungslog + +Wenn die zusätzliche Datei `cron.log` nicht gewünscht ist, kann die Umleitung weggelassen werden: + +```cron +0 * * * * /home/hans/.local/share/virtualenvs/ics-importer-wOz4rK-o/bin/python /home/hans/ics-importer/ics_mail_importer.py +``` + +## Logrotation für `cron.log` + +Für benutzerdefinierte Logs ist `logrotate` der übliche Weg unter Linux. Eine eigene Datei unter `/etc/logrotate.d/` ist dafür die gängige Methode. [dash0](https://www.dash0.com/guides/log-rotation-linux-logrotate) + +Beispiel: + +```bash +sudo nano /etc/logrotate.d/ics-importer +``` + +Inhalt: + +```conf +/home/hans/ics-importer/cron.log { + weekly + rotate 4 + compress + delaycompress + missingok + notifempty + create 0644 hans hans +} +``` + +Diese Konfiguration rotiert wöchentlich, behält vier alte Versionen, komprimiert alte Logs und legt nach der Rotation eine neue Datei mit passenden Rechten an. [putorius](https://www.putorius.net/rotating-custom-logs-with-logrotate-on.html) + +Zum Testen der Konfiguration: + +```bash +sudo logrotate -d /etc/logrotate.d/ics-importer +sudo logrotate -f /etc/logrotate.d/ics-importer +``` + +## Einfügen in vim-nox + +Wenn `crontab -e` mit Vim geöffnet wird, kann im Insert-Modus oft direkt mit `Strg+Shift+V` aus dem Terminal-Zwischenspeicher eingefügt werden. Wenn Vim mit Clipboard-Unterstützung gebaut wurde, ist im Normal-Modus auch `"+p` zum Einfügen aus der System-Zwischenablage möglich. [reddit](https://www.reddit.com/r/vim/comments/q0fsw4/how_do_i_paste_clipboard_contents_into_vim/) + +## Sicherheitshinweise + +`config.ini` enthält Zugangsdaten und sollte nicht weitergegeben oder in öffentliche Repositories eingecheckt werden. Bei aktivierter Zwei-Faktor-Authentifizierung empfiehlt mailbox.org für externe Anwendungen App-Passwörter beziehungsweise Applikationspasswörter anstelle des normalen Passworts. [kb.mailbox](https://kb.mailbox.org/de/business/adressbuch-und-kalender/caldav-bei-thunderbird/) + +## Fehlersuche + +Wenn der Cron-Job nicht läuft, sind die häufigsten Ursachen ein falscher Python-Pfad, fehlende Rechte auf Dateien oder abweichende Umgebungsvariablen unter Cron. Cron-Jobs sollten deshalb mit absoluten Pfaden arbeiten, und ein separates Log wie `cron.log` macht Fehler schnell sichtbar. [betterstack](https://betterstack.com/community/guides/logging/how-to-manage-log-files-with-logrotate-on-ubuntu-20-04/) + +Wenn Termine nicht importiert werden, sollte zuerst geprüft werden, ob die IMAP-Anmeldung funktioniert, ob tatsächlich `.ics`-Anhänge im ausgewählten Ordner vorhanden sind und ob die CalDAV-URL exakt zum Zielkalender gehört. mailbox.org beschreibt, dass die Kalenderadresse direkt aus den Kalendereigenschaften des jeweiligen Kalenders übernommen werden soll. [kb.mailbox](https://kb.mailbox.org/de/privat/e-mail/e-mail-einrichtung-mit-mozilla-thunderbird/) + +## Empfohlener Betriebsmodus + +Für dieses Setup ist ein stündlicher Cron-Job mit aktiviertem Duplikat-Schutz und `unseen_only = true` ein pragmatischer Standard. Das reduziert unnötige IMAP-Abfragen und passt gut zu einem Postfach, in dem Termine typischerweise per Mail-Anhang eingehen. [naschenweng](https://www.naschenweng.eu/2025/03/29/%F0%9F%93%85-sync-ics-feeds-to-your-caldav-calendar-with-emojis-deduplication-and-docker/) \ No newline at end of file diff --git a/config.ini b/config.ini new file mode 100644 index 0000000..6b372a1 --- /dev/null +++ b/config.ini @@ -0,0 +1,17 @@ +[imap] +host = imap.mailbox.org +port = 993 +username = minitux@mailbox.org +# Normales Passwort ODER App-Passwort (bei aktiver 2FA zwingend!) +password = 4711Cayenne64 +folder = INBOX +# true = nur ungelesene Mails prüfen (empfohlen) +unseen_only = true +# true = verarbeitete Mails als gelesen markieren +mark_as_read = true + +[caldav] +# CalDAV-URL aus mailbox.org Office: Kalender → drei Striche → Eigenschaften +url = https://dav.mailbox.org/caldav/Y2FsOi8vMC8zMg +username = minitux@mailbox.org +password = 4711Cayenne64 diff --git a/config.ini.example b/config.ini.example new file mode 100644 index 0000000..2e94d9a --- /dev/null +++ b/config.ini.example @@ -0,0 +1,17 @@ +[imap] +host = imap.mailbox.org +port = 993 +username = ihr-name@mailbox.org +# Normales Passwort ODER App-Passwort (bei aktiver 2FA zwingend!) +password = IHR_PASSWORT_ODER_APP_PASSWORT +folder = INBOX +# true = nur ungelesene Mails prüfen (empfohlen) +unseen_only = true +# true = verarbeitete Mails als gelesen markieren +mark_as_read = false + +[caldav] +# CalDAV-URL aus mailbox.org Office: Kalender → drei Striche → Eigenschaften +url = https://dav.mailbox.org/caldav/IHR_KALENDER_ID +username = ihr-name@mailbox.org +password = IHR_PASSWORT_ODER_APP_PASSWORT diff --git a/crontab_raspi b/crontab_raspi new file mode 100644 index 0000000..797ffec --- /dev/null +++ b/crontab_raspi @@ -0,0 +1 @@ +/home/hans/.local/share/virtualenvs/ics-importer-wOz4rK-o/bin/python \ No newline at end of file diff --git a/ics_importer.log b/ics_importer.log new file mode 100644 index 0000000..d4ab540 --- /dev/null +++ b/ics_importer.log @@ -0,0 +1,24 @@ +2026-05-12 08:06:06,853 [INFO] ============================================================ +2026-05-12 08:06:06,853 [INFO] ICS-Importer gestartet (2026-05-12T06:06:06.853485+00:00) +2026-05-12 08:06:06,854 [INFO] Verbinde mit IMAP imap.mailbox.org:993 als minitux@mailbox.org ... +2026-05-12 08:06:07,829 [INFO] ics-Anhang gefunden: 'Dr_ Miksch.ics' (Hash 9854fb2df782…) +2026-05-12 08:06:07,896 [INFO] 1 .ics-Anhang/-Anhänge gefunden. +2026-05-12 08:06:08,933 [INFO] ✓ Termin importiert: Dr. Miksch [040000008200E00074C5] +2026-05-12 08:06:08,934 [INFO] Fertig. 1 Termine insgesamt importiert. +2026-05-12 08:06:08,934 [INFO] ============================================================ +2026-05-12 08:25:06,927 [INFO] ============================================================ +2026-05-12 08:25:06,927 [INFO] ICS-Importer gestartet (2026-05-12T06:25:06.927541+00:00) +2026-05-12 08:25:06,928 [INFO] Verbinde mit IMAP imap.mailbox.org:993 als minitux@mailbox.org ... +2026-05-12 08:25:07,398 [INFO] ics-Anhang gefunden: '_EXTERN_ Gesundheit Burgenland QT Q2.ics' (Hash 087e1be6582c…) +2026-05-12 08:25:07,510 [INFO] ics-Anhang gefunden: 'Schlechtleitner_ Payer (Ciso) _ Kennenlernen.ics' (Hash 511921c87987…) +2026-05-12 08:25:07,588 [INFO] ics-Anhang gefunden: 'Recht-JF + Informationssicherheit.ics' (Hash 260b2daed12b…) +2026-05-12 08:25:07,673 [INFO] ics-Anhang gefunden: '_EXTERN_ KI Roundtable _Haus Burgenland_.ics' (Hash 47a44fbcd80c…) +2026-05-12 08:25:07,752 [INFO] ics-Anhang gefunden: 'Sabine.ics' (Hash 83e64c1f97bb…) +2026-05-12 08:25:07,871 [INFO] 5 .ics-Anhang/-Anhänge gefunden. +2026-05-12 08:25:08,797 [INFO] ✓ Termin importiert: [EXTERN] Gesundheit Burgenland QT Q2 [040000008200E00074C5] +2026-05-12 08:25:09,233 [INFO] ✓ Termin importiert: Schlechtleitner, Payer (Ciso) * Kennenlernen [040000008200E00074C5] +2026-05-12 08:25:39,563 [WARNING] ✗ Fehler beim Import von 040000008200E00074C5: HTTPSConnectionPool(host='dav.mailbox.org', port=443): Read timed out. (read timeout=30) +2026-05-12 08:26:09,854 [WARNING] ✗ Fehler beim Import von 040000008200E00074C5: HTTPSConnectionPool(host='dav.mailbox.org', port=443): Read timed out. (read timeout=30) +2026-05-12 08:26:10,244 [INFO] ✓ Termin importiert: Sabine [040000008200E00074C5] +2026-05-12 08:26:10,244 [INFO] Fertig. 3 Termine insgesamt importiert. +2026-05-12 08:26:10,245 [INFO] ============================================================ diff --git a/ics_mail_importer.py b/ics_mail_importer.py new file mode 100644 index 0000000..40cc3c9 --- /dev/null +++ b/ics_mail_importer.py @@ -0,0 +1,169 @@ +#!/usr/bin/env python3 +""" +ics_mail_importer.py +-------------------- +Sucht in einem mailbox.org IMAP-Postfach nach E-Mails mit .ics-Anhängen +und importiert die enthaltenen Termine automatisch in einen CalDAV-Kalender. + +Benötigte Pakete: + pipenv install caldav icalendar + +Einrichtung: + 1. config.ini ausfüllen (liegt im gleichen Verzeichnis) + 2. Optional: Als Cronjob einrichten (z.B. alle 30 Minuten) + */30 * * * * /pfad/zu/python3 /pfad/zum/ics_mail_importer.py +""" + +import imaplib +import email +import os +import logging +import hashlib +import configparser +from pathlib import Path +from datetime import datetime, timezone + +import caldav +from icalendar import Calendar + +# ─────────────────────────── Logging ─────────────────────────────────────────── +LOG_FILE = Path(__file__).parent / "ics_importer.log" +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s [%(levelname)s] %(message)s", + handlers=[ + logging.FileHandler(LOG_FILE), + logging.StreamHandler(), + ], +) +log = logging.getLogger(__name__) + +# ─────────────────────────── Konfiguration laden ─────────────────────────────── +CONFIG_FILE = Path(__file__).parent / "config.ini" + +def load_config(): + if not CONFIG_FILE.exists(): + log.error("config.ini nicht gefunden. Bitte config.ini.example umbenennen und ausfüllen.") + raise FileNotFoundError(str(CONFIG_FILE)) + cfg = configparser.ConfigParser() + cfg.read(CONFIG_FILE) + return cfg + +# ─────────────────────────── Duplikat-Tracking ──────────────────────────────── +SEEN_FILE = Path(__file__).parent / "imported_uids.txt" + +def load_seen_uids(): + if not SEEN_FILE.exists(): + return set() + return set(SEEN_FILE.read_text().splitlines()) + +def save_uid(uid: str): + with SEEN_FILE.open("a") as f: + f.write(uid + "\n") + +# ─────────────────────────── IMAP-Anhänge holen ─────────────────────────────── +def fetch_ics_attachments(cfg): + host = cfg["imap"]["host"] + port = int(cfg["imap"].get("port", "993")) + username = cfg["imap"]["username"] + password = cfg["imap"]["password"] + folder = cfg["imap"].get("folder", "INBOX") + + log.info(f"Verbinde mit IMAP {host}:{port} als {username} ...") + conn = imaplib.IMAP4_SSL(host, port) + conn.login(username, password) + conn.select(folder) + + search_unseen_only = cfg["imap"].getboolean("unseen_only", fallback=True) + criteria = "(UNSEEN)" if search_unseen_only else "ALL" + _, msg_ids = conn.search(None, criteria) + + found = [] + for mid in msg_ids[0].split(): + _, data = conn.fetch(mid, "(RFC822)") + raw = data[0][1] + msg = email.message_from_bytes(raw) + + for part in msg.walk(): + ct = part.get_content_type() + fn = part.get_filename() or "" + + is_ics = ( + ct in ("text/calendar", "application/ics") + or fn.lower().endswith(".ics") + ) + if not is_ics: + continue + + ics_bytes = part.get_payload(decode=True) + if not ics_bytes: + continue + + uid_hash = hashlib.sha256(ics_bytes).hexdigest() + log.info(f" ics-Anhang gefunden: {fn!r} (Hash {uid_hash[:12]}…)") + found.append((uid_hash, ics_bytes)) + + if cfg["imap"].getboolean("mark_as_read", fallback=False): + conn.store(mid, "+FLAGS", "\\Seen") + + conn.close() + conn.logout() + log.info(f" {len(found)} .ics-Anhang/-Anhänge gefunden.") + return found + +# ─────────────────────────── CalDAV-Import ──────────────────────────────────── +def import_to_caldav(cfg, ics_bytes: bytes, uid_hash: str): + caldav_url = cfg["caldav"]["url"] + username = cfg["caldav"]["username"] + password = cfg["caldav"]["password"] + + client = caldav.DAVClient(url=caldav_url, username=username, password=password) + calendar = client.calendar(url=caldav_url) + + cal = Calendar.from_ical(ics_bytes) + + imported = 0 + for component in cal.walk(): + if component.name != "VEVENT": + continue + + single_cal = Calendar() + single_cal.add("prodid", "-//ics_mail_importer//DE") + single_cal.add("version", "2.0") + single_cal.add_component(component) + + uid = str(component.get("uid", uid_hash + f"-{imported}")) + try: + calendar.add_event(single_cal.to_ical().decode("utf-8")) + log.info(f" ✓ Termin importiert: {component.get('summary', '(kein Titel)')} [{uid[:20]}]") + imported += 1 + except Exception as e: + log.warning(f" ✗ Fehler beim Import von {uid[:20]}: {e}") + + return imported + +# ─────────────────────────── Hauptprogramm ──────────────────────────────────── +def main(): + log.info("=" * 60) + log.info(f"ICS-Importer gestartet ({datetime.now(timezone.utc).isoformat()})") + + cfg = load_config() + seen_uids = load_seen_uids() + + attachments = fetch_ics_attachments(cfg) + + total_imported = 0 + for uid_hash, ics_bytes in attachments: + if uid_hash in seen_uids: + log.info(f" Überspringe bereits importierten Anhang {uid_hash[:12]}…") + continue + + n = import_to_caldav(cfg, ics_bytes, uid_hash) + total_imported += n + save_uid(uid_hash) + + log.info(f"Fertig. {total_imported} Termine insgesamt importiert.") + log.info("=" * 60) + +if __name__ == "__main__": + main() diff --git a/imported_uids.txt b/imported_uids.txt new file mode 100644 index 0000000..e067780 --- /dev/null +++ b/imported_uids.txt @@ -0,0 +1,6 @@ +9854fb2df78249f73b0dedfa2fe98a84344fd66917e18489ffa0c56bdc359d5e +087e1be6582cf30ca7cd1fd634a53a9eb9ec570cd78ae207ae6105ae579b3888 +511921c8798770a0d176c9a84300fd468b76b6444022d54283bdfd727ef54abb +260b2daed12bd6d89ad0db3558ecc1adaf6f8dab130c5dd2705670cbea024b72 +47a44fbcd80cd0b6b474b171d5102324ef7adef9aacc63312598c93a6d12954e +83e64c1f97bbf09555229853d55ff6320b4f3f07a279969ca5eda90eed7a6323