diff options
author | André Erdmann <dywi@mailerd.de> | 2012-11-29 20:53:33 +0100 |
---|---|---|
committer | André Erdmann <dywi@mailerd.de> | 2012-11-29 22:19:16 +0100 |
commit | c21ba468360abafe892920d675c4c4731bc40b7f (patch) | |
tree | b2c5eec0baa44167fe13ccf7b331cab7e7acfe4a /roverlay/packageinfo.py | |
parent | actually remove --debug arg (diff) | |
download | R_overlay-c21ba468360abafe892920d675c4c4731bc40b7f.tar.gz R_overlay-c21ba468360abafe892920d675c4c4731bc40b7f.tar.bz2 R_overlay-c21ba468360abafe892920d675c4c4731bc40b7f.zip |
misc changes
* roverlay.py,
-> renamed "overlay" variable to "overlay_creator"
-> some action if-branches replaced by elif-branches
* roverlay/__init__.py,
-> replaced "config.<sth>" and "roverlay.config.<sth>" with
"roverlay_config.<sth>" in load_config_file(...)
* roverlay/overlay/,
-> the default overlay is now created in ./root.py (new_configured())
instead of ./creator.py
-> fix Overlay.list_packages()
* roverlay/packageinfo.py
-> make update key sets class-wide
Bump version to 0.2.1
Diffstat (limited to 'roverlay/packageinfo.py')
-rw-r--r-- | roverlay/packageinfo.py | 66 |
1 files changed, 52 insertions, 14 deletions
diff --git a/roverlay/packageinfo.py b/roverlay/packageinfo.py index 244dbb7..fb1a570 100644 --- a/roverlay/packageinfo.py +++ b/roverlay/packageinfo.py @@ -52,6 +52,14 @@ class PackageInfo ( object ): loaded before import this module) * ALWAYS_FALLBACK -- a set of keys for which get() always returns a fallback value (None) + + * _UPDATE_KEYS_SIMPLE -- a set of keys that can be added + without further checks + * _UPDATE_KEYS_SIMPLE_INITIAL -- like _UPDATE_KEYS_SIMPLE, but only used + on the first update() call (as long as + no keys have been stored) + * _UPDATE_KEYS_FILTER_NONE -- like _UPDATE_KEYS_SIMPLE, but stores + key's value only if it is not None """ EBUILDVER_REGEX = re.compile ( '[-]{1,}' ) @@ -60,6 +68,21 @@ class PackageInfo ( object ): ) ALWAYS_FALLBACK = frozenset ( ( 'ebuild', 'ebuild_file' ) ) + _UPDATE_KEYS_SIMPLE = frozenset (( + 'origin', + 'ebuild', + 'ebuild_file', + 'physical_only', + 'src_uri', + )) + _UPDATE_KEYS_SIMPLE_INITIAL = frozenset (( + 'package_filename', + )) + _UPDATE_KEYS_FILTER_NONE = frozenset (( + 'src_uri_base', + 'distdir', + )) + def __init__ ( self, **initial_info ): """Initializes a PackageInfo. @@ -155,6 +178,22 @@ class PackageInfo ( object ): has = has_key + def has_key_or ( self, *keys ): + """Returns True if at least one key out of keys is accessible. + + arguments: + * *keys -- keys to check + """ + for k in keys: + if k in self._info: + return True + elif self.get ( k, do_fallback=True ) is not None: + return True + return False + # --- end of has_key_or (...) --- + + has_or = has_key_or + def compare_version ( self, other_package ): """Compares the version of two PackageInfo objects. Returns 1 if self's version is higher, -1 if lower and 0 if equal. @@ -237,6 +276,13 @@ class PackageInfo ( object ): return "http://localhost/R-packages/" + \ self._info ['package_filename'] + elif key_low == 'ebuild_dir': + ebuild_file = self._info ['ebuild_file'] + if ebuild_file is not None: + return os.path.dirname ( ebuild_file ) + + # end if <key matches ...> + # fallback if do_fallback or fallback_value is not None: @@ -309,27 +355,19 @@ class PackageInfo ( object ): # nothing to do return - simple_keys = frozenset (( - 'origin', - 'ebuild', - 'ebuild_file', - 'physical_only', - 'src_uri', - )) - - simple_keys_filter_none = frozenset (( - 'src_uri_base', - 'distdir', - )) + initial = len ( self._info ) == 0 self._writelock_acquire() for key, value in info.items(): - if key in simple_keys: + if key in self.__class__._UPDATE_KEYS_SIMPLE: + self [key] = value + + elif initial and key in self.__class__._UPDATE_KEYS_SIMPLE_INITIAL: self [key] = value - elif key in simple_keys_filter_none: + elif key in self.__class__._UPDATE_KEYS_FILTER_NONE: if value is not None: self [key] = value |