Gentoo Archives: gentoo-commits

From: Slava Bacherikov <slava@××××××××××××××.ua>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/gentoo-packages:master commit in: /, gpackages/apps/packages/, gpackages/libs/package_info/package_backends/, ...
Date: Tue, 03 Jul 2012 21:08:42
Message-Id: 1341330087.7924dd97ea401ef71192ec181e669ea24c90ebaa.bacher09@gentoo
1 commit: 7924dd97ea401ef71192ec181e669ea24c90ebaa
2 Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
3 AuthorDate: Tue Jul 3 15:40:59 2012 +0000
4 Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
5 CommitDate: Tue Jul 3 15:41:27 2012 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=7924dd97
7
8 Now independent from gentoolkit
9
10 ---
11 Requirements | 1 -
12 gpackages/apps/packages/models.py | 4 +-
13 gpackages/apps/packages/utils.py | 84 ------------------
14 gpackages/apps/packages/validators.py | 8 --
15 gpackages/apps/packages/views.py | 6 +-
16 gpackages/libs/package_info/mixins.py | 9 +-
17 .../libs/package_info/package_backends/portage.py | 9 ++-
18 .../utils.py => libs/package_info/parse_cp.py} | 92 +++++++++++++++-----
19 gpackages/libs/package_info/validators.py | 4 +
20 9 files changed, 90 insertions(+), 127 deletions(-)
21
22 diff --git a/Requirements b/Requirements
23 index 2e02a7e..2a5cdb1 100644
24 --- a/Requirements
25 +++ b/Requirements
26 @@ -1,6 +1,5 @@
27 django>=1.4
28 portage
29 -gentoolkit
30
31 Optional:
32 lxml
33
34 diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
35 index 064add4..a5ad484 100644
36 --- a/gpackages/apps/packages/models.py
37 +++ b/gpackages/apps/packages/models.py
38 @@ -6,8 +6,8 @@ from package_info.generic import get_from_kwargs_and_del
39 from package_info.repo_info import REPOS_TYPE
40 # relative
41 from .keywords import KeywordRepr
42 -from utils import get_link
43 -from .validators import validate_url, validate_email
44 +#from utils import get_link
45 +from package_info.validators import validate_url, validate_email
46
47
48 class AbstractDateTimeModel(models.Model):
49
50 diff --git a/gpackages/apps/packages/utils.py b/gpackages/apps/packages/utils.py
51 index fc2bd8d..25150c2 100644
52 --- a/gpackages/apps/packages/utils.py
53 +++ b/gpackages/apps/packages/utils.py
54 @@ -1,5 +1,3 @@
55 -import re
56 -from .validators import REVISION_RE, VERSION_RE, NAME_RE
57 from package_info.generic import ToStrMixin
58
59 def gen_args(args):
60 @@ -12,85 +10,3 @@ def get_link(host, script, args):
61 'script': script,
62 'args': get_args(args)}
63
64 -BASE_PACKAGE_RE_P = r'(?P<category>[^/]+)/(?P<name>%(name)s)' % \
65 - {'name' : NAME_RE}
66 -
67 -REPOSITORY_RE_P = r'(?:::(?P<repository>\w+))?'
68 -
69 -PACKAGE_RE_P = r'%(base)s%(repository)s' % {'base' : BASE_PACKAGE_RE_P,
70 - 'repository' : REPOSITORY_RE_P}
71 -
72 -PACKAGE_RE = r'^%s$' % PACKAGE_RE_P
73 -
74 -VERSIONS_RE_P = r'-(?P<version>%(version)s)(?:-(?P<revision>%(revision)s))?' % \
75 - { 'version' : VERSION_RE,
76 - 'revision': REVISION_RE
77 - }
78 -EBUILD_CPVR_RE_P = r'%(base)s%(versions)s%(repository)s' % {
79 - 'base': BASE_PACKAGE_RE_P,
80 - 'versions': VERSIONS_RE_P,
81 - 'repository': REPOSITORY_RE_P
82 - }
83 -
84 -EBUILD_CPVR_RE = r'^%s$' % EBUILD_CPVR_RE_P
85 -
86 -ebuild_cpvr_re = re.compile(EBUILD_CPVR_RE)
87 -package_re = re.compile(PACKAGE_RE)
88 -
89 -def _gen_func(name):
90 - return lambda self: self.gr_dict.get(name)
91 -
92 -class ParseMetaClass(type):
93 -
94 - def __init__(cls, name, bases, dct):
95 - super(ParseMetaClass, cls).__init__(name, bases, dct)
96 - for v in cls.simple_attrs:
97 - setattr(cls, v, property(_gen_func(v)))
98 -
99 -class PackageParse(ToStrMixin):
100 -
101 - __metaclass__ = ParseMetaClass
102 - re = package_re
103 - simple_attrs = ('category', 'name', 'repository')
104 -
105 - def __init__(self, parse = None, dct = None):
106 - assert parse or dct, 'Shoud set or parse or dct'
107 - self.parse_str = parse
108 -
109 - if parse is not None:
110 - m = self.re.match(parse)
111 - self.gr_dict = {}
112 - if m is not None:
113 - self.gr_dict = m.groupdict()
114 - elif dct is not None:
115 - self.gr_dict = dct
116 -
117 - def __unicode__(self):
118 - return unicode(self.parse_str)
119 -
120 - @property
121 - def re_str(self):
122 - return PACKAGE_RE_P
123 -
124 - @property
125 - def repository_for_q(self):
126 - if self.repository:
127 - return self.repository
128 - else:
129 - return 'gentoo'
130 -
131 -class EbuildParse(PackageParse):
132 -
133 - re = ebuild_cpvr_re
134 - simple_attrs = ('category', 'name', 'repository', 'version', 'revision')
135 -
136 - @property
137 - def re_str(self):
138 - return EBUILD_CPVR_RE_P
139 -
140 - @property
141 - def revision_for_q(self):
142 - if self.revision:
143 - return self.revision
144 - else:
145 - return ''
146
147 diff --git a/gpackages/apps/packages/validators.py b/gpackages/apps/packages/validators.py
148 deleted file mode 100644
149 index efe0c00..0000000
150 --- a/gpackages/apps/packages/validators.py
151 +++ /dev/null
152 @@ -1,8 +0,0 @@
153 -from django.core.validators import URLValidator, validate_email
154 -from django.core.exceptions import ValidationError
155 -
156 -validate_url = URLValidator()
157 -
158 -REVISION_RE = r'r\d+'
159 -VERSION_RE = r'[\w.]+'
160 -NAME_RE = r'[\w+-]+'
161
162 diff --git a/gpackages/apps/packages/views.py b/gpackages/apps/packages/views.py
163 index 3d239ae..a0ce56a 100644
164 --- a/gpackages/apps/packages/views.py
165 +++ b/gpackages/apps/packages/views.py
166 @@ -6,7 +6,7 @@ from models import CategoryModel, HerdsModel, MaintainerModel, \
167 PackageModel, UseFlagModel
168
169 from django.shortcuts import get_object_or_404
170 -from .utils import EbuildParse, PackageParse
171 +from package_info.parse_cp import EbuildParseCPVR, PackageParseCPR
172
173 arches = ['alpha', 'amd64', 'arm', 'hppa', 'ia64', 'ppc', 'ppc64', 'sparc', 'x86']
174
175 @@ -71,7 +71,7 @@ class EbuildDetailView(ContextView, DetailView):
176 queryset = self.get_queryset()
177
178 cpvr = self.kwargs.get('cpvr')
179 - eo = EbuildParse(cpvr)
180 + eo = EbuildParseCPVR(cpvr)
181 category, name = eo.category, eo.name
182 version, revision = eo.version, eo.revision_for_q
183 repository = eo.repository_for_q
184 @@ -134,7 +134,7 @@ class PackageDetailView(ContextView, DetailView):
185 queryset = self.get_queryset()
186
187 cpr = self.kwargs.get('cpr')
188 - po = PackageParse(cpr)
189 + po = PackageParseCPR(cpr)
190 category, name = po.category, po.name
191 repository = po.repository_for_q
192 obj = get_object_or_404(queryset, name = name,
193
194 diff --git a/gpackages/libs/package_info/mixins.py b/gpackages/libs/package_info/mixins.py
195 index 36afb10..923fcc8 100644
196 --- a/gpackages/libs/package_info/mixins.py
197 +++ b/gpackages/libs/package_info/mixins.py
198 @@ -227,10 +227,11 @@ class EbuildRevMixin(object):
199 @cached_property
200 def revision_as_int(self):
201 d = 0 # Maybe None ?
202 - m = rev_re.match(self.revision)
203 - if m is not None:
204 - d = m.groupdict().get('rev')
205 - d = toint(d, 0)
206 + if self.revision:
207 + m = rev_re.match(self.revision)
208 + if m is not None:
209 + d = m.groupdict().get('rev')
210 + d = toint(d, 0)
211 return d
212
213 class EbuildHomepageMixin(object):
214
215 diff --git a/gpackages/libs/package_info/package_backends/portage.py b/gpackages/libs/package_info/package_backends/portage.py
216 index 4721d19..52956dd 100644
217 --- a/gpackages/libs/package_info/package_backends/portage.py
218 +++ b/gpackages/libs/package_info/package_backends/portage.py
219 @@ -5,8 +5,8 @@ from portage.dep import Atom
220 from portage.exception import PortageException, FileNotFound, InvalidAtom, \
221 InvalidDependString, InvalidPackageName
222
223 -from gentoolkit.cpv import CPV
224 from ..generic import cached_property
225 +from ..parse_cp import EbuildParse
226 import os.path
227 #Mixins
228 from ..mixins import PortageMixin, PortTreeMixin, CategoryMixin, PackageMixin, \
229 @@ -152,11 +152,14 @@ class Ebuild(EbuildMixin):
230 def __init__(self, package, ebuild):
231 self.package = package
232 self.ebuild = ebuild
233 - self.cpv_object = CPV(ebuild)
234 + self.cpv_object = EbuildParse(ebuild)
235 self._cache = {}
236 self._env = None
237 # Maybe this should be lazy ?
238 - self._set_env()
239 + if not self.cpv_object.is_valid:
240 + self._is_valid = False
241 + else:
242 + self._set_env()
243
244 def _set_env(self):
245 try:
246
247 diff --git a/gpackages/apps/packages/utils.py b/gpackages/libs/package_info/parse_cp.py
248 similarity index 52%
249 copy from gpackages/apps/packages/utils.py
250 copy to gpackages/libs/package_info/parse_cp.py
251 index fc2bd8d..5680b05 100644
252 --- a/gpackages/apps/packages/utils.py
253 +++ b/gpackages/libs/package_info/parse_cp.py
254 @@ -1,41 +1,41 @@
255 import re
256 from .validators import REVISION_RE, VERSION_RE, NAME_RE
257 -from package_info.generic import ToStrMixin
258 +from .generic import ToStrMixin
259 +from .mixins import EbuildRevMixin
260
261 -def gen_args(args):
262 - t = '%s=%s'
263 - l = (t % arg for arg in args)
264 - return '&'.join(l)
265 -
266 -def get_link(host, script, args):
267 - return 'http://%(host)s/%(script)s?%(args)' % {'host': host,
268 - 'script': script,
269 - 'args': get_args(args)}
270 -
271 -BASE_PACKAGE_RE_P = r'(?P<category>[^/]+)/(?P<name>%(name)s)' % \
272 +PACKAGE_RE_P = r'(?P<category>[^/]+)/(?P<name>%(name)s)' % \
273 {'name' : NAME_RE}
274
275 REPOSITORY_RE_P = r'(?:::(?P<repository>\w+))?'
276
277 -PACKAGE_RE_P = r'%(base)s%(repository)s' % {'base' : BASE_PACKAGE_RE_P,
278 +PACKAGE_CPR_RE_P = r'%(base)s%(repository)s' % {'base' : PACKAGE_RE_P,
279 'repository' : REPOSITORY_RE_P}
280
281 PACKAGE_RE = r'^%s$' % PACKAGE_RE_P
282 +PACKAGE_CPV_RE = r'^%s$' % PACKAGE_CPR_RE_P
283
284 VERSIONS_RE_P = r'-(?P<version>%(version)s)(?:-(?P<revision>%(revision)s))?' % \
285 { 'version' : VERSION_RE,
286 'revision': REVISION_RE
287 }
288 -EBUILD_CPVR_RE_P = r'%(base)s%(versions)s%(repository)s' % {
289 - 'base': BASE_PACKAGE_RE_P,
290 +
291 +EBUILD_CPV_RE_P = r'%(base)s%(versions)s' % {
292 + 'base': PACKAGE_RE_P,
293 'versions': VERSIONS_RE_P,
294 + }
295 +
296 +EBUILD_CPVR_RE_P = r'%(cpv)s%(repository)s' % {
297 + 'cpv': EBUILD_CPV_RE_P,
298 'repository': REPOSITORY_RE_P
299 }
300
301 +EBUILD_CPV_RE = r'^%s$' % EBUILD_CPV_RE_P
302 EBUILD_CPVR_RE = r'^%s$' % EBUILD_CPVR_RE_P
303
304 -ebuild_cpvr_re = re.compile(EBUILD_CPVR_RE)
305 package_re = re.compile(PACKAGE_RE)
306 +package_cpr_re = re.compile(PACKAGE_CPV_RE)
307 +ebuild_cpvr_re = re.compile(EBUILD_CPVR_RE)
308 +ebuild_cpv_re = re.compile(EBUILD_CPV_RE)
309
310 def _gen_func(name):
311 return lambda self: self.gr_dict.get(name)
312 @@ -51,17 +51,19 @@ class PackageParse(ToStrMixin):
313
314 __metaclass__ = ParseMetaClass
315 re = package_re
316 - simple_attrs = ('category', 'name', 'repository')
317 + simple_attrs = ('category', 'name')
318
319 def __init__(self, parse = None, dct = None):
320 - assert parse or dct, 'Shoud set or parse or dct'
321 + assert parse or dct, 'Should set parse or dct'
322 self.parse_str = parse
323 + self.is_valid = False
324
325 if parse is not None:
326 m = self.re.match(parse)
327 self.gr_dict = {}
328 if m is not None:
329 self.gr_dict = m.groupdict()
330 + self.is_valid = True
331 elif dct is not None:
332 self.gr_dict = dct
333
334 @@ -73,24 +75,70 @@ class PackageParse(ToStrMixin):
335 return PACKAGE_RE_P
336
337 @property
338 + def cp(self):
339 + return '%s/%s' % (self.category, self.name)
340 +
341 +class PackageParseCPR(PackageParse):
342 + simple_attrs = ('category', 'name', 'repository')
343 + re = package_cpr_re
344 +
345 + @property
346 + def re_str(self):
347 + return PACKAGE_CPR_RE_P
348 +
349 + @property
350 def repository_for_q(self):
351 if self.repository:
352 return self.repository
353 else:
354 return 'gentoo'
355
356 -class EbuildParse(PackageParse):
357 + @property
358 + def cpr(self):
359 + return '%s::%s' % (self.cp, self.repository_for_q)
360 +
361 +class EbuildParse(EbuildRevMixin, PackageParse):
362 + #NOTICE: It three time faster than CPV from gentoolkit.cpv
363
364 - re = ebuild_cpvr_re
365 - simple_attrs = ('category', 'name', 'repository', 'version', 'revision')
366 + re = ebuild_cpv_re
367 + simple_attrs = ('category', 'name', 'version', 'revision')
368
369 @property
370 def re_str(self):
371 - return EBUILD_CPVR_RE_P
372 + return EBUILD_CPV_RE_P
373
374 @property
375 def revision_for_q(self):
376 if self.revision:
377 + return self.revision_as_int
378 + else:
379 + return 0
380 +
381 + @property
382 + def revision_as_str(self):
383 + if self.revision:
384 return self.revision
385 else:
386 return ''
387 +
388 + @property
389 + def cpv(self):
390 + return '%s-%s' % (self.cp, self.fullversion)
391 +
392 + @property
393 + def fullversion(self):
394 + rev_p = '-' + self.revision if self.revision else ''
395 + return '%s%s' % (self.version, rev_p)
396 +
397 +class EbuildParseCPVR(EbuildParse, PackageParseCPR):
398 +
399 + re = ebuild_cpvr_re
400 + simple_attrs = ('category', 'name', 'repository', 'version', 'revision')
401 +
402 + @property
403 + def re_str(self):
404 + return EBUILD_CPVR_RE_P
405 +
406 + @property
407 + def cpvr(self):
408 + return '%s::%s' % (self.cpv, self.repository_for_q)
409
410 diff --git a/gpackages/libs/package_info/validators.py b/gpackages/libs/package_info/validators.py
411 index d86e7b8..0b1fbc6 100644
412 --- a/gpackages/libs/package_info/validators.py
413 +++ b/gpackages/libs/package_info/validators.py
414 @@ -5,3 +5,7 @@ from django.core.exceptions import ValidationError
415 validate_url = URLValidator()
416
417 __all__ = ('validate_email', 'validate_url', 'ValidationError')
418 +
419 +REVISION_RE = r'r\d+'
420 +VERSION_RE = r'[\w.]+'
421 +NAME_RE = r'[\w+-]+'