simplify JSON response
This commit is contained in:
parent
905bd63eee
commit
85e637d017
@ -8,7 +8,7 @@ werkzeug = pkg_resources.get_distribution("werkzeug")
|
|||||||
import json
|
import json
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
||||||
from werkzeug.wrappers import Request
|
from werkzeug.wrappers import Request, Response
|
||||||
from werkzeug.exceptions import BadRequest
|
from werkzeug.exceptions import BadRequest
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -112,6 +112,14 @@ class JSONRequest(Request):
|
|||||||
raise BadRequest('Unable to read JSON request')
|
raise BadRequest('Unable to read JSON request')
|
||||||
|
|
||||||
|
|
||||||
|
class JSONResponse(Response):
|
||||||
|
|
||||||
|
def __init__(self, obj, *args, **kwargs):
|
||||||
|
kwargs["content_type"] = "application/json"
|
||||||
|
return super(JSONResponse, self).__init__(
|
||||||
|
json.dumps(obj).encode("utf-8"), *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
def markdown(text):
|
def markdown(text):
|
||||||
return misaka.html(text, extensions= misaka.EXT_STRIKETHROUGH
|
return misaka.html(text, extensions= misaka.EXT_STRIKETHROUGH
|
||||||
| misaka.EXT_SUPERSCRIPT | misaka.EXT_AUTOLINK
|
| misaka.EXT_SUPERSCRIPT | misaka.EXT_AUTOLINK
|
||||||
|
@ -16,7 +16,7 @@ from werkzeug.exceptions import BadRequest, Forbidden, NotFound
|
|||||||
from isso.compat import text_type as str
|
from isso.compat import text_type as str
|
||||||
|
|
||||||
from isso import utils, local
|
from isso import utils, local
|
||||||
from isso.utils import http, parse, markdown
|
from isso.utils import http, parse, markdown, JSONResponse as JSON
|
||||||
from isso.utils.crypto import pbkdf2
|
from isso.utils.crypto import pbkdf2
|
||||||
from isso.views import requires
|
from isso.views import requires
|
||||||
|
|
||||||
@ -25,12 +25,6 @@ def sha1(text):
|
|||||||
return hashlib.sha1(text.encode('utf-8')).hexdigest()
|
return hashlib.sha1(text.encode('utf-8')).hexdigest()
|
||||||
|
|
||||||
|
|
||||||
class JSON(Response):
|
|
||||||
|
|
||||||
def __init__(self, *args):
|
|
||||||
return super(JSON, self).__init__(*args, content_type='application/json')
|
|
||||||
|
|
||||||
|
|
||||||
def xhr(func):
|
def xhr(func):
|
||||||
"""A decorator to check for CSRF on POST/PUT/DELETE using a <form>
|
"""A decorator to check for CSRF on POST/PUT/DELETE using a <form>
|
||||||
element and JS to execute automatically (see #40 for a proof-of-concept).
|
element and JS to execute automatically (see #40 for a proof-of-concept).
|
||||||
@ -180,7 +174,7 @@ class API(object):
|
|||||||
# success!
|
# success!
|
||||||
self.signal("comments.new:finish", thread, rv)
|
self.signal("comments.new:finish", thread, rv)
|
||||||
|
|
||||||
resp = JSON(json.dumps(rv), 202 if rv["mode"] == 2 else 201)
|
resp = JSON(rv, 202 if rv["mode"] == 2 else 201)
|
||||||
resp.headers.add("Set-Cookie", cookie(str(rv["id"])))
|
resp.headers.add("Set-Cookie", cookie(str(rv["id"])))
|
||||||
resp.headers.add("X-Set-Cookie", cookie("isso-%i" % rv["id"]))
|
resp.headers.add("X-Set-Cookie", cookie("isso-%i" % rv["id"]))
|
||||||
return resp
|
return resp
|
||||||
@ -197,7 +191,7 @@ class API(object):
|
|||||||
if request.args.get('plain', '0') == '0':
|
if request.args.get('plain', '0') == '0':
|
||||||
rv['text'] = markdown(rv['text'])
|
rv['text'] = markdown(rv['text'])
|
||||||
|
|
||||||
return Response(json.dumps(rv), 200, content_type='application/json')
|
return JSON(rv, 200)
|
||||||
|
|
||||||
@xhr
|
@xhr
|
||||||
def edit(self, environ, request, id):
|
def edit(self, environ, request, id):
|
||||||
@ -238,7 +232,7 @@ class API(object):
|
|||||||
|
|
||||||
rv["text"] = markdown(rv["text"])
|
rv["text"] = markdown(rv["text"])
|
||||||
|
|
||||||
resp = JSON(json.dumps(rv), 200)
|
resp = JSON(rv, 200)
|
||||||
resp.headers.add("Set-Cookie", cookie(str(rv["id"])))
|
resp.headers.add("Set-Cookie", cookie(str(rv["id"])))
|
||||||
resp.headers.add("X-Set-Cookie", cookie("isso-%i" % rv["id"]))
|
resp.headers.add("X-Set-Cookie", cookie("isso-%i" % rv["id"]))
|
||||||
return resp
|
return resp
|
||||||
@ -274,7 +268,7 @@ class API(object):
|
|||||||
|
|
||||||
self.signal("comments.delete", id)
|
self.signal("comments.delete", id)
|
||||||
|
|
||||||
resp = JSON(json.dumps(rv), 200)
|
resp = JSON(rv, 200)
|
||||||
cookie = functools.partial(dump_cookie, expires=0, max_age=0)
|
cookie = functools.partial(dump_cookie, expires=0, max_age=0)
|
||||||
resp.headers.add("Set-Cookie", cookie(str(id)))
|
resp.headers.add("Set-Cookie", cookie(str(id)))
|
||||||
resp.headers.add("X-Set-Cookie", cookie("isso-%i" % id))
|
resp.headers.add("X-Set-Cookie", cookie("isso-%i" % id))
|
||||||
@ -344,19 +338,19 @@ class API(object):
|
|||||||
for item in rv:
|
for item in rv:
|
||||||
item['text'] = markdown(item['text'])
|
item['text'] = markdown(item['text'])
|
||||||
|
|
||||||
return JSON(json.dumps(rv), 200)
|
return JSON(rv, 200)
|
||||||
|
|
||||||
@xhr
|
@xhr
|
||||||
def like(self, environ, request, id):
|
def like(self, environ, request, id):
|
||||||
|
|
||||||
nv = self.comments.vote(True, id, utils.anonymize(str(request.remote_addr)))
|
nv = self.comments.vote(True, id, utils.anonymize(str(request.remote_addr)))
|
||||||
return Response(json.dumps(nv), 200)
|
return JSON(nv, 200)
|
||||||
|
|
||||||
@xhr
|
@xhr
|
||||||
def dislike(self, environ, request, id):
|
def dislike(self, environ, request, id):
|
||||||
|
|
||||||
nv = self.comments.vote(False, id, utils.anonymize(str(request.remote_addr)))
|
nv = self.comments.vote(False, id, utils.anonymize(str(request.remote_addr)))
|
||||||
return Response(json.dumps(nv), 200)
|
return JSON(nv, 200)
|
||||||
|
|
||||||
@requires(str, 'uri')
|
@requires(str, 'uri')
|
||||||
def count(self, environ, request, uri):
|
def count(self, environ, request, uri):
|
||||||
@ -366,7 +360,7 @@ class API(object):
|
|||||||
if rv == 0:
|
if rv == 0:
|
||||||
raise NotFound
|
raise NotFound
|
||||||
|
|
||||||
return JSON(json.dumps(rv), 200)
|
return JSON(rv, 200)
|
||||||
|
|
||||||
def checkip(self, env, req):
|
def checkip(self, env, req):
|
||||||
return Response(utils.anonymize(str(req.remote_addr)), 200)
|
return Response(utils.anonymize(str(req.remote_addr)), 200)
|
||||||
|
Loading…
Reference in New Issue
Block a user