-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.py
100 lines (80 loc) · 3.34 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import re
from urllib.parse import parse_qs
from haystack.query import SearchQuerySet
from haystack.views import SearchView
from core.utils import get_version_stats
from core.utils import get_username
from public_interface.models import Vouchers
def get_simple_query(request):
url_encoded_query = get_correct_url_query(request.GET.urlencode())
simple_query = recover_keyword(url_encoded_query)
return simple_query
def strip_page(url_encoded_query):
this_query = re.sub('page=[0-2]+', '', url_encoded_query)
this_query = this_query.replace('&&', '&')
this_query = re.sub('^&', '', this_query)
this_query = re.sub('&$', '', this_query)
return this_query
def get_correct_url_query(url_encoded_query):
this_query = strip_page(url_encoded_query)
return this_query
def recover_keyword(url_encoded_query):
simple_query = ""
for key, value in parse_qs(url_encoded_query).items():
if value[0] != "Select" and key != "page":
simple_query += value[0] + " "
return simple_query.strip()
def get_voucher_code_list(sqs):
if sqs is None:
return None
if isinstance(sqs, SearchQuerySet):
ids = sqs.values_list("code", flat=True)
sqs = Vouchers.objects.filter(code__in=ids)
try:
# this is voucher queryset
code_list = "\n".join(list(sqs.distinct("code").values_list("code", flat=True)))
except TypeError:
# this is sequences queryset
code_list = "\n".join(list(sqs.distinct("code").values_list("code__code", flat=True)))
return code_list
class VoSeqSearchView(SearchView):
def __init__(self, url_encoded_query, *args, **kwargs):
self.searchqueryset = kwargs['searchqueryset']
self.url_encoded_query = self.get_correct_url_query(url_encoded_query)
self.simple_query = self.recover_keyword(url_encoded_query)
self.voucher_code_list = self.get_voucher_code_list()
super(VoSeqSearchView, self).__init__(*args, **kwargs)
def get_correct_url_query(self, url_encoded_query):
this_query = self.strip_page(url_encoded_query)
return this_query
def recover_keyword(self, url_encoded_query):
this_query = re.sub('\w+=Select', ' ', url_encoded_query)
this_query = re.sub('\w+=', ' ', this_query)
this_query = this_query.replace('&', ' ')
this_query = re.sub('\s+', ' ', this_query)
return this_query.strip()
def strip_page(self, url_encoded_query):
this_query = re.sub('page=[0-2]+', '', url_encoded_query)
this_query = this_query.replace('&&', '&')
this_query = re.sub('^&', '', this_query)
this_query = re.sub('&$', '', this_query)
return this_query
def get_voucher_code_list(self):
if self.searchqueryset is None:
return None
code_list = ''
for i in self.searchqueryset:
code_list += i.code + '\n'
return code_list
def extra_context(self):
version, stats = get_version_stats()
username = get_username(self.request)
return {
'username': username,
'voucher_code_list': self.voucher_code_list,
'simple_query': self.simple_query,
'url_encoded_query': self.url_encoded_query,
'result_count': len(self.searchqueryset),
'version': version,
'stats': stats,
}