From 420deb16cfca8e991cea0ea6968223323a5c74b7 Mon Sep 17 00:00:00 2001 From: Hellow <74311245+HeIIow2@users.noreply.github.com> Date: Tue, 13 Feb 2024 22:29:35 +0100 Subject: [PATCH] fetching and reading calendar --- publish_meetups/routines/__init__.py | 33 ++++++++++++++++++++++++- publish_meetups/routines/development.py | 5 +--- publish_meetups/utils/__init__.py | 7 ++++-- publish_meetups/utils/config.py | 1 + pyproject.toml | 2 ++ 5 files changed, 41 insertions(+), 7 deletions(-) diff --git a/publish_meetups/routines/__init__.py b/publish_meetups/routines/__init__.py index 7e41cd9..263ad67 100644 --- a/publish_meetups/routines/__init__.py +++ b/publish_meetups/routines/__init__.py @@ -1,6 +1,11 @@ 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 * @@ -36,6 +41,32 @@ class Routine: except (TypeError, error.InvalidCredential): 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): pass diff --git a/publish_meetups/routines/development.py b/publish_meetups/routines/development.py index 9eaeb30..234eb33 100644 --- a/publish_meetups/routines/development.py +++ b/publish_meetups/routines/development.py @@ -4,7 +4,4 @@ from ..feeds import Feed class Development(Routine): def run(self): - for feed_class in self.iter_feeds(): - feed: Feed = self.init_feed(feed_class) - - feed.post(message="This worked second try!") + print(self.get_ics()) diff --git a/publish_meetups/utils/__init__.py b/publish_meetups/utils/__init__.py index 32a1ab9..9cca2d1 100644 --- a/publish_meetups/utils/__init__.py +++ b/publish_meetups/utils/__init__.py @@ -1,12 +1,15 @@ import logging +from pathlib import Path import platformdirs logging.basicConfig(level=logging.INFO) 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) +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"] diff --git a/publish_meetups/utils/config.py b/publish_meetups/utils/config.py index d8d1954..ae45121 100644 --- a/publish_meetups/utils/config.py +++ b/publish_meetups/utils/config.py @@ -11,6 +11,7 @@ _config: dict = { "mastodon", "twitter", ], + "ics_url": "", "mastodon": {}, "twitter": {}, "lemmy": {}, diff --git a/pyproject.toml b/pyproject.toml index 1e93c85..4be593f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,6 +37,8 @@ dependencies = [ "twikit~=1.1.12", "toml~=0.10.2", "platformdirs~=3.2.0", + "ics~=0.7.2", + "requests~=2.31.0" ] [project.urls]