예제 #1
0
    def _process(self, from_, include, limit):
        categories = get_related_categories(self.user)
        categories_events = []
        if categories:
            category_ids = {c['categ'].id for c in categories.values()}
            categories_events = get_events_in_categories(category_ids,
                                                         self.user,
                                                         limit=limit)

        linked_events = get_linked_events(
            self.user,
            from_,
            limit=limit,
            load_also=('description', 'own_room_id', 'own_venue_id',
                       'own_room_name', 'own_venue_name'))

        all_events = set()
        if 'linked' in include:
            all_events |= set(linked_events)
        if 'categories' in include:
            all_events |= set(categories_events)
        all_events = sorted(all_events, key=lambda e:
                            (e.start_dt, e.id))[:limit]

        response = {
            'results': [
                serialize_event_for_ical(event, 'events')
                for event in all_events
            ]
        }
        serializer = Serializer.create('ics')
        return send_file('event.ics', BytesIO(serializer(response)),
                         'text/calendar')
예제 #2
0
파일: controllers.py 프로젝트: javfg/indico
class RHExportDashboardICS(RHProtected):
    def _get_user(self):
        return session.user

    @use_kwargs({
        'from_': HumanizedDate(data_key='from', load_default=lambda: now_utc(False) - relativedelta(weeks=1)),
        'include': fields.List(fields.Str(), load_default={'linked', 'categories'}),
        'limit': fields.Integer(load_default=100, validate=lambda v: 0 < v <= 500)
    }, location='query')
    def _process(self, from_, include, limit):
        user = self._get_user()
        all_events = set()

        if 'linked' in include:
            all_events |= set(get_linked_events(
                user,
                from_,
                limit=limit,
                load_also=('description', 'own_room_id', 'own_venue_id', 'own_room_name', 'own_venue_name')
            ))

        if 'categories' in include and (categories := get_related_categories(user)):
            category_ids = {c['categ'].id for c in categories.values()}
            all_events |= set(get_events_in_categories(category_ids, user, limit=limit))

        all_events = sorted(all_events, key=lambda e: (e.start_dt, e.id))[:limit]

        response = {'results': [serialize_event_for_ical(event) for event in all_events]}
        serializer = Serializer.create('ics')
        return send_file('event.ics', BytesIO(serializer(response)), 'text/calendar')
예제 #3
0
 def _process(self):
     detail_level = request.args.get('detail', 'events')
     data = {
         'results': serialize_event_for_ical(self.event_new, detail_level)
     }
     serializer = Serializer.create('ics')
     return send_file('event.ics', BytesIO(serializer(data)),
                      'text/calendar')
예제 #4
0
    def _process(self):
        detail_level = request.args.get('detail', 'events')
        data = serialize_event_for_ical(self.event, detail_level)

        # check whether the plugins want to add/override any data
        for update in values_from_signal(
                signals.event.metadata_postprocess.send('ical-export', event=self.event, data=data), as_list=True):
            data.update(update)

        response = {'results': data}
        serializer = Serializer.create('ics')
        return send_file('event.ics', BytesIO(serializer(response)), 'text/calendar')
예제 #5
0
파일: display.py 프로젝트: indico/indico
    def _process(self):
        detail_level = request.args.get('detail', 'events')
        data = serialize_event_for_ical(self.event, detail_level)

        # check whether the plugins want to add/override any data
        for update in values_from_signal(
                signals.event.metadata_postprocess.send('ical-export', event=self.event, data=data), as_list=True):
            data.update(update)

        response = {'results': data}
        serializer = Serializer.create('ics')
        return send_file('event.ics', BytesIO(serializer(response)), 'text/calendar')
예제 #6
0
파일: api.py 프로젝트: jbenito3/indico
 def getAllowedFormats(cls):
     return Serializer.getAllFormats()
예제 #7
0
파일: api.py 프로젝트: jbenito3/indico
class UserRelatedEventFetcher(IteratedDataFetcher):

    DETAIL_INTERFACES = {
        'basic_events': IBasicConferenceMetadataFossil
    }

    def __init__(self, aw, hook, roles):
        super(UserRelatedEventFetcher, self).__init__(aw, hook)
        self._roles = roles

    def _postprocess(self, obj, fossil, iface):
        fossil['roles'] = list(self._roles[obj.getId()])
        return fossil

    def events(self, eventIds):
        ch = ConferenceHolder()

        def _iterate_objs(objIds):
            for objId in objIds:
                obj = ch.getById(objId, True)
                if obj is not None:
                    yield obj

        return self._process(_iterate_objs(eventIds))

Serializer.register('html', HTML4Serializer)
Serializer.register('jsonp', JSONPSerializer)
Serializer.register('ics', ICalSerializer)
Serializer.register('atom', AtomSerializer)
예제 #8
0
파일: base.py 프로젝트: innovexa/IDC-Events
 def getAllowedFormats(cls):
     return Serializer.getAllFormats()
예제 #9
0
파일: base.py 프로젝트: innovexa/IDC-Events
        if rel == 'abs':
            return tz.localize(value) if not value.tzinfo else value
        elif rel == 'ctx' and type(value) == timedelta:
            value = now_utc() + value

        # from here on, 'value' has to be a datetime
        if ctx == 'from':
            return tz.localize(value.combine(value.date(), time(0, 0, 0)))
        else:
            return tz.localize(value.combine(value.date(), time(23, 59, 59)))


class IteratedDataFetcher(DataFetcher):
    def __init__(self, user, hook):
        super(IteratedDataFetcher, self).__init__(user, hook)
        self._tz = hook._tz
        self._offset = hook._offset
        self._limit = hook._limit
        self._detail = hook._detail
        self._orderBy = hook._orderBy
        self._descending = hook._descending
        self._fromDT = hook._fromDT
        self._toDT = hook._toDT


Serializer.register('html', HTML4Serializer)
Serializer.register('jsonp', JSONPSerializer)
Serializer.register('ics', ICalSerializer)
Serializer.register('atom', AtomSerializer)
예제 #10
0
 def _process(self):
     detail_level = request.args.get('detail', 'events')
     data = {'results': serialize_event_for_ical(self.event, detail_level)}
     serializer = Serializer.create('ics')
     return send_file('event.ics', BytesIO(serializer(data)), 'text/calendar')
예제 #11
0
파일: base.py 프로젝트: k3njiy/indico
        # Skip offset elements - http://docs.python.org/library/itertools.html#recipes
        next(itertools.islice(sortedIterator, offset, offset), None)
        return sortedIterator

    def _postprocess(self, obj, fossil, iface):
        return fossil

    def _makeFossil(self, obj, iface):
        return fossilize(
            obj,
            iface,
            tz=self._tz,
            naiveTZ=self._serverTZ,
            filters={"access": self._userAccessFilter},
            mapClassType={"AcceptedContribution": "Contribution"},
        )

    def _process(self, iterator, filter=None, iface=None):
        if iface is None:
            iface = self.DETAIL_INTERFACES.get(self._detail)
            if iface is None:
                raise HTTPAPIError("Invalid detail level: %s" % self._detail, 400)
        for obj in self._iterateOver(iterator, self._offset, self._limit, self._orderBy, self._descending, filter):
            yield self._postprocess(obj, self._makeFossil(obj, iface), iface)


Serializer.register("html", HTML4Serializer)
Serializer.register("jsonp", JSONPSerializer)
Serializer.register("ics", ICalSerializer)
Serializer.register("atom", AtomSerializer)