* [gentoo-commits] proj/gentoo-packages:master commit in: /, gpackages/apps/packages/, gpackages/libs/package_info/package_backends/, ...
@ 2012-07-03 21:08 Slava Bacherikov
0 siblings, 0 replies; only message in thread
From: Slava Bacherikov @ 2012-07-03 21:08 UTC (permalink / raw
To: gentoo-commits
commit: 7924dd97ea401ef71192ec181e669ea24c90ebaa
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Tue Jul 3 15:40:59 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Tue Jul 3 15:41:27 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=7924dd97
Now independent from gentoolkit
---
Requirements | 1 -
gpackages/apps/packages/models.py | 4 +-
gpackages/apps/packages/utils.py | 84 ------------------
gpackages/apps/packages/validators.py | 8 --
gpackages/apps/packages/views.py | 6 +-
gpackages/libs/package_info/mixins.py | 9 +-
.../libs/package_info/package_backends/portage.py | 9 ++-
.../utils.py => libs/package_info/parse_cp.py} | 92 +++++++++++++++-----
gpackages/libs/package_info/validators.py | 4 +
9 files changed, 90 insertions(+), 127 deletions(-)
diff --git a/Requirements b/Requirements
index 2e02a7e..2a5cdb1 100644
--- a/Requirements
+++ b/Requirements
@@ -1,6 +1,5 @@
django>=1.4
portage
-gentoolkit
Optional:
lxml
diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
index 064add4..a5ad484 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -6,8 +6,8 @@ from package_info.generic import get_from_kwargs_and_del
from package_info.repo_info import REPOS_TYPE
# relative
from .keywords import KeywordRepr
-from utils import get_link
-from .validators import validate_url, validate_email
+#from utils import get_link
+from package_info.validators import validate_url, validate_email
class AbstractDateTimeModel(models.Model):
diff --git a/gpackages/apps/packages/utils.py b/gpackages/apps/packages/utils.py
index fc2bd8d..25150c2 100644
--- a/gpackages/apps/packages/utils.py
+++ b/gpackages/apps/packages/utils.py
@@ -1,5 +1,3 @@
-import re
-from .validators import REVISION_RE, VERSION_RE, NAME_RE
from package_info.generic import ToStrMixin
def gen_args(args):
@@ -12,85 +10,3 @@ def get_link(host, script, args):
'script': script,
'args': get_args(args)}
-BASE_PACKAGE_RE_P = r'(?P<category>[^/]+)/(?P<name>%(name)s)' % \
- {'name' : NAME_RE}
-
-REPOSITORY_RE_P = r'(?:::(?P<repository>\w+))?'
-
-PACKAGE_RE_P = r'%(base)s%(repository)s' % {'base' : BASE_PACKAGE_RE_P,
- 'repository' : REPOSITORY_RE_P}
-
-PACKAGE_RE = r'^%s$' % PACKAGE_RE_P
-
-VERSIONS_RE_P = r'-(?P<version>%(version)s)(?:-(?P<revision>%(revision)s))?' % \
- { 'version' : VERSION_RE,
- 'revision': REVISION_RE
- }
-EBUILD_CPVR_RE_P = r'%(base)s%(versions)s%(repository)s' % {
- 'base': BASE_PACKAGE_RE_P,
- 'versions': VERSIONS_RE_P,
- 'repository': REPOSITORY_RE_P
- }
-
-EBUILD_CPVR_RE = r'^%s$' % EBUILD_CPVR_RE_P
-
-ebuild_cpvr_re = re.compile(EBUILD_CPVR_RE)
-package_re = re.compile(PACKAGE_RE)
-
-def _gen_func(name):
- return lambda self: self.gr_dict.get(name)
-
-class ParseMetaClass(type):
-
- def __init__(cls, name, bases, dct):
- super(ParseMetaClass, cls).__init__(name, bases, dct)
- for v in cls.simple_attrs:
- setattr(cls, v, property(_gen_func(v)))
-
-class PackageParse(ToStrMixin):
-
- __metaclass__ = ParseMetaClass
- re = package_re
- simple_attrs = ('category', 'name', 'repository')
-
- def __init__(self, parse = None, dct = None):
- assert parse or dct, 'Shoud set or parse or dct'
- self.parse_str = parse
-
- if parse is not None:
- m = self.re.match(parse)
- self.gr_dict = {}
- if m is not None:
- self.gr_dict = m.groupdict()
- elif dct is not None:
- self.gr_dict = dct
-
- def __unicode__(self):
- return unicode(self.parse_str)
-
- @property
- def re_str(self):
- return PACKAGE_RE_P
-
- @property
- def repository_for_q(self):
- if self.repository:
- return self.repository
- else:
- return 'gentoo'
-
-class EbuildParse(PackageParse):
-
- re = ebuild_cpvr_re
- simple_attrs = ('category', 'name', 'repository', 'version', 'revision')
-
- @property
- def re_str(self):
- return EBUILD_CPVR_RE_P
-
- @property
- def revision_for_q(self):
- if self.revision:
- return self.revision
- else:
- return ''
diff --git a/gpackages/apps/packages/validators.py b/gpackages/apps/packages/validators.py
deleted file mode 100644
index efe0c00..0000000
--- a/gpackages/apps/packages/validators.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from django.core.validators import URLValidator, validate_email
-from django.core.exceptions import ValidationError
-
-validate_url = URLValidator()
-
-REVISION_RE = r'r\d+'
-VERSION_RE = r'[\w.]+'
-NAME_RE = r'[\w+-]+'
diff --git a/gpackages/apps/packages/views.py b/gpackages/apps/packages/views.py
index 3d239ae..a0ce56a 100644
--- a/gpackages/apps/packages/views.py
+++ b/gpackages/apps/packages/views.py
@@ -6,7 +6,7 @@ from models import CategoryModel, HerdsModel, MaintainerModel, \
PackageModel, UseFlagModel
from django.shortcuts import get_object_or_404
-from .utils import EbuildParse, PackageParse
+from package_info.parse_cp import EbuildParseCPVR, PackageParseCPR
arches = ['alpha', 'amd64', 'arm', 'hppa', 'ia64', 'ppc', 'ppc64', 'sparc', 'x86']
@@ -71,7 +71,7 @@ class EbuildDetailView(ContextView, DetailView):
queryset = self.get_queryset()
cpvr = self.kwargs.get('cpvr')
- eo = EbuildParse(cpvr)
+ eo = EbuildParseCPVR(cpvr)
category, name = eo.category, eo.name
version, revision = eo.version, eo.revision_for_q
repository = eo.repository_for_q
@@ -134,7 +134,7 @@ class PackageDetailView(ContextView, DetailView):
queryset = self.get_queryset()
cpr = self.kwargs.get('cpr')
- po = PackageParse(cpr)
+ po = PackageParseCPR(cpr)
category, name = po.category, po.name
repository = po.repository_for_q
obj = get_object_or_404(queryset, name = name,
diff --git a/gpackages/libs/package_info/mixins.py b/gpackages/libs/package_info/mixins.py
index 36afb10..923fcc8 100644
--- a/gpackages/libs/package_info/mixins.py
+++ b/gpackages/libs/package_info/mixins.py
@@ -227,10 +227,11 @@ class EbuildRevMixin(object):
@cached_property
def revision_as_int(self):
d = 0 # Maybe None ?
- m = rev_re.match(self.revision)
- if m is not None:
- d = m.groupdict().get('rev')
- d = toint(d, 0)
+ if self.revision:
+ m = rev_re.match(self.revision)
+ if m is not None:
+ d = m.groupdict().get('rev')
+ d = toint(d, 0)
return d
class EbuildHomepageMixin(object):
diff --git a/gpackages/libs/package_info/package_backends/portage.py b/gpackages/libs/package_info/package_backends/portage.py
index 4721d19..52956dd 100644
--- a/gpackages/libs/package_info/package_backends/portage.py
+++ b/gpackages/libs/package_info/package_backends/portage.py
@@ -5,8 +5,8 @@ from portage.dep import Atom
from portage.exception import PortageException, FileNotFound, InvalidAtom, \
InvalidDependString, InvalidPackageName
-from gentoolkit.cpv import CPV
from ..generic import cached_property
+from ..parse_cp import EbuildParse
import os.path
#Mixins
from ..mixins import PortageMixin, PortTreeMixin, CategoryMixin, PackageMixin, \
@@ -152,11 +152,14 @@ class Ebuild(EbuildMixin):
def __init__(self, package, ebuild):
self.package = package
self.ebuild = ebuild
- self.cpv_object = CPV(ebuild)
+ self.cpv_object = EbuildParse(ebuild)
self._cache = {}
self._env = None
# Maybe this should be lazy ?
- self._set_env()
+ if not self.cpv_object.is_valid:
+ self._is_valid = False
+ else:
+ self._set_env()
def _set_env(self):
try:
diff --git a/gpackages/apps/packages/utils.py b/gpackages/libs/package_info/parse_cp.py
similarity index 52%
copy from gpackages/apps/packages/utils.py
copy to gpackages/libs/package_info/parse_cp.py
index fc2bd8d..5680b05 100644
--- a/gpackages/apps/packages/utils.py
+++ b/gpackages/libs/package_info/parse_cp.py
@@ -1,41 +1,41 @@
import re
from .validators import REVISION_RE, VERSION_RE, NAME_RE
-from package_info.generic import ToStrMixin
+from .generic import ToStrMixin
+from .mixins import EbuildRevMixin
-def gen_args(args):
- t = '%s=%s'
- l = (t % arg for arg in args)
- return '&'.join(l)
-
-def get_link(host, script, args):
- return 'http://%(host)s/%(script)s?%(args)' % {'host': host,
- 'script': script,
- 'args': get_args(args)}
-
-BASE_PACKAGE_RE_P = r'(?P<category>[^/]+)/(?P<name>%(name)s)' % \
+PACKAGE_RE_P = r'(?P<category>[^/]+)/(?P<name>%(name)s)' % \
{'name' : NAME_RE}
REPOSITORY_RE_P = r'(?:::(?P<repository>\w+))?'
-PACKAGE_RE_P = r'%(base)s%(repository)s' % {'base' : BASE_PACKAGE_RE_P,
+PACKAGE_CPR_RE_P = r'%(base)s%(repository)s' % {'base' : PACKAGE_RE_P,
'repository' : REPOSITORY_RE_P}
PACKAGE_RE = r'^%s$' % PACKAGE_RE_P
+PACKAGE_CPV_RE = r'^%s$' % PACKAGE_CPR_RE_P
VERSIONS_RE_P = r'-(?P<version>%(version)s)(?:-(?P<revision>%(revision)s))?' % \
{ 'version' : VERSION_RE,
'revision': REVISION_RE
}
-EBUILD_CPVR_RE_P = r'%(base)s%(versions)s%(repository)s' % {
- 'base': BASE_PACKAGE_RE_P,
+
+EBUILD_CPV_RE_P = r'%(base)s%(versions)s' % {
+ 'base': PACKAGE_RE_P,
'versions': VERSIONS_RE_P,
+ }
+
+EBUILD_CPVR_RE_P = r'%(cpv)s%(repository)s' % {
+ 'cpv': EBUILD_CPV_RE_P,
'repository': REPOSITORY_RE_P
}
+EBUILD_CPV_RE = r'^%s$' % EBUILD_CPV_RE_P
EBUILD_CPVR_RE = r'^%s$' % EBUILD_CPVR_RE_P
-ebuild_cpvr_re = re.compile(EBUILD_CPVR_RE)
package_re = re.compile(PACKAGE_RE)
+package_cpr_re = re.compile(PACKAGE_CPV_RE)
+ebuild_cpvr_re = re.compile(EBUILD_CPVR_RE)
+ebuild_cpv_re = re.compile(EBUILD_CPV_RE)
def _gen_func(name):
return lambda self: self.gr_dict.get(name)
@@ -51,17 +51,19 @@ class PackageParse(ToStrMixin):
__metaclass__ = ParseMetaClass
re = package_re
- simple_attrs = ('category', 'name', 'repository')
+ simple_attrs = ('category', 'name')
def __init__(self, parse = None, dct = None):
- assert parse or dct, 'Shoud set or parse or dct'
+ assert parse or dct, 'Should set parse or dct'
self.parse_str = parse
+ self.is_valid = False
if parse is not None:
m = self.re.match(parse)
self.gr_dict = {}
if m is not None:
self.gr_dict = m.groupdict()
+ self.is_valid = True
elif dct is not None:
self.gr_dict = dct
@@ -73,24 +75,70 @@ class PackageParse(ToStrMixin):
return PACKAGE_RE_P
@property
+ def cp(self):
+ return '%s/%s' % (self.category, self.name)
+
+class PackageParseCPR(PackageParse):
+ simple_attrs = ('category', 'name', 'repository')
+ re = package_cpr_re
+
+ @property
+ def re_str(self):
+ return PACKAGE_CPR_RE_P
+
+ @property
def repository_for_q(self):
if self.repository:
return self.repository
else:
return 'gentoo'
-class EbuildParse(PackageParse):
+ @property
+ def cpr(self):
+ return '%s::%s' % (self.cp, self.repository_for_q)
+
+class EbuildParse(EbuildRevMixin, PackageParse):
+ #NOTICE: It three time faster than CPV from gentoolkit.cpv
- re = ebuild_cpvr_re
- simple_attrs = ('category', 'name', 'repository', 'version', 'revision')
+ re = ebuild_cpv_re
+ simple_attrs = ('category', 'name', 'version', 'revision')
@property
def re_str(self):
- return EBUILD_CPVR_RE_P
+ return EBUILD_CPV_RE_P
@property
def revision_for_q(self):
if self.revision:
+ return self.revision_as_int
+ else:
+ return 0
+
+ @property
+ def revision_as_str(self):
+ if self.revision:
return self.revision
else:
return ''
+
+ @property
+ def cpv(self):
+ return '%s-%s' % (self.cp, self.fullversion)
+
+ @property
+ def fullversion(self):
+ rev_p = '-' + self.revision if self.revision else ''
+ return '%s%s' % (self.version, rev_p)
+
+class EbuildParseCPVR(EbuildParse, PackageParseCPR):
+
+ re = ebuild_cpvr_re
+ simple_attrs = ('category', 'name', 'repository', 'version', 'revision')
+
+ @property
+ def re_str(self):
+ return EBUILD_CPVR_RE_P
+
+ @property
+ def cpvr(self):
+ return '%s::%s' % (self.cpv, self.repository_for_q)
diff --git a/gpackages/libs/package_info/validators.py b/gpackages/libs/package_info/validators.py
index d86e7b8..0b1fbc6 100644
--- a/gpackages/libs/package_info/validators.py
+++ b/gpackages/libs/package_info/validators.py
@@ -5,3 +5,7 @@ from django.core.exceptions import ValidationError
validate_url = URLValidator()
__all__ = ('validate_email', 'validate_url', 'ValidationError')
+
+REVISION_RE = r'r\d+'
+VERSION_RE = r'[\w.]+'
+NAME_RE = r'[\w+-]+'
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2012-07-03 21:08 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-03 21:08 [gentoo-commits] proj/gentoo-packages:master commit in: /, gpackages/apps/packages/, gpackages/libs/package_info/package_backends/, Slava Bacherikov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox