Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/EnsEMBL/Utils/EasyArgv.pm @ 0:1f6dce3d34e0
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 02:01:53 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/variant_effect_predictor/Bio/EnsEMBL/Utils/EasyArgv.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,137 @@ +=head1 LICENSE + + Copyright (c) 1999-2012 The European Bioinformatics Institute and + Genome Research Limited. All rights reserved. + + This software is distributed under a modified Apache license. + For license details, please see + + http://www.ensembl.org/info/about/code_licence.html + +=head1 CONTACT + + Please email comments or questions to the public Ensembl + developers list at <dev@ensembl.org>. + + Questions may also be sent to the Ensembl help desk at + <helpdesk@ensembl.org>. + +=head1 AUTHOR + +Juguang Xiao <juguang@tll.org.sg> + +=cut + +=head1 NAME + +Bio::EnsEMBL::Utils::EasyArgv + +=head1 SYNOPSIS + + use Bio::EnsEMBL::Utils::EasyArgv; + + my $db = get_ens_db_from_argv; # this method is exported. + + use Getopt::Long; + + my $others; + &GetOptions( 'others=s' => \$others ); + +=head1 DESCRIPTION + +This is a lazy but easy way to get the db-related arguments. All you +need to do is to invoke get_ens_db_from_argv before using standard +Getopt. The below options will be absorbed and removed from @ARGV. + +db_file, host, db_host, dbhost, user, db_user, dbuser, pass, db_pass, +dbpass, dbname, db_name. + +Now you can take advantage of Perl's do method to execute a file as perl +script and get returned the last line of it. For your most accessed db +setting, you can have a file named, say, ensdb_homo_core_18.perlobj, +with the content like + + use strict; # The ceiling line + + use Bio::EnsEMBL::DBSQL::DBAdaptor; + + my $db = Bio::EnsEMBL::DBSQL::DBAdaptor->new( + -host => 'ensembldb.ensembl.org', + -user => 'anonymous', + -dbname => 'homo_sapiens_core_18_34' + ); + + $db; # The floor line + +In the your command line, you just need to write like + + perl my_script.pl -db_file ensdb_homo_core_18.perlobj + +rather than the verbose + + -host ensembldb.ensembl.org -user anonymous \ + -dbname homo_sapiens_core_18_34 + +=head1 METHODS + +=cut + +package Bio::EnsEMBL::Utils::EasyArgv; + +use strict; +use vars qw($debug); +use Exporter (); +our @ISA= qw(Exporter); +our @EXPORT = qw(get_ens_db_from_argv +); +use Bio::Root::Root; # For _load_module +use Getopt::Long; + +sub _debug_print; + +sub get_ens_db_from_argv { + my ($db_file, $host, $user, $pass, $dbname, $driver, $db_module); + $host = 'localhost'; + $driver ='mysql'; + $db_module = 'Bio::EnsEMBL::SQL::DBAdaptor'; + Getopt::Long::config('pass_through'); + &GetOptions( + 'db_file=s' => \$db_file, + 'driver|dbdriver|db_driver=s' => \$driver, + 'host|dbhost|db_host=s' => \$host, + 'user|dbuser|db_user=s' => \$user, + 'pass|dbpass|db_pass=s' => \$pass, + 'dbname|db_name=s' => \$dbname, + 'db_module=s' => \$db_module + ); + + my $db; + if(defined $db_file){ + -e $db_file or die "'$db_file' is defined but does not exist\n"; + eval { $db = do($db_file) }; + $@ and die "'$db_file' is not a perlobj file\n"; + $db->isa('Bio::EnsEMBL::DBSQL::DBAdaptor') + or die "'$db_file' is not EnsEMBL DBAdaptor\n"; + _debug_print "I get a db from file\n"; + + }elsif(defined $host and defined $user and defined $dbname){ + Bio::Root::Root::_load_module($db_module); + $db = $db_module->new( + -host => $host, + -user => $user, + -pass => $pass, + -dbname => $dbname, + -driver => $driver + ); + }else{ + die "Cannot get the db, due to the insufficient information\n"; + } + return $db; +} + +sub _debug_print { + print STDERR @_ if $debug; +} + + +1;