1 import math
2 import random
3 import string
4
5 import flask
6
7 from coprs import constants
10 """ Generate a random string used as token to access the API
11 remotely.
12
13 :kwarg: size, the size of the token to generate, defaults to 30
14 chars.
15 :return: a string, the API token for the user.
16 """
17 return ''.join(random.choice(string.ascii_lowercase) for x in range(size))
18
22 if isinstance(attr, int):
23 for k, v in self.vals.items():
24 if v == attr:
25 return k
26 raise KeyError('num {0} is not mapped'.format(attr))
27 else:
28 return self.vals[attr]
29
31 __metaclass__ = EnumType
32 vals = {'nothing': 0, 'request': 1, 'approved': 2}
33
34 @classmethod
36 return [(n, k) for k, n in cls.vals.items() if n != without]
37
39 __metaclass__ = EnumType
40 vals = {'delete': 0, 'rename': 1, 'legal-flag': 2}
41
43 __metaclass__ = EnumType
44 vals = {'waiting': 0, 'success': 1, 'failure': 2}
45
47 __metaclass__ = EnumType
48 vals = {'user': 0, 'admin': 1}
49
51 - def __init__(self, query, total_count, page = 1, per_page_override = None, urls_count_override = None):
52 self.query = query
53 self.total_count = total_count
54 self.page = page
55 self.per_page = per_page_override or constants.ITEMS_PER_PAGE
56 self.urls_count = urls_count_override or constants.PAGES_URLS_COUNT
57 self._sliced_query = None
58
59 - def page_slice(self, page):
61
62 @property
64 if not self._sliced_query:
65 self._sliced_query = self.query[slice(*self.page_slice(self.page))]
66 return self._sliced_query
67
68 @property
70 return int(math.ceil(self.total_count / float(self.per_page)))
71
81
83 left_border = self.page - self.urls_count / 2
84 left_border = 1 if left_border < 1 else left_border
85 right_border = self.page + self.urls_count / 2
86 right_border = self.pages if right_border > self.pages else right_border
87
88 return [(self.url_for_other_page(request, i), i) for i in range(left_border, right_border + 1)]
89
90 - def url_for_other_page(self, request, page):
91 args = request.view_args.copy()
92 args['page'] = page
93 return flask.url_for(request.endpoint, **args)
94