コード例 #1
0
    def test_populate_conference_days_invalid_parameters(self):
        """ Test populate_conference_days """
        self.assertRaises(TypeError, populate_conference_days)
        self.assertRaises(TypeError, populate_conference_days, "string")
        self.assertRaises(TypeError, populate_conference_days, 123)
        self.assertRaises(TypeError, populate_conference_days, {})

        conference = Conference()
        self.assertRaises(TypeError, populate_conference_days, conference)

        conference = Conference(start=datetime(2018, 3, 4))
        self.assertRaises(TypeError, populate_conference_days, conference)
コード例 #2
0
    def test_populate_conference_days_4days(self):
        """ Test populate_conference_days """
        conference = Conference(start=datetime(2018, 3, 4),
                                end=datetime(2018, 3, 7),
                                days=4)

        self.assertEqual(0, len(conference.day_objects))
        populate_conference_days(conference)
        self.assertEqual(4, len(conference.day_objects))

        # check first day
        test_day = conference.day_objects[0]
        self.assertTrue(isinstance(test_day.date, datetime))
        self.assertEqual("2018-03-04", test_day.date.strftime("%Y-%m-%d"))

        # check second day
        test_day = conference.day_objects[1]
        self.assertTrue(isinstance(test_day.date, datetime))
        self.assertEqual("2018-03-05", test_day.date.strftime("%Y-%m-%d"))

        # check third day
        test_day = conference.day_objects[2]
        self.assertTrue(isinstance(test_day.date, datetime))
        self.assertEqual("2018-03-06", test_day.date.strftime("%Y-%m-%d"))

        # check fourth day
        test_day = conference.day_objects[3]
        self.assertTrue(isinstance(test_day.date, datetime))
        self.assertEqual("2018-03-07", test_day.date.strftime("%Y-%m-%d"))
コード例 #3
0
    def test_populate_conference_days_0day(self):
        """ Test populate_conference_days """
        conference = Conference(start=datetime(2018, 3, 4),
                                end=datetime(2018, 3, 4),
                                days=0)

        self.assertEqual(0, len(conference.day_objects))
        populate_conference_days(conference)
        self.assertEqual(0, len(conference.day_objects))
コード例 #4
0
    def test_populate_conference_days_1day(self):
        """ Test populate_conference_days """
        conference = Conference(start=datetime(2018, 3, 4),
                                end=datetime(2018, 3, 4),
                                days=1)

        self.assertEqual(0, len(conference.day_objects))
        populate_conference_days(conference)
        self.assertEqual(1, len(conference.day_objects))

        # check first day
        test_day = conference.day_objects[0]
        self.assertTrue(isinstance(test_day.date, datetime))
        self.assertEqual("2018-03-04", test_day.date.strftime("%Y-%m-%d"))
コード例 #5
0
    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'])
コード例 #6
0
import html
import json
import re
import urllib.parse
from xml.dom import minidom

from pentabarf.Conference import Conference
from pentabarf.Day import Day
from pentabarf.Event import Event
from pentabarf.Person import Person
from pentabarf.Room import Room

conference = Conference(title="Bibliothekartag 2020",
                        start=date(2020, 5, 26),
                        end=date(2020, 5, 29),
                        days=4,
                        timeslot_duration="00:30",
                        venue="Hannover Congress Centrum (HCC)",
                        city="Hannover")

twitterHandles = {}
if Path('cache/twitterhandles.json').is_file():
    with open('cache/twitterhandles.json') as twitterFile:
        twitterData = json.load(twitterFile)
        for user in twitterData:
            if user["name"] in twitterHandles:
                print("WARNING: Found another twitter user with the same name",
                      user["name"])
            twitterHandles[user["name"]] = user["screen_name"]

with open("cache/bibtag20-index.json") as file:
コード例 #7
0
ファイル: schedule_parser.py プロジェクト: GillesJ/newline
def read_json(json_input_file, json_schema_file):
    """ Read and parse the conference schedule JSON file """

    # check parameter type
    if not isinstance(json_input_file, str):
        raise TypeError("parameter json_input_file should be a string/path")
    if not isinstance(json_schema_file, str):
        raise TypeError("parameter json_schema_file should be a string/path")

    # check if files exist
    if not isfile(json_input_file):
        raise IOError("Inputfile '%s' does not exist" % json_input_file)
    if not isfile(json_schema_file):
        raise IOError("Schema file '%s' does not exist" % json_schema_file)

    # read event data file
    with open(json_input_file) as json_data:
        try:
            newline_data = json.load(json_data)
        except ValueError:
            raise ValueError(
                "Inputfile '%s' contains invalid JSON" % json_input_file
            )

        # validate conference data json file
        with open(json_schema_file) as json_schema:
            try:
                schema = json.load(json_schema)
            except ValueError:
                raise ValueError(
                    "Schema file '%s' contains invalid JSON" % json_schema_file
                )
            validate(newline_data, schema)

        # read conference data from json file
        timezone_name = newline_data.get('event_timezone') or "Europe/Brussels"
        conf_timezone = timezone(timezone_name)

        start_day = datetime.fromtimestamp(
            float(newline_data.get('event_start')),
            conf_timezone
        )
        end_day = datetime.fromtimestamp(
            float(newline_data.get('event_end')),
            conf_timezone
        )
        conference_days = 1 + int(
            (abs(end_day - start_day)).total_seconds() / (3600 * 24)
        )

        # create conference instance
        conf = Conference(
            title=newline_data.get('event_name') or "Event Name",
            venue=newline_data.get('event_venue') or "Venue",
            city=newline_data.get('event_city') or "City",
            start=start_day,
            end=end_day,
            days=conference_days,
            day_change='06:00',
            timeslot_duration='00:30'
        )

        populate_conference_days(conf)

        # loop over events in json data file to create schedule instances
        for event in newline_data.get('event_schedule'):
            # only add event if the scheduled status is final
            # else jump to the next event
            if not event.get('scheduled') == 'final':
                continue

            tmp_event_date = datetime.fromtimestamp(
                float(event.get('start')),
                conf_timezone
            )
            tmp_duration = time.strftime(
                "%H:%M:%S",
                time.gmtime(event.get('duration'))
            )

            # create event
            tmp_event = Event(
                id=event.get('id'),
                title=event.get('name'),
                description=event.get('description'),
                type=event.get('type'),
                duration=tmp_duration,
                date=tmp_event_date,
                start=tmp_event_date.strftime("%H:%M:%S")
            )

            # add speakers to event
            for speaker in event.get('speakers'):
                tmp_event.add_person(Person(name=speaker))

            add_event2conference(
                conf,
                tmp_event,
                event.get('rooms')
            )

    return conf
コード例 #8
0
    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'])
コード例 #9
0
    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'])
コード例 #10
0
    def parse(string):
        root = ET.fromstring(string)

        conference_element = root.find('conference')

        conference = Conference(
            title=conference_element.find('title').text,
            start=datetime.strptime(conference_element.find('start').text, '%Y-%m-%d'),
            end=datetime.strptime(conference_element.find('end').text, '%Y-%m-%d'),
            days=int(conference_element.find('days').text),
            day_change=conference_element.find('day_change').text,
            city=conference_element.find('city').text,
            timeslot_duration=conference_element.find('timeslot_duration').text,
            venue=conference_element.find('venue').text,
        )

        for day_element in root.findall('day'):
            day = Day(
                date=datetime.strptime(day_element.get('date'), '%Y-%m-%d'),
                index=int(day_element.get('index'))
            )

            for room_element in day_element.findall('room'):
                room = Room(name=room_element.get('name'))

                for event_element in room_element.findall('event'):
                    event = Event(
                        id=int(event_element.get('id')),
                        date=day.date,
                        start=get_text(event_element, 'start'),
                        duration=get_text(event_element, 'duration'),
                        track=get_text(event_element, 'track'),
                        abstract=get_text(event_element, 'abstract'),
                        title=get_text(event_element, 'title'),
                        type=get_text(event_element, 'type'),
                        description=get_text(event_element, 'description'),
                        conf_url=get_text(event_element, 'conf_url'),
                        full_conf_url=get_text(event_element, 'conf_url'),
                        level=get_text(event_element, 'level')
                    )

                    persons_element = event_element.find('persons')
                    for person_element in persons_element.findall('person'):
                        person = Person(
                            id=int(person_element.get('id')),
                            name=person_element.text,
                        )
                        event.add_person(person)

                    links_element = event_element.find('links')
                    if links_element:
                        for link_element in links_element.findall('link'):
                            link_url = link_element.get('href')
                            if not event.video_url and ('mp4' in link_url
                                                        or 'webm' in link_url
                                                        or 'youtube' in link_url
                                                        or 'avi' in link_url):
                                event.video_url = link_url
                            if not event.audio_url and ('mp3' in link_url or 'wav' in link_url or 'soundcloud' in link_url):
                                event.audio_url = link_url
                            if not event.slides_url and ('ppt' in link_url or 'pptx' in link_url or 'slide' in link_url):
                                event.slides_url = link_url

                    room.add_event(event)
                day.add_room(room)
            conference.add_day(day)
        return conference
コード例 #11
0
    def parse(string):
        root = ET.fromstring(string)

        conference_element = root.find('conference')

        conference = Conference(
            title=conference_element.find('title').text,
            start=datetime.strptime(
                conference_element.find('start').text, '%Y-%m-%d'),
            end=datetime.strptime(
                conference_element.find('end').text, '%Y-%m-%d'),
            days=int(conference_element.find('days').text),
            day_change=conference_element.find('day_change').text,
            city=conference_element.find('city').text,
            timeslot_duration=conference_element.find(
                'timeslot_duration').text,
            venue=conference_element.find('venue').text,
        )

        for day_element in root.findall('day'):
            day = Day(date=datetime.strptime(day_element.get('date'),
                                             '%Y-%m-%d'),
                      index=int(day_element.get('index')))

            for room_element in day_element.findall('room'):
                room = Room(name=room_element.get('name'))

                for event_element in room_element.findall('event'):
                    event = Event(id=int(event_element.get('id')),
                                  date=day.date,
                                  start=get_text(event_element, 'start'),
                                  duration=get_text(event_element, 'duration'),
                                  track=get_text(event_element, 'track'),
                                  abstract=get_text(event_element, 'abstract'),
                                  title=get_text(event_element, 'title'),
                                  type=get_text(event_element, 'type'),
                                  description=get_text(event_element,
                                                       'description'),
                                  conf_url=get_text(event_element, 'conf_url'),
                                  full_conf_url=get_text(
                                      event_element, 'conf_url'),
                                  level=get_text(event_element, 'level'))

                    persons_element = event_element.find('persons')
                    for person_element in persons_element.findall('person'):
                        person = Person(
                            id=int(person_element.get('id')),
                            name=person_element.text,
                        )
                        event.add_person(person)

                    links_element = event_element.find('links')
                    if links_element:
                        for link_element in links_element.findall('link'):
                            link_url = link_element.get('href')
                            if not event.video_url and (
                                    'mp4' in link_url or 'webm' in link_url
                                    or 'youtube' in link_url
                                    or 'avi' in link_url):
                                event.video_url = link_url
                            if not event.audio_url and (
                                    'mp3' in link_url or 'wav' in link_url
                                    or 'soundcloud' in link_url):
                                event.audio_url = link_url
                            if not event.slides_url and (
                                    'ppt' in link_url or 'pptx' in link_url
                                    or 'slide' in link_url):
                                event.slides_url = link_url

                    room.add_event(event)
                day.add_room(room)
            conference.add_day(day)
        return conference
コード例 #12
0
    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'])