Skip to content
Snippets Groups Projects
media_ticket_generator.py 2.55 KiB
# requires requests==2.28.2
# requires xmltodict==0.13.0
# requires python-frontmatter==1.0.0

import requests
import xmltodict
import frontmatter
import glob
import os
import sys

api_key = os.environ.get('REDMINE_API_KEY')

known_uids = []
url = 'https://chaotikum.org/conferences/all/frab.xml'
response = requests.get(url)
data = xmltodict.parse(response.content)

for day in data['schedule']['day']:
    if 'event' in day['room']:
        if '@guid' in day['room']['event']:
            known_uids.append(day['room']['event']['@guid'])
        else:
            for event in day['room']['event']:
                known_uids.append(event['@guid'])
    else:
        for room in day['room']:
            if '@guid' in room['event']:
                known_uids.append(room['event']['@guid'])
            else:
                for event in room['event']:
                    known_uids.append(event['@guid'])

files = glob.glob('_media/*.md')
for file in files:
  post = frontmatter.load(file)
  if 'uid' in post.keys():
      uid = post['uid']
      if uid not in known_uids:
          if api_key is None:
              print("No environment variable REDMINE_API_KEY present.", file=sys.stderr)
              sys.exit(1)
          else:
              print('new uid, create ticket in redmine')
              title = post['title']
              content = post.content
              print('Title:' + title)
              print('uid:' + uid)
              print(content)
              # https://www.redmine.org/projects/redmine/wiki/rest_issues
              # https://www.redmine.org/projects/redmine/wiki/rest_api
              # https://www.redmine.org/issues/31186
              url = f"https://redmine.chaotikum.org/issues.json?key={api_key}"
              post_content = {}
              post_content['issue'] = {};
              post_content['issue']["project_id"] = 38
              post_content['issue']["subject"] = title
              post_content['issue']["description"] = content
              post_content['issue']["custom_fields"] = []

              uuid_field = {}
              uuid_field['id'] = 11
              uuid_field['value'] = uid
              uuid_field['name'] = "Video-UUID"
              post_content['issue']["custom_fields"].append(uuid_field)

              speaker_field = {}
              speaker_field['id'] = 8
              speaker_field['value'] = "Speaker"
              speaker_field['name'] = "Sprecher"
              post_content['issue']["custom_fields"].append(speaker_field)

              r = requests.post(url=url, json=post_content)
              print(r.json())