details:
http://www.bx.psu.edu/hg/galaxy/rev/3c124a19ae94
changeset: 3531:3c124a19ae94
user: rc
date: Mon Mar 15 12:40:30 2010 -0400
description:
lims: automatic update of sample state when the state is changed in th db (using scanner
etc)
diffstat:
lib/galaxy/web/controllers/requests_admin.py | 21 ++++++
templates/admin/requests/show_request.mako | 87 ++++++++++++++++++++++++---
templates/requests/sample_datasets.mako | 7 ++
templates/requests/sample_state.mako | 5 +
4 files changed, 109 insertions(+), 11 deletions(-)
diffs (175 lines):
diff -r 6d079d53f9db -r 3c124a19ae94 lib/galaxy/web/controllers/requests_admin.py
--- a/lib/galaxy/web/controllers/requests_admin.py Mon Mar 15 11:31:14 2010 -0400
+++ b/lib/galaxy/web/controllers/requests_admin.py Mon Mar 15 12:40:30 2010 -0400
@@ -231,6 +231,27 @@
def index( self, trans ):
return trans.fill_template( "/admin/requests/index.mako" )
+ @web.json
+ def sample_state_updates( self, trans, ids=None, states=None ):
+ # Avoid caching
+ trans.response.headers['Pragma'] = 'no-cache'
+ trans.response.headers['Expires'] = '0'
+ # Create new HTML for any that have changed
+ rval = {}
+ if ids is not None and states is not None:
+ ids = map( int, ids.split( "," ) )
+ states = states.split( "," )
+ for id, state in zip( ids, states ):
+ sample = trans.sa_session.query( self.app.model.Sample ).get( id )
+ if sample.current_state().name != state:
+ rval[id] = {
+ "state": sample.current_state().name,
+ "datasets": len(sample.dataset_files),
+ "html_state": unicode( trans.fill_template(
"requests/sample_state.mako", sample=sample ), 'utf-8' ),
+ "html_datasets": unicode( trans.fill_template(
"requests/sample_datasets.mako", trans=trans, sample=sample ), 'utf-8'
)
+ }
+ return rval
+
@web.expose
@web.require_admin
def list( self, trans, **kwd ):
diff -r 6d079d53f9db -r 3c124a19ae94 templates/admin/requests/show_request.mako
--- a/templates/admin/requests/show_request.mako Mon Mar 15 11:31:14 2010 -0400
+++ b/templates/admin/requests/show_request.mako Mon Mar 15 12:40:30 2010 -0400
@@ -1,5 +1,7 @@
<%inherit file="/base.mako"/>
<%namespace file="/message.mako" import="render_msg" />
+<%namespace file="/requests/sample_state.mako"
import="render_sample_state" />
+<%namespace file="/requests/sample_datasets.mako"
import="render_sample_datasets" />
%if msg:
${render_msg( msg, messagetype )}
@@ -42,6 +44,54 @@
});
</script>
+<script type="text/javascript">
+ // Looks for changes in sample states using an async request. Keeps
+ // calling itself (via setTimeout) until all samples are in a terminal
+ // state.
+ var updater = function ( sample_states ) {
+ // Check if there are any items left to track
+ var empty = true;
+ for ( i in sample_states ) {
+ empty = false;
+ break;
+ }
+ if ( ! empty ) {
+ setTimeout( function() { updater_callback( sample_states ) }, 1000 );
+ }
+ };
+ var updater_callback = function ( sample_states ) {
+ // Build request data
+ var ids = []
+ var states = []
+ $.each( sample_states, function ( id, state ) {
+ ids.push( id );
+ states.push( state );
+ });
+ // Make ajax call
+ $.ajax( {
+ type: "POST",
+ url: "${h.url_for( controller='requests_admin',
action='sample_state_updates' )}",
+ dataType: "json",
+ data: { ids: ids.join( "," ), states: states.join( "," )
},
+ success : function ( data ) {
+ $.each( data, function( id, val ) {
+ // Replace HTML
+ var cell1 = $("#sampleState-" + id);
+ cell1.html( val.html_state );
+ var cell2 = $("#sampleDatasets-" + id);
+ cell2.html( val.html_datasets );
+ sample_states[ parseInt(id) ] = val.state;
+ });
+ updater( sample_states );
+ },
+ error: function() {
+ // Just retry, like the old method, should try to be smarter
+ updater( sample_states );
+ }
+ });
+ };
+</script>
+
<style type="text/css">
.msg_head {
padding: 0px 0px;
@@ -162,15 +212,21 @@
%if sample_index in range(len(request.samples)):
<td>${info['name']}</td>
<td>${info['barcode']}</td>
- <td>
- %if sample:
- %if sample.request.unsubmitted():
- Unsubmitted
- %else:
- <a href="${h.url_for(
controller='requests_admin', action='show_events',
sample_id=sample.id)}">${sample.current_state().name}</a>
- %endif
- %endif
- </td>
+ %if sample.request.unsubmitted():
+ <td>Unsubmitted</td>
+ %else:
+ <td
id="sampleState-${sample.id}">${render_sample_state( sample )}</td>
+ %endif
+
+## <td>
+## %if sample:
+## %if sample.request.unsubmitted():
+## Unsubmitted
+## %else:
+## <a href="${h.url_for(
controller='requests_admin', action='show_events',
sample_id=sample.id)}">${sample.current_state().name}</a>
+## %endif
+## %endif
+## </td>
%if info['library']:
<td><a href="${h.url_for(
controller='library_common', action='browse_library',
cntrller='library', id=trans.security.encode_id( info['library'].id )
)}">${info['library'].name}</a></td>
%else:
@@ -182,8 +238,9 @@
<td></td>
%endif
%if request.submitted() or request.complete():
- <td>
- <a href="${h.url_for(
controller='requests_admin', action='show_datatx_page',
sample_id=trans.security.encode_id(sample.id)
)}">${len(sample.dataset_files)}</a>
+ <td id="sampleDatasets-${sample.id}">
+ ${render_sample_datasets( sample )}
+## <a href="${h.url_for(
controller='requests_admin', action='show_datatx_page',
sample_id=trans.security.encode_id(sample.id)
)}">${len(sample.dataset_files)}</a>
</td>
%endif
@@ -358,6 +415,14 @@
<label>There are no samples.</label>
%endif
</div>
+
+ %if request.samples and request.submitted():
+ <script type="text/javascript">
+ // Updater
+ updater({${ ",".join( [ '"%s" :
"%s"' % ( s.id, s.current_state().name ) for s in request.samples ] ) }});
+ </script>
+ %endif
+
%if edit_mode == 'False':
<table class="grid">
<tbody>
diff -r 6d079d53f9db -r 3c124a19ae94 templates/requests/sample_datasets.mako
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/requests/sample_datasets.mako Mon Mar 15 12:40:30 2010 -0400
@@ -0,0 +1,7 @@
+<%def name="render_sample_datasets( sample )">
+ <a href="${h.url_for(controller='requests_admin',
action='show_datatx_page',
sample_id=trans.security.encode_id(sample.id))}">${sample.transferred_dataset_files()}</a>
+</%def>
+
+
+
+${render_sample_datasets( sample )}
diff -r 6d079d53f9db -r 3c124a19ae94 templates/requests/sample_state.mako
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/requests/sample_state.mako Mon Mar 15 12:40:30 2010 -0400
@@ -0,0 +1,5 @@
+<%def name="render_sample_state( sample )">
+ <a href="${h.url_for( controller='requests_admin',
action='show_events',
sample_id=sample.id)}">${sample.current_state().name}</a>
+</%def>
+
+${render_sample_state( sample )}