def _decoded_input(self): content_type = self._request.META.get('CONTENT_TYPE', _JSON_CONTENT_TYPE) raw_data = self._request.raw_post_data if content_type == _JSON_CONTENT_TYPE: try: raw_dict = simplejson.loads(raw_data) except ValueError as exc: raise exceptions.BadRequest('Error decoding request body: ' '%s\n%r' % (exc, raw_data)) if not isinstance(raw_dict, dict): raise exceptions.BadRequest('Expected dict input, got %s: %r' % (type(raw_dict), raw_dict)) elif content_type == 'application/x-www-form-urlencoded': cgi_dict = cgi.parse_qs(raw_data) # django won't do this for PUT raw_dict = {} for key, values in cgi_dict.items(): value = values[-1] # take last value if multiple were given try: # attempt to parse numbers, booleans and nulls raw_dict[key] = simplejson.loads(value) except ValueError: # otherwise, leave it as a string raw_dict[key] = value else: raise exceptions.RequestError( 415, 'Unsupported media type: %s' % content_type) return _InputDict(raw_dict)
if not isinstance(raw_dict, dict): raise exceptions.BadRequest('Expected dict input, got %s: %r' % (type(raw_dict), raw_dict)) elif content_type == 'application/x-www-form-urlencoded': cgi_dict = cgi.parse_qs(raw_data) # django won't do this for PUT raw_dict = {} for key, values in cgi_dict.items(): value = values[-1] # take last value if multiple were given try: # attempt to parse numbers, booleans and nulls raw_dict[key] = simplejson.loads(value) except ValueError: # otherwise, leave it as a string raw_dict[key] = value else: raise exceptions.RequestError( 415, 'Unsupported media type: %s' % content_type) return _InputDict(raw_dict) def _format_datetime(self, date_time): """Return ISO 8601 string for the given datetime""" if date_time is None: return None timezone_hrs = time.timezone / 60 / 60 # convert seconds to hours if timezone_hrs >= 0: timezone_join = '+' else: timezone_join = '' # minus sign comes from number itself timezone_spec = '%s%s:00' % (timezone_join, timezone_hrs) return date_time.strftime('%Y-%m-%dT%H:%M:%S') + timezone_spec