112 lines
3 KiB
Python
Executable file
112 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()
|