Dont use pickle to calculate etags for tag browser data dumps

This commit is contained in:
Kovid Goyal 2019-03-15 15:25:58 +05:30
parent c98cc3383d
commit 69210a7783
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 5 additions and 5 deletions

View File

@ -4,7 +4,6 @@
from __future__ import absolute_import, division, print_function, unicode_literals
import cPickle
import hashlib
import random
import shutil
@ -29,6 +28,7 @@ from calibre.utils.config import prefs, tweaks
from calibre.utils.icu import sort_key, numeric_sort_key
from calibre.utils.localization import get_lang, lang_map_for_ui, localize_website_link
from calibre.utils.search_query_parser import ParseException
from calibre.utils.serialize import json_dumps
POSTABLE = frozenset({'GET', 'POST', 'HEAD'})
@ -382,9 +382,9 @@ def tag_browser(ctx, rd):
&collapse_at=25&dont_collapse=&hide_empty_categories=&vl=''
'''
db, library_id = get_library_data(ctx, rd)[:2]
opts = categories_settings(rd.query, db)
opts = categories_settings(rd.query, db, gst_container=tuple)
vl = rd.query.get('vl') or ''
etag = cPickle.dumps([db.last_modified().isoformat(), rd.username, library_id, vl, list(opts)], -1)
etag = json_dumps([db.last_modified().isoformat(), rd.username, library_id, vl, list(opts)])
etag = hashlib.sha1(etag).hexdigest()
def generate():

View File

@ -192,7 +192,7 @@ def icon_map():
return _icon_map
def categories_settings(query, db):
def categories_settings(query, db, gst_container=GroupedSearchTerms):
dont_collapse = frozenset(query.get('dont_collapse', '').split(','))
partition_method = query.get('partition_method', 'first letter')
if partition_method not in {'first letter', 'disable', 'partition'}:
@ -214,7 +214,7 @@ def categories_settings(query, db):
hidden_categories = frozenset(db.pref('tag_browser_hidden_categories', set()))
return CategoriesSettings(
dont_collapse, collapse_model, collapse_at, sort_by, template,
using_hierarchy, GroupedSearchTerms(db.pref('grouped_search_terms', {})),
using_hierarchy, gst_container(db.pref('grouped_search_terms', {})),
hidden_categories, query.get('hide_empty_categories') == 'yes')