Compare commits

...

2 Commits

Author SHA1 Message Date
Hellow 6be934e374 implemented functions to get human readable dates 2024-02-14 23:37:43 +01:00
Hellow 420deb16cf fetching and reading calendar 2024-02-13 22:29:35 +01:00
6 changed files with 107 additions and 7 deletions

View File

@ -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, Event
from ..utils import config, error, prompt, ICS_FILE
from ..feeds import *
@ -36,6 +41,36 @@ class Routine:
except (TypeError, error.InvalidCredential):
raise error.InvalidCredential(f"Invalid credentials for {feed.__name__}.")
@staticmethod
def get_ics(use_cached: bool = False) -> Calendar:
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())
@staticmethod
def get_event_string(event: Event) -> str:
return f""
def run(self):
pass

View File

@ -1,10 +1,19 @@
from . import Routine
from ..feeds import Feed
from ..feeds import Feed, TwitterFeed
from ..utils import date
from ics import Calendar
class Development(Routine):
def run(self):
for feed_class in self.iter_feeds():
feed: Feed = self.init_feed(feed_class)
calendar = self.get_ics()
feed.post(message="This worked second try!")
for event in calendar.events:
print(event.name, date.event_formatting_values(event, "de"))
break
event_description = f"""
Wir treffen uns {event.begin.humanize(locale="de")} zum {event.name}."""
print(event_description.strip())
print()

View File

@ -1,12 +1,23 @@
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",
"date",
]

View File

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

View File

@ -0,0 +1,40 @@
from datetime import datetime
from ics import Calendar, Event
from . import config
def to_date_string(date_time: datetime) -> str:
date_format = config.get_field("date_format", "%Y-%m-%d %H:%M:%S")
weekday_translations = config.get_field("weekday_translations", {})
months_translations = config.get_field("months_translations", {})
parsed = date_time.strftime(date_format)
for key, value in weekday_translations.items():
parsed = parsed.replace(key, value)
for key, value in months_translations.items():
parsed = parsed.replace(key, value)
return parsed.strip()
def to_time_string(date_time: datetime) -> str:
time_format = config.get_field("time_format", "%H:%M")
time_format_full_hour = config.get_field("time_format_full_hour", time_format)
parsed = date_time.strftime(time_format)
if int(date_time.minute) == 0:
parsed = date_time.strftime(time_format_full_hour)
return parsed.strip()
def event_formatting_values(event: Event, locale="en") -> dict:
return {
"time": to_time_string(event.begin),
"date": to_date_string(event.begin),
"date_humanized": event.begin.humanize(locale=locale),
}

View File

@ -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]