fetching and reading calendar

This commit is contained in:
Hellow 2024-02-13 22:29:35 +01:00
parent d19406d3b4
commit 420deb16cf
5 changed files with 41 additions and 7 deletions

View File

@ -1,6 +1,11 @@
from typing import Generator, Type, Dict from typing import Generator, Type, Dict
import os.path
from pathlib import Path
from ..utils import config, error import requests
from ics import Calendar
from ..utils import config, error, prompt, ICS_FILE
from ..feeds import * from ..feeds import *
@ -36,6 +41,32 @@ class Routine:
except (TypeError, error.InvalidCredential): except (TypeError, error.InvalidCredential):
raise error.InvalidCredential(f"Invalid credentials for {feed.__name__}.") raise error.InvalidCredential(f"Invalid credentials for {feed.__name__}.")
@staticmethod
def get_ics(use_cached: bool = False) -> Path:
if use_cached and ICS_FILE.exists():
with ICS_FILE.open("r") as f:
return Calendar(f.read())
ics_url = config.get_field("ics_url")
if not len(ics_url):
ics_url = prompt.for_string("url or path to the ICS file")
config.set_field("ics_url", ics_url)
origin_path = Path(ics_url)
if origin_path.is_file():
with origin_path.open("rb") as f:
with ICS_FILE.open("wb") as t:
t.write(f.read())
else:
r = requests.get(ics_url)
with ICS_FILE.open("wb") as t:
t.write(r.content)
with ICS_FILE.open("r") as f:
return Calendar(f.read())
def run(self): def run(self):
pass pass

View File

@ -4,7 +4,4 @@ from ..feeds import Feed
class Development(Routine): class Development(Routine):
def run(self): def run(self):
for feed_class in self.iter_feeds(): print(self.get_ics())
feed: Feed = self.init_feed(feed_class)
feed.post(message="This worked second try!")

View File

@ -1,12 +1,15 @@
import logging import logging
from pathlib import Path
import platformdirs import platformdirs
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
PROGRAM_NAME: str = "publish-meetups" PROGRAM_NAME: str = "publish-meetups"
PROGRAM_DATA_DIR: str = platformdirs.user_config_path(appname=PROGRAM_NAME) PROGRAM_DATA_DIR: Path = platformdirs.user_config_path(appname=PROGRAM_NAME)
PROGRAM_DATA_DIR.mkdir(parents=True, exist_ok=True) PROGRAM_DATA_DIR.mkdir(parents=True, exist_ok=True)
ICS_FILE = Path(PROGRAM_DATA_DIR / "meetup.ics")
__all__ = ["prompt", "PROGRAM_DATA_DIR", "PROGRAM_NAME", "errors", "config"]
__all__ = ["prompt", "PROGRAM_DATA_DIR", "PROGRAM_NAME", "errors", "config", "ICS_FILE"]

View File

@ -11,6 +11,7 @@ _config: dict = {
"mastodon", "mastodon",
"twitter", "twitter",
], ],
"ics_url": "",
"mastodon": {}, "mastodon": {},
"twitter": {}, "twitter": {},
"lemmy": {}, "lemmy": {},

View File

@ -37,6 +37,8 @@ dependencies = [
"twikit~=1.1.12", "twikit~=1.1.12",
"toml~=0.10.2", "toml~=0.10.2",
"platformdirs~=3.2.0", "platformdirs~=3.2.0",
"ics~=0.7.2",
"requests~=2.31.0"
] ]
[project.urls] [project.urls]