Skip to content

Commit

Permalink
Set json mimetype for specific flask.Response (#70)
Browse files Browse the repository at this point in the history
  • Loading branch information
my8100 committed Jul 20, 2019
1 parent 3149cdf commit a99435a
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 12 deletions.
2 changes: 1 addition & 1 deletion scrapydweb/views/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def dispatch_request(self, **kwargs):
self.update_data()
self.get_result()
self.handle_result()
return self.json_dumps(self.js, sort_keys=False)
return self.json_dumps(self.js, sort_keys=False, as_response=True)

def update_url(self):
if self.opt in ['listversions', 'listjobs']:
Expand Down
17 changes: 13 additions & 4 deletions scrapydweb/views/myview.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import re

from flask import current_app as app
from flask import flash, g, request, url_for
from flask import Response, flash, g, request, url_for
from flask.views import View
from logparser import __version__ as LOGPARSER_VERSION
from six import text_type
Expand Down Expand Up @@ -225,8 +225,17 @@ def handle_slash(string):
return handle_slash(string)

@staticmethod
def json_dumps(obj, sort_keys=True, indent=4, ensure_ascii=False):
return json_dumps(obj, sort_keys=sort_keys, indent=indent, ensure_ascii=ensure_ascii)
def json_dumps(obj, sort_keys=True, indent=4, ensure_ascii=False, as_response=False):
# flask.jsonify
# https://flask.palletsprojects.com/en/1.1.x/config/#JSONIFY_MIMETYPE
# https://stackoverflow.com/questions/11773348/python-flask-how-to-set-content-type
# https://stackoverflow.com/questions/9254891/what-does-content-type-application-json-charset-utf-8-really-mean
js = json_dumps(obj, sort_keys=sort_keys, indent=indent, ensure_ascii=ensure_ascii)
if as_response:
# Content-Type: application/json
return Response(js, mimetype='application/json')
else:
return js

@staticmethod
def remove_microsecond(dt):
Expand Down Expand Up @@ -378,4 +387,4 @@ def __init__(self):
super(MetadataView, self).__init__()

def dispatch_request(self, **kwargs):
return self.json_dumps(handle_metadata())
return self.json_dumps(handle_metadata(), as_response=True)
2 changes: 1 addition & 1 deletion scrapydweb/views/operations/deploy.py
Original file line number Diff line number Diff line change
Expand Up @@ -464,4 +464,4 @@ def dispatch_request(self, **kwargs):
'egg': content
}
status_code, js = self.make_request(self.url, data=data, auth=self.AUTH)
return self.json_dumps(js)
return self.json_dumps(js, as_response=True)
6 changes: 3 additions & 3 deletions scrapydweb/views/operations/schedule.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ def dispatch_request(self, **kwargs):
cmd = re.sub(r'(curl -u\s+.*?:.*?)\s+(http:https://)', r'\1 \\\r\n\2', cmd)
cmd = re.sub(r'\s+-d\s+', ' \\\r\n-d ', cmd)
cmd = re.sub(r'\s+--data-urlencode\s+', ' \\\r\n--data-urlencode ', cmd)
return self.json_dumps({'filename': self.filename, 'cmd': cmd})
return self.json_dumps({'filename': self.filename, 'cmd': cmd}, as_response=True)

def prepare_data(self):
for k, d in [('project', 'projectname'), ('_version', self.DEFAULT_LATEST_VERSION),
Expand Down Expand Up @@ -611,7 +611,7 @@ def dispatch_request(self, **kwargs):
self.data = pickle.loads(f.read())

status_code, js = self.make_request(self.url, data=self.data, auth=self.AUTH)
return self.json_dumps(js)
return self.json_dumps(js, as_response=True)


class ScheduleTaskView(MyView):
Expand Down Expand Up @@ -639,4 +639,4 @@ def dispatch_request(self, **kwargs):
self.data.update(json.loads(task.settings_arguments))
status_code, js = self.make_request(self.url, data=self.data, auth=self.AUTH)

return self.json_dumps(js)
return self.json_dumps(js, as_response=True)
4 changes: 2 additions & 2 deletions scrapydweb/views/overview/jobs.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ def dispatch_request(self, **kwargs):
raise
finally:
get_flashed_messages()
return self.json_dumps(self.jobs_dict)
return self.json_dumps(self.jobs_dict, as_response=True)
if self.style != 'database':
self.jobs = self.jobs_backup
self.handle_jobs_without_db()
Expand Down Expand Up @@ -454,4 +454,4 @@ def dispatch_request(self, **kwargs):
self.js['status'] = self.ERROR
self.js['message'] = "job #%s not found in the database" % self.id

return self.json_dumps(self.js)
return self.json_dumps(self.js, as_response=True)
2 changes: 1 addition & 1 deletion scrapydweb/views/overview/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ def dispatch_request(self, **kwargs):
self.js.setdefault('status', self.OK)
finally:
self.logger.debug(self.js)
return self.json_dumps(self.js)
return self.json_dumps(self.js, as_response=True)

def generate_response(self):
if self.action in ['disable', 'enable']: # ENABLE|DISABLE the scheduler
Expand Down

0 comments on commit a99435a

Please sign in to comment.