- handle errors of source service runs
[opensuse:osc.git] / osc / oscerr.py
1 # Copyright (C) 2008 Novell Inc.  All rights reserved.
2 # This program is free software; it may be used, copied, modified
3 # and distributed under the terms of the GNU General Public Licence,
4 # either version 2, or (at your option) any later version.
5
6
7
8 class OscBaseError(Exception):
9     def __init__(self, args=()):
10         Exception.__init__(self)
11         self.args = args
12     def __str__(self):
13         return ''.join(self.args)
14
15 class UserAbort(OscBaseError):
16     """Exception raised when the user requested abortion"""
17
18 class ConfigError(OscBaseError):
19     """Exception raised when there is an error in the config file"""
20     def __init__(self, msg, fname):
21         OscBaseError.__init__(self)
22         self.msg = msg
23         self.file = fname
24
25 class ConfigMissingApiurl(ConfigError):
26     """Exception raised when a apiurl does not exist in the config file"""
27     def __init__(self, msg, fname, url):
28         ConfigError.__init__(self, msg, fname)
29         self.url = url
30
31 class APIError(OscBaseError):
32     """Exception raised when there is an error in the output from the API"""
33     def __init__(self, msg):
34         OscBaseError.__init__(self)
35         self.msg = msg
36
37 class NoConfigfile(OscBaseError):
38     """Exception raised when osc's configfile cannot be found"""
39     def __init__(self, fname, msg):
40         OscBaseError.__init__(self)
41         self.file = fname
42         self.msg = msg
43
44 class ExtRuntimeError(OscBaseError):
45     """Exception raised when there is a runtime error of an external tool"""
46     def __init__(self, msg, fname):
47         OscBaseError.__init__(self)
48         self.msg = msg
49         self.file = fname
50
51 class ServiceRuntimeError(OscBaseError):
52     """Exception raised when there is source service error runtime error"""
53     def __init__(self, msg):
54         OscBaseError.__init__(self)
55         self.msg = msg
56
57 class WrongArgs(OscBaseError):
58     """Exception raised by the cli for wrong arguments usage"""
59
60 class WrongOptions(OscBaseError):
61     """Exception raised by the cli for wrong option usage"""
62     #def __str__(self):
63     #    s = 'Sorry, wrong options.'
64     #    if self.args:
65     #        s += '\n' + self.args
66     #    return s
67
68 class NoWorkingCopy(OscBaseError):
69     """Exception raised when directory is neither a project dir nor a package dir"""
70
71 class WorkingCopyWrongVersion(OscBaseError):
72     """Exception raised when working copy's .osc/_osclib_version doesn't match"""
73
74 class WorkingCopyOutdated(OscBaseError):
75     """Exception raised when the working copy is outdated.
76     It takes a tuple with three arguments: path to wc,
77     revision that it has, revision that it should have.
78     """
79     def __str__(self):
80         return ('Working copy \'%s\' is out of date (rev %s vs rev %s).\n'
81                'Looks as if you need to update it first.' \
82                     % (self[0], self[1], self[2]))
83
84 class PackageError(OscBaseError):
85     """Base class for all Package related exceptions"""
86     def __init__(self, prj, pac):
87         OscBaseError.__init__(self)
88         self.prj = prj
89         self.pac = pac
90
91 class WorkingCopyInconsistent(PackageError):
92     """Exception raised when the working copy is in an inconsistent state"""
93     def __init__(self, prj, pac, dirty_files, msg):
94         PackageError.__init__(self, prj, pac)
95         self.dirty_files = dirty_files
96         self.msg = msg
97
98 class LinkExpandError(PackageError):
99     """Exception raised when source link expansion fails"""
100     def __init__(self, prj, pac, msg):
101         PackageError.__init__(self, prj, pac)
102         self.msg = msg
103
104 class OscIOError(OscBaseError):
105     def __init__(self, e, msg):
106         OscBaseError.__init__(self)
107         self.e = e
108         self.msg = msg
109
110 class PackageNotInstalled(OscBaseError):
111     """
112     Exception raised when a package is not installed on local system
113     """
114     def __init__(self, pkg):
115         OscBaseError.__init__(self, pkg)
116
117     def __str__(self):
118         return 'Package %s is required for this operation' % ''.join(self.args)
119
120 class SignalInterrupt(Exception):
121     """Exception raised on SIGTERM and SIGHUP."""
122
123 class PackageExists(PackageError):
124     """
125     Exception raised when a local object already exists
126     """
127     def __init__(self, prj, pac, msg):
128         PackageError.__init__(self, prj, pac)
129         self.msg = msg
130
131 class PackageMissing(PackageError):
132     """
133     Exception raised when a local object doesn't exist
134     """
135     def __init__(self, prj, pac, msg):
136         PackageError.__init__(self, prj, pac)
137         self.msg = msg
138
139 class PackageFileConflict(PackageError):
140     """
141     Exception raised when there's a file conflict.
142     Conflict doesn't mean an unsuccessfull merge in this context.
143     """
144     def __init__(self, prj, pac, file, msg):
145         PackageError.__init__(self, prj, pac)
146         self.file = file
147         self.msg = msg
148
149 class PackageInternalError(PackageError):
150     def __init__(self, prj, pac, msg):
151         PackageError.__init__(self, prj, pac)
152         self.msg = msg
153 # vim: sw=4 et