annotate variant_effect_predictor/Bio/Root/Root.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 package Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 # $Id: Root.pm,v 1.30 2002/12/16 09:44:28 birney Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 Bio::Root::Root - Hash-based implementation of Bio::Root::RootI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 # any bioperl or bioperl compliant object is a RootI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 # compliant object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 # Here's how to throw and catch an exception using the eval-based syntax.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 $obj->throw("This is an exception");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 $obj->throw("This is catching an exception");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 if( $@ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 print "Caught exception";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 print "no exception";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 # Alternatively, using the new typed exception syntax in the throw() call:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 $obj->throw( -class => 'Bio::Root::BadParameter',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 -text => "Can't open file $file",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 -value => $file);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 # Exceptions can be used in an eval{} block as shown above or within
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 # a try{} block if you have installed the Error.pm module.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 # Here's a brief example. For more, see Bio::Root::Exception
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 use Error qw(:try);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 try {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 $obj->throw( # arguments as above );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 catch Bio::Root::FileOpenException with {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 my $err = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 print "Handling exception $err\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 This is a hashref-based implementation of the Bio::Root::RootI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 interface. Most bioperl objects should inherit from this.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 See the documentation for Bio::Root::RootI for most of the methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 implemented by this module. Only overridden methods are described
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 here.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 =head2 Throwing Exceptions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 One of the functionalities that Bio::Root::RootI provides is the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 ability to throw() exceptions with pretty stack traces. Bio::Root::Root
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 enhances this with the ability to use B<Error.pm> (available from CPAN)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 if it has also been installed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 If Error.pm has been installed, throw() will use it. This causes an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 Error.pm-derived object to be thrown. This can be caught within a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 C<catch{}> block, from wich you can extract useful bits of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 information. If Error.pm is not installed, it will use the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 Bio::Root::RootI-based exception throwing facilty.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 =head2 Typed Exception Syntax
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 The typed exception syntax of throw() has the advantage of plainly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 indicating the nature of the trouble, since the name of the class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 is included in the title of the exception output.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 To take advantage of this capability, you must specify arguments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 as named parameters in the throw() call. Here are the parameters:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 =over 4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 =item -class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 name of the class of the exception.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 This should be one of the classes defined in B<Bio::Root::Exception>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 or a custom error of yours that extends one of the exceptions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 defined in B<Bio::Root::Exception>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 =item -text
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 a sensible message for the exception
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 =item -value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 the value causing the exception or $!, if appropriate.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 =back
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 Note that Bio::Root::Exception does not need to be imported into
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 your module (or script) namespace in order to throw exceptions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 via Bio::Root::Root::throw(), since Bio::Root::Root imports it.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 =head2 Try-Catch-Finally Support
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 In addition to using an eval{} block to handle exceptions, you can
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 also use a try-catch-finally block structure if B<Error.pm> has been
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 installed in your system (available from CPAN). See the documentation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 for Error for more details.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 Here's an example. See the B<Bio::Root::Exception> module for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 other pre-defined exception types:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 try {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 open( IN, $file) || $obj->throw( -class => 'Bio::Root::FileOpenException',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 -text => "Cannot open file $file for reading",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 -value => $!);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 catch Bio::Root::BadParameter with {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 my $err = shift; # get the Error object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 # Perform specific exception handling code for the FileOpenException
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 catch Bio::Root::Exception with {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 my $err = shift; # get the Error object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 # Perform general exception handling code for any Bioperl exception.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 otherwise {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 # A catch-all for any other type of exception
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 finally {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 # Any code that you want to execute regardless of whether or not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 # an exception occurred.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 # the ending semicolon is essential!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Functions originally from Steve Chervitz. Refactored by Ewan Birney.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 Re-refactored by Lincoln Stein.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 The rest of the documentation details each of the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 #'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 use vars qw(@ISA $DEBUG $ID $Revision $VERSION $VERBOSITY $ERRORLOADED);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 use Bio::Root::RootI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 use Bio::Root::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 @ISA = 'Bio::Root::RootI';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 BEGIN {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 $ID = 'Bio::Root::Root';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 $VERSION = 1.0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 $Revision = '$Id: Root.pm,v 1.30 2002/12/16 09:44:28 birney Exp $ ';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 $DEBUG = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 $VERBOSITY = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 $ERRORLOADED = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 # Check whether or not Error.pm is available.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 # $main::DONT_USE_ERROR is intended for testing purposes and also
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 # when you don't want to use the Error module, even if it is installed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 # Just put a INIT { $DONT_USE_ERROR = 1; } at the top of your script.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 if( not $main::DONT_USE_ERROR ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 if ( eval "require Error" ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 import Error qw(:try);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 require Bio::Root::Exception;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 $ERRORLOADED = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 $Error::Debug = 1; # enable verbose stack trace
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 if( !$ERRORLOADED ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 require Carp; import Carp qw( confess );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 $main::DONT_USE_ERROR; # so that perl -w won't warn "used only once"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 Purpose : generic instantiation function can be overridden if
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 special needs of a module cannot be done in _initialize
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 # my ($class, %param) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 my $class = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 my $self = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 bless $self, ref($class) || $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 if(@_ > 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 # if the number of arguments is odd but at least 3, we'll give
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 # it a try to find -verbose
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 shift if @_ % 2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 my %param = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 ## See "Comments" above regarding use of _rearrange().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 $self->verbose($param{'-VERBOSE'} || $param{'-verbose'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 =head2 verbose
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 Title : verbose
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 Usage : $self->verbose(1)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 Function: Sets verbose level for how ->warn behaves
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 -1 = no warning
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 0 = standard, small warning
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 1 = warning with stack trace
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 2 = warning becomes throw
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 Returns : The current verbosity setting (integer between -1 to 2)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 Args : -1,0,1 or 2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 sub verbose {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 # allow one to set global verbosity flag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 return $DEBUG if $DEBUG;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 return $VERBOSITY unless ref $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 if (defined $value || ! defined $self->{'_root_verbose'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 $self->{'_root_verbose'} = $value || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 return $self->{'_root_verbose'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 sub _register_for_cleanup {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 my ($self,$method) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 if($method) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 if(! exists($self->{'_root_cleanup_methods'})) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 $self->{'_root_cleanup_methods'} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 push(@{$self->{'_root_cleanup_methods'}},$method);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 sub _unregister_for_cleanup {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 my ($self,$method) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 my @methods = grep {$_ ne $method} $self->_cleanup_methods;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 $self->{'_root_cleanup_methods'} = \@methods;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 sub _cleanup_methods {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 return unless ref $self && $self->isa('HASH');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 my $methods = $self->{'_root_cleanup_methods'} or return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 @$methods;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 =head2 throw
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 Title : throw
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 Usage : $obj->throw("throwing exception message");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 $obj->throw( -class => 'Bio::Root::Exception',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 -text => "throwing exception message",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 -value => $bad_value );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 Function: Throws an exception, which, if not caught with an eval or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 a try block will provide a nice stack trace to STDERR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 with the message.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 If Error.pm is installed, and if a -class parameter is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 provided, Error::throw will be used, throwing an error
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 of the type specified by -class.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 If Error.pm is installed and no -class parameter is provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 (i.e., a simple string is given), A Bio::Root::Exception
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 is thrown.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 Returns : n/a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 Args : A string giving a descriptive error message, optional
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 Named parameters:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 '-class' a string for the name of a class that derives
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 from Error.pm, such as any of the exceptions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 defined in Bio::Root::Exception.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 Default class: Bio::Root::Exception
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 '-text' a string giving a descriptive error message
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 '-value' the value causing the exception, or $! (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 Thus, if only a string argument is given, and Error.pm is available,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 this is equivalent to the arguments:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 -text => "message",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 -class => Bio::Root::Exception
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 Comments : If Error.pm is installed, and you don't want to use it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 for some reason, you can block the use of Error.pm by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 Bio::Root::Root::throw() by defining a scalar named
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 $main::DONT_USE_ERROR (define it in your main script
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 and you don't need the main:: part) and setting it to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 a true value; you must do this within a BEGIN subroutine.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 #'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 sub throw{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 my ( $text, $class ) = $self->_rearrange( [qw(TEXT CLASS)], @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 if( $ERRORLOADED ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 # print STDERR " Calling Error::throw\n\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 # Enable re-throwing of Error objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 # If the error is not derived from Bio::Root::Exception,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 # we can't guarantee that the Error's value was set properly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 # and, ipso facto, that it will be catchable from an eval{}.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 # But chances are, if you're re-throwing non-Bio::Root::Exceptions,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 # you're probably using Error::try(), not eval{}.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 # TODO: Fix the MSG: line of the re-thrown error. Has an extra line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 # containing the '----- EXCEPTION -----' banner.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 if( ref($args[0])) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 if( $args[0]->isa('Error')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 my $class = ref $args[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 throw $class ( @args );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 my $text .= "\nWARNING: Attempt to throw a non-Error.pm object: " . ref$args[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 my $class = "Bio::Root::Exception";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 throw $class ( '-text' => $text, '-value' => $args[0] );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 $class ||= "Bio::Root::Exception";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 my %args;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 if( @args % 2 == 0 && $args[0] =~ /^-/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 %args = @args;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 $args{-text} = $text;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 $args{-object} = $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 throw $class ( scalar keys %args > 0 ? %args : @args ); # (%args || @args) puts %args in scalar context!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 # print STDERR " Not calling Error::throw\n\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 $class ||= '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 my $std = $self->stack_trace_dump();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 my $title = "------------- EXCEPTION $class -------------";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 my $footer = "\n" . '-' x CORE::length($title);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 $text ||= '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 my $out = "\n$title\n" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 "MSG: $text\n". $std . $footer . "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 die $out;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 =head2 debug
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 Title : debug
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 Usage : $obj->debug("This is debugging output");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 Function: Prints a debugging message when verbose is > 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 Returns : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 Args : message string(s) to print to STDERR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 sub debug{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 my ($self,@msgs) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 if( $self->verbose > 0 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 print STDERR join("", @msgs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 =head2 _load_module
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 Title : _load_module
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 Usage : $self->_load_module("Bio::SeqIO::genbank");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 Function: Loads up (like use) the specified module at run time on demand.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 Returns : TRUE on success. Throws an exception upon failure.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 Args : The module to load (_without_ the trailing .pm).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 sub _load_module {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 my ($self, $name) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 my ($module, $load, $m);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 $module = "_<$name.pm";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 return 1 if $main::{$module};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 # untaint operation for safe web-based running (modified after a fix
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 # a fix by Lincoln) HL
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 if ($name !~ /^([\w:]+)$/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 $self->throw("$name is an illegal perl package name");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 $load = "$name.pm";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 my $io = Bio::Root::IO->new();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 # catfile comes from IO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 $load = $io->catfile((split(/::/,$load)));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 require $load;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 if ( $@ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 $self->throw("Failed to load module $name. ".$@);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 sub DESTROY {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 my @cleanup_methods = $self->_cleanup_methods or return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 for my $method (@cleanup_methods) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 $method->($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 }
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
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427