def export(event_id): """Takes an event id and returns the event in pentabarf XML format""" event = EventModel.query.get(event_id) diff = event.ends_at - event.starts_at conference = Conference( title=event.name, start=event.starts_at, end=event.ends_at, days=diff.days if diff.days > 0 else 1, day_change="00:00", timeslot_duration="00:15", venue=event.location_name, ) dates = ( db.session.query(func.date(Session.starts_at, type_=Date)) # type_ needed for sqlite .filter_by(event_id=event_id).filter_by(state='accepted').filter( Session.deleted_at.is_(None)).order_by( asc(func.date(Session.starts_at))).distinct().all()) for date in dates: date = date[0] if date is None: continue # Cannot continue if date is missing day = Day(date=date) microlocation_ids = list( db.session.query(Session.microlocation_id).filter( func.date(Session.starts_at) == date).filter_by( state='accepted').filter( Session.deleted_at.is_(None)).order_by( asc(Session.microlocation_id)).distinct()) for microlocation_tuple in microlocation_ids: microlocation_id = microlocation_tuple[0] if microlocation_id: microlocation = Microlocation.query.get(microlocation_id) sessions = (Session.query.filter_by( microlocation_id=microlocation_id).filter( func.date(Session.starts_at) == date).filter_by( state='accepted').filter( Session.deleted_at.is_(None)).order_by( asc(Session.starts_at)).all()) room = Room(name=microlocation.name) for session in sessions: if session.ends_at is None or session.starts_at is None: duration = "" else: duration = format_timedelta(session.ends_at - session.starts_at) session_event = Event( id=session.id, date=session.starts_at, start=session.starts_at.strftime('%H:%M'), duration=duration, track=session.track.name, abstract=session.short_abstract, title=session.title, type='Talk', description=session.long_abstract, conf_url=url_for('v1.event_list', identifier=event.identifier), full_conf_url=url_for( 'v1.event_list', identifier=event.identifier, _external=True, ), released="True" if event.schedule_published_on else "False", ) for speaker in session.speakers: person = Person(id=speaker.id, name=speaker.name) session_event.add_person(person) room.add_event(session_event) day.add_room(room) conference.add_day(day) return conference.generate("Generated by " + get_settings()['app_name'])
if sessionData and 'pers' in sessionData['1']: for author in sorted(sessionData['1']['pers']): person = Person(name=sessionData['1']['pers'] [author]['text'].split(',')[0]) sessionObject.add_person(person) room.add_event(sessionObject) day.add_room(room) conference.add_day(day) with open("output.xml", 'w', encoding="utf-8") as outfile: xmldata = conference.generate( "Erzeugt von https://github.com/UB-Mannheim/bibtag-scheduler/ um " + str(datetime.now())) reparsed = minidom.parseString(xmldata.decode("utf-8")) # delete day_change as it cannot be empty for node in reparsed.getElementsByTagName('day_change'): node.parentNode.removeChild(node) # delete some empty nodes and empty attributes deleted = 0 for ignore in ['description', 'conf_url', 'full_conf_url', 'released']: for node in reparsed.getElementsByTagName(ignore): if node.toxml() == "<" + ignore + "/>": node.parentNode.removeChild(node) deleted += 1 print("INFO: Deleted", deleted, "empty nodes") for node in reparsed.getElementsByTagName('person'): if node.getAttribute('id') == "None":
def export(event_id): event = DataGetter.get_event(event_id) diff = (event.end_time - event.start_time) tz = event.timezone or 'UTC' tz = pytz.timezone(tz) conference = Conference(title=event.name, start=tz.localize(event.start_time), end=tz.localize(event.end_time), days=diff.days if diff.days > 0 else 1, day_change="00:00", timeslot_duration="00:15", venue=event.location_name) dates = (db.session.query(cast(Session.start_time, DATE)).filter_by( event_id=event_id).filter_by(state='accepted').filter( Session.deleted_at.is_(None)).order_by(asc( Session.start_time)).distinct().all()) for date in dates: date = date[0] day = Day(date=date) microlocation_ids = list( db.session.query(Session.microlocation_id).filter( func.date(Session.start_time) == date).filter_by( state='accepted').filter( Session.deleted_at.is_(None)).order_by( asc(Session.microlocation_id)).distinct()) for microlocation_id in microlocation_ids: microlocation_id = microlocation_id[0] microlocation = DataGetter.get_microlocation(microlocation_id) sessions = Session.query.filter_by(microlocation_id=microlocation_id) \ .filter(func.date(Session.start_time) == date) \ .filter_by(state='accepted') \ .filter(Session.deleted_at.is_(None)) \ .order_by(asc(Session.start_time)).all() room = Room(name=microlocation.name) for session in sessions: session_event = Event( id=session.id, date=tz.localize(session.start_time), start=tz.localize( session.start_time).strftime("%H:%M"), duration=format_timedelta(session.end_time - session.start_time), track=session.track.name, abstract=session.short_abstract, title=session.title, type='Talk', description=session.long_abstract, conf_url=url_for( 'event_detail.display_event_detail_home', identifier=event.identifier), full_conf_url=url_for( 'event_detail.display_event_detail_home', identifier=event.identifier, _external=True), released="True" if event.schedule_published_on else "False") for speaker in session.speakers: person = Person(id=speaker.id, name=speaker.name) session_event.add_person(person) room.add_event(session_event) day.add_room(room) conference.add_day(day) return conference.generate("Generated by " + get_settings()['app_name'])
def export(event_id): """Takes an event id and returns the event in pentabarf XML format""" event = EventModel.query.get(event_id) diff = (event.ends_at - event.starts_at) conference = Conference(title=event.name, start=event.starts_at, end=event.ends_at, days=diff.days if diff.days > 0 else 1, day_change="00:00", timeslot_duration="00:15", venue=event.location_name) dates = (db.session.query(cast(Session.starts_at, DATE)) .filter_by(event_id=event_id) .filter_by(state='accepted') .filter(Session.deleted_at.is_(None)) .order_by(asc(Session.starts_at)).distinct().all()) for date in dates: date = date[0] day = Day(date=date) microlocation_ids = list(db.session.query(Session.microlocation_id) .filter(func.date(Session.starts_at) == date) .filter_by(state='accepted') .filter(Session.deleted_at.is_(None)) .order_by(asc(Session.microlocation_id)).distinct()) for microlocation_tuple in microlocation_ids: microlocation_id = microlocation_tuple[0] if microlocation_id: microlocation = Microlocation.query.get(microlocation_id) sessions = Session.query.filter_by(microlocation_id=microlocation_id) \ .filter(func.date(Session.starts_at) == date) \ .filter_by(state='accepted') \ .filter(Session.deleted_at.is_(None)) \ .order_by(asc(Session.starts_at)).all() room = Room(name=microlocation.name) for session in sessions: session_event = Event(id=session.id, date=session.starts_at, start=session.starts_at, duration=str(session.ends_at - session.starts_at) + "00:00", track=session.track.name, abstract=session.short_abstract, title=session.title, type='Talk', description=session.long_abstract, conf_url=url_for('v1.event_list', identifier=event.identifier), full_conf_url=url_for('v1.event_list', identifier=event.identifier, _external=True), released="True" if event.schedule_published_on else "False") for speaker in session.speakers: person = Person(id=speaker.id, name=speaker.name) session_event.add_person(person) room.add_event(session_event) day.add_room(room) conference.add_day(day) return conference.generate("Generated by " + get_settings()['app_name'])
def export(event_id): event = DataGetter.get_event(event_id) diff = (event.end_time - event.start_time) tz = event.timezone or 'UTC' tz = pytz.timezone(tz) conference = Conference(title=event.name, start=tz.localize(event.start_time), end=tz.localize(event.end_time), days=diff.days if diff.days > 0 else 1, day_change="00:00", timeslot_duration="00:15", venue=event.location_name) dates = (db.session.query(cast(Session.start_time, DATE)) .filter_by(event_id=event_id) .filter_by(state='accepted') .filter(Session.deleted_at.is_(None)) .order_by(asc(Session.start_time)).distinct().all()) for date in dates: date = date[0] day = Day(date=date) microlocation_ids = list(db.session.query(Session.microlocation_id) .filter(func.date(Session.start_time) == date) .filter_by(state='accepted') .filter(Session.deleted_at.is_(None)) .order_by(asc(Session.microlocation_id)).distinct()) for microlocation_id in microlocation_ids: microlocation_id = microlocation_id[0] microlocation = DataGetter.get_microlocation(microlocation_id) sessions = Session.query.filter_by(microlocation_id=microlocation_id) \ .filter(func.date(Session.start_time) == date) \ .filter_by(state='accepted') \ .filter(Session.deleted_at.is_(None)) \ .order_by(asc(Session.start_time)).all() room = Room(name=microlocation.name) for session in sessions: session_event = Event(id=session.id, date=tz.localize(session.start_time), start=tz.localize(session.start_time).strftime("%H:%M"), duration=format_timedelta(session.end_time - session.start_time), track=session.track.name, abstract=session.short_abstract, title=session.title, type='Talk', description=session.long_abstract, conf_url=url_for('event_detail.display_event_detail_home', identifier=event.identifier), full_conf_url=url_for('event_detail.display_event_detail_home', identifier=event.identifier, _external=True), released="True" if event.schedule_published_on else "False") for speaker in session.speakers: person = Person(id=speaker.id, name=speaker.name) session_event.add_person(person) room.add_event(session_event) day.add_room(room) conference.add_day(day) return conference.generate("Generated by " + get_settings()['app_name'])