blastdbkit
index
/home/psgendb/BIRCHDEV/script/blastdbkit.py

optparse is deprecated in favor of argparse as of Python 2.7. However,
 since 2.7 is not always present on many systems, at this writing,
 it is safer to stick with optparse for now. It should be easy
 to change later, since the syntax is very similar between argparse and optparse.
 from optparse import OptionParser

 
Modules
       
datetime
doctest
ftplib
hashlib
os
re
stat
subprocess
sys
tarfile
time

 
Classes
       
BIRCHSettings
BLASTDBList
FileMetaData
Parameters

 
class BIRCHSettings
    Data and methods for the BIRCH Settings file.
 
  Methods defined here:
ReadBIRCHSettings(self, FN)
Read current values of BIRCHvariables from BIRCH.settings.
WriteBIRCHSettings(self, SFN)
Write current values of BIRCHvariables to BL.properties.<platform> file.
WriteBIRCHenvBourne(self, P)
Write bash code for setting BIRCHvariables to birch_settings_Bourne.source.
Used for Bourne type shells eg. bash, sh
WriteBIRCHenvCsh(self, P)
Write csh code for setting BIRCHvariables to birch_settings_csh.source.
Used for C type shells eg. csh, tcsh
__init__(self, P)
Initializes arguments:
      dict = {}

 
class BLASTDBList
    Data and methods for the BLAST databases.
 
  Methods defined here:
AddFiles(self, P, DBNAMES_INSTALLED, DBNAMES_ALL, LOGFILE)
Cycle through the names of databases in the order given in UpdateList.
CheckBLASTDB(self, BLASTDB, DBNAMES_ALL)
Get a list of databases found in the BLASTDB directory. 
There are potentially a lot of ways this might be done, 
and no obvious best choice. Here, we just look to make sure
that each database name is found, regardless of how many
files share that name eg. nt includes files with names like
nt.01.*
CheckFTPsite(self, FTPSITE, DBNAMES_ALL)
Get a list of database files found at the remote FTP site.
CreateBLMenu(self, P, DBNAMES, Directory, TNAME)
Create a BioLegato .blmenu file from a template file
CreateFastaNamefiles(self, BIRCHDIR, BLASTDB, DBNAMES_INSTALLED)
Create .nam files so that FASTA can find BLAST
databases.
FindNewFiles(self, DBLIST)
Return a list of database files .tar.gz files that are newer on the server than 
those in the local directory. In practice, this means that
if the local *.tar.gz.md5 file is older than the *.tar.gz.md5
file on the remote site, we download the newer *.tar.gz files from the
remote site.
ReadBLASTDBList(self, FN, DBNAMES_ALL)
Read list of BLAST databases, descriptions and install status (0,1).
Revise(self, P, DBNAMES_ALL)
Revise local database metadata, BioLegato menus and FASTA .nam files
UpdateFiles(self, P, DBNAMES_INSTALLED, DBNAMES_ALL, LOGFILE)
Cycle through the names of databases in the order given in UpdateList.
If the name is in the list to be updated, first delete the files for that
name to create some space. Next run blastdb_update.pl to download and install
the new files. When all files have been downloaded, send an email to the 
BIRCH administrator.
WriteBLASTDBList(self, DBNAMES_ALL)
Write list of BLAST databases, descriptions and install status (0,1).
WriteFTPReport(self, BLASTDB, FTPSITE, DBNAMES_ALL)
Write a spreadsheet-ready report with statistics on the remote NCBI databases.
The report is a tab-separated value file written to $BLASTDB/ftpstats.tsv.
WriteLocalReport(self, BLASTDB, DBNAMES_INSTALLED)
Write a spreadsheet-ready report with statistics on the local copy of the NCBI databases.
The report is a tab-separated value file written to $BLASTDB/localstats.tsv.
__init__(self, P, DBNAMES_ALL)
Initializes local BLASTDB list

 
class FileMetaData
    Holds metadata for a file.
 
  Methods defined here:
__init__(self)
Initializes arguments:
      Name = ""
      Size = 0
      MDate = datetime.time()
getFTPMetaData(self, line, UseMLSD)
Parse metadata for a file on a remote FTP site.
getLocalMetaData(self, FN)
Retrieve metadata for a local file.

 
class Parameters
    Wrapper class for command line parameters
 
  Methods defined here:
__init__(self)
Initializes arguments:
      SHOWALL = False
      CONFIGURE = False
      BIRCHDIR = ""
      BLASTDB = ""
      REPORTLOCAL = False
      REPORTFTP = False
      ADD = False
      DELETE = False
      UPDATE = False
      FTPSITE = ""
      DBLIST   = []
      SFN= ""
 
 
Then calls read_args() to fill in their values from command line
read_args(self)
Read command line arguments into a Parameter object

 
Functions
       
DeleteFilesByPrefix(dest, dbname, LOGFILE)
Delete all files from dest whose names begin with dbname
FTPDBList(FTPSITE)
Get a list of BLAST databases found at the remote FTP site.
FTPDirList(FTPSITE)
Get a list of files found at the remote FTP site.
GetBIRCHProperties(BIRCHDIR, PropName)
Retrieve a value from BIRCH.properties. eg. To retrieve the value
of BirchProps.adminEmail:
 
GetBIRCHProperties(BIRCHDIR,"adminEmail")
InstallFile(tgzfile, FTPSITE, FTPDIR, LOGFILE)
Download a BLAST .tar.gz and its corresponding .md5 file from the FTP site,
and untar the file in in the current directory. Delete the .tar.gz
file when done, but keep the .md5 file.
LocalHostname()
Return the name of the local machine. Tries a number of methods
to get a name other than 'localhost' or a null result.
SendEmail(From, To, Subject, Text)
Very simple email method adapted from:
http://stackoverflow.com/questions/882712/sending-html-email-using-python
There are more elaborate examples on this site for sending
HTML messages and attachments.
chmod_ar(filename)
Make a file world-readable.
chmod_arx(filename)
Make a file or directory world-readable and world-executable/searchable.
download_file(FTPSITE, FTPDIR, FN)
Download a file from an FTP site.
extracttgz(fname)
Extract all files from a .tar.gz file
 
Adapted from:
http://sukhbinder.wordpress.com/2014/03/06/untar-a-tar-file-with-python/
getValue(tokens, kw)
Return a value for a key/value pair, where
= is the separator.
main()
Called when not in documentation mode.
md5Checksum(filePath)
Calculate an md5 checksum for a file.
 
Writen by Joel Verhagen
http://joelverhagen.com/blog/2011/02/md5-hash-of-file-in-python/

 
Data
        BIRCHvariables = ['BIRCH_PROMPT', 'BLASTDB']
BM = <birchlib.Birchmod instance>
DBNAMES_ALL = []
DBNAMES_INSTALLED = []
DEBUG = True
FTPINFO = {'ftp.ebi.ac.uk': {'UseMLSD': False, 'dbdir': 'pub/blast/db'}, 'ftp.hgc.jp': {'UseMLSD': False, 'dbdir': 'pub/mirror/ncbi/blast/db'}, 'ftp.ncbi.nih.gov': {'UseMLSD': True, 'dbdir': '/blast/db'}}
HumanSet = ['alt_CRA_TCAGchr7v2_contig', 'alt_HuRef_contig', 'ref_contig', 'rna']
MouseSet = ['allcontig_and_rna']
PROGRAM = 'blastdbkit.py : '
USAGE = '\n\tUSAGE: blastdbkit.py --showall [--ftpsite url...bkit.py --update [--ftpsite url] --dblist db[,db]'
blib = '/home/psgendb/BIRCHDEV/script/birchpylib'