This repository was archived by the owner on Dec 12, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathutil.py
56 lines (52 loc) · 1.85 KB
/
util.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
import re
def regex_filter(regex, val):
if val:
mo = re.search(regex,val)
if mo:
return True
return False
return False
def get_paginated(args, dp_werke, as_json=False):
df = dp_werke.copy()
for f in df:
val = args.get('o_' + f, None)
# print(f, df[f].dtype.name)
if val is not None:
df = df.dropna(subset=[f])
dfname = df[f].dtype.name.lower()
if 'object' in dfname:
for v in val.split(','):
# print(v)
# val = r'\b%s\b' % v #auskommentiert um " zu finden
val = re.sub(r'[«»"()]', '.', val) #substitutes special chars with .
#print(f, val)
df = df.loc[df[f].str.contains(val, regex=True, case=False, na=False)]
#print(df)
# df = df[df[f].apply(regex_filter, regex, val)]
elif 'int' in dfname:
try:
val = int(val)
df = df.loc[df[f] == val]
# print(f, val)
except:
pass
with_sort = args.get('sort', None)
if with_sort is not None:
is_asc = True
if with_sort.startswith('-'):
with_sort = with_sort.strip('-')
is_asc = False
df = df.sort_values(with_sort, ascending=is_asc)
page = int(args.get('page', 1))
per_page = int(args.get('per_page', 10))
total = len(df)
pages = round(total / per_page)
offset = (page - 1) * per_page
dprange = df[offset : offset + per_page]
if as_json:
return dprange.to_json(orient='records')
return {
# 'items': dprange.to_dict(orient='records'),
'page': page, 'pages': pages, 'total': total,
# 'has_next': ppp.has_next, 'has_prev': ppp.has_prev
}