annotate variant_effect_predictor/Bio/EnsEMBL/IdMapping/BaseObject.pm @ 0:21066c0abaf5 draft

Uploaded
author willmclaren
date Fri, 03 Aug 2012 10:04:48 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 =head1 LICENSE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 This software is distributed under a modified Apache license.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 For license details, please see
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 =head1 CONTACT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 <helpdesk@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 Bio::EnsEMBL::IdMapping::BaseObject - base object for IdMapping objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 # this object isn't instantiated directly but rather extended
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28 use Bio::EnsEMBL::IdMapping::BaseObject;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 our @ISA = qw(Bio::EnsEMBL::IdMapping::BaseObject);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33 This is the base object for some of the objects used in the IdMapping
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 application. An object that extends BaseObject will have a ConfParser,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 Logger and Cache object. BaseObject also implements some useful utility
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 functions related to file and db access.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 This isn't very clean OO design but it's efficient and easy to use...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 =head1 METHODS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 get_filehandle
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 file_exists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45 fetch_value_from_db
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 dump_table_to_file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 upload_file_into_table
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 logger
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 conf
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 cache
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 package Bio::EnsEMBL::IdMapping::BaseObject;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 use warnings;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 no warnings 'uninitialized';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 use Bio::EnsEMBL::Utils::Exception qw(throw warning);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 use Bio::EnsEMBL::Utils::ScriptUtils qw(path_append);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 =head2 new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 Arg [LOGGER]: Bio::EnsEMBL::Utils::Logger $logger - a logger object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 Arg [CONF] : Bio::EnsEMBL::Utils::ConfParser $conf - a configuration object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 Arg [CACHE] : Bio::EnsEMBL::IdMapping::Cache $cache - a cache object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 Example : my $object = Bio::EnsEMBL::IdMapping::BaseObjectSubclass->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 -LOGGER => $logger,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 -CONF => $conf,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 -CACHE => $cache
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 Description : Constructor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 Return type : implementing subclass type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 Exceptions : thrown on wrong or missing arguments
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 : under development
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 my $caller = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 my $class = ref($caller) || $caller;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 my ($logger, $conf, $cache) = rearrange(['LOGGER', 'CONF', 'CACHE'], @_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 unless ($logger and ref($logger) and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 $logger->isa('Bio::EnsEMBL::Utils::Logger')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 throw("You must provide a Bio::EnsEMBL::Utils::Logger for logging.");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 unless ($conf and ref($conf) and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 $conf->isa('Bio::EnsEMBL::Utils::ConfParser')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 throw("You must provide configuration as a Bio::EnsEMBL::Utils::ConfParser object.");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 unless ($cache and ref($cache) and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 $cache->isa('Bio::EnsEMBL::IdMapping::Cache')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 throw("You must provide configuration as a Bio::EnsEMBL::IdMapping::Cache object.");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 my $self = {};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 bless ($self, $class);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 # initialise
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 $self->logger($logger);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 $self->conf($conf);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 $self->cache($cache);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 =head2 get_filehandle
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 Arg[1] : String $filename - filename for filehandle
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 Arg[2] : String $path_append - append subdirectory name to basedir
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 Arg[3] : String $mode - filehandle mode (<|>|>>)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 Example : my $fh = $object->get_filehandle('mapping_stats.txt', 'stats',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 '>');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 print $fh "Stats:\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 Description : Returns a filehandle to a file for reading or writing. The file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 is qualified with the basedir defined in the configuration and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 an optional subdirectory name.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 Return type : filehandle
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 Exceptions : thrown on missing filename
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 : under development
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 sub get_filehandle {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 my $filename = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 my $path_append = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 my $mode = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 throw("Need a filename for this filehandle.") unless (defined($filename));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 my $path = $self->conf->param('basedir');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 $path = path_append($path, $path_append) if (defined($path_append));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 $mode ||= '>';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 open(my $fh, $mode, "$path/$filename") or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 throw("Unable to open $path/$filename: $!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 return $fh;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 =head2 file_exists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 Arg[1] : String $filename - filename to test
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 Arg[2] : Boolean $path_append - turn on pre-pending of basedir
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 Example : unless ($object->file_exists('gene_mappings.ser', 1)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 $object->do_gene_mapping;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 Description : Tests if a file exists and has non-zero size.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 Return type : Boolean
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 : under development
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 sub file_exists {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 my $filename = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 my $path_append = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 my $path = $self->conf->param('basedir');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 $path = path_append($path, $path_append) if (defined($path_append));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 return (-s "$path/$filename");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 =head2 fetch_value_from_db
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 Arg[1] : DBI::db $dbh - a DBI database handle
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 Arg[2] : String $sql - SQL statement to execute
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 Example : my $num_genes = $object->fetch_value_from_db($dbh,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 'SELECT count(*) FROM gene');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 Description : Executes an SQL statement on a db handle and returns the first
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 column of the first row returned. Useful for queries returning a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 single value, like table counts.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 Return type : Return type of SQL statement
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 Exceptions : thrown on wrong or missing arguments
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 : under development
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 sub fetch_value_from_db {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 my $dbh = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 my $sql = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 throw("Need a db handle.") unless ($dbh and $dbh->isa('DBI::db'));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 throw("Need an SQL query to execute.") unless ($sql);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 my $sth = $dbh->prepare($sql);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 $sth->execute;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 my ($retval) = $sth->fetchrow_array;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 return $retval;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 =head2 dump_table_to_file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 Arg[1] : String $dbtype - db type (source|target)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 Arg[2] : String $table - name of table to dump
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 Arg[3] : String $filename - name of dump file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 Arg[4] : Boolean $check_existing - turn on test for existing dump
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 Example : my $rows_dumped = $object->dump_table_to_file('source',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 'stable_id_event', 'stable_id_event_existing.txt');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 Description : Dumps the contents of a db table to a tab-delimited file. The
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 dump file will be written to a subdirectory called 'tables'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 under the basedir from your configuration.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 Return type : Int - the number of rows dumped
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 Exceptions : thrown on wrong or missing arguments
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 : under development
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 sub dump_table_to_file {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 my $dbtype = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 my $table = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 my $filename = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 my $check_existing = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 # argument check
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 unless (($dbtype eq 'source') or ($dbtype eq 'target')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 throw("Missing or unknown db type: $dbtype.");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 throw("Need a table name.") unless ($table);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 throw("Need a filename.") unless ($filename);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 # conditionally check if table was already dumped
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 if ($check_existing and $self->file_exists($filename, 'tables')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 $self->logger->info("$filename exists, won't dump again.\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 return 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 my $fh = $self->get_filehandle($filename, 'tables');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 my $dba = $self->cache->get_DBAdaptor($dbtype);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 my $dbh = $dba->dbc->db_handle;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 my $sth = $dbh->prepare("SELECT * FROM $table");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 $sth->execute;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 my $i = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 while (my @row = $sth->fetchrow_array) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 $i++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 # use '\N' for NULL values
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 for (my $j = 0; $j < scalar(@row); $j++) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271 $row[$j] = '\N' unless (defined($row[$j]));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 print $fh join("\t", @row);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 print $fh "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 $sth->finish;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 return $i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 =head2 upload_file_into_table
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 Arg[1] : String $dbtype - db type (source|target)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 Arg[2] : String $table - name of table to upload the data to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 Arg[3] : String $filename - name of dump file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 Arg[4] : Boolean $no_check_empty - don't check if table is empty
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 Example : my $rows_uploaded = $object->upload_file_into_table('target',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 'stable_id_event', 'stable_id_event_new.txt');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 Description : Uploads a tab-delimited data file into a db table. The data file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 will be taken from a subdirectory 'tables' under your configured
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 basedir. If the db table isn't empty and $no_check_empty isn't
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 set, no data is uploaded (and a warning is issued).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 Return type : Int - the number of rows uploaded
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 Exceptions : thrown on wrong or missing arguments
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 : under development
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 sub upload_file_into_table {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 my $dbtype = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 my $table = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 my $filename = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 my $no_check_empty = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 # argument check
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 unless ( ( $dbtype eq 'source' ) or ( $dbtype eq 'target' ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 throw("Missing or unknown db type: $dbtype.");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 throw("Need a table name.") unless ($table);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 throw("Need a filename.") unless ($filename);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 # sanity check for dry run
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 if ( $self->conf->param('dry_run') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 $self->logger->warning(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 "dry_run - skipping db upload for $filename.\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 my $file =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 join( '/', $self->conf->param('basedir'), 'tables', $filename );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327 my $r = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 if ( -s $file ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 $self->logger->debug( "$file -> $table\n", 1 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 my $dba = $self->cache->get_DBAdaptor($dbtype);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 my $dbh = $dba->dbc->db_handle;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 my $idtable = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337 if ( $table =~ /^([^_]+)_stable_id/ ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 # This is a stable_id table we're working with.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 $idtable = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 $table = $1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 # check table is empty
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 my ( $sql, $sth );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 unless ($no_check_empty) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 if ($idtable) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 $sql =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 qq(SELECT count(*) FROM $table WHERE stable_id IS NOT NULL);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 $sql = qq(SELECT count(*) FROM $table);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 $sth = $dbh->prepare($sql);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354 $sth->execute;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355 my ($c) = $sth->fetchrow_array;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356 $sth->finish;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358 if ( $c > 0 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 if ($idtable) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360 $self->logger->warning(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361 "Table $table contains $c stable IDs.\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362 1 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 $self->logger->warning(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366 "Table $table not empty: found $c entries.\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 1 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 $self->logger->info( "Data not uploaded!\n", 1 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 return $r;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 } ## end unless ($no_check_empty)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374 # now upload the data
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 if ($idtable) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376 # Create a temporary table, upload the data into it, and then
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 # update the main table.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 $dbh->do(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 qq( CREATE TABLE stable_id_$$ ( object_id INTEGER UNSIGNED,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 stable_id VARCHAR(255),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381 version SMALLINT UNSIGNED,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382 created_date DATETIME,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 modified_date DATETIME,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384 PRIMARY KEY(object_id) ) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 $dbh->do(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388 qq(LOAD DATA LOCAL INFILE '$file' INTO TABLE stable_id_$$));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390 $dbh->do(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 qq(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392 UPDATE $table, stable_id_$$
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 SET $table.stable_id=stable_id_$$.stable_id,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394 $table.version=stable_id_$$.version,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395 $table.created_date=stable_id_$$.created_date,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 $table.modified_date=stable_id_$$.modified_date
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397 WHERE $table.${table}_id = stable_id_$$.object_id )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400 $dbh->do(qq(DROP TABLE stable_id_$$));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 } ## end if ($idtable)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 $dbh->do(qq(LOAD DATA LOCAL INFILE '$file' INTO TABLE $table));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 $dbh->do(qq(OPTIMIZE TABLE $table));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 } ## end if ( -s $file )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 $self->logger->warning( "No data found in file $filename.\n", 1 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412 return $r;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413 } ## end sub upload_file_into_table
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416 =head2 logger
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418 Arg[1] : (optional) Bio::EnsEMBL::Utils::Logger - the logger to set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419 Example : $object->logger->info("Starting ID mapping.\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 Description : Getter/setter for logger object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421 Return type : Bio::EnsEMBL::Utils::Logger
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423 Caller : constructor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 : under development
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429 sub logger {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431 $self->{'_logger'} = shift if (@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432 return $self->{'_logger'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 =head2 conf
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438 Arg[1] : (optional) Bio::EnsEMBL::Utils::ConfParser - the configuration
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439 to set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440 Example : my $basedir = $object->conf->param('basedir');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441 Description : Getter/setter for configuration object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442 Return type : Bio::EnsEMBL::Utils::ConfParser
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444 Caller : constructor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 : under development
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450 sub conf {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452 $self->{'_conf'} = shift if (@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453 return $self->{'_conf'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457 =head2 cache
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459 Arg[1] : (optional) Bio::EnsEMBL::IdMapping::Cache - the cache to set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
460 Example : $object->cache->read_from_file('source');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
461 Description : Getter/setter for cache object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
462 Return type : Bio::EnsEMBL::IdMapping::Cache
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
463 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
464 Caller : constructor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
465 Status : At Risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
466 : under development
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
467
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
468 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
469
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
470 sub cache {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
471 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
472 $self->{'_cache'} = shift if (@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
473 return $self->{'_cache'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
474 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
475
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
476
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
477 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
478