Skip to content

Commit

Permalink
Merge pull request #42 from oe1rfc/dev_add-frab-json-exporter
Browse files Browse the repository at this point in the history
add exporter for json-frab format
  • Loading branch information
zuntrax authored Dec 29, 2020
2 parents a0c5eb2 + f1cdaf5 commit 201d20c
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 2 deletions.
6 changes: 5 additions & 1 deletion demo/gpn11.ini
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,12 @@ type = csv
path = demo/gpn11.csv

[export]
active = extended
active = extended, json

[export:extended]
type = xml-extended
path = demo/gpn11.xml

[export:json]
type = json-frab
path = demo/gpn11.json
3 changes: 2 additions & 1 deletion handlers/directory.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from .base import ImportHandler, ExportHandler
from .import_handlers import FakeImportHandler, CSVImportHandler, JSONImportHandler, ProyektorImportHandler
from .export_handlers import BasicXMLExportHandler, ExtendedXMLExportHandler
from .export_handlers import BasicXMLExportHandler, ExtendedXMLExportHandler, FrabJsonExportHandler

import_handlers = {
"csv": CSVImportHandler,
Expand All @@ -14,6 +14,7 @@
export_handlers = {
"xml-basic": BasicXMLExportHandler,
"xml-extended": ExtendedXMLExportHandler,
"json-frab": FrabJsonExportHandler,
}


Expand Down
1 change: 1 addition & 0 deletions handlers/export_handlers/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
from .basic_xml import BasicXMLExportHandler
from .extended_xml import ExtendedXMLExportHandler
from .frab_json import FrabJsonExportHandler
94 changes: 94 additions & 0 deletions handlers/export_handlers/frab_json.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import logging
import json

from ..base import ExportHandler
from fahrplan.model.schedule import Schedule
from fahrplan.datetime import format_duration, format_date, format_datetime, format_time
from hacks import noexcept
from util import write_output


log = logging.getLogger(__name__)


class FrabJsonExportHandler(ExportHandler):
@noexcept(log)
def run(self, schedule: Schedule) -> bool:
path = self.config["path"]
content = self.get_data(schedule)
return write_output(path, json.dumps({"schedule": content}, ensure_ascii=False, sort_keys=True, indent=2))

def get_data(self, schedule):
"""
adapted from FrabJsonExporter of the pretalx.org project, Licensed under the Apache License
https://github.com/pretalx/pretalx/blob/master/src/pretalx/schedule/exporters.py#L143
"""
return {
"version": schedule.version,
"base_url": None, # we don't have this information
"conference": {
"acronym": schedule.conference.acronym,
"title": schedule.conference.title,
"start": format_date(schedule.conference.get_start()),
"end": format_date(schedule.conference.get_end()),
"daysCount": schedule.conference.day_count,
"timeslot_duration": format_duration(schedule.conference.time_slot_duration),
"days": [
{
"index": day.index,
"date": format_date(day.date),
"day_start": format_datetime(day.get_start().astimezone()),
"day_end": format_datetime(day.get_end().astimezone()),
"rooms": {
str(room.name): [
{
"id": event.id,
"guid": event.guid,
"logo": event.logo,
"date": format_datetime(event.date.astimezone()),
"start": format_time(event.start),
"duration": format_duration(event.duration),
"room": str(room.name),
"slug": event.slug,
"url": None, # we don't have this information
"title": event.title,
"subtitle": event.subtitle,
"track": event.track,
"type": event.type,
"language": event.language,
"abstract": event.abstract,
"description": event.description,
"recording_license": event.rec_license,
"do_not_record": bool(event.rec_optout),
**({"video_download_url": event.download_url} if event.download_url else {}),
"persons": [
{
"id": person[0],
"public_name": person[1]
}
for person in event.persons.items()
],
"links": [
{
"url": link[0],
"title": link[1]
}
for link in event.links.items()
],
"attachments": [
{
"url": attachment[0],
"title": attachment[1]
}
for attachment in event.attachments.items()
],
}
for event in room.events.values()
]
for room in day.rooms.values()
},
}
for day in schedule.days.values()
],
},
}

0 comments on commit 201d20c

Please sign in to comment.