[pygr-notify] [pygr commit] r127 - code-reviews/seqdb-review
codesite-noreply at google.com
codesite-noreply at google.com
Wed Jan 21 06:04:20 PST 2009
Author: istvan.albert
Date: Wed Jan 21 05:58:20 2009
New Revision: 127
Modified:
code-reviews/seqdb-review/seqdb.py
Log:
code review candidate test
Modified: code-reviews/seqdb-review/seqdb.py
==============================================================================
--- code-reviews/seqdb-review/seqdb.py (original)
+++ code-reviews/seqdb-review/seqdb.py Wed Jan 21 05:58:20 2009
@@ -1,8 +1,8 @@
from __future__ import generators
-import os
+import os, sys
from sequence import *
from sqlgraph import *
-import classutil
+import classutil, logger
import UserDict
import weakref
from annotation import AnnotationDB, AnnotationSeq, AnnotationSlice, \
@@ -24,7 +24,7 @@
def strslice(self,start,end):
"Efficient access to slice of a sequence, useful for huge contigs"
return self._select('substring(%s FROM %d FOR %d)'
- %(self.db._attrSQL('seq'),start+1,end-start))
+ %(self.db._attrSQL('sequence'),start+1,end-start))
class DNASQLSequence(SQLSequence):
_seqtype=DNA_SEQTYPE
@@ -76,41 +76,39 @@
finally:
ifile2.close()
-def store_seqlen_dict(d, filename, ifile=None, idFilter=None, reader=None):
+def store_seqlen_dict(d, filename=None, stream=None, idFilter=None,
reader=None):
"store sequence lengths in a dictionary"
- if reader is not None: # run the user's custom reader() function.
- builder = SeqLenDictSaver(reader)
- else:
- try: # TRY TO USE OUR FAST COMPILED PARSER
- import seqfmt
- builder = seqfmt.read_fasta_lengths
- except ImportError:
- import sys
- raise ImportError('''
-Unable to import extension module pygr.seqfmt that should be part of this
package.
-Either you are working with an incomplete install, or an installation of
pygr
-compiled with an incompatible Python version. Please check your PYTHONPATH
-setting and make sure it is compatible with this Python version (%d.%d).
-When in doubt, rebuild your pygr installation using the
-python setup.py build --force
-option to force a clean install''' % sys.version_info[:2])
- if idFilter is not None: # need to wrap seqlendict to apply filter...
- class dictwrapper(object):
+
+ # sanity check
+ assert bool(stream) ^ bool(filename), "Only one
of 'filename', 'stream' \
+ parameters may be present"
+
+ # apply custom reader() function
+ if reader:
+ builder = SeqLenDictSaver(reader)
+ else:
+ import seqfmt
+ builder = seqfmt.read_fasta_lengths
+
+ # need to wrap seqlendict to apply filter...
+ if idFilter:
+ class DictWrapper(object):
def __init__(self, idFilter, d):
self.d = d
self.idFilter = idFilter
def __setitem__(self, k, v):
id = self.idFilter(k)
self.d[id] = v
- d = dictwrapper(idFilter, d) # force builder to write to wrapper...
- if ifile is not None:
- builder(d, ifile, filename) # run the builder on our sequence set
- else:
- ifile = file(filename)
- try:
- builder(d, ifile, filename) # run the builder on our sequence
set
- finally:
- ifile.close()
+ # wrap the dictionary
+ d = DictWrapper(idFilter=idFilter, d=d)
+
+ currstream = stream or file( filename )
+ try:
+ builder(d, currstream, filename) # run the builder on our sequence
+ finally:
+ # close the stream if it was opened here
+ if not stream:
+ currstream.close()
class FileDBSeqDescriptor(object):
"Get sequence from a concatenated pureseq database for obj.id"
@@ -134,8 +132,7 @@
db.seqLenDict = classutil.open_shelve(filepath+'.seqlen','r')
# READ-ONLY
except NoSuchFileError: # BUILD: READ ALL SEQ LENGTHS, STORE IN
PERSIST DICT
db.seqLenDict = classutil.open_shelve(filepath+'.seqlen','n')
# NEW EMPTY FILE
- import sys
- print >>sys.stderr,'Building sequence length index...'
+ logger.debug( 'building sequence indices' )
store_seqlen_dict(db.seqLenDict, filepath, **kwargs)
db.seqLenDict.close() # FORCE IT TO WRITE DATA TO DISK
db.seqLenDict = classutil.open_shelve(filepath+'.seqlen','r')
# READ-ONLY
More information about the pygr-notify
mailing list