def parseFileUpload(schema, request, fileName='image', **kwargs): ### Parse Request try: if request.method != 'POST': raise rawData = request.POST # Build the dict because django sucks data = {} for k, v in rawData.iteritems(): data[k] = v # Extract file if fileName in request.FILES: f = request.FILES[fileName] max_size = 1048576 # 1 MB if f.size > max_size: msg = "Uploaded file is too large (%s) (max size is %d)" % (f.size, max_size) logs.warning(msg) raise Exception(msg) data[fileName] = f.read() logs.attachment(fileName, f.size) data.pop('oauth_token', None) data.pop('client_id', None) data.pop('client_secret', None) logData = data.copy() obfuscate = kwargs.pop('obfuscate', []) obfuscate.append('password') for item in obfuscate: if item in logData: logData[item] = '*****' if fileName in logData: logData[fileName] = 'FILE (SIZE: %s)' % f.size logs.form(logData) if schema == None: if len(data) > 0: raise return schema.dataImport(data) schema.validate() logs.debug("Parsed request data") return schema except Exception as e: msg = u"Unable to parse form (%s)" % e logs.warning(msg) utils.printException() raise e
def parseRequest(schema, request, **kwargs): data = { } ### Parse Request try: if request.method == 'GET': rawData = request.GET elif request.method == 'POST': rawData = request.POST else: raise # Build the dict because django sucks for k, v in rawData.iteritems(): if v == '': v = None data[k] = v data.pop('oauth_token', None) data.pop('client_id', None) data.pop('client_secret', None) logData = data.copy() obfuscate = kwargs.pop('obfuscate', []) obfuscate.append('password') for item in obfuscate: if item in logData: logData[item] = '*****' logs.form(logData) if schema is None: if len(data) > 0: raise return schema.dataImport(data) schema.validate() logs.debug("Parsed request data") return schema except (KeyError, AttributeError, ValueError) as e: msg = u"Invalid form (%s): %s vs %s" % (e, pformat(data), schema) logs.warning(msg) logs.warning(utils.getFormattedException()) raise StampedHTTPError(400, "invalid_request") except Exception as e: msg = u"Invalid form (%s): %s vs %s" % (e, pformat(data), schema) logs.warning(msg) logs.warning(utils.getFormattedException()) raise e
def parse_request(request, schema, django_kwargs, overflow, **kwargs): data = { } try: if request.method == 'GET': rawData = request.GET elif request.method == 'POST': rawData = request.POST else: raise "invalid HTTP method '%s'" % request.method # Build the dict because django sucks for k, v in rawData.iteritems(): data[k] = v for k, v in django_kwargs.iteritems(): if k in data: msg = "duplicate django kwarg '%s' found in request %s data" % (k, request.method) raise msg data[k] = v logs.info("REQUEST: %s" % pformat(data)) data.pop('oauth_token', None) data.pop('client_id', None) data.pop('client_secret', None) logData = data.copy() obfuscate = kwargs.pop('obfuscate', []) obfuscate.append('password') for item in obfuscate: if item in logData: logData[item] = '*****' logs.form(logData) if schema is None: if len(data) > 0: raise return schema.dataImport(data, overflow=overflow) return schema except Exception as e: msg = "Invalid form (%s): %s vs %s" % (e, pformat(data), schema) logs.warning(msg) logs.warning(utils.getFormattedException()) raise StampedHTTPError("invalid_form", 400, msg)