finished the config

This commit is contained in:
Hellow 2024-02-11 19:00:48 +01:00
parent 22e49aa83c
commit b4926729d6
7 changed files with 125 additions and 10 deletions

View File

@ -1,21 +1,33 @@
from pathlib import Path from pathlib import Path
import json
from config_path import ConfigPath import toml
import configparser
from .utils import Paths, PROGRAM_NAME
class PublishMeetups: class PublishMeetups:
def __init__(self): def __init__(self):
self.config_file: Path = Path(ConfigPath("publish-meetups", "hzl", ".ini").saveFilePath(mkdir=True)) self.config_file: Path = Path(Paths.CONFIG_PATH, "publish-meetups.toml")
self.config = configparser.ConfigParser() print(self.config_file)
self.config = {}
self.config["DEFAULT"] = { self.config = {
"active_feeds": [
"mastodon",
],
"mastodon": {},
} }
print(self.config_file)
def __enter__(self): def __enter__(self):
if self.config_file.exists():
with self.config_file.open("r") as f:
self.config.update(toml.load(f))
print(self.config['active_feeds'][0])
return self return self
def __exit__(self, exc_type, exc_val, exc_tb): def __exit__(self, exc_type, exc_val, exc_tb):
pass with self.config_file.open("w") as f:
toml.dump(self.config, f)

View File

@ -0,0 +1,9 @@
class Feed:
def __init__(self):
pass
def prompt_auth(self):
return {}
def create_post(self):
pass

View File

@ -0,0 +1,50 @@
from pathlib import Path
from mastodon import Mastodon
from . import Feed
from ..utils import CONFIG_PATH, PROGRAM_NAME, prompt
class MastodonFeed(Feed):
CLIENTCRED_PATH: Path = CONFIG_PATH.joinpath("mastodon_clientcred.secret")
USERCRED_PATH: Path = CONFIG_PATH.joinpath("mastodon_usercred.secret")
# https://github.com/halcy/Mastodon.py
def __init__(self, username: str, password: str, api_base_url: str):
if not self.CLIENTCRED_PATH.exists():
self._create_app(api_base_url)
self.mastodon = Mastodon(client_id=self.CLIENTCRED_PATH)
self.mastodon.log_in(
username=username,
password=password,
)
super().__init__()
def _create_app(self, api_base_url: str):
client_id, client_secret = Mastodon.create_app(
PROGRAM_NAME,
api_base_url=api_base_url,
to_file=self.CLIENTCRED_PATH
)
self._save_clientcred(client_id, client_secret)
def prompt_auth(self) -> dict:
"""
mastodon needs:
- the instance used
- the email of the user
- the password of the user
"""
return {
"api_base_url": prompt.for_string("The instance you use", "https://mastodon.social"),
"username": prompt.for_string("E-Mail"),
"password": prompt.for_password("Password"),
}

View File

@ -0,0 +1,19 @@
from pathlib import Path
import platformdirs
PROGRAM_NAME: str = "publish-meetups"
class Paths:
CONFIG_PATH: Path = Path(platformdirs.user_config_path(appname=PROGRAM_NAME))
Paths.CONFIG_PATH.mkdir(parents=True, exist_ok=True)
__all__ = ["prompt", "CONFIG_PATH", "PROGRAM_NAME", "errors"]

View File

@ -0,0 +1,4 @@
class InvalidCredential(Exception):
def __init__(self, message):
super().__init__(message)

View File

@ -0,0 +1,21 @@
from typing import Optional
from getpass import getpass
def for_string(msg: str, default: Optional[str] = None) -> str:
def _real_prompt() -> str:
nonlocal msg, default
if default is not None:
return input(f"{msg} [{default}]: ").strip() or default
return input(msg + ': ').strip()
result = _real_prompt
print("> " + result)
return result
def for_password(msg: str) -> str:
return getpass.getpass(msg + ': ').strip()

View File

@ -35,8 +35,8 @@ classifiers = [
dependencies = [ dependencies = [
"Mastodon.py~=1.8.1", "Mastodon.py~=1.8.1",
"twikit~=1.1.12", "twikit~=1.1.12",
"configparser~=6.0.0", "toml~=0.10.2",
"config-path~=1.0.5", "platformdirs~=3.2.0",
] ]
[project.urls] [project.urls]