def main(): #main_schedule = get_schedule('main_rooms', main_schedule_url) full_schedule = Schedule.from_url(main_schedule_url) print(' version: ' + full_schedule.version()) # add addional rooms from this local config now, so they are in the correct order full_schedule.add_rooms(rooms) # add events from additional_schedule's to full_schedule for entry in additional_schedule_urls: try: #other_schedule = get_schedule(entry['name'], entry['url']) other_schedule = Schedule.from_url(entry['url']) if 'version' in other_schedule.schedule(): full_schedule._schedule['schedule']['version'] += "; {}".format(entry['name']) print(' version: ' + other_schedule.version()) else: print(' WARNING: schedule "{}" does not have a version number'.format(entry['name'])) if full_schedule.add_events_from(other_schedule, id_offset=entry.get('id_offset'), options=entry.get('options')): print(' success') except: print(' UNEXPECTED ERROR:' + str(sys.exc_info()[1])) # write all events from the three big stages to a own schedule.json/xml write('\nExporting three main stages... ') full_schedule.export('stages') print('\Building wiki schedule...') # wiki wiki_schedule = generate_wiki_schedule(wiki_url, full_schedule) full_schedule._schedule['schedule']['version'] += "; wiki" full_schedule.add_events_from(wiki_schedule) # remove lighthing talk slot to fill with individual small events per lighthing talk full_schedule.remove_event(id=10380) # write all events to one big schedule.json/xml write('\nExporting... ') full_schedule.export('everything') # write seperate file for each event, to get better git diffs #full_schedule.foreach_event(lambda event: event.export('events/')) def export_event(event): with open("events/{}.json".format(event['guid']), "w") as fp: json.dump(event, fp, indent=2, cls=ScheduleEncoder) full_schedule.foreach_event(export_event) print('\nDone') print(' version: ' + full_schedule.version()) print('\n rooms of day 1: ') for room in full_schedule.day(1)['rooms']: print(' - ' + room) if not local or options.git: content_did_not_change = os.system('/usr/bin/env git diff -U0 --no-prefix | grep -e "^[+-] " | grep -v version > /dev/null') def git(args): os.system('/usr/bin/env git {}'.format(args)) if content_did_not_change: print('nothing relevant changed, reverting to previous state') git('reset --hard') else: git('add *.json *.xml events/*.json') git('commit -m "version {}"'.format(full_schedule.version())) git('push')
def main(): global local, options full_schedule = Schedule.from_url(main_schedule_url) print(' version: ' + full_schedule.version()) print( ' contains {events_count} events, with local ids from {min_id} to {max_id}' .format(**full_schedule.stats.__dict__)) # add addional rooms from this local config now, so they are in the correct order for key in rooms: full_schedule.add_rooms(rooms[key]) previous_max_id = 0 # add events from additional_schedule's to full_schedule for entry in additional_schedule_urls: try: #other_schedule = get_schedule(entry['name'], entry['url']) other_schedule = Schedule.from_url(entry['url']) if 'version' in other_schedule.schedule(): full_schedule._schedule['schedule'][ 'version'] += "; {}".format(entry['name']) print(' version: ' + other_schedule.version()) else: print( ' WARNING: schedule "{}" does not have a version number'. format(entry['name'])) print( ' contains {events_count} events, with local ids from {min_id} to {max_id}' .format(**other_schedule.stats.__dict__)) id_offset = entry.get('id_offset') if not id_offset: id_offset = 0 min_id = other_schedule.stats.min_id + id_offset max_id = other_schedule.stats.max_id + id_offset print( ' after adding the offset, ids reach from {} to {}'.format( min_id, max_id)) if previous_max_id >= min_id: print( ' WARNING: schedule "{}" has ID overlap with previous schedule' .format(entry['name'])) previous_max_id = max_id if full_schedule.add_events_from(other_schedule, id_offset=id_offset, options=entry.get('options')): print(' success') except KeyboardInterrupt: exit() except Exception as e: print(' UNEXPECTED ERROR:' + str(sys.exc_info()[1])) if options.exit_when_exception_occours: raise e print('\nBuilding wiki schedule...') # wiki wiki_schedule = generate_wiki_schedule(wiki_url, full_schedule) full_schedule._schedule['schedule']['version'] += "; wiki" full_schedule.add_events_from(wiki_schedule) # write all events to one big schedule.json/xml write('\nExporting... ') full_schedule.export('everything') # write seperate file for each event, to get better git diffs #full_schedule.foreach_event(lambda event: event.export('events/')) #def export_event(event): # with open("events/{}.json".format(event['guid']), "w") as fp: # json.dump(event, fp, indent=2, cls=ScheduleEncoder) # #full_schedule.foreach_event(export_event) print('\nDone') print(' version: ' + full_schedule.version()) print('\n rooms of day 1: ') for room in full_schedule.day(1)['rooms']: print(' - ' + room) if not local or options.git: content_did_not_change = os.system( '/usr/bin/env git diff -U0 --no-prefix | grep -e "^[+-] " | grep -v version > /dev/null' ) def git(args): os.system('/usr/bin/env git {}'.format(args)) if content_did_not_change: print('nothing relevant changed, reverting to previous state') git('reset --hard') else: git('add *.json *.xml') git('commit -m "version {}"'.format(full_schedule.version()))
def main(): try: full_schedule = Schedule.from_url(main_schedule_url) print(' version: ' + full_schedule.version()) #print(' contains {events_count} events, with local ids from {min_id} to {max_id}'.format(**full_schedule.stats.__dict__)) except: full_schedule = Schedule.from_XC3_template(None, 37, 27, 4) conference = full_schedule.conference() conference['acronym'] = 'rC3' conference['title'] = 'Remote Chaos Experience' loaded_schedules = {main_schedule_url: True, 'https://frab.cccv.de/': True} # add addional rooms from this local config now, so they are in the correct order for key in rooms: full_schedule.add_rooms(rooms[key]) previous_max_id = 0 # add events from additional_schedule's to full_schedule for entry in additional_schedule_urls: try: print('\n== Channel ' + entry['name']) url = entry['url'].replace('schedule.xml', 'schedule.json') if entry.get('room_guid'): full_schedule._room_ids[entry['schedule_room'] or entry['name']] = entry['room_guid'] if not url: print(' has no schedule_url yet – ignoring') continue if url in loaded_schedules: print(' schedule ' + url + ' was already loaded – ignoring') continue other_schedule = Schedule.from_url(url) loaded_schedules[url] = True if 'version' in other_schedule.schedule(): full_schedule._schedule['schedule'][ 'version'] += "; {}".format(entry['name']) print(' version: ' + other_schedule.version()) else: print( ' WARNING: schedule "{}" does not have a version number'. format(entry['name'])) id_offset = entry.get('id_offset') or id_offsets.get( entry['name']) or 0 ''' print(' contains {events_count} events, with local ids from {min_id} to {max_id}'.format(**other_schedule.stats.__dict__)) min_id = other_schedule.stats.min_id + id_offset max_id = other_schedule.stats.max_id + id_offset print(' after adding the offset, ids reach from {} to {}'.format(min_id, max_id)) # TODO improve error message and check actual intervals if previous_max_id >= min_id: print(' WARNING: schedule "{}" might have ID overlap with other schedules'.format(entry['name'])) previous_max_id = max_id ''' if full_schedule.add_events_from(other_schedule, id_offset=id_offset, options=entry.get('options')): print(' success') except KeyboardInterrupt: exit() except Exception as e: print(' UNEXPECTED ERROR:' + str(sys.exc_info()[1])) if options.exit_when_exception_occours: raise e # remove breaks from lightning talk schedule import # full_schedule.remove_event(guid='bca1ec84-e62d-528a-b254-68401ece6c7c') # write all events from the channels to a own schedule.json/xml write('\nExporting channels... ') channels = full_schedule.copy('Channels') for day in channels._schedule['schedule']['conference']['days']: i = 0 room_keys = list(day['rooms'].keys()) for room_key in room_keys: if ('Workshop' in room_key or 'Meetup' in room_key) and \ not(i < 4 or room_key in rooms['channels']): del day['rooms'][room_key] i += 1 print('\n channels: ') for room in channels.rooms(): print(' - ' + room) channels.export('channels') del channels # remove talks starting before 9 am def remove_too_early_events(room): for event in room: start_time = Event(event).start if start_time.hour > 4 and start_time.hour < 9: print( 'removing {} from full schedule, as it takes place at {} which is too early in the morning' .format(event['title'], start_time.strftime('%H:%M'))) room.remove(event) else: break full_schedule.foreach_day_room(remove_too_early_events) # write all events to one big schedule.json/xml write('\nExporting... ') full_schedule.export('everything') # write seperate file for each event, to get better git diffs def export_event(event): with open("events/{}.json".format(event['guid']), "w") as fp: json.dump( { **event, 'room_guid': full_schedule._room_ids.get(event['room'], None) }, fp, indent=2, cls=ScheduleEncoder) full_schedule.foreach_event(export_event) print('\nDone') print(' version: ' + full_schedule.version()) print('\n rooms: ') for room in full_schedule.rooms(): print(' - ' + room) if not local or options.git: content_did_not_change = os.system( '/usr/bin/env git diff -U0 --no-prefix | grep -e "^[+-] " | grep -v version > /dev/null' ) def git(args): os.system('/usr/bin/env git {}'.format(args)) if content_did_not_change: print('nothing relevant changed, reverting to previous state') git('reset --hard') else: git('add *.json *.xml events/*.json') git('commit -m "version {}"'.format(full_schedule.version())) git('push')
def main(): #main_schedule = get_schedule('main_rooms', main_schedule_url) try: full_schedule = Schedule.from_url(main_schedule_url) except: full_schedule = Schedule.from_XC3_template(None, congress_nr, 27, 4) print(' version: ' + full_schedule.version()) print( ' contains {events_count} events, with local ids from {min_id} to {max_id}' .format(**full_schedule.stats.__dict__)) # add addional rooms from this local config now, so they are in the correct order for key in rooms: full_schedule.add_rooms(rooms[key]) previous_max_id = 0 # add events from additional_schedule's to full_schedule for entry in additional_schedule_urls: try: #other_schedule = get_schedule(entry['name'], entry['url']) other_schedule = Schedule.from_url(entry['url']) if 'version' in other_schedule.schedule(): full_schedule._schedule['schedule'][ 'version'] += "; {}".format(entry['name']) print(' version: ' + other_schedule.version()) else: print( ' WARNING: schedule "{}" does not have a version number'. format(entry['name'])) print( ' contains {events_count} events, with local ids from {min_id} to {max_id}' .format(**other_schedule.stats.__dict__)) id_offset = entry.get('id_offset') if not id_offset: id_offset = 0 min_id = other_schedule.stats.min_id + id_offset max_id = other_schedule.stats.max_id + id_offset print( ' after adding the offset, ids reach from {} to {}'.format( min_id, max_id)) if previous_max_id >= min_id: print( ' WARNING: schedule "{}" has ID overlap with previous schedule' .format(entry['name'])) previous_max_id = max_id if full_schedule.add_events_from(other_schedule, id_offset=id_offset, options=entry.get('options')): print(' success') except KeyboardInterrupt: exit() except Exception as e: print(' UNEXPECTED ERROR:' + str(sys.exc_info()[1])) if options.exit_when_exception_occours: raise e # remove breaks from lightning talk schedule import full_schedule.remove_event(guid='bca1ec84-e62d-528a-b254-68401ece6c7c') full_schedule.remove_event(guid='cda64c9e-b230-589a-ace0-6beca2693eff') full_schedule.remove_event(guid='f33dd7b7-99d6-574b-9282-26986b5a0ea0') # write all events from the stages to a own schedule.json/xml write('\nExporting main stages... ') stages = full_schedule.copy('Stages') for day in stages._schedule['schedule']['conference']['days']: i = 0 room_keys = list(day['rooms'].keys()) for room_key in room_keys: if not (i < 5 or room_key in rooms['stages'] or 'Stage' in room_key or 'Bühne' in room_key): del day['rooms'][room_key] i += 1 print('\n stages of day 1: ') for room in stages.day(1)['rooms']: print(' - ' + room) stages.export('stages') del stages print('\nBuilding wiki schedule...') # wiki wiki_schedule = generate_wiki_schedule(wiki_url, full_schedule) full_schedule._schedule['schedule']['version'] += "; wiki" full_schedule.add_events_from(wiki_schedule) # remove rooms from wiki import, which we already have in more detail as pretalx rooms full_schedule.remove_room('Assembly:Art-and-Play') full_schedule.remove_room('Assembly:ChaosZone') full_schedule.remove_room('Assembly:WikipakaWG') # remove lighthing talk slot to fill with individual small events per lighthing talk #full_schedule.remove_event(id=10380) # remove talks starting before 9 am def remove_too_early_events(room): for event in room: start_time = Event(event).start if start_time.hour > 4 and start_time.hour < 9: print( 'removing {} from full schedule, as it takes place at {} which is too early in the morning' .format(event['title'], start_time.strftime('%H:%M'))) room.remove(event) else: break full_schedule.foreach_day_room(remove_too_early_events) # write all events to one big schedule.json/xml write('\nExporting... ') full_schedule.export('everything') # write seperate file for each event, to get better git diffs #full_schedule.foreach_event(lambda event: event.export('events/')) def export_event(event): with open("events/{}.json".format(event['guid']), "w") as fp: json.dump(event, fp, indent=2, cls=ScheduleEncoder) full_schedule.foreach_event(export_event) print('\nDone') print(' version: ' + full_schedule.version()) print('\n rooms of day 1: ') for room in full_schedule.day(1)['rooms']: print(' - ' + room) if not local or options.git: content_did_not_change = os.system( '/usr/bin/env git diff -U0 --no-prefix | grep -e "^[+-] " | grep -v version > /dev/null' ) def git(args): os.system('/usr/bin/env git {}'.format(args)) if content_did_not_change: print('nothing relevant changed, reverting to previous state') git('reset --hard') else: git('add *.json *.xml events/*.json') git('commit -m "version {}"'.format(full_schedule.version())) git('push')