Changeset ee5437 in indico


Ignore:
Timestamp:
08/23/11 15:38:44 (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, 4c7d4152dff271ba5df5a8606605969cab454080
Children:
1b4ee3
Parents:
f3a845
git-author:
Pedro Ferreira <jose.pedro.ferreira@…> (04/15/11 15:50:31)
git-committer:
Jose Benito <jose.benito.gonzalez@…> (08/23/11 15:38:44)
Message:

[IMP] Fairly functional API version

  • Export of category event lists to JSON and XML;
  • Timezone support;
  • Moved date/time conversion from fossilize to JSON parsing;
  • This way, could reuse fossilization for metadata extraction;
Location:
indico
Files:
6 added
8 edited

Legend:

Unmodified
Added
Removed
  • indico/MaKaC/services/interface/rpc/json.py

    r137cf0 ree5437  
    2020from MaKaC.common.security import Sanitization 
    2121 
    22 import simplejson 
    2322from MaKaC.common.fossilize import fossilize, NonFossilizableException 
    2423from MaKaC.fossils.error import ICausedErrorFossil 
     
    3534 
    3635from MaKaC.common.logger import Logger 
    37  
    38 # Test if simplejson escapes forward slashes. It changed its behaviour im some version. 
    39 if '\\/' in simplejson.dumps('/'): 
    40     dumps = simplejson.dumps 
    41 else: 
    42     def dumps(*args, **kwargs): 
    43         return simplejson.dumps(*args, **kwargs).replace('/', '\\/') 
     36from indico.util.json import dumps 
    4437 
    4538class Json: 
  • indico/MaKaC/webinterface/pages/conferences.py

    rdfedc8 ree5437  
    2323import string 
    2424import random 
    25 import simplejson 
    26 import os.path 
     25from indico.util import json 
    2726 
    2827from datetime import timedelta,datetime 
     
    13361335            vars['getItemType'] = lambda item : self._getItemType(item) 
    13371336            vars['getLocationInfo'] = MaKaC.common.utils.getLocationInfo 
    1338             vars['dumps'] = simplejson.dumps 
     1337            vars['dumps'] = json.dumps 
    13391338        else: 
    13401339            outGen = outputGenerator(self._rh._aw) 
     
    14711470        vars = wcomponents.WTemplated.getVars( self ) 
    14721471        tz = DisplayTZ(self._aw,self._conf).getDisplayTZ() 
    1473         vars["ttdata"] = simplejson.dumps(schedule.ScheduleToJson.process(self._conf.getSchedule(), 
     1472        vars["ttdata"] = json.dumps(schedule.ScheduleToJson.process(self._conf.getSchedule(), 
    14741473                                                                          tz, self._aw, 
    14751474                                                                          useAttrCache = True)) 
    14761475        eventInfo = fossilize(self._conf, IConferenceEventInfoFossil, tz = tz) 
    14771476        eventInfo['isCFAEnabled'] = self._conf.getAbstractMgr().isActive() 
    1478         vars['eventInfo'] = simplejson.dumps(eventInfo) 
     1477        vars['eventInfo'] = json.dumps(eventInfo) 
    14791478        vars['timetableLayout'] = vars.get('ttLyt','') 
    14801479        return vars 
     
    34283427        vars["editURL"]=quoteattr(str(urlHandlers.UHConfModScheduleDataEdit.getURL(self._conf))) 
    34293428 
    3430         vars['ttdata'] = simplejson.dumps(schedule.ScheduleToJson.process(self._conf.getSchedule(), tz, None, 
     3429        vars['ttdata'] = json.dumps(schedule.ScheduleToJson.process(self._conf.getSchedule(), tz, None, 
    34313430                                                                            days = None, mgmtMode = True)) 
    34323431        vars['customLinks'] = self._customLinks 
     
    34343433        eventInfo = fossilize(self._conf, IConferenceEventInfoFossil, tz = tz) 
    34353434        eventInfo['isCFAEnabled'] = self._conf.getAbstractMgr().isActive() 
    3436         vars['eventInfo'] = simplejson.dumps(eventInfo) 
     3435        vars['eventInfo'] = json.dumps(eventInfo) 
    34373436 
    34383437        return vars 
  • indico/MaKaC/webinterface/pages/sessions.py

    r34d140 ree5437  
    4545from pytz import timezone 
    4646from MaKaC.common.timezoneUtils import DisplayTZ 
    47 import simplejson 
     47from indico.util import json 
    4848import pytz 
    4949import copy 
     
    387387    def _getTimeTableHTML(self): 
    388388 
    389         ttdata = simplejson.dumps(schedule.ScheduleToJson.process(self._session.getSchedule(), self._tz, 
     389        ttdata = json.encode(schedule.ScheduleToJson.process(self._session.getSchedule(), self._tz, 
    390390                                                                           None, days = None, mgmtMode = False)) 
    391391 
    392392        eventInfo = fossilize(self._session.getConference(), IConferenceEventInfoFossil, tz=self._tz) 
    393393        eventInfo['timetableSession'] = fossilize(self._session, ISessionFossil, tz=self._tz) 
    394         eventInfo = simplejson.dumps(eventInfo) 
     394        eventInfo = json.encode(eventInfo) 
    395395 
    396396        return """ 
     
    14501450        vars["timezone"]= tz 
    14511451 
    1452         vars['ttdata'] = simplejson.dumps(schedule.ScheduleToJson.process(self._session.getSchedule(), tz, 
     1452        vars['ttdata'] = json.encode(schedule.ScheduleToJson.process(self._session.getSchedule(), tz, 
    14531453                                                                           None, days = None, mgmtMode = True)) 
    14541454 
     
    14561456        eventInfo['timetableSession'] = fossilize(self._session, ISessionFossil, tz=tz) 
    14571457        eventInfo['isCFAEnabled'] = self._session.getConference().getAbstractMgr().isActive() 
    1458         vars['eventInfo'] = simplejson.dumps(eventInfo) 
     1458        vars['eventInfo'] = json.encode(eventInfo) 
    14591459 
    14601460        return vars 
  • indico/util/fossilize/__init__.py

    r80fd59 ree5437  
    187187        else: 
    188188            interface = interfaceArg 
    189  
    190         if not interface.providedBy(self): 
    191  
    192             raise WrongFossilTypeException("Interface '%s' not provided" 
    193                                            " by '%s'" % 
    194                                            (interface.__name__, 
    195                                             self.__class__.__name__)) 
    196189 
    197190        return interface 
  • indico/util/fossilize/conversion.py

    rb2f059 ree5437  
    3535            else: 
    3636                date = dt 
    37             return {'date': str(date.date()), 'time': str(date.time())} 
     37            return date 
    3838        else: 
    3939            return None 
  • indico/util/json.py

    r72d2c9 ree5437  
    2424    import json as _json 
    2525 
     26from datetime import datetime 
    2627from indico.util.i18n import LazyProxy 
    2728 
     29# Test if simplejson escapes forward slashes. It changed its behaviour im some version. 
     30if '\\/' in _json.dumps('/'): 
     31    _json_dumps = simplejson.dumps 
     32else: 
     33    def _json_dumps(*args, **kwargs): 
     34        return _json.dumps(*args, **kwargs).replace('/', '\\/') 
    2835 
    29 class I18nJSONEncoder(_json.JSONEncoder): 
     36class _JSONEncoder(_json.JSONEncoder): 
    3037    """ 
    31     Custom JSON encoder that supports i18n lazy strings 
     38    Custom JSON encoder that supports more types 
    3239    """ 
    3340    def default(self, o): 
    3441        if isinstance(o, LazyProxy): 
    3542            return str(o) 
     43        elif type(o) is datetime: 
     44            return {'date': str(o.date()), 'time': str(o.time()), 'tz': str(o.tzinfo)} 
    3645        return _json.JSONEncoder.default(self, o) 
    3746 
     
    4150    Simple wrapper around json.dumps() 
    4251    """ 
    43     return _json.dumps(obj, cls=I18nJSONEncoder, **kwargs) 
     52    if kwargs.pop('pretty', False): 
     53        kwargs['indent'] = 4 * ' ' 
     54    return _json_dumps(obj, cls=_JSONEncoder, **kwargs) 
    4455 
    4556 
     
    5566    Mako filter 
    5667    """ 
    57     return _json.dumps(obj) 
     68    return _json_dumps(obj) 
  • indico/web/http_api/export.py

    rf3a845 ree5437  
    3434# indico imports 
    3535from indico.util.date_time import nowutc 
     36from indico.util.fossilize import fossilize 
     37 
     38from indico.util.metadata import Serializer 
     39from indico.web.http_api.fossils import IConferenceMetadataFossil 
    3640 
    3741# indico legacy imports 
     
    4953 
    5054    def category(cls, idlist, dformat, fromDT, toDT, location=None, limit=None, 
    51                orderBy=None, descending=False, detail="events"): 
     55               orderBy=None, descending=False, detail="events", pretty=False): 
    5256        """ 
    5357        TODO: Document this 
    5458        """ 
    5559 
    56     def event(cls, idlist, dformat, orderBy=None, descending=False, detail="events"): 
     60    def event(cls, idlist, dformat, orderBy=None, descending=False, detail="events", 
     61              pretty=False): 
    5762        """ 
    5863        TODO: Document this 
     
    130135 
    131136    def category(self, idlist, dformat, fromDT, toDT, location=None, limit=None, 
    132                  orderBy=None, descending=False, detail="events", tz=None): 
     137                 orderBy=None, descending=False, detail="events", tzName=None, pretty=False): 
    133138 
    134139        self._dbi.startRequest() 
    135140 
    136         if tz == None: 
     141        if tzName == None: 
    137142            info = HelperMaKaCInfo.getMaKaCInfoInstance() 
    138             tz = pytz.timezone(info.getTimezone()) 
     143            tzName = info.getTimezone() 
     144 
     145        tz = pytz.timezone(tzName) 
    139146 
    140147        fromDT = ExportInterface._getDateTime('from', fromDT, tz) if fromDT != None else None 
     
    156163                    break 
    157164                if obj not in exclude: 
    158                     results.append(obj.id) 
     165                    results.append(fossilize(obj, IConferenceMetadataFossil, tz=tz)) 
    159166                    exclude.add(obj) 
    160167                    counter += 1 
     
    164171        self._dbi.endRequest(False) 
    165172 
    166         return dumps(results) 
     173        serializer = Serializer.create(dformat, pretty=pretty) 
     174 
     175        # TODO: set content-type 
     176 
     177        return serializer(results) 
    167178 
    168179    def event(self, idlist, dformat, orderBy=None, descending=False, detail="events"): 
  • indico/web/http_api/handlers.py

    rf3a845 ree5437  
    6868        descending = get_query_parameter(qdata, ['c', 'descending'], False) 
    6969        detail = get_query_parameter(qdata, ['d', 'detail'], 'events') 
     70        pretty = get_query_parameter(qdata, ['p', 'pretty'], 'no') 
     71        tz = get_query_parameter(qdata, ['tz'], None) 
    7072 
    7173        expInt = ExportInterface(DBMgr.getInstance()) 
     
    7880 
    7981            return expInt.category(idlist, dformat, fromDT, toDT, location, 
    80                                    limit, orderBy, descending, detail) 
     82                                   limit, orderBy, descending, detail, tz, 
     83                                   True if pretty == 'yes' else False) 
    8184    else: 
    8285        # TODO: usage page 
Note: See TracChangeset for help on using the changeset viewer.