public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [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