public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/libs/package_info/package_backends/, gpackages/libs/package_info/
@ 2012-06-22  0:02 Slava Bacherikov
  0 siblings, 0 replies; 2+ messages in thread
From: Slava Bacherikov @ 2012-06-22  0:02 UTC (permalink / raw
  To: gentoo-commits

commit:     52402778fe47a6a531071759d2a472086ef720f2
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Thu Jun 21 19:54:21 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Thu Jun 21 19:54:21 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=52402778

Add main methonds and properties to pkgcore backend and create more mixins

---
 gpackages/libs/package_info/mixins.py              |  119 +++++++++++++++++++-
 .../libs/package_info/package_backends/pkgcore.py  |   19 +++-
 .../libs/package_info/package_backends/portage.py  |  108 +-----------------
 3 files changed, 140 insertions(+), 106 deletions(-)

diff --git a/gpackages/libs/package_info/mixins.py b/gpackages/libs/package_info/mixins.py
index 6285628..45ea5b8 100644
--- a/gpackages/libs/package_info/mixins.py
+++ b/gpackages/libs/package_info/mixins.py
@@ -1,12 +1,17 @@
 from __future__ import absolute_import
 from .generic import ToStrMixin, file_sha1, file_mtime, cached_property, \
-                    file_get_content, iter_over_gen
+                    file_get_content, iter_over_gen, lofstr_to_ig
 
 from .generic_metadata.use_info import get_uses_info, get_local_uses_info
 # Repo info
 from .generic_metadata.repo_info import TreeMetadata
 # Herds
 from .generic_metadata.herds import Herds
+# Validators
+from .validators import validate_url, validate_email, ValidationError
+#Generic objects
+from .generic_objects import Use, Keyword, KeywordsSet
+
 import os.path
 
 def _file_path(file_name):
@@ -35,6 +40,14 @@ class AutoGeneratorMixin(object):
     generator_names = ()
     #main_iterator = 'generator_name'
 
+def _gen_all_use(func, iterator):
+    use_g = iterator
+    use_all_dict = next(use_g)
+    for use_dict in use_g:
+        if use_dict is not None:
+            func(use_all_dict, use_dict)
+    return use_all_dict
+
 class PortageBaseMixin(ToStrMixin):
     def iter_use_desc(self):
         for tree in self.iter_trees():
@@ -65,6 +78,13 @@ class PortageHerdsMixin(object):
         "Return new `Herds` object"
         return Herds()
 
+def _get_info_by_func(func, path1, path2):
+        path = os.path.join(path1, path2)
+        try:
+            return func(path)
+        except IOError:
+            return None
+
 class PortTreeBaseMixin(ToStrMixin):
 
     @cached_property
@@ -116,7 +136,7 @@ class CategoryBaseMixin(ToStrMixin):
 class CategoryIteratorMixin(AutoGeneratorMixin):
     main_iterator = 'iter_packages'
     generator_names = ('iter_ebuilds', )
-    
+
 class PackageBaseMixin(ToStrMixin, MetaDataPath):
 
     @cached_property
@@ -183,6 +203,99 @@ class EbuildBaseMixin(ToStrMixin):
     def __unicode__(self):
         return unicode(self.cpv)
 
+class EbuildHomepageMixin(object):
+
+    @cached_property
+    def homepages_splited(self):
+        return self.homepage_env.split()
+
+    @cached_property
+    def homepages_validated(self):
+        ret = []
+        for homepage in self.homepages_splited:
+            try:
+                validate_url(homepage)
+            except ValidationError:
+                pass
+            else:
+                ret.append(homepage)
+        return ret
+        
+    @cached_property
+    def homepages(self):
+        "Tuple of valid homepages"
+        return tuple(set(lofstr_to_ig(self.homepages_validated)))
+
+    @cached_property
+    def homepage(self):
+        "First valid homepage in list"
+        return self.homepages_validated[0] if len(self.homepages)>=1 else ''
+
+def _license_filter(x):
+    if x.startswith('|') or x.startswith('(') or x.endswith('?') or \
+                                                 x.startswith(')'):
+        return False
+    else:
+        return True
+
+class EbuildLicenseMixin(object):
+
+    @cached_property
+    def _licenses(self):
+        return filter(_license_filter, self.license.split())
+
+    @cached_property
+    def licenses(self):
+        "Tuple of unique licenses"
+        return tuple(set(lofstr_to_ig(self._licenses)))
+
+class EbuildKeywordsMixin(object):
+
+    @property
+    def keywords(self):
+        return tuple(set(self.keywords_env.split()))
+    
+    def iter_keywords(self):
+        "Iterate over keywords, yields Keyword object"
+        keywords = self.keywords
+        for keyword in keywords:
+            yield Keyword(keyword)
+        
+    def get_keywords(self):
+        l = []
+        for keyword in self.iter_keywords():
+            l.append(keyword)
+        return l
+
+    def get_uniq_keywords(self):
+        return KeywordsSet(self.get_keywords())
+
+class EbuildUseMixin(object):
+
+    @property
+    def iuse(self):
+        return self.iuse_env.split()
+    
+    def iter_uses(self):
+        "Iterator over all uses, yiels `Use` object"
+        for use in self.iuse:
+            yield Use(use)
+
+    def get_uses(self):
+        l = [] 
+        for use in self.iter_uses():
+            l.append(use)
+        return l
+
+    def get_uniq_uses(self):
+        return frozenset(self.get_uses())
+
+
+class EbuildGenericProp(EbuildHomepageMixin, EbuildLicenseMixin, \
+                        EbuildKeywordsMixin, EbuildUseMixin):
+    pass
+
+
 #Main mixins
 class PortageMixin(PortageBaseMixin, PortageHerdsMixin, PortageIteratorMixin):
     pass
@@ -196,5 +309,5 @@ class CategoryMixin(CategoryBaseMixin, CategoryIteratorMixin):
 class PackageMixin(PackageBaseMixin, PackageFilesMixin):
     pass
 
-class EbuildMixin(EbuildBaseMixin):
+class EbuildMixin(EbuildBaseMixin, EbuildGenericProp):
     pass

diff --git a/gpackages/libs/package_info/package_backends/pkgcore.py b/gpackages/libs/package_info/package_backends/pkgcore.py
index 79e7375..660a1c7 100644
--- a/gpackages/libs/package_info/package_backends/pkgcore.py
+++ b/gpackages/libs/package_info/package_backends/pkgcore.py
@@ -144,7 +144,22 @@ class Ebuild(EbuildMixin):
 
     slot = ebuild_prop('slot')
 
-    # Maybe homepage_val ?
-    homepage = ebuild_prop('homepage')
+    iuse = ebuild_prop('iuse')
+
+    @property
+    def iuse_env(self):
+        return ' '.join(self.iuse)
+
+    homepage_env = ebuild_prop('homepage')
+
+    @property
+    def keywords_env(self):
+        return ' '.join(self.keywords)
+
+    keywords = ebuild_prop('keywords')
+    
+    @property
+    def license(self):
+        return unicode(self._ebuild.license)
 
     cpv = ebuild_prop('cpvstr')

diff --git a/gpackages/libs/package_info/package_backends/portage.py b/gpackages/libs/package_info/package_backends/portage.py
index 34407d9..5299f4d 100644
--- a/gpackages/libs/package_info/package_backends/portage.py
+++ b/gpackages/libs/package_info/package_backends/portage.py
@@ -7,20 +7,15 @@ from portage.exception import PortageException, FileNotFound, InvalidAtom, \
 
 from gentoolkit.package import Package as PackageInfo
 from gentoolkit import errors
-from ..generic import cached_property, lofstr_to_ig 
-
+from ..generic import cached_property 
 import os.path
 
-#Generic objects
+# Not need
 from ..generic_objects import Use, Keyword, KeywordsSet
-
 #Mixins
 from ..mixins import PortageMixin, PortTreeMixin, CategoryMixin, PackageMixin, \
                      EbuildMixin
 
-# Validators
-from ..validators import validate_url, validate_url, ValidationError
-
 __all__ = ('Portage','PortTree', 'Category', 'Package', 'Ebuild')
 
 BINDB = portage.db[portage.root]["bintree"].dbapi
@@ -29,29 +24,9 @@ VARDB = portage.db[portage.root]["vartree"].dbapi
 
 ARCHES = PORTDB.settings["PORTAGE_ARCHLIST"].split()
 
-_license_filter = lambda x: False if x.startswith('|') or x.startswith('(') or \
-                                     x.endswith('?') or x.startswith(')') \
-                                  else True
-
 def _ebuild_environment(name):
     return lambda self: self.package_object.environment(name)
 
-
-def _get_info_by_func(func, path1, path2):
-        path = os.path.join(path1, path2)
-        try:
-            return func(path)
-        except IOError:
-            return None
-
-def _gen_all_use(func, iterator):
-    use_g = iterator
-    use_all_dict = next(use_g)
-    for use_dict in use_g:
-        if use_dict is not None:
-            func(use_all_dict, use_dict)
-    return use_all_dict
-
 class Portage(PortageMixin):
 
     def __init__(self):
@@ -186,50 +161,12 @@ class Ebuild(EbuildMixin):
     def is_valid(self):
         "Check if ebuild is valid"
         try:
-            self.package_object.environment("EAPI")
+            self.eapi
         except errors.GentoolkitFatalError:
             return False
         else:
             return True
 
-
-    @property
-    def keywords(self):
-        return list(set(self.keywords_env.split()))
-    
-    def iter_keywords(self):
-        "Iterate over keywords, yields Keyword object"
-        keywords = self.keywords
-        for keyword in keywords:
-            yield Keyword(keyword)
-        
-    def get_keywords(self):
-        l = []
-        for keyword in self.iter_keywords():
-            l.append(keyword)
-        return l
-
-    def get_uniq_keywords(self):
-        return KeywordsSet(self.get_keywords())
-
-    def get_uses_names(self):
-        return self.package_object.environment("IUSE").split()
-    
-
-    def iter_uses(self):
-        "Iterator over all uses, yiels `Use` object"
-        for use in self.get_uses_names():
-            yield Use(use)
-
-    def get_uses(self):
-        l = [] # Bad code, it repeats
-        for use in self.iter_uses():
-            l.append(use)
-        return l
-
-    def get_uniq_uses(self):
-        return frozenset(self.get_uses())
-
     #Could be faster
     @cached_property
     def is_masked(self):
@@ -255,8 +192,8 @@ class Ebuild(EbuildMixin):
         "Full path to ebuild"
         return self.package_object.ebuild_path()
 
-    homepage_val = cached_property(_ebuild_environment('HOMEPAGE'),
-                                   name = 'homepage_val')
+    homepage_env = cached_property(_ebuild_environment('HOMEPAGE'),
+                                   name = 'homepage_env')
     license = cached_property(_ebuild_environment('LICENSE'),
                               name = 'license')
     description = cached_property(_ebuild_environment('DESCRIPTION'),
@@ -266,39 +203,8 @@ class Ebuild(EbuildMixin):
     slot = cached_property(_ebuild_environment('SLOT'),
                            name = 'slot')
 
-    @cached_property
-    def homepages_splited(self):
-        return self.homepage_val.split()
-
-    @cached_property
-    def homepages_validated(self):
-        ret = []
-        for homepage in self.homepages_splited:
-            try:
-                validate_url(homepage)
-            except ValidationError:
-                pass
-            else:
-                ret.append(homepage)
-        return ret
-        
-    @cached_property
-    def homepages(self):
-        "Tuple of homepages"
-        return tuple(set(lofstr_to_ig(self.homepages_validated)))
-
-    @cached_property
-    def homepage(self):
-        "First homepage in list"
-        return self.homepages_validated[0] if len(self.homepages)>=1 else ''
-
-    @cached_property
-    def _licenses(self):
-        return filter(_license_filter, self.license.split())
-
-    @cached_property
-    def licenses(self):
-        return tuple(set(lofstr_to_ig(self._licenses)))
+    iuse_env = cached_property(_ebuild_environment('IUSE'),
+                           name = 'iuse')
 
     @property
     def cpv(self):



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/libs/package_info/package_backends/, gpackages/libs/package_info/
@ 2012-07-04 22:13 Slava Bacherikov
  0 siblings, 0 replies; 2+ messages in thread
From: Slava Bacherikov @ 2012-07-04 22:13 UTC (permalink / raw
  To: gentoo-commits

commit:     1d3628835d9c795f0858da8fe65337fb6f2d341e
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Wed Jul  4 09:19:36 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Wed Jul  4 09:19:36 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=1d362883

Fix bug in portage api

---
 .../libs/package_info/package_backends/portage.py  |    6 +++++-
 gpackages/libs/package_info/validators.py          |    2 +-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/gpackages/libs/package_info/package_backends/portage.py b/gpackages/libs/package_info/package_backends/portage.py
index 52956dd..729e6e9 100644
--- a/gpackages/libs/package_info/package_backends/portage.py
+++ b/gpackages/libs/package_info/package_backends/portage.py
@@ -147,7 +147,11 @@ class Ebuild(EbuildMixin):
 
     __slots__ = ('package', 'ebuild', 'cpv_object', '_cache', '_env',
                  '_is_valid')
-    ENV_VARS = PORTDB._aux_cache_keys
+
+    ENV_NEED = set(['KEYWORDS', 'HOMEPAGE', 'LICENSE',
+                    'DESCRIPTION', 'EAPI', 'SLOT'])
+
+    ENV_VARS = PORTDB._aux_cache_keys | ENV_NEED
 
     def __init__(self, package, ebuild):
         self.package = package

diff --git a/gpackages/libs/package_info/validators.py b/gpackages/libs/package_info/validators.py
index fbfed5e..8c10326 100644
--- a/gpackages/libs/package_info/validators.py
+++ b/gpackages/libs/package_info/validators.py
@@ -8,7 +8,7 @@ __all__ = ('validate_email', 'validate_url', 'ValidationError')
 
 REVISION_RE = r'r\d+'
 VERSION_RE = r'[\w.]+'
-NAME_RE = r'[\w+-]+'
+NAME_RE = r'[\w+-]+?'
 
 validate_revision = RegexValidator('^%s$' % REVISION_RE)
 validate_version = RegexValidator('^%s$' % VERSION_RE)



^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2012-07-04 22:14 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-22  0:02 [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/libs/package_info/package_backends/, gpackages/libs/package_info/ Slava Bacherikov
  -- strict thread matches above, loose matches on Subject: below --
2012-07-04 22:13 Slava Bacherikov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox