diff options
Diffstat (limited to 'portato')
44 files changed, 199 insertions, 219 deletions
diff --git a/portato/__init__.py b/portato/__init__.py index 12b8fe4..b4ea214 100644 --- a/portato/__init__.py +++ b/portato/__init__.py @@ -10,7 +10,7 @@ # # Written by René 'Necoro' Neumann <necoro@necoro.net> -from __future__ import absolute_import + import gettext, locale import sys, os diff --git a/portato/backend/__init__.py b/portato/backend/__init__.py index 5f32818..5fb716e 100644 --- a/portato/backend/__init__.py +++ b/portato/backend/__init__.py @@ -10,7 +10,7 @@ # # Written by René 'Necoro' Neumann <necoro@necoro.net> -from __future__ import absolute_import + from ..helper import debug from .system_interface import SystemInterface @@ -21,7 +21,7 @@ class _Package (object): whether an object is a package. It cannot use the normal Package class as this results in cyclic dependencies.""" def __init__ (self): - raise TypeError, "Calling __init__ on portato.backend._Package objects is not allowed." + raise TypeError("Calling __init__ on portato.backend._Package objects is not allowed.") def is_package(what): return isinstance(what, _Package) @@ -65,6 +65,6 @@ class SystemWrapper (SystemInterface): from .portage import PortageSystem cls.__wrapped_sys = PortageSystem () else: - raise InvalidSystemError, cls.__system + raise InvalidSystemError(cls.__system) system = SystemWrapper() diff --git a/portato/backend/flags.py b/portato/backend/flags.py index 810b607..45826c3 100644 --- a/portato/backend/flags.py +++ b/portato/backend/flags.py @@ -10,8 +10,6 @@ # # Written by René 'Necoro' Neumann <necoro@necoro.net> -from __future__ import absolute_import, with_statement - import os import itertools as itt from subprocess import Popen, PIPE # needed for grep @@ -134,7 +132,7 @@ def set_config (cfg): for i in CONFIG.keys(): if not i in cfg: - raise KeyError, "Missing keyword in config: "+i + raise KeyError("Missing keyword in config: "+i) for i in CONFIG: CONFIG[i] = cfg[i] @@ -583,31 +581,29 @@ def write_masked (): list = system.split_cpv(cpv) msg += "%s/%s\n" % (list[0],list[1]) if not file in file_cache: - f = open(file, "a") - f.write(msg) - f.close() + with open(file, "a") as f: + f.write(msg) else: file_cache[file].append(msg) # change a line else: if not file in file_cache: # read file - f = open(file, "r") - lines = [] - i = 1 - while i < line: # stop at the given line - lines.append(f.readline()) - i = i+1 - # delete - l = f.readline() - l = "#"+l[:-1]+" # removed by portato\n" - lines.append(l) + with open(file, "r") as f: + lines = [] + i = 1 + while i < line: # stop at the given line + lines.append(f.readline()) + i = i+1 + # delete + l = f.readline() + l = "#"+l[:-1]+" # removed by portato\n" + lines.append(l) - # read the rest - lines.extend(f.readlines()) + # read the rest + lines.extend(f.readlines()) - file_cache[file] = lines - f.close() + file_cache[file] = lines else: # in cache l = file_cache[file][line-1] # delete: @@ -719,31 +715,29 @@ def write_testing (): list = system.split_cpv(cpv) msg += "%s/%s ~%s\n" % (list[0],list[1],arch) if not file in file_cache: - f = open(file, "a") - f.write(msg) - f.close() + with open(file, "a") as f: + f.write(msg) else: file_cache[file].append(msg) # change a line else: if not file in file_cache: # read file - f = open(file, "r") - lines = [] - i = 1 - while i < line: # stop at the given line - lines.append(f.readline()) - i = i+1 - # delete - l = f.readline() - l = "#"+l[:-1]+" # removed by portato\n" - lines.append(l) - - # read the rest - lines.extend(f.readlines()) - - file_cache[file] = lines - f.close() + with open(file, "r") as f: + lines = [] + i = 1 + while i < line: # stop at the given line + lines.append(f.readline()) + i = i+1 + # delete + l = f.readline() + l = "#"+l[:-1]+" # removed by portato\n" + lines.append(l) + + # read the rest + lines.extend(f.readlines()) + + file_cache[file] = lines else: # in cache l = file_cache[file][line-1] # delete: @@ -752,9 +746,8 @@ def write_testing (): # write to disk for file in file_cache.keys(): - f = open(file, "w") - f.writelines(file_cache[file]) - f.close() + with open(file, "w") as f: + f.writelines(file_cache[file]) # reset newTesting = {} system.reload_settings() diff --git a/portato/backend/package.py b/portato/backend/package.py index 34cdbe4..7fddb21 100644 --- a/portato/backend/package.py +++ b/portato/backend/package.py @@ -10,7 +10,7 @@ # # Written by René 'Necoro' Neumann <necoro@necoro.net> -from __future__ import absolute_import +from future_builtins import map, filter, zip from ..helper import debug, paren_reduce from ..dependency import DependencyTree @@ -27,6 +27,7 @@ class Package (_Package): @type cpv: string (cat/pkg-ver)""" self._cpv = cpv + self._slot = None def __repr__ (self): return "<Package '%s' @0x%x>" % (self._cpv, id(self)) @@ -154,15 +155,26 @@ class Package (_Package): @returns: category/package. @rtype: string""" - return self.get_category()+"/"+self.get_name() + return "/".join((self.get_category(), self.get_name())) + def get_slot (self): + """Returns the slot. + + @returns: Slot + @rtype: string""" + + if self._slot is None: + self._slot = self.get_package_settings("SLOT") + + return self._slot + def get_slot_cp (self): """Returns the current cp followed by a colon and the slot-number. @returns: cp:slot @rtype: string""" - return ("%s:%s" % (self.get_cp(), self.get_package_settings("SLOT"))) + return ":".join((self.get_cp(), self.get_slot())) def get_package_path(self): """Returns the path to where the ChangeLog, Manifest, .ebuild files reside. diff --git a/portato/backend/portage/__init__.py b/portato/backend/portage/__init__.py index e559f9e..6a68bbc 100644 --- a/portato/backend/portage/__init__.py +++ b/portato/backend/portage/__init__.py @@ -10,7 +10,7 @@ # # Written by René 'Necoro' Neumann <necoro@necoro.net> -from __future__ import absolute_import +from future_builtins import map, filter, zip from ...helper import debug from portage import VERSION as PV diff --git a/portato/backend/portage/package.py b/portato/backend/portage/package.py index b34e3ef..5f01cad 100644 --- a/portato/backend/portage/package.py +++ b/portato/backend/portage/package.py @@ -10,8 +10,6 @@ # # Written by René 'Necoro' Neumann <necoro@necoro.net> -from __future__ import absolute_import, with_statement - from ..package import Package from .. import flags from .. import system @@ -184,7 +182,7 @@ class PortagePackage (Package): return [] if deps[0] == 0: # error - raise DependencyCalcError, deps[1] + raise DependencyCalcError(deps[1]) deps = deps[1] @@ -206,7 +204,7 @@ class PortagePackage (Package): return [] if deps[0] == 0: # error - raise DependencyCalcError, deps[1] + raise DependencyCalcError(deps[1]) deps = deps[1] @@ -234,7 +232,7 @@ class PortagePackage (Package): else: dep_pkgs.append(dep) elif blocked: - raise BlockedException, (self.get_cpv(), blocked[0].get_cpv()) + raise BlockedException((self.get_cpv(), blocked[0].get_cpv())) continue # finished with the blocking one -> next @@ -242,7 +240,7 @@ class PortagePackage (Package): if not pkg: # try to find masked ones pkgs = system.find_packages(dep, masked = True) if not pkgs: - raise PackageNotFoundException, dep + raise PackageNotFoundException(dep) pkgs = system.sort_package_list(pkgs) pkgs.reverse() @@ -299,5 +297,5 @@ class PortagePackage (Package): def matches (self, criterion): # cpv_matches needs explicit slot info - scpv = "%s:%s" % (self.get_cpv(), self.get_package_settings("SLOT")) + scpv = ":".join((self.get_cpv(), self.get_slot())) return system.cpv_matches(scpv, criterion) diff --git a/portato/backend/portage/package_22.py b/portato/backend/portage/package_22.py index 23e8ed5..61d7364 100644 --- a/portato/backend/portage/package_22.py +++ b/portato/backend/portage/package_22.py @@ -10,7 +10,7 @@ # # Written by René 'Necoro' Neumann <necoro@necoro.net> -from __future__ import absolute_import, with_statement + from .package import PortagePackage diff --git a/portato/backend/portage/sets.py b/portato/backend/portage/sets.py index 6c483c9..0e9bf2f 100644 --- a/portato/backend/portage/sets.py +++ b/portato/backend/portage/sets.py @@ -10,7 +10,7 @@ # # Written by René 'Necoro' Neumann <necoro@necoro.net> -from __future__ import absolute_import, with_statement +from future_builtins import map, filter, zip import re import itertools as itt @@ -33,7 +33,7 @@ class Set(object): try: t = self.get_pkgs(key, is_regexp, masked, with_version, only_cpv) # catch the "ambigous package" Exception - except ValueError, e: + except ValueError as e: if isinstance(e[0], list): t = set() for cp in e[0]: @@ -55,7 +55,7 @@ class InstalledSet (Set): t = system.settings.vartree.dbapi.cp_all() if key: - t = filter(lambda x: re.search(key, x, re.I), t) + t = [x for x in t if re.search(key, x, re.I)] return t @@ -82,7 +82,7 @@ class TreeSet (Set): t = system.settings.porttree.dbapi.cp_all() if key: - t = filter(lambda x: re.search(key, x, re.I), t) + t = [x for x in t if re.search(key, x, re.I)] return set(t) diff --git a/portato/backend/portage/settings.py b/portato/backend/portage/settings.py index 2f3b780..0c857ac 100644 --- a/portato/backend/portage/settings.py +++ b/portato/backend/portage/settings.py @@ -10,7 +10,7 @@ # # Written by René 'Necoro' Neumann <necoro@necoro.net> -from __future__ import absolute_import + import os import portage diff --git a/portato/backend/portage/settings_22.py b/portato/backend/portage/settings_22.py index ba4f1e8..253ecaa 100644 --- a/portato/backend/portage/settings_22.py +++ b/portato/backend/portage/settings_22.py @@ -10,7 +10,7 @@ # # Written by René 'Necoro' Neumann <necoro@necoro.net> -from __future__ import absolute_import + import portage.sets from .settings import PortageSettings diff --git a/portato/backend/portage/system.py b/portato/backend/portage/system.py index 990a39a..a7fea5d 100644 --- a/portato/backend/portage/system.py +++ b/portato/backend/portage/system.py @@ -10,7 +10,7 @@ # # Written by René 'Necoro' Neumann <necoro@necoro.net> -from __future__ import absolute_import, with_statement +from future_builtins import map, filter, zip import re, os import portage @@ -172,24 +172,6 @@ class PortageSystem (SystemInterface): else: return lambda x: True - def geneticize_list (self, list_of_packages, only_cpv = False): - """Convertes a list of cpv's into L{backend.Package}s. - - @param list_of_packages: the list of packages - @type list_of_packages: string[] - @param only_cpv: do nothing - return the passed list - @type only_cpv: boolean - @returns: converted list - @rtype: PortagePackage[] - """ - - if not only_cpv: - return [self.new_package(x) for x in list_of_packages] - elif not isinstance(list_of_packages, list): - return list(list_of_packages) - else: - return list_of_packages - def get_global_settings (self, key): return self.settings.global_settings[key] @@ -228,11 +210,18 @@ class PortageSystem (SystemInterface): return self.setmap[pkgSet]() def find_packages (self, key = "", pkgSet = SystemInterface.SET_ALL, masked = False, with_version = True, only_cpv = False): - return self.geneticize_list(self._get_set(pkgSet).find(key, masked, with_version, only_cpv), only_cpv or not with_version) + result = self._get_set(pkgSet).find(key, masked, with_version, only_cpv) + + if (not only_cpv) and with_version: + result = list(map(self.new_package, result)) + else: + result = list(result) + + return result def list_categories (self, name = None): categories = self.settings.global_settings.categories - return filter(self.find_lambda(name), categories) + return list(filter(self.find_lambda(name), categories)) def split_cpv (self, cpv): cpv = portage.dep_getcpv(cpv) @@ -286,9 +275,9 @@ class PortageSystem (SystemInterface): if len(inst) > 1: myslots = set() for i in inst: # get the slots of the installed packages - myslots.add(i.get_package_settings("SLOT")) + myslots.add(i.get_slot()) - myslots.add(best_p.get_package_settings("SLOT")) # add the slot of the best package in portage + myslots.add(best_p.get_slot()) # add the slot of the best package in portage for slot in myslots: crit = "%s:%s" % (p, slot) append(crit, self.find_best_match(crit), inst) @@ -304,7 +293,7 @@ class PortageSystem (SystemInterface): def update_world (self, sets = ("world", "system"), newuse = False, deep = False): packages = set() - map(packages.add, itt.chain(*[self.find_packages(pkgSet = s, with_version = False) for s in sets])) + list(map(packages.add, itt.chain(*[self.find_packages(pkgSet = s, with_version = False) for s in sets]))) states = [(["RDEPEND", "PDEPEND"], True)] if self.with_bdeps(): diff --git a/portato/backend/portage/system_22.py b/portato/backend/portage/system_22.py index c3bfa5f..882232f 100644 --- a/portato/backend/portage/system_22.py +++ b/portato/backend/portage/system_22.py @@ -10,8 +10,6 @@ # # Written by René 'Necoro' Neumann <necoro@necoro.net> -from __future__ import absolute_import, with_statement - import os import portage @@ -46,7 +44,7 @@ class PortageSystem_22 (PortageSystem): def get_sets (self, description = False): if description: - return ((name, set.description) for name, set in self.settings.setsconfig.getSets().iteritems()) + return ((name, set.description) for name, set in self.settings.setsconfig.getSets().items()) else: return tuple(self.settings.setsconfig.getSets()) diff --git a/portato/config_parser.py b/portato/config_parser.py index 2ef52c5..45a2e66 100644 --- a/portato/config_parser.py +++ b/portato/config_parser.py @@ -37,9 +37,11 @@ Thus it keeps comments and structuring of the file. Regular expression defining a normal option-value pair. """ -from __future__ import absolute_import, with_statement + __docformat__ = "restructuredtext" +from future_builtins import map, filter, zip + import re from threading import Lock @@ -181,7 +183,7 @@ class ConfigParser: "yes" : "no", "ja" : "nein", "wahr" : "falsch"} - true_false.update(zip(true_false.values(), true_false.keys())) + true_false.update(list(zip(list(true_false.values()), list(true_false.keys())))) def __init__ (self, file): """ @@ -348,7 +350,7 @@ class ConfigParser: if val.is_bool(): return val.boolean - raise ValueError, "\"%s\" is not a boolean. (%s)" % (key, val.value) + raise ValueError("\"%s\" is not a boolean. (%s)" % (key, val.value)) def set (self, key, value, section = "MAIN"): """ @@ -382,7 +384,7 @@ class ConfigParser: val.boolean = value val.value = self._invert(val.value) else: - raise ValueError, "\"%s\" is not a boolean." % key + raise ValueError("\"%s\" is not a boolean." % key) def add_section (self, section, comment = None, with_blankline = True): """ @@ -405,7 +407,7 @@ class ConfigParser: self.cache.append("\n") if comment: - if isinstance(comment, basestring): + if isinstance(comment, str): comment = comment.split("\n") # add newlines to comment at the beginning and the end @@ -450,7 +452,7 @@ class ConfigParser: # find line# to add if self.vars[section]: - mline = max((x.line for x in self.vars[section].itervalues())) + 1 + mline = max((x.line for x in self.vars[section].values())) + 1 else: # no value inside the section at the moment mline = self.sections[section] + 1 @@ -459,7 +461,7 @@ class ConfigParser: mline += 1 if comment: - if isinstance(comment, basestring): + if isinstance(comment, str): comment = comment.split("\n") for c in comment: @@ -479,8 +481,8 @@ class ConfigParser: return with self.writelock: - for sec in self.vars.itervalues(): - for val in sec.itervalues(): + for sec in self.vars.values(): + for val in sec.values(): if val.changed: part1 = self.cache[val.line][:self.pos[val.line][0]] # key+DELIMITER part2 = val.value # value diff --git a/portato/db/__init__.py b/portato/db/__init__.py index 21d8f80..74479e6 100644 --- a/portato/db/__init__.py +++ b/portato/db/__init__.py @@ -10,8 +10,6 @@ # # Written by René 'Necoro' Neumann <necoro@necoro.net> -from __future__ import absolute_import - from . import database as db from .exceptions import UnknownDatabaseTypeError, DatabaseInstantiationError from ..session import Session, SectionDict @@ -71,7 +69,7 @@ class Database(db.Database): else: error(_("Unknown database type: %s"), type) - raise UnknownDatabaseTypeError, type + raise UnknownDatabaseTypeError(type) @classmethod def _get_session(cls): diff --git a/portato/db/database.py b/portato/db/database.py index c679d06..9ab431c 100644 --- a/portato/db/database.py +++ b/portato/db/database.py @@ -10,7 +10,7 @@ # # Written by René 'Necoro' Neumann <necoro@necoro.net> -from __future__ import absolute_import, with_statement + from threading import RLock from functools import wraps @@ -77,7 +77,7 @@ class Database (object): def set_type (self, type): if type & self.search_types() != type: - raise UnsupportedSearchTypeError, type + raise UnsupportedSearchTypeError(type) self._type = type diff --git a/portato/db/eix_sql.py b/portato/db/eix_sql.py index 758f42c..2a693e9 100644 --- a/portato/db/eix_sql.py +++ b/portato/db/eix_sql.py @@ -10,7 +10,7 @@ # # Written by René 'Necoro' Neumann <necoro@necoro.net> -from __future__ import absolute_import, with_statement + try: import sqlite3 as sql diff --git a/portato/db/hash.py b/portato/db/hash.py index 4a6958b..f52f4dd 100644 --- a/portato/db/hash.py +++ b/portato/db/hash.py @@ -10,7 +10,7 @@ # # Written by René 'Necoro' Neumann <necoro@necoro.net> -from __future__ import absolute_import, with_statement + import re from collections import defaultdict @@ -102,7 +102,7 @@ class HashDatabase (Database): if installed: cats = self.inst_cats else: - cats = self._db.iterkeys() + cats = iter(self._db.keys()) else: if installed: @@ -124,7 +124,7 @@ class HashDatabase (Database): except KeyError: # not in inst_cats - can be ignored pass - self._db[self.ALL] = filter(lambda x: x.cat != cat, self._db[self.ALL]) + self._db[self.ALL] = [x for x in self._db[self.ALL] if x.cat != cat] self.populate(cat+"/*") else: self.__initialize() @@ -148,7 +148,7 @@ class HashDatabase (Database): else: try: regex = re.compile(restrict, re.I) - except re.error, e: + except re.error as e: info(_("Error while compiling search expression: '%s'."), str(e)) else: # only set self._restrict if no error occurred self._restrict = regex diff --git a/portato/db/sql.py b/portato/db/sql.py index 2de2795..a891e1a 100644 --- a/portato/db/sql.py +++ b/ |