Pi 1 год назад
Родитель
Сommit
93964ed3f1

+ 8 - 1
app/data/filter.py

@@ -27,6 +27,13 @@ def get_include_exclude(
     return set(include), set(exclude)
 
 
+def get_query_param(include, exclude):
+    return '!'.join([
+        '|'.join(sorted(include)),
+        *([ '|'.join(sorted(exclude)) ] if exclude else [ ]),
+    ])
+
+
 def get_filter(
     query: FormsDict, allow: Iterable[str] = None
 ) -> dict[str, Tuple[List[str], List[str]]]:
@@ -34,4 +41,4 @@ def get_filter(
         k: get_include_exclude(
             (query[k] or 'kg' if k == 'unit' else query.getall(k)) if k in query else None
         ) for k in sorted(set(query.keys()) | set(allow)) if allow is None or k in allow
-    }
+    }

+ 1 - 0
app/rest/form.py

@@ -70,6 +70,7 @@ def get_form(action: str, method: str, filter_data, data: DataFrame):
         'group': 2,
     }[x])
     return template('form', action=action, method=method,
+        params=filter_data,
         **{
             k: {
                 "name": k,

+ 4 - 6
app/rest/pyapi.py

@@ -28,6 +28,7 @@ from queue import Queue, Empty
 
 from ..data.filter import(
     get_filter,
+    get_query_param,
 )
 
 from ..data.util import(
@@ -80,12 +81,6 @@ ORDER BY "Product", "Category", "Group"
     ])
 
 
-def get_query_param(include, exclude):
-    return '!'.join([
-        '|'.join(sorted(include)),
-        *([ '|'.join(sorted(exclude)) ] if exclude else [ ]),
-    ])
-
 def normalize_query(query: FormsDict, allow: Iterable[str] = None) -> str:
     param = get_filter(query, allow=allow)
     return urlencode([
@@ -105,6 +100,9 @@ LOCK = Lock()
 def trend():
     _, _, path, *_ = request.urlparts
     normalized = normalize_query(request.query, allow=PARAMS)
+    if normalized in CACHE:
+        if request.params.get('reload') == 'true':
+            del CACHE[normalized]
 
     if request.query_string != normalized:
         return redirect(f'{path}?{normalized}')

+ 13 - 8
app/rest/templates/button-nav.tpl

@@ -1,10 +1,8 @@
 <div class="pure-g">
-  <div class="pure-u-1">
-    <div class="pure-button-group" role="group" style="padding: 1em 0 0;">
-    <style>
-.button-resize { font-size: 65%; }
+  <style>
+.button-resize { font-size: 70%; }
 @media screen and (min-width:35.5em){
-    .button-resize { font-size: 70%; }
+    .button-resize { font-size: 75%; }
 }
 @media screen and (min-width:40em){
     .button-resize { font-size: 85%; }
@@ -15,14 +13,21 @@
 @media screen and (min-width:80em){
     .button-resize { font-size: 110%; }
 }
-    </style>
-      <button class="button-resize pure-button" type="submit"> Apply </button>
+  </style>
+  <div class="pure-u-1">
+    <div class="pure-button-group" role="nav" style="padding: 1em 0 0;">
     % for target in ("trend", "products", "categories", "groups", "tags"):
     %   disabled = 'disabled="true"' if target == action else ''
     %   label = target.title()
       <button class="button-resize pure-button" type="submit" formaction="{{target}}" {{!disabled}}> {{label}} </button>
     % end
+    </div>
+  </div>
+  <div class="pure-u-1">
+    <div class="pure-button-group" role="action" style="padding: 1em 0 0;">
+      <button class="button-resize pure-button" type="submit"> Apply </button>
       <button form="clear" class="button-resize pure-button" type="submit"> Clear </button>
+      <button form="reload" class="button-resize pure-button" type="submit"> Reload </button>
     </div>
   </div>
-</div>
+</div>

+ 2 - 1
app/rest/templates/form-nav.tpl

@@ -8,4 +8,5 @@
   % end
   </div>
 </form>
-% include('form-clear', params=params)
+% include('form-clear', params=params)
+% include('form-reload', params=params)

+ 10 - 0
app/rest/templates/form-reload.tpl

@@ -0,0 +1,10 @@
+<form id="reload" method="{{ method }}" action="{{ action }}">
+  <div style="width: 0; height: 1em">
+  % for param in params:
+  %   include('hidden-input', **param)
+
+  % end
+  % include('hidden-input', name='reload', value='true')
+
+  </div>
+</form>

+ 7 - 7
app/rest/templates/form.tpl

@@ -1,3 +1,4 @@
+% from app.data.filter import get_query_param
 <form id="filter" method="{{ method }}" action="{{ action }}">
   % include('button-nav', action=action)
   <details style="padding: 1em 0">
@@ -11,10 +12,9 @@
     </div>
   </details>
 </form>
-% include('form-clear', params=[
-%   {'name': 'product'},
-%   {'name': 'category'},
-%   {'name': 'group'},
-%   {'name': 'tags'},
-%   {'name': 'unit'}
-% ])
+% params = [{
+%   'name': k,
+%   'value': get_query_param(inc, ex),
+% } for k, (inc, ex) in params.items()]
+% include('form-clear', params=params)
+% include('form-reload', params=params)

+ 1 - 1
app/rest/templates/query-to-xml.tpl

@@ -10,7 +10,7 @@
     <style>
 body {
   background-color: #080808;
-  color: #a0a0a0a0;
+  color: #cccccc;
 }
 .pure-table thead{
   background-color:#a0a0a0;