plenums_invite/invite.py

113 lines
3 KiB
Python
Executable file

#!/usr/bin/env python3
import configparser
import datetime
import logging
import optparse
import requests
class JsonObject(object):
'''An object constructed from a JSON response'''
def __init__(self, json):
self.update_attributes(json)
def __str__(self):
return '{} with ID: {}'.format(self.__class__.__name__, self.id)
def __repr__(self):
vars_string = str(self.__dict__)
replace = {': ': '=', '{': '', '}': ''}
for key in replace:
vars_string = vars_string.replace(key, replace[key])
return '{}({})'.format(self.__class__.__name__, vars_string)
def update_attributes(self, json):
self.__dict__.update(json)
class Topic(JsonObject):
def __init__(self, client, **kwargs):
self.client = client
super().__init__(**kwargs)
class Client(object):
def __init__(self, host, api_username='', api_key=''):
self.host = host
self.session = requests.Session()
self.session.headers.update({
'Api-Username': api_username,
'Api-Key': api_key,
})
# Class Methods
def _request(self, method, path, params=None, data=None, json=None):
response = self.session.request(
method=method.upper(),
url=requests.compat.urljoin(self.host, path),
params=params,
data=data,
json=json,
)
response.raise_for_status()
return response.json()
def create_topic(self, title, raw, category=None):
response = self._request('POST', 'posts.json', json={
'title': title,
'raw': raw,
'category': category,
})
return Topic(client=self, json=response)
def main():
op = optparse.OptionParser()
op.add_option("-c", "--config", default="invite.conf")
op.add_option("-v", "--verbose", action="store_true")
options, args = op.parse_args()
config = configparser.ConfigParser()
configfile = options.config
if not config.read(configfile):
op.error(f"Configuration file '{configfile}' not found or not readable.")
if options.verbose:
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
client = Client(
host = config['discourse']['uri'],
api_username = config['discourse']['api_username'],
api_key = config['discourse']['api_key']
)
now = datetime.date.today()
date = now + datetime.timedelta(3 - now.weekday())
date_str = date.strftime('%d.%m.%Y')
subject = f'Einladung zum Plenum am {date_str}'
msg_body = '''Hallo zusammen,
am Donnerstag findet wieder unser monatliches Plenum statt.
Wir treffen uns um 20 Uhr im virtuellen Raum unter:
https://talk.kabi.tk/krautspace
Antwortet einfach hier auf diesen Post, wenn ihr etwas thematisieren möchtet.
Wir freuen uns auf zahlreiche Teilnehmer:innnen.
Mit den besten Grüßen,
das Einladeskript'''
client.create_topic(title=subject, raw=msg_body, category=7)
if __name__ == '__main__':
main()