* [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