示例#1
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'])
示例#2
0
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
示例#3
0
                                                  '.json') as presentationFile:
                                            presentationFileData = json.load(
                                                presentationFile)
                                            abstract += presentationFileData[
                                                'text']
                                            abstract += "<br/><br/>" + presentationFileData[
                                                'aut']
                                            abstract += "<br/>" + presentationFileData[
                                                'inst']

                                    presentationObject = Event(
                                        id='p' + str(presentationData['id']),
                                        date=date.fromtimestamp(
                                            int(timestamp)),
                                        start=start,
                                        duration='%02d:%02d' %
                                        (hoursDiff, minutesDiff),
                                        track=session['type'],
                                        abstract=abstract,
                                        title=title,
                                        type='Vortrag')

                                    personList = []
                                    if 'aut' in presentationData:
                                        cleanr = re.compile(
                                            '</?u>|<sup>\d+(,\s*\d+)*</sup>')
                                        authors = re.sub(
                                            cleanr, '',
                                            presentationData['aut']).split(',')

                                        for author in authors:
    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'])
示例#5
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'])
    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
    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
    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'])