1 import math
2 import random
3 import string
4 import urlparse
5 import flask
6
7 from coprs import constants
8
9 from rpmUtils.miscutils import splitFilename
12 """ Generate a random string used as token to access the API
13 remotely.
14
15 :kwarg: size, the size of the token to generate, defaults to 30
16 chars.
17 :return: a string, the API token for the user.
18 """
19 return ''.join(random.choice(string.ascii_lowercase) for x in range(size))
20
24 if isinstance(attr, int):
25 for k, v in self.vals.items():
26 if v == attr:
27 return k
28 raise KeyError('num {0} is not mapped'.format(attr))
29 else:
30 return self.vals[attr]
31
33 __metaclass__ = EnumType
34 vals = {'nothing': 0, 'request': 1, 'approved': 2}
35
36 @classmethod
38 return [(n, k) for k, n in cls.vals.items() if n != without]
39
41 __metaclass__ = EnumType
42 vals = {'delete': 0, 'rename': 1, 'legal-flag': 2}
43
45 __metaclass__ = EnumType
46 vals = {'waiting': 0, 'success': 1, 'failure': 2}
47
49 __metaclass__ = EnumType
50 vals = {'user': 0, 'admin': 1}
51
53 __metaclass__ = EnumType
54 vals = {'failed': 0,
55 'succeeded': 1,
56 'canceled': 2,
57 'running': 3,
58 'pending': 4}
59
61 - def __init__(self, query, total_count, page = 1, per_page_override = None, urls_count_override = None):
62 self.query = query
63 self.total_count = total_count
64 self.page = page
65 self.per_page = per_page_override or constants.ITEMS_PER_PAGE
66 self.urls_count = urls_count_override or constants.PAGES_URLS_COUNT
67 self._sliced_query = None
68
69 - def page_slice(self, page):
71
72 @property
74 if not self._sliced_query:
75 self._sliced_query = self.query[slice(*self.page_slice(self.page))]
76 return self._sliced_query
77
78 @property
80 return int(math.ceil(self.total_count / float(self.per_page)))
81
91
93 left_border = self.page - self.urls_count / 2
94 left_border = 1 if left_border < 1 else left_border
95 right_border = self.page + self.urls_count / 2
96 right_border = self.pages if right_border > self.pages else right_border
97
98 return [(self.url_for_other_page(request, i), i) for i in range(left_border, right_border + 1)]
99
100 - def url_for_other_page(self, request, page):
101 args = request.view_args.copy()
102 args['page'] = page
103 return flask.url_for(request.endpoint, **args)
104
107 """
108 Parse package name from possibly incomplete nvra string.
109 """
110
111 if pkg.count('.') >= 3 and pkg.count('-') >= 2:
112 return splitFilename(pkg)[0]
113
114
115 result = ''
116 pkg = pkg.replace('.rpm', '').replace('.src', '')
117
118 for delim in ['-', '.']:
119 if delim in pkg:
120 parts = pkg.split(delim)
121 for part in parts:
122 if any(map(lambda x: x.isdigit(), part)):
123 return result[:-1]
124
125 result += part + '-'
126
127 return result[:-1]
128
129 return pkg
130
139
141 """ Return True is argument is integer number. False otherwise. """
142 try:
143 int(s)
144 return True
145 except ValueError:
146 return False
147