Changeset 7e6678 in indico


Ignore:
Timestamp:
08/23/11 15:38:55 (21 months ago)
Author:
Jose Benito <jose.benito.gonzalez@…>
Branches:
master, hello-world-walkthrough, ipv6, v0.98-series, v0.98.2, v0.98.3, v0.98b2, v0.99, 051b2622c51afb171a1dedb46a0df4fbb0cbd02e, d9941f8582b36b24821a11ea5ba16fda6a457fb1
Children:
e3162f
Parents:
a2a484
git-author:
Pedro Ferreira <jose.pedro.ferreira@…> (05/26/11 14:46:10)
git-committer:
Jose Benito <jose.benito.gonzalez@…> (08/23/11 15:38:55)
Message:

[IMP] Much faster day queries for RB

  • added 'day' parameter for single day queries;
Location:
indico
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • indico/MaKaC/plugins/RoomBooking/default/reservation.py

    rf9bbd4 r7e6678  
    253253            for day in days: 
    254254                dayResvs = Reservation.getDayReservationsIndexRoot().get( day ) 
     255 
    255256                if dayResvs: 
    256257                    for resv in dayResvs: 
  • indico/MaKaC/plugins/RoomBooking/export.py

    ra2a484 r7e6678  
    2222import fnmatch 
    2323import itertools 
     24from dateutil import rrule 
    2425from datetime import datetime, timedelta 
    2526from indico.web.http_api import ExportInterface, Exporter 
     
    210211 
    211212    def _getQueryParams(self, qdata): 
    212         fromDT = get_query_parameter(qdata, ['f', 'from']) 
    213         toDT = get_query_parameter(qdata, ['t', 'to']) 
    214         self._fromDT = utcdate(ExportInterface._getDateTime('from', fromDT, self._tz)) if fromDT != None else None 
    215         self._toDT = utcdate(ExportInterface._getDateTime('to', toDT, self._tz, aux=self._fromDT)) if toDT != None else None 
     213        super(RoomBookingExportInterface, self)._getQueryParams(qdata) 
     214 
     215        self._fromDT = utcdate(self._fromDT) if self._fromDT else None 
     216        self._toDT = utcdate(self._toDT) if self._toDT else None 
    216217        self._resvFilter = getResvStateFilter(qdata) 
    217  
    218218 
    219219    @staticmethod 
     
    321321        locList = filter(lambda loc: Location.parse(loc) is not None, locList) 
    322322 
     323        if self._fromDT or self._toDT: 
     324            daysParam = (day.date() for day in rrule.rrule(rrule.DAILY, dtstart=self._fromDT, until=self._toDT)) 
     325        else: 
     326            # slow! 
     327            daysParam = None 
     328 
    323329        for loc in sorted(locList): 
    324             resvs = CrossLocationQueries.getReservations(location=loc, resvExample=resvEx) 
     330            resvs = CrossLocationQueries.getReservations(location=loc, resvExample=resvEx, days=daysParam) 
    325331            for obj in self._process(resvs, filter=self._resvFilter): 
    326332                yield obj 
  • indico/web/http_api/export.py

    ra2a484 r7e6678  
    251251            return tz.localize(value.combine(value.date(), time(23, 59, 59))) 
    252252 
     253    def _getQueryParams(self, qdata): 
     254        fromDT = get_query_parameter(qdata, ['f', 'from']) 
     255        toDT = get_query_parameter(qdata, ['t', 'to']) 
     256        dayDT = get_query_parameter(qdata, ['day']) 
     257 
     258        if (fromDT or toDT) and dayDT: 
     259            raise HTTPAPIError("'day' can only be used without 'from' and 'to'", apache.HTTP_BAD_REQUEST) 
     260        elif dayDT: 
     261            fromDT = toDT = dayDT 
     262 
     263        self._fromDT = ExportInterface._getDateTime('from', fromDT, self._tz) 
     264        self._toDT = ExportInterface._getDateTime('to', toDT, self._tz, aux=self._fromDT) 
     265 
    253266    def _limitIterator(self, iterator, limit): 
    254267        counter = 0 
     
    355368 
    356369    def category(self, idlist, qdata): 
    357         fromDT = get_query_parameter(qdata, ['f', 'from']) 
    358         toDT = get_query_parameter(qdata, ['t', 'to']) 
     370        super(CategoryEventExporter, self)._getQueryParams() 
    359371        location = get_query_parameter(qdata, ['l', 'location']) 
    360372        room = get_query_parameter(qdata, ['r', 'room']) 
    361  
    362         fromDT = ExportInterface._getDateTime('from', fromDT, self._tz) if fromDT != None else None 
    363         toDT = ExportInterface._getDateTime('to', toDT, self._tz, aux=fromDT) if toDT != None else None 
    364373 
    365374        idx = IndexesHolder().getById('categoryDate') 
     
    379388 
    380389        for catId in idlist: 
    381             for obj in self._process(idx.iterateObjectsIn(catId, fromDT, toDT), filter, IConferenceMetadataFossil): 
     390            for obj in self._process(idx.iterateObjectsIn(catId, self._fromDT, self._toDT), filter, IConferenceMetadataFossil): 
    382391                yield obj 
    383392 
Note: See TracChangeset for help on using the changeset viewer.