|
From: Pjm <pj...@sa...> - 2003-02-24 16:39:45
|
Steve, Jonathan,
when doing a `ga +create GUS::Common::Plugin::LoadPfam --commit`
it complained because my plugin did not match anything from
AlgorithmParamKeyType table. This was because it ws empty.
Finding this in the code;
$RV = { 'str' => 0,
'flo' => 1,
'int' => 2,
'ref' => 3,
'boo' => 4,
I did this;
insert into AlgorithmParamKeyType
VALUES (0, 'string',sysdate, 1,1,1,1,1,1,1,1,1,1);
insert into AlgorithmParamKeyType
VALUES (1, 'float',sysdate, 1,1,1,1,1,1,1,1,1,1);
insert into AlgorithmParamKeyType
VALUES (2, 'integer',sysdate, 1,1,1,1,1,1,1,1,1,1);
insert into AlgorithmParamKeyType
VALUES (3, 'ref',sysdate, 1,1,1,1,1,1,1,1,1,1);
insert into AlgorithmParamKeyType
VALUES (4, 'boolean',sysdate, 1,1,1,1,1,1,1,1,1,1);
After doing this I found the original string in ImportPfam describing the flat
file argument was too big! AlgorithmParamKey.DESCRIPTION
h => ("Flat file containing the release of Pfam to load. Expects\n" .
"\t\t\tthe file containing the annotation and full alignments in Pfam\n" .
"\t\t\tformat of all Pfam-A families (called \"Pfam-A.full\" in release
5.2)\n" .
"\t\t\tThe specified file may be in gzip (.gz) or compressed (.Z) format."),
This string is 280 characters! Does anyone mind if I change the length to 512
and do a cvs commit?
Also, could you pass this on to debbie please, although she may already know?
make step 2 of the conversion guide to include;
"@ISA = qw(GUS::PluginMgr::Plugin); #defines what is inherited"
Paul.
steve fischer wrote:
> yes, gus 3.0.
>
> can we set a time for tuesday? i think an hour will more than do it.
> we are 5 hours behind you. i get in around 10:30.
>
> meanwhile, i have attached debbie's notes on how to convert a plugin,
> and a canonical plugin so you can get a start.
>
> steve
>
> pjm wrote:
>
>> steve fischer wrote:
>>
>>
>>> paul-
>>>
>>> finally got the GUS grant out the door.
>>>
>>> still waiting for James Cuff to move the gus cvs to sanger. i sent it
>>> to him more than a week ago. i just reminded him again today.
>>>
>>> so, early next week will be a good time to go over the plugin stuff.
>>>
>>> i have a meeting monday morning, so maybe tuesday?
>>>
>>> steve
>>>
>>
>>
>> Tuesday will be good. I have a couple of smaller jobs to do but we are
>> all keen
>> to get hacking, err, writing code for GUS30!
>>
>> I take it you mean you sent a GUS30 tar ball to James?
>>
>>
>>
>>
>
>
> ------------------------------------------------------------------------
>
> 1) Give the package name a complete path
> e.g.package DoTS::DotsBuild::Plugin::ExtractAndBlockAssemblySequences;
>
> 2) Give all of our 'use' objects full paths
> e.g.use GUS::Model::DoTS::AssemblySequence;
> use CBIL::Bio::SequenceUtils;
>
> 3) Change 'sub new'
> a. Copy new from template:
>
> sub new {
> my $Class = shift;
> my $self = {};
> bless($self,$class);
> my $usage = 'Extract unprocessed AssembySequences........';
> my $easycsp =
> [
> {o => 'testnumber',
> t => 'int',
> h => 'number of iterations for testing',
> }];
> $self->initialize({requiredDbVersion => {},
> cvsRevision => '$Revision: 1.6 $', # cvs fills this in!
> cvsTag => '$Name: $', # cvs fills this in!
> name => ref($m),
> revisionNotes => 'make consistent with GUS 3.0',
> easyCspOptions => $easycsp,
> usage => $usage
> });
> return $self;
> }
> b. Replace usage string with string in original usage sub, delete usage sub
>
> c. replace easycsp hashes with original EasyCspOptions hash, delete keys
> and conform to above model
>
> 4) put $self = shift at beginning of all subs
>
> 5) call all subs with $self->subname (search for & and replace with $self->)
>
> 6) replace $ctx->{cla}-> with $self->getCla
>
> 7) replace $ctx->{'self_inv'}->getQueryHandle with $self->getQueryHandle
>
> 8) use $self->getQueryHandle instead of passing a database handle or using a
> global database handle
>
> 9) avoid use DBI or DbiDatabase
>
> 10) search for 'new' (instantiating new database objects) and add the full
> path for objects e.g. GUS::Model::DoTS::AssemblySequence->
> new( { 'assembly_sequence_id' => $id } );
>
> 11) use $self->undefPointerCache instead of newObject->undefPointerCache
>
> 12) substitute 'sub run' for 'sub Run'
>
>
> ------------------------------------------------------------------------
>
> package GUS::Common::Plugin::UpdateGusFromXML;
>
> @ISA = qw(GUS::PluginMgr::Plugin);
> use strict;
>
> use FileHandle;
>
> # ----------------------------------------------------------------------
> # create and initalize new plugin instance.
>
> sub new {
> my ($class) = @_;
>
> my $self = {};
> bless($self, $class);
>
> my $usage = 'update GUS from an XML file. ("// on newline delimits submits)';
>
> my $easycsp =
> [
> { h => 'if true then will update the row with new modification data and algorithmInvocation regardless if has changed from the database',
> t => 'boolean',
> o => 'refresh',
> },
> { h => 'name of file containing XML',
> t => 'string',
> d => '-',
> o => 'filename',
> },
> ];
>
> $self->initialize({requiredDbVersion => {},
> cvsRevision => '$Revision: 1.8 $', # cvs fills this in!
> cvsTag => '$Name: $', # cvs fills this in!
> name => ref($self),
> revisionNotes => 'make consistent with GUS 3.0',
> easyCspOptions => $easycsp,
> usage => $usage
> });
>
> return $self;
> }
>
> # ----------------------------------------------------------------------
> # plugin-global variables.
>
> my $countObjs = 0;
> my $countUpdates = 0;
>
> # ----------------------------------------------------------------------
> # run method to do the work
>
> sub run {
> my $self = shift;
>
> my $RV;
>
> my $fh = FileHandle->new('<'.$self->getCla->{'filename'});
> if ($fh) {
>
> $self->logAlert('COMMIT', $self->getCla->{commit} ? 'ON' : 'OFF' );
>
> ##testing exitOnFailure...
> $self->getDb()->setExitOnSQLFailure(0);
>
> # process XML file.
> my @xml;
> while (<$fh>) {
> if (/^\/\/\s*$/) { ##"//" on a newline defines entry
> $self->process(\@xml) if scalar(@xml) > 1; ##must be at least 3 actually to be valid...
> undef @xml; ##reset for the new one...
> } else {
> push(@xml,$_);
> }
> }
> $self->process(\@xml) if scalar(@xml) > 1; ##must be at least 3 actually to be valid...
> $fh->close;
>
> # create, log, and return result string.
> $RV = join(' ',
> "processed $countObjs objects, inserted",
> $self->getSelfInv->getTotalInserts(),
> 'and updated',
> $self->getSelfInv->getTotalUpdates() || 0,
> );
> }
>
> # no file.
> else {
> $RV = join(' ',
> 'a valid --filename <filename> must be on the commandline',
> $self->getCla->{filename},
> $!);
> }
>
> $self->logAlert('RESULT', $RV);
> return $RV;
> }
>
> # ----------------------------------------------------------------------
> # do the real work.
> sub process {
> my $self = shift;
> my($xml) = @_;
>
> $self->getSelfInv->parseXML($xml);
> $self->countChangedObjs($self->getSelfInv);
>
> ##now submit the sucker...
> ##must first remove invocation parent before submitting immediate children
> $self->getSelfInv->manageTransaction(undef,'begin');
> foreach my $c ($self->getSelfInv->getAllChildren()) {
> $c->removeParent($self->getSelfInv);
> $c->submit(undef,1);
> $c->setParent($self->getSelfInv); ##add back so can see at the end...
> }
> $self->getSelfInv->manageTransaction(undef,'commit');
> if (!$self->getCla->{commit}) {
> $self->logAlert('ERROR', "XML that was not committed to the database\n\n");
> foreach my $c ($self->getSelfInv->getAllChildren()) {
> $self->logAlert('BAD-XML', $c->toXML());
> }
> }
> $self->getSelfInv->removeAllChildren();
> $self->getSelfInv->undefPointerCache();
> }
>
> sub countChangedObjs {
> my $self = shift;
> my($par) = @_;
>
> foreach my $c ($par->getAllChildren()) {
> $self->logAlert('DEBUG',
> "Checking to see if has changed attributes\n".$c->toXML()) if $self->getCla->{debug};
> $countObjs++;
> $countUpdates++;
> if (!$self->getCla->{refresh} && !$c->hasChangedAttributes()) {
> $self->logAlert('DEBUG','There are no changed attributes') if $self->getCla->{debug};
> $countUpdates--;
> }
> $self->countChangedObjs($c);
> }
> }
>
> 1;
>
|