annotate variant_effect_predictor/Bio/EnsEMBL/Utils/Exception.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL::Utils::Exception - Utility functions for error handling
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 use Bio::EnsEMBL::Utils::Exception
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 qw(throw warning deprecate verbose try catch);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 or to get all methods just
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 use Bio::EnsEMBL::Utils::Exception;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 eval { throw("this is an exception with a stack trace") };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 if ($@) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 print "Caught exception:\n$@";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 # Or you can us the try/catch confortable syntax instead to deal with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 # throw or die. Don't forget the ";" after the catch block. With
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 # this syntax, the original $@ is in $_ in the catch subroutine.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 try {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 throw("this is an exception with a stack trace");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 catch { print "Caught exception:\n$_" };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 # silence warnings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 verbose('OFF');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 warning('this is a silent warning');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 #show deprecated and warning messages but not info
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 verbose('DEPRECATE');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 warning('this is a warning');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 # show all messages
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 verbose('ALL');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 info('this is an informational message');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 sub my_sub { deprecate('use other_sub() instead') }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 verbose('EXCEPTION');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 info( 'This is a high priority info message.', 1000 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 This is derived from the Bio::Root module in BioPerl. Some formatting
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 has been changed and the deprecate function has been added. Most
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 notably the object methods are now static class methods that can be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 called without inheriting from Bio::Root or Bio::EnsEMBL::Root. This is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 especially useful for throwing exceptions with stack traces outside of a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 blessed context.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 The originaly implementations of these methods were by Steve Chervitz
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 and refactored by Ewan Birney.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 It is recommended that these functions be used instead of inheriting
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 unnecessarily from the Bio::EnsEMBL::Root or Bio::Root object. The
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 functions exported by this package provide a set of useful error
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 handling methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 package Bio::EnsEMBL::Utils::Exception;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 use Bio::EnsEMBL::ApiVersion;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 use Exporter;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 use vars qw(@ISA @EXPORT);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 @ISA = qw(Exporter);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 @EXPORT = qw(throw warning stack_trace_dump
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 stack_trace verbose deprecate info try catch);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 my $VERBOSITY = 3000;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 my $DEFAULT_INFO = 4000;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 my $DEFAULT_DEPRECATE = 3000;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 my $DEFAULT_WARNING = 2000;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 my $DEFAULT_EXCEPTION = 1000;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 =head2 throw
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 Arg [1] : string $msg
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 Arg [2] : (optional) int $level
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 override the default level of exception throwing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 Example : use Bio::EnsEMBL::Utils::Exception qw(throw);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 throw('We have a problem');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 Description: Throws an exception which if not caught by an eval will
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 provide a stack trace to STDERR and die. If the verbosity level
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 is lower than the level of the throw, then no error message is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 displayed but the program will still die (unless the exception
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 is caught).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 Exceptions : thrown every time
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 Caller : generally on error
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 sub throw {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 my $string = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 # For backwards compatibility with Bio::EnsEMBL::Root::throw: Allow
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 # to be called as an object method as well as class method. Root
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 # function now deprecated so call will have the string instead.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 $string = shift if ( ref($string) ); # Skip object if one provided.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 $string = shift if ( $string eq "Bio::EnsEMBL::Utils::Exception" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 my $level = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 $level = $DEFAULT_EXCEPTION if ( !defined($level) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 if ( $VERBOSITY < $level ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 die("\n"); # still die, but silently
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 my $std = stack_trace_dump(3);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 my $out = sprintf(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 "\n" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 "-------------------- EXCEPTION --------------------\n" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 "MSG: %s\n" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 "%s" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 "Date (localtime) = %s\n" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 "Ensembl API version = %s\n" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 "---------------------------------------------------\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 $string, $std, scalar( localtime() ), software_version() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 die($out);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 } ## end sub throw
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 =head2 warning
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 Arg [1] : string warning(message);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 Arg [2] : (optional) int level
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 Override the default level of this warning changning the level
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 of verbosity at which it is displayed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 Example : use Bio::EnsEMBL::Utils::Exception qw(warning)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 warning('This is a warning');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 Description: If the verbosity level is higher or equal to the level of this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 warning then a warning message is printed to STDERR. If the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 verbosity lower then nothing is done. Under the default
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 levels of warning and verbosity warnings will be displayed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 Exceptions : warning every time
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 sub warning {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 my $string = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 # See throw() for this:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 $string = shift if ( ref($string) ); # Skip object if one provided.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 $string = shift if ( $string eq "Bio::EnsEMBL::Utils::Exception" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 my $level = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 $level = $DEFAULT_WARNING if ( !defined($level) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 return if ( $VERBOSITY < $level );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 my @caller = caller;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 my $line = $caller[2] || '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 # Use only two sub-dirs for brevity when reporting the file name.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 my $file;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 my @path = split( /\//, $caller[1] );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 $file = pop(@path);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 my $i = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 while ( @path && $i < 2 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 $i++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 $file = pop(@path) . "/$file";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 @caller = caller(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 my $caller_line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 my $caller_file;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 $i = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 if (@caller) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 @path = split( /\//, $caller[1] );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 $caller_line = $caller[2];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 $caller_file = pop(@path);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 while ( @path && $i < 2 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 $i++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 $caller_file = pop(@path) . "/$caller_file";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 my $out =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 sprintf( "\n" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 "-------------------- WARNING ----------------------\n" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 "MSG: %s\n" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 "FILE: %s LINE: %d\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 $string, $file, $line );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 if ( defined($caller_file) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 $out .= sprintf( "CALLED BY: %s LINE: %d\n", $caller_file,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 $caller_line );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 $out .= sprintf(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 "Date (localtime) = %s\n" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 "Ensembl API version = %s\n" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 "---------------------------------------------------\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 scalar( localtime() ), software_version() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 warn($out);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 } ## end sub warning
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 =head2 info
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 Arg [1] : string $string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 The message to be displayed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 Arg [2] : (optional) int $level
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 Override the default level of this message so it is displayed at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 a different level of verbosity than it normally would be.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 Example : use Bio::EnsEMBL::Utils::Exception qw(verbose info)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 Description: This prints an info message to STDERR if verbosity is higher
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 than the level of the message. By default info messages are not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 displayed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 sub info {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 my $string = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 $string = shift if($string eq "Bio::EnsEMBL::Utils::Exception");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 my $level = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 $level = $DEFAULT_INFO if(!defined($level));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 return if($VERBOSITY < $level);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 print STDERR "INFO: $string\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 =head2 verbose
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 Arg [1] : (optional) int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 Example : use Bio::EnsEMBL::Utils::Exception qw(verbose warning);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 #turn warnings and everything more important on (e.g. exception)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 verbose('WARNING');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 warning("Warning displayed");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 info("This won't be displayed");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 deprecate("This won't be diplayed");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 #turn exception messages on
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 verbose('EXCEPTION');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 warning("This won't do anything");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 throw("Die with a message");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 #turn everying off
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 verbose('OFF'); #same as verbose(0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 warning("This won't do anything");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 throw("Die silently without a message");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 #turn on all messages
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 verbose('ALL');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 info("All messages are now displayed");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 if(verbose() > 3000) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 print "Verbosity is pretty high";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 Description: Gets/Sets verbosity level which defines which messages are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 to be displayed. An integer value may be passed or one of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 following strings:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 'OFF' (= 0)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 'EXCEPTION' (= 1000)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 'WARNING' (= 2000)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 'DEPRECATE' (= 3000)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 'INFO' (= 4000)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 'ALL' (= 1000000)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 Returntype : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 sub verbose {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 if(@_) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 my $verbosity = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 $verbosity = shift if($verbosity eq "Bio::EnsEMBL::Utils::Exception");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 if($verbosity =~ /\d+/) { #check if verbosity is an integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 $VERBOSITY = $verbosity;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 $verbosity = uc($verbosity);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 if($verbosity eq 'OFF' || $verbosity eq 'NOTHING' ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 $verbosity eq 'NONE') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 $VERBOSITY = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 } elsif($verbosity eq 'EXCEPTION' || $verbosity eq 'THROW') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 $VERBOSITY = $DEFAULT_EXCEPTION;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 } elsif($verbosity eq 'WARNING' || $verbosity eq 'WARN') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 $VERBOSITY = $DEFAULT_WARNING;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 } elsif($verbosity eq 'DEPRECATE' || $verbosity eq 'DEPRECATED') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 $VERBOSITY = $DEFAULT_DEPRECATE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 } elsif($verbosity eq 'INFO') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 $VERBOSITY = $DEFAULT_INFO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 } elsif($verbosity eq 'ON' || $verbosity eq 'ALL') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 $VERBOSITY = 1e6;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 $VERBOSITY = $DEFAULT_WARNING;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 warning("Unknown level of verbosity: $verbosity");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 return $VERBOSITY;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 =head2 stack_trace_dump
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 Arg [1] : (optional) int $levels
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 The number of levels to ignore from the top of the stack when
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 creating the dump. This is useful when this is called internally
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 from a warning or throw function when the immediate caller and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 stack_trace_dump function calls are themselves uninteresting.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 Example : use Bio::EnsEMBL::Utils::Exception qw(stack_trace_dump);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 print STDERR stack_trace_dump();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 Description: Returns a stack trace formatted as a string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 Caller : general, throw, warning
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 sub stack_trace_dump{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 my @stack = stack_trace();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 my $levels = 2; #default is 2 levels so stack_trace_dump call is not present
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 $levels = shift if(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 $levels = shift if($levels eq "Bio::EnsEMBL::Utils::Exception");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 $levels = 1 if($levels < 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 while($levels) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 $levels--;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 shift @stack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 my $out;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 my ($module,$function,$file,$position);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 foreach my $stack ( @stack) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 ($module,$file,$position,$function) = @{$stack};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 $out .= "STACK $function $file:$position\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 return $out;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 =head2 stack_trace
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 Example : use Bio::EnsEMBL::Utils::Exception qw(stack_trace)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 Description: Gives an array to a reference of arrays with stack trace info
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 each coming from the caller(stack_number) call
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 Returntype : array of listrefs of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 Caller : general, stack_trace_dump()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 sub stack_trace {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 my $i = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 my @out;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 my $prev;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 while ( my @call = caller($i++)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 # major annoyance that caller puts caller context as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 # function name. Hence some monkeying around...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 $prev->[3] = $call[3];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 push(@out,$prev);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 $prev = \@call;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 $prev->[3] = 'toplevel';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 push(@out,$prev);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 return @out;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 =head2 deprecate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 Arg [1] : string $mesg
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 A message describing why a method is deprecated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 Example : use Bio::EnsEMBL::Utils::Exception qw(deprecate)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 sub old_sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 deprecate('Please use new_sub() instead');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 Description: Prints a warning to STDERR that the method which called
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 deprecate() is deprecated. Also prints the line number and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 file from which the deprecated method was called. Deprecated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 warnings only appear once for each location the method was
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 called from. No message is displayed if the level of verbosity
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 is lower than the level of the warning.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 Exceptions : warning every time
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 Caller : deprecated methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 my %DEPRECATED;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 sub deprecate {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 my $mesg = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 $mesg = shift if($mesg eq "Bio::EnsEMBL::Utils::Exception"); #skip object if one provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 my $level = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 $level = $DEFAULT_DEPRECATE if(!defined($level));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 return if($VERBOSITY < $level);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 my @caller = caller(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 my $subname = $caller[3] ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 my $line = $caller[2];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 #use only 2 subdirs for brevity when reporting the filename
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 my $file;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 my @path = $caller[1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 $file = pop(@path);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 my $i = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 while(@path && $i < 2) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 $i++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 $file .= pop(@path);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 #keep track of who called this method so that the warning is only displayed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 #once per deprecated call
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 return if $DEPRECATED{"$line:$file:$subname"};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 if ( $VERBOSITY > -1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 print STDERR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 "\n------------------ DEPRECATED ---------------------\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 . "Deprecated method call in file $file line $line.\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 . "Method $subname is deprecated.\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 . "$mesg\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 . "Ensembl API version = "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 . software_version() . "\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 . "---------------------------------------------------\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 $DEPRECATED{"$line:$file:$subname"} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 =head2 try/catch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 Arg [1] : anonymous subroutine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 the block to be tried
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 Arg [2] : return value of the catch function
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 Example : use Bio::EnsEMBL::Utils::Exception qw(throw try catch)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 The syntax is:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 try { block1 } catch { block2 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 { block1 } is the 1st argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 catch { block2 } is the 2nd argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 e.g.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 try {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 throw("this is an exception with a stack trace");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 } catch {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 print "Caught exception:\n$_";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 In block2, $_ is assigned the value of the first
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 throw or die statement executed in block 1.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 Description: Replaces the classical syntax
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 eval { block1 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 if ($@) { block2 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 by a more confortable one.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 In the try/catch syntax, the original $@ is in $_ in the catch subroutine.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 This try/catch implementation is a copy and paste from
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 "Programming Perl" 3rd Edition, July 2000, by L.Wall, T. Christiansen
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 & J. Orwant. p227, and is only possible because of subroutine prototypes.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 Returntype : depend on what is implemented the try or catch block
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 sub try (&$) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 my ($try, $catch) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 eval { &$try };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 if ($@) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 chop $@;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 local $_ = $@;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 &$catch;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 sub catch (&) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 1;