Exemple #1
0
def _build_timetables(schedules, events=None, partner=None):
    """
    Dati un elenco di schedule ids/eventi e partner program ritorna una lista
    di TimeTable relative ai dati passati.

    _build_timetables([1,2])

        Restituisce due TimeTable relative agli schedule 1 e 2 (gli eventi
        vengono recuperati dal db)

    _build_timetables([1,2], events=...)

        Restituisce due TimeTable relative agli schedule 1 e 2 usando solo gli
        eventi specificati (in questo caso events deve essere un dict che mappa
        all'id dello schedule una lista con gli id degli eventi).

    _build_timetables([1,2], partner=...)

        Restituisce almeno due TimeTable (altre potrebbero essere aggiunte a
        causa di partner program non coperti dagli schedule elencati).
        `partner` deve essere compatibile con l'output di `_partner_as_event`.
    """
    tts = []
    if schedules and not events:
        for row in schedules:
            tt = TimeTable2.fromSchedule(row['id'])
            tts.append((row['id'], tt))
    else:
        for row in schedules:
            tt = TimeTable2.fromEvents(row['id'], events[row['id']])
            tts.append((row['id'], tt))

    if partner:
        for date, evts in partner.items():
            for ix, row in enumerate(schedules):
                if row['date'] == date:
                    sid, tt = tts[ix]
                    break
            else:
                try:
                    sid = cmodels.Schedule.objects.get(date=date).id
                except cmodels.Schedule.DoesNotExist:
                    # it would be better to be able to show it anyway
                    continue
                tt = TimeTable2.fromEvents(sid, [])
                tts.append((sid, tt))
            for e in evts:
                e['schedule_id'] = sid
                tt.addEvents([e])

    def key(o):
        # timetable has an indirect reference to the day, I need to get it
        # from one of the events.
        tt = o[1]
        ev0 = tt.events.values()[0][0]
        return ev0['time']

    tts.sort(key=key)
    return tts
Exemple #2
0
def _build_timetables(schedules, events=None, partner=None):
    """
    Dati un elenco di schedule ids/eventi e partner program ritorna una lista
    di TimeTable relative ai dati passati.

    _build_timetables([1,2])

        Restituisce due TimeTable relative agli schedule 1 e 2 (gli eventi
        vengono recuperati dal db)

    _build_timetables([1,2], events=...)

        Restituisce due TimeTable relative agli schedule 1 e 2 usando solo gli
        eventi specificati (in questo caso events deve essere un dict che mappa
        all'id dello schedule una lista con gli id degli eventi).

    _build_timetables([1,2], partner=...)

        Restituisce almeno due TimeTable (altre potrebbero essere aggiunte a
        causa di partner program non coperti dagli schedule elencati).
        `partner` deve essere compatibile con l'output di `_partner_as_event`.
    """
    tts = []
    if schedules and not events:
        for row in schedules:
            tt = TimeTable2.fromSchedule(row['id'])
            tts.append((row['id'], tt))
    else:
        for row in schedules:
            tt = TimeTable2.fromEvents(row['id'], events[row['id']])
            tts.append((row['id'], tt))

    if partner:
        for date, evts in partner.items():
            for ix, row in enumerate(schedules):
                if row['date'] == date:
                    sid, tt = tts[ix]
                    break
            else:
                try:
                    sid = cmodels.Schedule.objects.get(date=date).id
                except cmodels.Schedule.DoesNotExist:
                    # sarebbe meglio riuscire a mostrarlo lo stesso
                    continue
                tt = TimeTable2.fromEvents(sid, [])
                tts.append((sid, tt))
            for e in evts:
                e['schedule_id'] = sid
                tt.addEvents([e])
    def key(o):
        # la timetable ha un riferimento indiretto al giorno, devo andare a
        # prenderlo da uno degli eventi
        tt = o[1]
        ev0 = tt.events.values()[0][0]
        return ev0['time']
    tts.sort(key=key)
    return tts
Exemple #3
0
def live_events(request):
    conf, date = _live_conference()
    sid = cmodels.Schedule.objects\
        .values('id')\
        .get(conference=conf.code, date=date)

    tt = TimeTable2.fromSchedule(sid['id'])
    tt.removeEventsByTag('special')
    t0 = datetime.datetime.now().time()

    tracks = settings.P3_LIVE_TRACKS.keys()
    events = {}
    for track, tevts in tt.iterOnTracks(start=('current', t0)):
        curr = None
        try:
            curr = dict(tevts[0])
            curr['next'] = dict(tevts[1])
        except IndexError:
            pass
        # I've deleted all special events, t0 could be on one of them
        if curr and (curr['time'] + datetime.timedelta(
                seconds=curr['duration'] * 60)).time() < t0:
            curr = None

        if track not in tracks:
            continue
        events[track] = curr

    def event_url(event):
        if event.get('talk'):
            return reverse('conference-talk',
                           kwargs={'slug': event['talk']['slug']})
        else:
            return None

    output = {}
    for track, event in events.items():
        if event is None:
            output[track] = {
                'id': None,
                'embed': settings.P3_LIVE_EMBED(request, track=track),
            }
            continue
        url = event_url(event)
        if event.get('talk'):
            speakers = [(reverse('conference-speaker',
                                 kwargs={'slug': s['slug']}), s['name'],
                         dataaccess.profile_data(s['id'])['image'])
                        for s in event['talk']['speakers']]
        else:
            speakers = None
        if event.get('next'):
            next = {
                'name': event['next']['name'],
                'url': event_url(event['next']),
                'time': event['next']['time'],
            }
        else:
            next = None
        output[track] = {
            'id':
            event['id'],
            'name':
            event['name'],
            'url':
            url,
            'speakers':
            speakers,
            'start':
            event['time'],
            'end':
            event['time'] + datetime.timedelta(seconds=event['duration'] * 60),
            'tags':
            event['talk']['tags'] if event.get('talk') else [],
            'embed':
            settings.P3_LIVE_EMBED(request, event=event),
            'next':
            next,
        }
    return output
Exemple #4
0
def live_events(request):
    conf, date = _live_conference()
    sid = cmodels.Schedule.objects\
        .values('id')\
        .get(conference=conf.code, date=date)

    tt = TimeTable2.fromSchedule(sid['id'])
    tt.removeEventsByTag('special')
    t0 = datetime.datetime.now().time()

    tracks = settings.P3_LIVE_TRACKS.keys()
    events = {}
    for track, tevts in tt.iterOnTracks(start=('current', t0)):
        curr = None
        try:
            curr = dict(tevts[0])
            curr['next'] = dict(tevts[1])
        except IndexError:
            pass
        # Ho eliminato gli eventi special, t0 potrebbe cadere su uno di questi
        if curr and (curr['time'] + datetime.timedelta(seconds=curr['duration']*60)).time() < t0:
            curr = None

        if track not in tracks:
            continue
        events[track] = curr

    def event_url(event):
        if event.get('talk'):
            return reverse('conference-talk', kwargs={'slug': event['talk']['slug']})
        else:
            return None

    output = {}
    for track, event in events.items():
        if event is None:
            output[track] = {
                'id': None,
                'embed': settings.P3_LIVE_EMBED(request, track=track),
            }
            continue
        url = event_url(event)
        if event.get('talk'):
            speakers = [
                (
                    reverse('conference-speaker', kwargs={'slug': s['slug']}),
                    s['name'],
                    dataaccess.profile_data(s['id'])['image']
                )
                for s in event['talk']['speakers']
            ]
        else:
            speakers = None
        if event.get('next'):
            next = {
                'name': event['next']['name'],
                'url': event_url(event['next']),
                'time': event['next']['time'],
            }
        else:
            next = None
        output[track] = {
            'id': event['id'],
            'name': event['name'],
            'url': url,
            'speakers': speakers,
            'start': event['time'],
            'end': event['time'] + datetime.timedelta(seconds=event['duration'] * 60),
            'tags': event['talk']['tags'] if event.get('talk') else [],
            'embed': settings.P3_LIVE_EMBED(request, event=event),
            'next': next,
        }
    return output
Exemple #5
0
def _build_timetables(schedules, events=None, partner=None):
    """
    Given a list of schedule ids / events and partner program returns a list
    of TimeTable of relating to past data.

    _build_timetables([1,2])

        Return two TimeTable relating to schedules 1 and 2 (events
        are retrieved from db).

    _build_timetables([1,2], events=...)

        Return two TimeTable relating to schedules 1 and 2 using only
        events specified (in this case events must be a dict that map
        id of the schedule list with the id of the events).

    _build_timetables([1,2], partner=...)

        Return least two TimeTable (others might be added to
        Because of partner program not covered by listed schedule).
        `Partner` must be compatible with the output of` _partner_as_event`.
    """
    tts = []

    if schedules and not events:
        for row in schedules:
            tt = TimeTable2.fromSchedule(row['id'])
            tts.append((row['id'], tt))
    else:
        for row in schedules:
            tt = TimeTable2.fromEvents(row['id'], events[row['id']])
            tts.append((row['id'], tt))

    if partner:
        for date, evts in partner.items():
            for ix, row in enumerate(schedules):
                if row['date'] == date:
                    sid, tt = tts[ix]
                    break
            else:
                try:
                    sid = cmodels.Schedule.objects.get(date=date).id
                except cmodels.Schedule.DoesNotExist:
                    # it would be better to be able to show it anyway
                    continue
                tt = TimeTable2.fromEvents(sid, [])
                tts.append((sid, tt))
            for e in evts:
                e['schedule_id'] = sid
                tt.addEvents([e])

    # Remove empty timetables
    def not_empty(o):
        tt = o[1]
        events = tt.events.values()
        return bool(events and events[0])

    tts = filter(not_empty, tts)

    # Sort timetables by date
    def key(o):
        # timetable has an indirect reference to the day, I need to get it
        # from one of the events.
        tt = o[1]
        events = tt.events.values()
        ev0 = events[0][0]
        return ev0['time']

    tts.sort(key=key)

    return tts