#!/usr/bin/env python # # Restriction Analysis Libraries. # Copyright (C) 2004. Frederic Sohm. # # This code is part of the Biopython distribution and governed by its # license. Please see the LICENSE file that should have been included # as part of this package. # """Update the Rebase emboss files used by Restriction to build the Restriction_Dictionary.py module.""" import os import sys import sre import time import gzip from urllib import FancyURLopener from Bio.Restriction.RanaConfig import * class RebaseUpdate(FancyURLopener): def __init__(self, e_mail='', ftpproxy=''): """RebaseUpdate([e_mail[, ftpproxy]]) -> new RebaseUpdate instance. if e_mail and ftpproxy are not given RebaseUpdate uses the corresponding variable from RanaConfig. e_mail is the password for the anonymous ftp connection to Rebase. ftpproxy is the proxy to use if any.""" proxy = {'ftp' : ftpproxy or ftp_proxy} global Rebase_password Rebase_password = e_mail or Rebase_password if not Rebase_password: raise FtpPasswordError('Rebase') if not Rebase_name: raise FtpNameError('Rebase') FancyURLopener.__init__(self, proxy) def prompt_user_passwd(self, host, realm): return (Rebase_name, Rebase_password) def openRebase(self, name = ftp_Rebase): print '\n Please wait, trying to connect to Rebase\n' try: self.open(name) except: raise ConnectionError('Rebase') return def getfiles(self, *files): print '\n', for file in self.update(*files): print 'copying', file fn = os.path.basename(file) #filename = os.path.join(Rebase, fn) filename = os.path.join(os.getcwd(), fn) print 'to', filename self.retrieve(file, filename) self.close() return def localtime(self): t = time.gmtime() year = str(t.tm_year)[-1] month = str(t.tm_mon) if len(month) == 1 : month = '0'+month return year+month def update(self, *files): if not files: files = [ftp_emb_e, ftp_emb_s, ftp_emb_r] return [x.replace('###', self.localtime()) for x in files] def __del__(self): if hasattr(self, 'tmpcache') : self.close() # # self.tmpcache is created by URLopener.__init__ method. # return class FtpNameError(ValueError): def __init__(self, which_server): print " In order to connect to %s ftp server, you must provide a name.\ \n Please edit Bio.Restriction.RanaConfig\n" % which_server sys.exit() class FtpPasswordError(ValueError): def __init__(self, which_server): print "\n\ \n In order to connect to %s ftp server, you must provide a password.\ \n Use the --e-mail switch to enter your e-mail address.\ \n\n" % which_server sys.exit() class ConnectionError(IOError): def __init__(self, which_server): print '\ \n Unable to connect to the %s ftp server, make sure your computer\ \n is connected to the internet and that you have correctly configured\ \n the ftp proxy.\ \n Use the --proxy switch to enter the address of your proxy\ \n' % which_server sys.exit() __all__ = ['RebaseUpdate', 'FtpNameError', 'FtpPasswordError']