From c222bcb215094cf7bc0d72024a8cc32450c04011 Mon Sep 17 00:00:00 2001 From: Ramkrishna Chakrabarty Date: Fri, 28 May 2010 16:06:57 -0400 Subject: [PATCH] lims: - ui enhancements to the remote file browser: file details available on demand & the browser saves state after each transfer - code cleanup --- lib/galaxy/web/controllers/requests_admin.py | 101 ++++++++----------- templates/admin/requests/get_data.mako | 45 +++++++-- templates/requests/sample_datasets.mako | 2 +- 3 files changed, 80 insertions(+), 68 deletions(-) diff --git a/lib/galaxy/web/controllers/requests_admin.py b/lib/galaxy/web/controllers/requests_admin.py index 2f702fd9c95..37d5962bb4a 100644 --- a/lib/galaxy/web/controllers/requests_admin.py +++ b/lib/galaxy/web/controllers/requests_admin.py @@ -204,19 +204,6 @@ class RequestTypeGrid( grids.Grid ): grids.GridAction( "Create new request type", dict( controller='requests_admin', action='create_request_type' ) ) ] - -class DataTransferThread(threading.Thread): - def __init__(self, **kwargs): - threading.Thread.__init__(self, name=kwargs['name']) - self.dataset_index = kwargs['dataset_index'] - self.cmd = kwargs['cmd'] - def run(self): - try: - retcode = subprocess.call(self.cmd) - except Exception, e: - error_msg = "Data transfer failed. " + str(e) + "
" - log.debug(error_msg) - # # ---- Request Controller ------------------------------------------------------ @@ -231,6 +218,29 @@ class RequestsAdmin( BaseController ): @web.require_admin def index( self, trans ): return trans.fill_template( "/admin/requests/index.mako" ) + + @web.json + def get_file_details( self, trans, id=None, file=None, folder_path=None ): + print >> sys.stderr, 'get_file_details', id, file + def print_ticks(d): + pass + # Avoid caching + trans.response.headers['Pragma'] = 'no-cache' + trans.response.headers['Expires'] = '0' + sample = trans.sa_session.query( self.app.model.Sample ).get( int(id) ) + datatx_info = sample.request.type.datatx_info + cmd = 'ssh %s@%s "ls -oghp %s"' % ( datatx_info['username'], + datatx_info['host'], + os.sep.join([folder_path, file])) + output = pexpect.run(cmd, events={'.ssword:*': datatx_info['password']+'\r\n', + pexpect.TIMEOUT:print_ticks}, + timeout=10) + #return output.split('\t')[0] + # Create new HTML for any that have changed + rval = {} + rval['name'] = unicode(output.replace('\n', '
')) + return rval + @web.json def sample_state_updates( self, trans, ids=None, states=None ): @@ -1486,10 +1496,10 @@ class RequestsAdmin( BaseController ): status='error', message="Set a data library and folder for %s to transfer dataset(s)." % sample.name, id=trans.security.encode_id(sample.request.id) ) ) - if sample.request.type.datatx_info.get('data_dir', ''): - folder_path = util.restore_text( sample.request.type.datatx_info.get('data_dir', '') ) - else: + if params.get( 'folder_path', '' ): folder_path = util.restore_text( params.get( 'folder_path', '' ) ) + else: + folder_path = util.restore_text( sample.request.type.datatx_info.get('data_dir', '') ) return trans.fill_template( '/admin/requests/get_data.mako', sample=sample, dataset_files=sample.dataset_files, message=message, status=status, files=[], @@ -1508,9 +1518,9 @@ class RequestsAdmin( BaseController ): message=message)) def print_ticks(d): pass - cmd = 'ssh %s@%s "ls -F %s"' % ( datatx_info['username'], - datatx_info['host'], - folder_path) + cmd = 'ssh %s@%s "ls -p %s"' % ( datatx_info['username'], + datatx_info['host'], + folder_path) output = pexpect.run(cmd, events={'.ssword:*': datatx_info['password']+'\r\n', pexpect.TIMEOUT:print_ticks}, timeout=10) @@ -1602,8 +1612,14 @@ class RequestsAdmin( BaseController ): filepath = os.path.join(folder_path, f) if f[-1] == os.sep: # the selected item is a folder so transfer all the - # folder contents - self.__get_files_in_dir(trans, sample, filepath) + # folder contents + # FIXME + #self.__get_files_in_dir(trans, sample, filepath) + return trans.response.send_redirect( web.url_for( controller='requests_admin', + action='get_data', + sample_id=sample.id, + folder_path=folder_path, + open_folder=True)) else: sample.dataset_files.append(dict(filepath=filepath, status=sample.transfer_status.NOT_STARTED, @@ -1613,9 +1629,10 @@ class RequestsAdmin( BaseController ): trans.sa_session.add( sample ) trans.sa_session.flush() return trans.response.send_redirect( web.url_for( controller='requests_admin', - action='show_datatx_page', - sample_id=trans.security.encode_id(sample.id), - folder_path=folder_path)) + action='get_data', + sample_id=sample.id, + folder_path=folder_path, + open_folder=True)) return trans.response.send_redirect( web.url_for( controller='requests_admin', action='show_datatx_page', @@ -1747,42 +1764,6 @@ class RequestsAdmin( BaseController ): action='show_datatx_page', sample_id=trans.security.encode_id(sample.id), folder_path=datatx_info['data_dir'])) - error_message = '' - transfer_script = "scripts/galaxy_messaging/server/data_transfer.py" - for index, dataset in enumerate(sample.dataset_files): - dfile = dataset[0] - status = dataset[1] - if status == sample.transfer_status.NOT_STARTED: - cmd = ( "python", - transfer_script, - datatx_info['host'], - datatx_info['username'], - datatx_info['password'], - dfile, - str(sample.id), - str(index), - trans.security.encode_id(sample.library.id), - trans.security.encode_id(sample.folder.id) ) -# # set the transfer status - sample.dataset_files[index][1] = sample.transfer_status.IN_PROGRESS - trans.sa_session.add( sample ) - trans.sa_session.flush() - dtt = DataTransferThread(name='thread_'+str(index), - dataset_index=index, - cmd=cmd) - dtt.start() - if error_message: - return trans.response.send_redirect( web.url_for( controller='requests_admin', - action='show_datatx_page', - sample_id=trans.security.encode_id(sample.id), - folder_path=os.path.dirname(dfile), - status='error', - message=error_message)) - return trans.response.send_redirect( web.url_for( controller='requests_admin', - action='show_datatx_page', - sample_id=trans.security.encode_id(sample.id), - folder_path=os.path.dirname(dfile))) - @web.expose @web.require_admin def dataset_details( self, trans, **kwd ): diff --git a/templates/admin/requests/get_data.mako b/templates/admin/requests/get_data.mako index 16fad3fecb1..fd09f0bcc41 100644 --- a/templates/admin/requests/get_data.mako +++ b/templates/admin/requests/get_data.mako @@ -15,7 +15,34 @@ $(document).ready(function(){ $(this).next(".msg_body").slideToggle(450); }); }); + + + + + + + +