Updated testresults
Fix goodreads Remove unused import Limit number of routes for book pages
This commit is contained in:
+1
-1
@@ -29,7 +29,7 @@
|
||||
|
||||
from urllib.parse import urlparse, urljoin
|
||||
|
||||
from flask import request, url_for, redirect, current_app
|
||||
from flask import request, url_for, current_app
|
||||
|
||||
|
||||
def is_safe_url(target):
|
||||
|
||||
@@ -22,7 +22,7 @@ import requests
|
||||
|
||||
from goodreads.client import GoodreadsClient
|
||||
from goodreads.request import GoodreadsRequest
|
||||
import xmltodict
|
||||
from lxml import etree
|
||||
|
||||
try:
|
||||
import Levenshtein
|
||||
@@ -33,6 +33,39 @@ from .. import logger
|
||||
from ..clean_html import clean_string
|
||||
|
||||
|
||||
|
||||
|
||||
def etree_to_dict(t):
|
||||
"""
|
||||
Convert lxml ElementTree to a nested dict (similar to xmltodict).
|
||||
"""
|
||||
d = {t.tag: {} if t.attrib else None}
|
||||
children = list(t)
|
||||
|
||||
if children:
|
||||
dd = {}
|
||||
for dc in map(etree_to_dict, children):
|
||||
for k, v in dc.items():
|
||||
if k in dd:
|
||||
if not isinstance(dd[k], list):
|
||||
dd[k] = [dd[k]]
|
||||
dd[k].append(v)
|
||||
else:
|
||||
dd[k] = v
|
||||
d = {t.tag: dd}
|
||||
|
||||
if t.attrib:
|
||||
d[t.tag].update(('@' + k, v) for k, v in t.attrib.items())
|
||||
|
||||
text = (t.text or '').strip()
|
||||
if text:
|
||||
if children or t.attrib:
|
||||
d[t.tag]['#text'] = text
|
||||
else:
|
||||
d[t.tag] = text
|
||||
|
||||
return d
|
||||
|
||||
class my_GoodreadsClient(GoodreadsClient):
|
||||
|
||||
def request(self, *args, **kwargs):
|
||||
@@ -59,7 +92,9 @@ class my_GoodreadsRequest(GoodreadsRequest):
|
||||
if resp.status_code != 200:
|
||||
raise GoodreadsRequestException(resp.reason, self.path)
|
||||
if self.req_format == 'xml':
|
||||
data_dict = xmltodict.parse(resp.content)
|
||||
root = etree.fromstring(resp.content)
|
||||
data_dict = etree_to_dict(root)
|
||||
|
||||
return data_dict['GoodreadsResponse']
|
||||
else:
|
||||
raise Exception("Invalid format")
|
||||
|
||||
+9
-4
@@ -812,14 +812,19 @@ def index(page):
|
||||
return render_books_list("newest", sort_param, 1, page)
|
||||
|
||||
|
||||
@web.route('/<data>/<sort_param>', defaults={'page': 1, 'book_id': 1})
|
||||
@web.route('/<data>/<sort_param>/', defaults={'page': 1, 'book_id': 1})
|
||||
@web.route('/<data>/<sort_param>/<book_id>', defaults={'page': 1})
|
||||
@web.route('/<data>/<sort_param>/<book_id>/<int:page>')
|
||||
@login_required_if_no_ano
|
||||
def books_list(data, sort_param, book_id, page):
|
||||
return render_books_list(data, sort_param, book_id, page)
|
||||
|
||||
# Limit number of routes to avoid redirects
|
||||
data =["rated", "discover", "unread", "read", "hot", "download", "author", "publisher", "series", "ratings", "formats",
|
||||
"category", "language", "archived", "search", "advsearch", "newest"]
|
||||
for d in data:
|
||||
web.add_url_rule('/{}/<sort_param>'.format(d), view_func=books_list, defaults={'page': 1, 'book_id': 1, "data": d})
|
||||
web.add_url_rule('/{}/<sort_param>/'.format(d), view_func=books_list, defaults={'page': 1, 'book_id': 1, "data": d})
|
||||
web.add_url_rule('/{}/<sort_param>/<book_id>'.format(d), view_func=books_list, defaults={'page': 1, "data": d})
|
||||
web.add_url_rule('/{}/<sort_param>/<book_id>/<int:page>'.format(d), defaults={"data": d}, view_func=books_list)
|
||||
|
||||
|
||||
@web.route("/table")
|
||||
@user_login_required
|
||||
|
||||
Reference in New Issue
Block a user