Example #1
0
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')
Example #2
0
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()))
Example #3
0
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')
Example #4
0
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')