1 # Copyright(c) 2004-2009, Gentoo Foundation
3 # Licensed under the GNU General Public License, v2 or later
5 """Exception classes for gentoolkit"""
9 'GentoolkitFatalError',
10 'GentoolkitAmbiguousPackage',
11 'GentoolkitInvalidAtom',
12 'GentoolkitInvalidCategory',
13 'GentoolkitInvalidPackage',
14 'GentoolkitInvalidCPV',
15 'GentoolkitInvalidRegex',
16 'GentoolkitInvalidVersion',
17 'GentoolkitNoMatches',
18 'GentoolkitSetNotFound',
19 'GentoolkitUnknownKeyword',
20 'GentoolkitNonZeroExit'
27 class GentoolkitException(Exception):
28 """Base class for gentoolkit exceptions."""
29 def __init__(self, is_serious=True):
30 self.is_serious = is_serious
33 class GentoolkitFatalError(GentoolkitException):
34 """A fatal error occurred. Usually used to catch Portage exceptions."""
35 def __init__(self, err, is_serious=True):
36 GentoolkitException.__init__(self, is_serious=is_serious)
40 return "Fatal error: %s" % self.err
43 class GentoolkitAmbiguousPackage(GentoolkitException):
44 """Got an ambiguous package name."""
45 def __init__(self, choices, is_serious=False):
46 GentoolkitException.__init__(self, is_serious=is_serious)
47 self.choices = choices
50 choices = '\n'.join(" %s" % x for x in self.choices)
51 return '\n'.join(("Ambiguous package name. Choose from:", choices))
54 class GentoolkitInvalidAtom(GentoolkitException):
55 """Got a malformed package atom."""
56 def __init__(self, atom, is_serious=False):
57 GentoolkitException.__init__(self, is_serious=is_serious)
61 return "Invalid atom: '%s'" % self.atom
64 class GentoolkitSetNotFound(GentoolkitException):
65 """Got unknown set."""
66 def __init__(self, setname, is_serious=False):
67 GentoolkitException.__init__(self, is_serious=is_serious)
68 self.setname = setname
71 return "Unknown set: '%s'" % self.setname
74 class GentoolkitInvalidCategory(GentoolkitException):
75 """The category was not listed in portage.settings.categories."""
76 def __init__(self, category, is_serious=False):
77 GentoolkitException.__init__(self, is_serious=is_serious)
78 self.category = category
81 return "Invalid category: '%s'" % self.category
84 class GentoolkitInvalidPackage(GentoolkitException):
85 """Got an unknown or invalid package."""
86 def __init__(self, package, is_serious=False):
87 GentoolkitException.__init__(self, is_serious=is_serious)
88 self.package = package
91 return "Invalid package: '%s'" % self.package
94 class GentoolkitInvalidCPV(GentoolkitException):
95 """Got an invalid category/package-ver string."""
96 def __init__(self, cpv, is_serious=False):
97 GentoolkitException.__init__(self, is_serious=is_serious)
101 return "Invalid CPV: '%s'" % self.cpv
104 class GentoolkitInvalidRegex(GentoolkitException):
105 """The regex could not be compiled."""
106 def __init__(self, regex, is_serious=False):
107 GentoolkitException.__init__(self, is_serious=is_serious)
111 return "Invalid regex: '%s'" % self.regex
114 class GentoolkitInvalidVersion(GentoolkitException):
115 """Got a malformed version."""
116 def __init__(self, version, is_serious=False):
117 GentoolkitException.__init__(self, is_serious=is_serious)
118 self.version = version
121 return "Malformed version: '%s'" % self.version
124 class GentoolkitNoMatches(GentoolkitException):
125 """No packages were found matching the search query."""
126 def __init__(self, query, in_installed=False, is_serious=False):
127 GentoolkitException.__init__(self, is_serious=is_serious)
129 self.in_installed = in_installed
132 inst = 'installed ' if self.in_installed else ''
133 return "No %spackages matching '%s'" % (inst, self.query)
136 class GentoolkitUnknownKeyword(GentoolkitException):
137 """No packages were found matching the search query."""
138 def __init__(self, query, keywords, use, is_serious=True):
139 GentoolkitException.__init__(self, is_serious=is_serious)
141 self.keywords = keywords
145 return ("Unable to determine the install keyword for:\n" +
146 "'%s', KEYWORDS = '%s'\nUSE flags = '%s'"
147 % (self.query, self.keywords, self.use))
150 class GentoolkitNonZeroExit(GentoolkitException):
151 """Used to signal, that a non-fatal, no warning error occurred.
152 The primary use case is for not returning any data."""
153 def __init__(self, return_code=1, is_serious=False):
154 GentoolkitException.__init__(self, is_serious=is_serious)
155 self.return_code = return_code
157 # vim: set ts=4 sw=4 tw=79: