Skip to content

Commit

Permalink
Merge pull request #165 from dictyBase/bug/obo-namespace
Browse files Browse the repository at this point in the history
Bug/obo namespace
closes #159
  • Loading branch information
cybersiddhu committed Dec 4, 2015
2 parents 163847c + 6f963fa commit 73b1538
Show file tree
Hide file tree
Showing 7 changed files with 3,546 additions and 14 deletions.
26 changes: 26 additions & 0 deletions Dockerfile.test
@@ -0,0 +1,26 @@
FROM perl:5.20
MAINTAINER Siddhartha Basu <siddhartha-basu@northwestern.edu>

ADD https://northwestern.box.com/shared/static/3n0wdp04075oyrnytznn9mzc3k9o92c1.rpm /rpms/
ADD https://northwestern.box.com/shared/static/o2gd3o70sik5liw43hiomusmu0262auw.rpm /rpms/
ADD https://northwestern.box.com/shared/static/nsflzsbm2xmcf46z1ybiustosqkdskbb.rpm /rpms/

RUN apt-get update && \
apt-get -y install alien libaio1 libdb-dev libexpat1-dev && \
mkdir -p /rpms && \
alien -i /rpms/*.rpm && \
echo '/usr/lib/oracle/11.2/client64/lib' > /etc/ld.so.conf.d/oracle.conf && \
echo 'export ORACLE_HOME=/usr/lib/oracle/11.2/client64' > /etc/profile.d/oracle.sh

ENV ORACLE_HOME /usr/lib/oracle/11.2/client64/
ENV LD_LIBRARY_PATH /usr/lib/oracle/11.2/client64/lib/

ADD cpanfile /tmp/
RUN cd /tmp \
&& cpanm -n --quiet --installdeps . \
&& cpanm -n --quiet DBD::Oracle DBD::Pg Math::Base36 String::CamelCase LWP::Protocol::https \
&& rm -fr /rpms \
&& cpanm -n --quiet Child Dist::Zilla
COPY dist.ini /usr/src/modware/
WORKDIR /usr/src/modware
RUN dzil authordeps --missing | cpanm -n --quiet
52 changes: 44 additions & 8 deletions lib/Modware/Loader/Ontology.pm
Expand Up @@ -10,17 +10,18 @@ use SQL::Library;
use File::Spec::Functions qw/catfile/;
use Modware::Loader;
use Modware::Loader::Schema::Temporary;
use File::Basename;

has 'sqllib' => (
is => 'rw',
isa => 'SQL::Library',
lazy => 1,
lazy => 1,
default => sub {
my ($self) = @_;
my $lib = SQL::Library->new(
{ lib => catfile(
module_dir('Modware::Loader'),
lc ($self->schema->storage->sqlt_type) . '.lib'
lc( $self->schema->storage->sqlt_type ) . '.lib'
)
}
);
Expand All @@ -29,8 +30,8 @@ has 'sqllib' => (
);

has 'app_instance' => (
is => 'rw',
isa => 'Modware::Load::Command::obo2chado',
is => 'rw',
isa => 'Modware::Load::Command::obo2chado',
);

has 'logger' =>
Expand Down Expand Up @@ -68,7 +69,15 @@ has 'ontology' => (
writer => 'set_ontology',
trigger => sub {
my ( $self, $onto ) = @_;
$self->ontology_namespace( $onto->default_namespace || $onto->id );
my $namespace
= $self->parse_ontology_tag( $self->app_instance->input )
|| $self->parse_namespace_from_file_path
|| $onto->default_namespace
|| $onto->id;
$self->app_instance->logger->logdie(
"could not parse ontology namespace")
if !$namespace;
$self->ontology_namespace($namespace);
}
);

Expand All @@ -78,7 +87,7 @@ has '_date_parser' => (
lazy => 1,
default => sub {
return DateTime::Format::Strptime->new(
pattern => '%d:%m:%Y',
pattern => '%d:%m:%Y%n%H:%M',
on_error => 'croak'
);
}
Expand All @@ -89,7 +98,7 @@ has 'create_ontology_hooks' => (
isa => 'ArrayRef',
lazy => 1,
default => sub {
return [ 'create_synonyms', 'create_comments', 'create_alt_ids'];
return [ 'create_synonyms', 'create_comments', 'create_alt_ids' ];
}
);

Expand All @@ -98,10 +107,37 @@ has 'update_ontology_hooks' => (
isa => 'ArrayRef',
lazy => 1,
default => sub {
return ['update_synonyms', 'update_comments', 'update_alt_ids'];
return [ 'update_synonyms', 'update_comments', 'update_alt_ids' ];
}
);

sub parse_namespace_from_file_path {
my ($self) = @_;
my ($namespace)
= ( split /\./, basename( $self->app_instance->input ) )[0];
return $namespace;
}

sub parse_ontology_tag {
my ( $self, $file ) = @_;
my $handler = IO::File->new( $file, "r" )
or $self->app_instance->logger->logdie("cannot open file $!");
while ( my $line = $handler->getline ) {
if ( $line =~ /^\[/ ) {
last;
}
if ( $line =~ /^ontology/ ) {
my ($value) = ( ( split /:/, $line ) )[1];
$value =~ s/^\s+//;
$value =~ s/\s+$//;
$handler->close;
return $value;
}
}
$handler->close;
return;
}

sub _around_connection {
my ($self) = @_;
my $connect_info = $self->connect_info;
Expand Down
16 changes: 10 additions & 6 deletions lib/Modware/Loader/Role/Ontology/WithHelper.pm
Expand Up @@ -73,8 +73,7 @@ sub find_or_create_cvrow {
if ( $self->has_cvrow($cv) ) {
return $self->get_cvrow($cv);
}
my $cvrow
= $self->schema->resultset('Cv::Cv')
my $cvrow = $self->schema->resultset('Cv::Cv')
->find_or_create( { name => $cv } );
$self->set_cvrow( $cv, $cvrow );
return $cvrow;
Expand All @@ -101,8 +100,7 @@ sub find_or_create_cvterm_namespace {
if ( $self->has_cvterm_row($cvterm) ) {
return $self->get_cvterm_row($cvterm);
}
my $cvterm_row
= $schema->resultset('Cv::Cvterm')
my $cvterm_row = $schema->resultset('Cv::Cvterm')
->find( { name => $cvterm, 'cv.name' => $cv }, { join => 'cv' } );
if ($cvterm_row) {
$self->set_cvterm_row( $cvterm, $cvterm_row );
Expand Down Expand Up @@ -150,8 +148,14 @@ sub _normalize_id {
$accession = $parsed[1];
}
else {
$db_id = $self->find_or_create_db_id(
$self->ontology->default_namespace );
my $namespace
= $self->ontology->default_namespace
|| $self->parse_namespace_from_file_path
|| $self->parse_ontology_tag( $self->app_instance->input );
$self->app_instance->logger->logdie(
"could not parse default namespace")
if !$namespace;
$db_id = $self->find_or_create_db_id($namespace);
$accession = $id;
}
return ( $db_id, $accession );
Expand Down
55 changes: 55 additions & 0 deletions t/loader/obo2chado-namespace.t
@@ -0,0 +1,55 @@
use Test::More qw/no_plan/;
use Test::DatabaseRow;
use FindBin qw($Bin);
use Path::Class::Dir;
use Test::Exception;
use Test::Chado qw/:all/;
use Test::Chado::Common qw/:all/;
use Test::Chado::Cvterm qw/:all/;

my $data_dir = Path::Class::Dir->new($Bin)->parent->subdir('test_data');
my $obo_fixture = $data_dir->subdir('preset')->file('cvprop.tar.bz2');

use_ok('Modware::Load');

subtest 'loading of obo file without default namespace' => sub {
my $schema = chado_schema( custom_fixture => $obo_fixture );
my $dbmanager = get_dbmanager_instance();
local $Test::DatabaseRow::dbh = $dbmanager->dbh;
my $loader = new_ok('Modware::Load');
local @ARGV = (
'obo2chado', '--dsn',
$dbmanager->dsn, '--user',
$dbmanager->user, '--password',
$dbmanager->password, '--input',
$data_dir->subdir('obo')->file('ro-filter.obo'),
);
push @ARGV, '--pg_schema', $dbmanager->schema_namespace
if $dbmanager->can('schema_namespace');

lives_ok { $loader->run } "should load ro obo file";
has_cv( $schema, 'ro', 'cv namespace should match with ontology tag' );
has_dbxref( $schema, 'results_in_morphogenesis_of',
'should have dbxref' );
has_cvterm(
$schema,
'results in morphogenesis of',
'should have the cvterm'
);

my $sql = <<'SQL';
SELECT DBXREF.* from dbxref JOIN DB ON DBXREF.DB_ID=DB.DB_ID
WHERE
DBXREF.ACCESSION=?
AND
DB.NAME='ro-filter'
SQL
row_ok(
sql => [$sql, $_],
results => 1,
description => 'should have term with db namespace from file path'
) for qw/results_in_morphogenesis_of results_in_development_of results_in_formation_of/;

drop_schema();
};

1 change: 1 addition & 0 deletions t/test_data/obo/dicty_phenotypes.obo
Expand Up @@ -2,6 +2,7 @@ format-version: 1.2
date: 27:08:2013 16:37
saved-by: pfey
auto-generated-by: OBO-Edit 2.2
ontology: dphen
default-namespace: dphen
remark: cvs version: $Revision: 1.213 $

Expand Down
1 change: 1 addition & 0 deletions t/test_data/obo/dicty_phenotypes1.198.obo
Expand Up @@ -2,6 +2,7 @@ format-version: 1.2
date: 26:09:2012 17:53
saved-by: pfey
auto-generated-by: OBO-Edit 2.0
ontology: dphen
default-namespace: dphen
remark: cvs version: $Revision: 1.198 $

Expand Down

0 comments on commit 73b1538

Please sign in to comment.