[TIDY] Refactor renderlib into two parts
Most of the make scripts only need the schedule part of the renderlib. The schedule part has way less dependencies (e.g. no ImageMagick), so those scripts can be used without them now.
This commit is contained in:
parent
85bf295be6
commit
909bf79673
8 changed files with 146 additions and 130 deletions
|
@ -320,7 +320,7 @@ def debug():
|
||||||
|
|
||||||
def tasks(queue, args, idlist, skiplist):
|
def tasks(queue, args, idlist, skiplist):
|
||||||
# iterate over all events extracted from the schedule xml-export
|
# iterate over all events extracted from the schedule xml-export
|
||||||
for event in renderlib.events(scheduleUrl):
|
for event in schedulelib.events(scheduleUrl):
|
||||||
if not (idlist == []):
|
if not (idlist == []):
|
||||||
if 000000 in idlist:
|
if 000000 in idlist:
|
||||||
print("skipping id (%s [%s])" % (event["title"], event["id"]))
|
print("skipping id (%s [%s])" % (event["title"], event["id"]))
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# vim: tabstop=4 shiftwidth=4 expandtab
|
# vim: tabstop=4 shiftwidth=4 expandtab
|
||||||
|
|
||||||
import subprocess
|
import subprocess
|
||||||
import renderlib
|
import schedulelib
|
||||||
import argparse
|
import argparse
|
||||||
import tempfile
|
import tempfile
|
||||||
import shlex
|
import shlex
|
||||||
|
@ -139,7 +139,7 @@ elif args.bgloop:
|
||||||
}]
|
}]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
events = list(renderlib.events(args.schedule))
|
events = list(schedulelib.events(args.schedule))
|
||||||
|
|
||||||
|
|
||||||
def describe_event(event):
|
def describe_event(event):
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# vim: tabstop=4 shiftwidth=4 expandtab
|
# vim: tabstop=4 shiftwidth=4 expandtab
|
||||||
|
|
||||||
import renderlib
|
import schedulelib
|
||||||
import argparse
|
import argparse
|
||||||
import tempfile
|
import tempfile
|
||||||
import shutil
|
import shutil
|
||||||
|
@ -91,7 +91,7 @@ if args.develop:
|
||||||
}]
|
}]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
events = list(renderlib.events(args.schedule))
|
events = list(schedulelib.events(args.schedule))
|
||||||
|
|
||||||
|
|
||||||
def describe_event(event):
|
def describe_event(event):
|
||||||
|
|
|
@ -7,7 +7,7 @@ The blender project must be configured to use mkv/matroska as output file format
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import subprocess
|
import subprocess
|
||||||
import renderlib
|
import schedulelib
|
||||||
import argparse
|
import argparse
|
||||||
import tempfile
|
import tempfile
|
||||||
import shlex
|
import shlex
|
||||||
|
@ -147,7 +147,7 @@ elif args.bgloop:
|
||||||
}]
|
}]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
events = list(renderlib.events(args.schedule))
|
events = list(schedulelib.events(args.schedule))
|
||||||
|
|
||||||
|
|
||||||
def describe_event(event):
|
def describe_event(event):
|
||||||
|
|
|
@ -143,7 +143,7 @@ if args.debug:
|
||||||
}]
|
}]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
events = list(renderlib.events(schedule))
|
events = list(schedulelib.events(schedule))
|
||||||
|
|
||||||
def describe_event(event):
|
def describe_event(event):
|
||||||
return "#{}: {}".format(event['id'], event['title'])
|
return "#{}: {}".format(event['id'], event['title'])
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
import renderlib
|
import schedulelib
|
||||||
import argparse
|
import argparse
|
||||||
import shlex
|
import shlex
|
||||||
from PIL import ImageFont
|
from PIL import ImageFont
|
||||||
|
@ -146,7 +146,7 @@ if args.debug:
|
||||||
}]
|
}]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
events = list(renderlib.events(schedule))
|
events = list(schedulelib.events(schedule))
|
||||||
|
|
||||||
def describe_event(event):
|
def describe_event(event):
|
||||||
return "#{}: {}".format(event['id'], event['title'])
|
return "#{}: {}".format(event['id'], event['title'])
|
||||||
|
|
104
renderlib.py
104
renderlib.py
|
@ -235,110 +235,6 @@ def rendertask(task):
|
||||||
# remove the generated svg
|
# remove the generated svg
|
||||||
ensureFilesRemoved(os.path.join(task.workdir, '.gen.svg'))
|
ensureFilesRemoved(os.path.join(task.workdir, '.gen.svg'))
|
||||||
|
|
||||||
# Download the Events-Schedule and parse all Events out of it. Yield a tupel for each Event
|
|
||||||
def downloadSchedule(scheduleUrl):
|
|
||||||
print("downloading schedule")
|
|
||||||
|
|
||||||
# download the schedule
|
|
||||||
response = urlopen(scheduleUrl)
|
|
||||||
|
|
||||||
# read xml-source
|
|
||||||
xml = response.read()
|
|
||||||
|
|
||||||
# parse into ElementTree
|
|
||||||
parser = etree.XMLParser(huge_tree=True)
|
|
||||||
return etree.fromstring(xml, parser)
|
|
||||||
|
|
||||||
def getSchedule(scheduleUrl):
|
|
||||||
global scheduleTree
|
|
||||||
if not scheduleTree:
|
|
||||||
scheduleTree=downloadSchedule(scheduleUrl)
|
|
||||||
return scheduleTree
|
|
||||||
|
|
||||||
|
|
||||||
def persons(scheduleUrl, personmap={}, taglinemap={}, forEventId=None):
|
|
||||||
schedule = getSchedule(scheduleUrl)
|
|
||||||
# iterate all days
|
|
||||||
for day in schedule.iter('day'):
|
|
||||||
# iterate all rooms
|
|
||||||
for room in day.iter('room'):
|
|
||||||
# iterate events on that day in this room
|
|
||||||
for event in room.iter('event'):
|
|
||||||
eventid = int(event.get("id"))
|
|
||||||
if event != None and not eventid == forEventId:
|
|
||||||
continue
|
|
||||||
# aggregate names of the persons holding this talk
|
|
||||||
persons_seen = []
|
|
||||||
if event.find('persons') is not None:
|
|
||||||
for person in event.find('persons').iter('person'):
|
|
||||||
id = int(person.get("id"))
|
|
||||||
person = re.sub(r'\s+', ' ', person.text).strip()
|
|
||||||
match = re.search(r'\((.*?)\)', person)
|
|
||||||
tagline = ''
|
|
||||||
if not match is None:
|
|
||||||
tagline = match.group(1)
|
|
||||||
person = person.split(" (")[0]
|
|
||||||
if id in taglinemap:
|
|
||||||
tagline = taglinemap[id]
|
|
||||||
if id in personmap:
|
|
||||||
person = personmap[id]
|
|
||||||
if not id in persons_seen:
|
|
||||||
persons_seen.append(id)
|
|
||||||
yield {
|
|
||||||
'id': id,
|
|
||||||
'person': person,
|
|
||||||
'tagline': tagline
|
|
||||||
}
|
|
||||||
|
|
||||||
def events(scheduleUrl, titlemap={}):
|
|
||||||
schedule = getSchedule(scheduleUrl)
|
|
||||||
# iterate all days
|
|
||||||
for day in schedule.iter('day'):
|
|
||||||
# iterate all rooms
|
|
||||||
for room in day.iter('room'):
|
|
||||||
# iterate events on that day in this room
|
|
||||||
for event in room.iter('event'):
|
|
||||||
# aggregate names of the persons holding this talk
|
|
||||||
personnames = []
|
|
||||||
if event.find('persons') is not None:
|
|
||||||
for person in event.find('persons').iter('person'):
|
|
||||||
try:
|
|
||||||
personname = re.sub(r'\s+', ' ', person.text).strip()
|
|
||||||
except:
|
|
||||||
personnames.append(str('None'))
|
|
||||||
personnames.append(personname)
|
|
||||||
|
|
||||||
id = int(event.get('id'))
|
|
||||||
|
|
||||||
if id in titlemap:
|
|
||||||
title = titlemap[id]
|
|
||||||
elif event.find('title') is not None and event.find('title').text is not None:
|
|
||||||
title = re.sub(r'\s+', ' ', event.find('title').text).strip()
|
|
||||||
else:
|
|
||||||
title = ''
|
|
||||||
|
|
||||||
if event.find('subtitle') is not None and event.find('subtitle').text is not None:
|
|
||||||
subtitle = re.sub(r'\s+', ' ', event.find('subtitle').text).strip()
|
|
||||||
else:
|
|
||||||
subtitle = ''
|
|
||||||
|
|
||||||
if event.find('url') is not None and event.find('url').text is not None:
|
|
||||||
url = event.find('url').text.strip()
|
|
||||||
else:
|
|
||||||
url = ''
|
|
||||||
# yield a tupel with the event-id, event-title and person-names
|
|
||||||
yield {
|
|
||||||
'day': day.get('index'),
|
|
||||||
'id': id,
|
|
||||||
'title': title,
|
|
||||||
'subtitle': subtitle,
|
|
||||||
'persons': personnames,
|
|
||||||
'personnames': ', '.join(personnames),
|
|
||||||
'room': room.attrib['name'],
|
|
||||||
'track': event.find('track').text,
|
|
||||||
'url': url
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from termcolor import colored
|
from termcolor import colored
|
||||||
|
|
120
schedulelib.py
Normal file
120
schedulelib.py
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
# vim: tabstop=4 shiftwidth=4 expandtab
|
||||||
|
|
||||||
|
import re
|
||||||
|
from lxml import etree
|
||||||
|
from urllib.request import urlopen
|
||||||
|
|
||||||
|
scheduleTree=None
|
||||||
|
|
||||||
|
|
||||||
|
# Download the Events-Schedule and parse all Events out of it. Yield a tupel for each Event
|
||||||
|
def downloadSchedule(scheduleUrl):
|
||||||
|
print("downloading schedule")
|
||||||
|
|
||||||
|
# download the schedule
|
||||||
|
response = urlopen(scheduleUrl)
|
||||||
|
|
||||||
|
# read xml-source
|
||||||
|
xml = response.read()
|
||||||
|
|
||||||
|
# parse into ElementTree
|
||||||
|
parser = etree.XMLParser(huge_tree=True)
|
||||||
|
return etree.fromstring(xml, parser)
|
||||||
|
|
||||||
|
def getSchedule(scheduleUrl):
|
||||||
|
global scheduleTree
|
||||||
|
if not scheduleTree:
|
||||||
|
scheduleTree=downloadSchedule(scheduleUrl)
|
||||||
|
return scheduleTree
|
||||||
|
|
||||||
|
|
||||||
|
def persons(scheduleUrl, personmap={}, taglinemap={}, forEventId=None):
|
||||||
|
schedule = getSchedule(scheduleUrl)
|
||||||
|
# iterate all days
|
||||||
|
for day in schedule.iter('day'):
|
||||||
|
# iterate all rooms
|
||||||
|
for room in day.iter('room'):
|
||||||
|
# iterate events on that day in this room
|
||||||
|
for event in room.iter('event'):
|
||||||
|
eventid = int(event.get("id"))
|
||||||
|
if event != None and not eventid == forEventId:
|
||||||
|
continue
|
||||||
|
# aggregate names of the persons holding this talk
|
||||||
|
persons_seen = []
|
||||||
|
if event.find('persons') is not None:
|
||||||
|
for person in event.find('persons').iter('person'):
|
||||||
|
id = int(person.get("id"))
|
||||||
|
person = re.sub(r'\s+', ' ', person.text).strip()
|
||||||
|
match = re.search(r'\((.*?)\)', person)
|
||||||
|
tagline = ''
|
||||||
|
if not match is None:
|
||||||
|
tagline = match.group(1)
|
||||||
|
person = person.split(" (")[0]
|
||||||
|
if id in taglinemap:
|
||||||
|
tagline = taglinemap[id]
|
||||||
|
if id in personmap:
|
||||||
|
person = personmap[id]
|
||||||
|
if not id in persons_seen:
|
||||||
|
persons_seen.append(id)
|
||||||
|
yield {
|
||||||
|
'id': id,
|
||||||
|
'person': person,
|
||||||
|
'tagline': tagline
|
||||||
|
}
|
||||||
|
|
||||||
|
def events(scheduleUrl, titlemap={}):
|
||||||
|
schedule = getSchedule(scheduleUrl)
|
||||||
|
# iterate all days
|
||||||
|
for day in schedule.iter('day'):
|
||||||
|
# iterate all rooms
|
||||||
|
for room in day.iter('room'):
|
||||||
|
# iterate events on that day in this room
|
||||||
|
for event in room.iter('event'):
|
||||||
|
# aggregate names of the persons holding this talk
|
||||||
|
personnames = []
|
||||||
|
if event.find('persons') is not None:
|
||||||
|
for person in event.find('persons').iter('person'):
|
||||||
|
try:
|
||||||
|
personname = re.sub(r'\s+', ' ', person.text).strip()
|
||||||
|
except:
|
||||||
|
personnames.append(str('None'))
|
||||||
|
personnames.append(personname)
|
||||||
|
|
||||||
|
id = int(event.get('id'))
|
||||||
|
|
||||||
|
if id in titlemap:
|
||||||
|
title = titlemap[id]
|
||||||
|
elif event.find('title') is not None and event.find('title').text is not None:
|
||||||
|
title = re.sub(r'\s+', ' ', event.find('title').text).strip()
|
||||||
|
else:
|
||||||
|
title = ''
|
||||||
|
|
||||||
|
if event.find('subtitle') is not None and event.find('subtitle').text is not None:
|
||||||
|
subtitle = re.sub(r'\s+', ' ', event.find('subtitle').text).strip()
|
||||||
|
else:
|
||||||
|
subtitle = ''
|
||||||
|
|
||||||
|
if event.find('url') is not None and event.find('url').text is not None:
|
||||||
|
url = event.find('url').text.strip()
|
||||||
|
else:
|
||||||
|
url = ''
|
||||||
|
# yield a tupel with the event-id, event-title and person-names
|
||||||
|
yield {
|
||||||
|
'day': day.get('index'),
|
||||||
|
'id': id,
|
||||||
|
'title': title,
|
||||||
|
'subtitle': subtitle,
|
||||||
|
'persons': personnames,
|
||||||
|
'personnames': ', '.join(personnames),
|
||||||
|
'room': room.attrib['name'],
|
||||||
|
'track': event.find('track').text,
|
||||||
|
'url': url
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
from termcolor import colored
|
||||||
|
except ImportError:
|
||||||
|
def colored(str, col):
|
||||||
|
return str
|
||||||
|
|
Loading…
Add table
Reference in a new issue