Move the sequencer interface ( RequestType ) components from the requests_admin controller to a new sequencer controller.

This commit is contained in:
Greg Von Kuster
2010-11-19 10:14:08 -05:00
parent 5091c3737c
commit efed83a828
11 changed files with 368 additions and 354 deletions
+4 -323
View File
@@ -29,64 +29,6 @@ class AdminRequestsGrid( RequestsGrid ):
cntrller='requests_admin' ) )
]
class RequestTypeGrid( grids.Grid ):
# Custom column types
class NameColumn( grids.TextColumn ):
def get_value(self, trans, grid, request_type):
return request_type.name
class DescriptionColumn( grids.TextColumn ):
def get_value(self, trans, grid, request_type):
return request_type.desc
class RequestFormColumn( grids.TextColumn ):
def get_value(self, trans, grid, request_type):
return request_type.request_form.name
class SampleFormColumn( grids.TextColumn ):
def get_value(self, trans, grid, request_type):
return request_type.sample_form.name
# Grid definition
webapp = "galaxy"
title = "Sequencer Configurations"
template = "admin/requests/grid.mako"
model_class = model.RequestType
default_sort_key = "-create_time"
num_rows_per_page = 50
preserve_state = True
use_paging = True
default_filter = dict( deleted="False" )
columns = [
NameColumn( "Name",
key="name",
link=( lambda item: iff( item.deleted, None, dict( operation="view_request_type", id=item.id ) ) ),
attach_popup=True,
filterable="advanced" ),
DescriptionColumn( "Description",
key='desc',
filterable="advanced" ),
RequestFormColumn( "Request Form",
link=( lambda item: iff( item.deleted, None, dict( operation="view_form_definition", id=item.request_form.id ) ) ) ),
SampleFormColumn( "Sample Form",
link=( lambda item: iff( item.deleted, None, dict( operation="view_form_definition", id=item.sample_form.id ) ) ) ),
grids.DeletedColumn( "Deleted",
key="deleted",
visible=False,
filterable="advanced" )
]
columns.append( grids.MulticolFilterColumn( "Search",
cols_to_filter=[ columns[0], columns[1] ],
key="free-text-search",
visible=False,
filterable="standard" ) )
operations = [
grids.GridOperation( "Edit configuration", allow_multiple=False, condition=( lambda item: not item.deleted ) ),
grids.GridOperation( "Edit permissions", allow_multiple=False, condition=( lambda item: not item.deleted ) ),
grids.GridOperation( "Delete configuration", allow_multiple=True, condition=( lambda item: not item.deleted ) ),
grids.GridOperation( "Undelete configuration", condition=( lambda item: item.deleted ) ),
]
global_actions = [
grids.GridAction( "Create new configuration", dict( controller='requests_admin', action='create_request_type' ) )
]
class DataTransferGrid( grids.Grid ):
# Custom column types
class NameColumn( grids.TextColumn ):
@@ -145,7 +87,6 @@ class DataTransferGrid( grids.Grid ):
class RequestsAdmin( BaseController, UsesFormDefinitionWidgets ):
request_grid = AdminRequestsGrid()
requesttype_grid = RequestTypeGrid()
datatx_grid = DataTransferGrid()
@web.expose
@@ -181,7 +122,9 @@ class RequestsAdmin( BaseController, UsesFormDefinitionWidgets ):
if operation == "reject":
return self.reject_request( trans, **kwd )
if operation == "view_type":
return self.view_request_type( trans, **kwd )
return trans.response.send_redirect( web.url_for( controller='sequencer',
action='view_request_type',
**kwd ) )
if operation == "delete":
return trans.response.send_redirect( web.url_for( controller='requests_common',
action='delete_request',
@@ -521,11 +464,6 @@ class RequestsAdmin( BaseController, UsesFormDefinitionWidgets ):
request_id=trans.security.encode_id( request.id ),
status=status,
message=message ) )
def __check_path( self, a_path ):
# Return a valid folder_path
if a_path and not a_path.endswith( os.sep ):
a_path += os.sep
return a_path
def __save_sample_datasets( self, trans, sample, selected_datasets_to_transfer ):
sample_dataset_file_names = []
if selected_datasets_to_transfer:
@@ -734,253 +672,6 @@ class RequestsAdmin( BaseController, UsesFormDefinitionWidgets ):
trans.sa_session.add( sample_dataset )
trans.sa_session.flush()
return 200, 'Done'
# Request Type Stuff
@web.expose
@web.require_admin
def browse_request_types( self, trans, **kwd ):
if 'operation' in kwd:
operation = kwd['operation'].lower()
obj_id = kwd.get( 'id', None )
if operation == "view_form_definition":
return self.view_form_definition( trans, **kwd )
elif operation == "view_request_type":
return self.view_request_type( trans, **kwd )
elif operation == "edit configuration":
return self.edit_request_type( trans, **kwd )
elif operation == "delete configuration":
return self.delete_request_type( trans, **kwd )
elif operation == "undelete configuration":
return self.undelete_request_type( trans, **kwd )
elif operation == "edit permissions":
return self.request_type_permissions( trans, **kwd )
# Render the grid view
return self.requesttype_grid( trans, **kwd )
@web.expose
@web.require_admin
def create_request_type( self, trans, **kwd ):
params = util.Params( kwd )
message = util.restore_text( params.get( 'message', '' ) )
status = params.get( 'status', 'done' )
rt_info_widgets, rt_states_widgets = self.__get_populated_request_type_widgets( trans, **kwd )
rename_dataset_select_field = self.__build_rename_dataset_select_field( trans )
if params.get( 'add_state_button', False ):
# Append a new tuple to the set of states which will result in
# empty state name and description TextFields being displayed on
# the form.
rt_states_widgets.append( ( "", "" ) )
elif params.get( 'remove_state_button', False ):
index = int( params.get( 'remove_state_button', '' ).split(" ")[2] )
del rt_states_widgets[ index-1 ]
elif params.get( 'create_request_type_button', False ):
self.__save_request_type( trans, **kwd )
message = 'The sequencer configuration has been created.'
return trans.response.send_redirect( web.url_for( controller='requests_admin',
action='browse_request_types',
message=message,
status=status ) )
return trans.fill_template( '/admin/request_type/create_request_type.mako',
rt_info_widgets=rt_info_widgets,
rt_states_widgets=rt_states_widgets,
rename_dataset_select_field=rename_dataset_select_field,
message=message,
status=status )
@web.expose
@web.require_admin
def view_request_type( self, trans, **kwd ):
request_type_id = kwd.get( 'id', None )
try:
request_type = trans.sa_session.query( trans.model.RequestType ).get( trans.security.decode_id( request_type_id ) )
except:
return invalid_id_redirect( trans, 'requests_admin', request_type_id, action='browse_request_types' )
rename_dataset_select_field = self.__build_rename_dataset_select_field( trans, request_type )
return trans.fill_template( '/admin/request_type/view_request_type.mako',
request_type=request_type,
rename_dataset_select_field=rename_dataset_select_field )
@web.expose
@web.require_admin
def edit_request_type( self, trans, **kwd ):
## TODO: RC: add the ability to edit the name and description of exisitng states
params = util.Params( kwd )
message = util.restore_text( params.get( 'message', '' ) )
status = params.get( 'status', 'done' )
request_type_id = params.get( 'id', None )
try:
request_type = trans.sa_session.query( trans.model.RequestType ).get( trans.security.decode_id( request_type_id ) )
except:
return invalid_id_redirect( trans, 'requests_admin', request_type_id, action='browse_request_types' )
rename_dataset_select_field = self.__build_rename_dataset_select_field( trans )
if params.get( 'add_state_button', False ):
# Append a new tuple to the set of states which will result in
# empty state name and description TextFields being displayed on
# the form.
rt_states_widgets.append( ( "", "" ) )
elif params.get( 'remove_state_button', False ):
index = int( params.get( 'remove_state_button', '' ).split(" ")[2] )
del rt_states_widgets[ index-1 ]
if params.get( 'edit_request_type_button', False ):
self.__save_request_type( trans, **kwd )
message = 'Changes made to sequencer configuration (%s) have been saved' % request_type.name
return trans.fill_template( '/admin/request_type/edit_request_type.mako',
request_type=request_type,
rename_dataset_select_field=rename_dataset_select_field,
message=message,
status=status )
def __save_request_type( self, trans, **kwd ):
# Here we save a newly created request_type or save changed
# attributes of an existing request_type.
params = util.Params( kwd )
request_type_id = params.get( 'id', None )
name = util.restore_text( params.get( 'name', '' ) )
desc = util.restore_text( params.get( 'desc', '' ) )
request_form_id = params.get( 'request_form_id', None )
request_form = trans.sa_session.query( trans.model.FormDefinition ).get( trans.security.decode_id( request_form_id ) )
sample_form_id = params.get( 'sample_form_id', None )
sample_form = trans.sa_session.query( trans.model.FormDefinition ).get( trans.security.decode_id( sample_form_id ) )
data_dir = util.restore_text( params.get( 'data_dir', '' ) )
data_dir = self.__check_path( data_dir )
# Data transfer info - Make sure password is retrieved from kwd rather than Params
# since Params may have munged the characters.
datatx_info = dict( host=util.restore_text( params.get( 'host', '' ) ),
username=util.restore_text( params.get( 'username', '' ) ),
password=kwd.get( 'password', '' ),
data_dir=data_dir,
rename_dataset=util.restore_text( params.get( 'rename_dataset', '' ) ) )
if request_type_id:
# We're saving changed attributes of an existing request_type.
request_type = trans.sa_session.query( trans.model.RequestType ).get( trans.security.decode_id( request_type_id ) )
request_type.name = name
request_type.desc = desc
request_type.request_form = request_form
request_type.sample_form = sample_form
request_type.datatx_info = datatx_info
else:
# We're saving a newly created request_type
request_type = trans.model.RequestType( name=name,
desc=desc,
request_form=request_form,
sample_form=sample_form,
datatx_info=datatx_info )
trans.sa_session.add( request_type )
trans.sa_session.flush()
i = 0
while True:
if kwd.has_key( 'state_name_%i' % i ):
name = util.restore_text( params.get( 'state_name_%i' % i, None ) )
desc = util.restore_text( params.get( 'state_desc_%i' % i, None ) )
ss = trans.model.SampleState( name, desc, request_type )
trans.sa_session.add( ss )
trans.sa_session.flush()
i += 1
else:
break
def __get_populated_request_type_widgets( self, trans, **kwd ):
request_form_definitions = self.get_all_forms( trans,
filter=dict( deleted=False ),
form_type=trans.model.FormDefinition.types.REQUEST )
sample_form_definitions = self.get_all_forms( trans,
filter=dict( deleted=False ),
form_type=trans.model.FormDefinition.types.SAMPLE )
if not request_form_definitions or not sample_form_definitions:
return [],[]
params = util.Params( kwd )
request_form_id = params.get( 'request_form_id', 'none' )
sample_form_id = params.get( 'sample_form_id', 'none' )
request_form_id_select_field = build_select_field( trans,
objs=request_form_definitions,
label_attr='name',
select_field_name='request_form_id',
selected_value=request_form_id,
refresh_on_change=False )
sample_form_id_select_field = build_select_field( trans,
objs=sample_form_definitions,
label_attr='name',
select_field_name='sample_form_id',
selected_value=sample_form_id,
refresh_on_change=False )
rt_info_widgets = [ dict( label='Name',
widget=TextField( 'name', 40, util.restore_text( params.get( 'name', '' ) ) ) ),
dict( label='Description',
widget=TextField( 'desc', 40, util.restore_text( params.get( 'desc', '' ) ) ) ),
dict( label='Request form',
widget=request_form_id_select_field ),
dict( label='Sample form',
widget=sample_form_id_select_field ) ]
# Sample states defined for this sequencer configuration
rt_states = []
i=0
while True:
if kwd.has_key( 'state_name_%i' % i ):
rt_states.append( ( params.get( 'state_name_%i' % i, '' ),
params.get( 'state_desc_%i' % i, '' ) ) )
i += 1
else:
break
return rt_info_widgets, rt_states
@web.expose
@web.require_admin
def delete_request_type( self, trans, **kwd ):
rt_id = kwd.get( 'id', '' )
rt_id_list = util.listify( rt_id )
for rt_id in rt_id_list:
try:
request_type = trans.sa_session.query( trans.model.RequestType ).get( trans.security.decode_id( rt_id ) )
except:
return invalid_id_redirect( trans, 'requests_admin', rt_id, action='browse_request_types' )
request_type.deleted = True
trans.sa_session.add( request_type )
trans.sa_session.flush()
status = 'done'
message = '%i sequencer configurations has been deleted' % len( rt_id_list )
return trans.response.send_redirect( web.url_for( controller='requests_admin',
action='browse_request_types',
message=message,
status='done' ) )
@web.expose
@web.require_admin
def undelete_request_type( self, trans, **kwd ):
rt_id = kwd.get( 'id', '' )
rt_id_list = util.listify( rt_id )
for rt_id in rt_id_list:
try:
request_type = trans.sa_session.query( trans.model.RequestType ).get( trans.security.decode_id( rt_id ) )
except:
return invalid_id_redirect( trans, 'requests_admin', rt_id, action='browse_request_types' )
request_type.deleted = False
trans.sa_session.add( request_type )
trans.sa_session.flush()
status = 'done'
message = '%i sequencer configurations have been undeleted' % len( rt_id_list )
return trans.response.send_redirect( web.url_for( controller='requests_admin',
action='browse_request_types',
message=message,
status=status ) )
@web.expose
@web.require_admin
def request_type_permissions( self, trans, **kwd ):
params = util.Params( kwd )
message = util.restore_text( params.get( 'message', '' ) )
status = params.get( 'status', 'done' )
request_type_id = kwd.get( 'id', '' )
try:
request_type = trans.sa_session.query( trans.model.RequestType ).get( trans.security.decode_id( request_type_id ) )
except:
return invalid_id_redirect( trans, 'requests_admin', request_type_id, action='browse_request_types' )
roles = trans.sa_session.query( trans.model.Role ) \
.filter( trans.model.Role.table.c.deleted==False ) \
.order_by( trans.model.Role.table.c.name )
if params.get( 'update_roles_button', False ):
permissions = {}
for k, v in trans.model.RequestType.permitted_actions.items():
in_roles = [ trans.sa_session.query( trans.model.Role ).get( x ) for x in util.listify( params.get( k + '_in', [] ) ) ]
permissions[ trans.app.security_agent.get_action( v.action ) ] = in_roles
trans.app.security_agent.set_request_type_permissions( request_type, permissions )
trans.sa_session.refresh( request_type )
message = "Permissions updated for sequencer configuration '%s'" % request_type.name
return trans.fill_template( '/admin/request_type/request_type_permissions.mako',
request_type=request_type,
roles=roles,
status=status,
message=message )
@web.expose
@web.require_admin
def view_form_definition( self, trans, **kwd ):
@@ -994,17 +685,7 @@ class RequestsAdmin( BaseController, UsesFormDefinitionWidgets ):
# ===== Methods for building SelectFields used on various admin_requests forms
def __build_sample_id_select_field( self, trans, request, selected_value ):
return build_select_field( trans, request.samples, 'name', 'sample_id', selected_value=selected_value, refresh_on_change=False )
def __build_rename_dataset_select_field( self, trans, request_type=None ):
if request_type:
selected_value = request_type.datatx_info.get( 'rename_dataset', trans.model.RequestType.rename_dataset_options.NO )
else:
selected_value = trans.model.RequestType.rename_dataset_options.NO
return build_select_field( trans,
objs=[ v for k, v in trans.model.RequestType.rename_dataset_options.items() ],
label_attr='self',
select_field_name='rename_dataset',
selected_value=selected_value,
refresh_on_change=False )
# ===== Methods for building SelectFields used on various admin_requests forms - used outside this controller =====
def build_rename_datasets_for_sample_select_field( trans, sample_dataset, selected_value='none' ):
options = []
+327
View File
@@ -0,0 +1,327 @@
from galaxy.web.base.controller import *
from galaxy.web.framework.helpers import time_ago, iff, grids
from galaxy.model.orm import *
from galaxy import model, util
from galaxy.web.form_builder import *
from galaxy.web.controllers.requests_common import invalid_id_redirect
import logging, os
log = logging.getLogger( __name__ )
class SequencerGrid( grids.Grid ):
# Custom column types
class NameColumn( grids.TextColumn ):
def get_value(self, trans, grid, request_type):
return request_type.name
class DescriptionColumn( grids.TextColumn ):
def get_value(self, trans, grid, request_type):
return request_type.desc
class RequestFormColumn( grids.TextColumn ):
def get_value(self, trans, grid, request_type):
return request_type.request_form.name
class SampleFormColumn( grids.TextColumn ):
def get_value(self, trans, grid, request_type):
return request_type.sample_form.name
# Grid definition
webapp = "galaxy"
title = "Sequencer Configurations"
template = "admin/request_type/grid.mako"
model_class = model.RequestType
default_sort_key = "-create_time"
num_rows_per_page = 50
preserve_state = True
use_paging = True
default_filter = dict( deleted="False" )
columns = [
NameColumn( "Name",
key="name",
link=( lambda item: iff( item.deleted, None, dict( operation="view_request_type", id=item.id ) ) ),
attach_popup=True,
filterable="advanced" ),
DescriptionColumn( "Description",
key='desc',
filterable="advanced" ),
RequestFormColumn( "Request Form",
link=( lambda item: iff( item.deleted, None, dict( operation="view_form_definition", id=item.request_form.id ) ) ) ),
SampleFormColumn( "Sample Form",
link=( lambda item: iff( item.deleted, None, dict( operation="view_form_definition", id=item.sample_form.id ) ) ) ),
grids.DeletedColumn( "Deleted",
key="deleted",
visible=False,
filterable="advanced" )
]
columns.append( grids.MulticolFilterColumn( "Search",
cols_to_filter=[ columns[0], columns[1] ],
key="free-text-search",
visible=False,
filterable="standard" ) )
operations = [
grids.GridOperation( "Edit configuration", allow_multiple=False, condition=( lambda item: not item.deleted ) ),
grids.GridOperation( "Edit permissions", allow_multiple=False, condition=( lambda item: not item.deleted ) ),
grids.GridOperation( "Delete configuration", allow_multiple=True, condition=( lambda item: not item.deleted ) ),
grids.GridOperation( "Undelete configuration", condition=( lambda item: item.deleted ) ),
]
global_actions = [
grids.GridAction( "Create new configuration", dict( controller='sequencer', action='create_request_type' ) )
]
class Sequencer( BaseController, UsesFormDefinitionWidgets ):
sequencer_grid = SequencerGrid()
@web.expose
@web.require_admin
def browse_request_types( self, trans, **kwd ):
if 'operation' in kwd:
operation = kwd['operation'].lower()
obj_id = kwd.get( 'id', None )
if operation == "view_form_definition":
return self.view_form_definition( trans, **kwd )
elif operation == "view_request_type":
return self.view_request_type( trans, **kwd )
elif operation == "edit configuration":
return self.edit_request_type( trans, **kwd )
elif operation == "delete configuration":
return self.delete_request_type( trans, **kwd )
elif operation == "undelete configuration":
return self.undelete_request_type( trans, **kwd )
elif operation == "edit permissions":
return self.request_type_permissions( trans, **kwd )
# Render the grid view
return self.sequencer_grid( trans, **kwd )
@web.expose
@web.require_admin
def create_request_type( self, trans, **kwd ):
params = util.Params( kwd )
message = util.restore_text( params.get( 'message', '' ) )
status = params.get( 'status', 'done' )
rt_info_widgets, rt_states_widgets = self.__get_populated_request_type_widgets( trans, **kwd )
rename_dataset_select_field = self.__build_rename_dataset_select_field( trans )
if params.get( 'add_state_button', False ):
# Append a new tuple to the set of states which will result in
# empty state name and description TextFields being displayed on
# the form.
rt_states_widgets.append( ( "", "" ) )
elif params.get( 'remove_state_button', False ):
index = int( params.get( 'remove_state_button', '' ).split( " " )[2] )
del rt_states_widgets[ index-1 ]
elif params.get( 'create_request_type_button', False ):
self.__save_request_type( trans, **kwd )
message = 'The sequencer configuration has been created.'
return trans.response.send_redirect( web.url_for( controller='sequencer',
action='browse_request_types',
message=message,
status=status ) )
return trans.fill_template( '/admin/request_type/create_request_type.mako',
rt_info_widgets=rt_info_widgets,
rt_states_widgets=rt_states_widgets,
rename_dataset_select_field=rename_dataset_select_field,
message=message,
status=status )
@web.expose
@web.require_admin
def view_request_type( self, trans, **kwd ):
request_type_id = kwd.get( 'id', None )
try:
request_type = trans.sa_session.query( trans.model.RequestType ).get( trans.security.decode_id( request_type_id ) )
except:
return invalid_id_redirect( trans, 'sequencer', request_type_id, action='browse_request_types' )
rename_dataset_select_field = self.__build_rename_dataset_select_field( trans, request_type )
return trans.fill_template( '/admin/request_type/view_request_type.mako',
request_type=request_type,
rename_dataset_select_field=rename_dataset_select_field )
@web.expose
@web.require_admin
def edit_request_type( self, trans, **kwd ):
## TODO: RC: add the ability to edit the name and description of exisitng states
params = util.Params( kwd )
message = util.restore_text( params.get( 'message', '' ) )
status = params.get( 'status', 'done' )
request_type_id = params.get( 'id', None )
try:
request_type = trans.sa_session.query( trans.model.RequestType ).get( trans.security.decode_id( request_type_id ) )
except:
return invalid_id_redirect( trans, 'sequencer', request_type_id, action='browse_request_types' )
rename_dataset_select_field = self.__build_rename_dataset_select_field( trans )
if params.get( 'edit_request_type_button', False ):
self.__save_request_type( trans, **kwd )
message = 'Changes made to sequencer configuration (%s) have been saved' % request_type.name
return trans.fill_template( '/admin/request_type/edit_request_type.mako',
request_type=request_type,
rename_dataset_select_field=rename_dataset_select_field,
message=message,
status=status )
def __save_request_type( self, trans, **kwd ):
# Here we save a newly created request_type or save changed
# attributes of an existing request_type.
params = util.Params( kwd )
request_type_id = params.get( 'id', None )
name = util.restore_text( params.get( 'name', '' ) )
desc = util.restore_text( params.get( 'desc', '' ) )
request_form_id = params.get( 'request_form_id', None )
request_form = trans.sa_session.query( trans.model.FormDefinition ).get( trans.security.decode_id( request_form_id ) )
sample_form_id = params.get( 'sample_form_id', None )
sample_form = trans.sa_session.query( trans.model.FormDefinition ).get( trans.security.decode_id( sample_form_id ) )
data_dir = util.restore_text( params.get( 'data_dir', '' ) )
data_dir = self.__check_path( data_dir )
# Data transfer info - Make sure password is retrieved from kwd rather than Params
# since Params may have munged the characters.
datatx_info = dict( host=util.restore_text( params.get( 'host', '' ) ),
username=util.restore_text( params.get( 'username', '' ) ),
password=kwd.get( 'password', '' ),
data_dir=data_dir,
rename_dataset=util.restore_text( params.get( 'rename_dataset', '' ) ) )
if request_type_id:
# We're saving changed attributes of an existing request_type.
request_type = trans.sa_session.query( trans.model.RequestType ).get( trans.security.decode_id( request_type_id ) )
request_type.name = name
request_type.desc = desc
request_type.request_form = request_form
request_type.sample_form = sample_form
request_type.datatx_info = datatx_info
else:
# We're saving a newly created request_type
request_type = trans.model.RequestType( name=name,
desc=desc,
request_form=request_form,
sample_form=sample_form,
datatx_info=datatx_info )
trans.sa_session.add( request_type )
trans.sa_session.flush()
i = 0
while True:
if kwd.has_key( 'state_name_%i' % i ):
name = util.restore_text( params.get( 'state_name_%i' % i, None ) )
desc = util.restore_text( params.get( 'state_desc_%i' % i, None ) )
ss = trans.model.SampleState( name, desc, request_type )
trans.sa_session.add( ss )
trans.sa_session.flush()
i += 1
else:
break
def __check_path( self, a_path ):
# Return a valid folder_path
if a_path and not a_path.endswith( os.sep ):
a_path += os.sep
return a_path
def __get_populated_request_type_widgets( self, trans, **kwd ):
request_form_definitions = self.get_all_forms( trans,
filter=dict( deleted=False ),
form_type=trans.model.FormDefinition.types.REQUEST )
sample_form_definitions = self.get_all_forms( trans,
filter=dict( deleted=False ),
form_type=trans.model.FormDefinition.types.SAMPLE )
if not request_form_definitions or not sample_form_definitions:
return [],[]
params = util.Params( kwd )
request_form_id = params.get( 'request_form_id', 'none' )
sample_form_id = params.get( 'sample_form_id', 'none' )
request_form_id_select_field = build_select_field( trans,
objs=request_form_definitions,
label_attr='name',
select_field_name='request_form_id',
selected_value=request_form_id,
refresh_on_change=False )
sample_form_id_select_field = build_select_field( trans,
objs=sample_form_definitions,
label_attr='name',
select_field_name='sample_form_id',
selected_value=sample_form_id,
refresh_on_change=False )
rt_info_widgets = [ dict( label='Name',
widget=TextField( 'name', 40, util.restore_text( params.get( 'name', '' ) ) ) ),
dict( label='Description',
widget=TextField( 'desc', 40, util.restore_text( params.get( 'desc', '' ) ) ) ),
dict( label='Request form',
widget=request_form_id_select_field ),
dict( label='Sample form',
widget=sample_form_id_select_field ) ]
# Unsaved sample states being defined for this sequencer configuration
rt_states = []
i=0
while True:
if kwd.has_key( 'state_name_%i' % i ):
rt_states.append( ( util.restore_text( params.get( 'state_name_%i' % i, '' ) ),
util.restore_text( params.get( 'state_desc_%i' % i, '' ) ) ) )
i += 1
else:
break
return rt_info_widgets, rt_states
@web.expose
@web.require_admin
def delete_request_type( self, trans, **kwd ):
rt_id = kwd.get( 'id', '' )
rt_id_list = util.listify( rt_id )
for rt_id in rt_id_list:
try:
request_type = trans.sa_session.query( trans.model.RequestType ).get( trans.security.decode_id( rt_id ) )
except:
return invalid_id_redirect( trans, 'sequencer', rt_id, action='browse_request_types' )
request_type.deleted = True
trans.sa_session.add( request_type )
trans.sa_session.flush()
status = 'done'
message = '%i sequencer configurations has been deleted' % len( rt_id_list )
return trans.response.send_redirect( web.url_for( controller='sequencer',
action='browse_request_types',
message=message,
status='done' ) )
@web.expose
@web.require_admin
def undelete_request_type( self, trans, **kwd ):
rt_id = kwd.get( 'id', '' )
rt_id_list = util.listify( rt_id )
for rt_id in rt_id_list:
try:
request_type = trans.sa_session.query( trans.model.RequestType ).get( trans.security.decode_id( rt_id ) )
except:
return invalid_id_redirect( trans, 'sequencer', rt_id, action='browse_request_types' )
request_type.deleted = False
trans.sa_session.add( request_type )
trans.sa_session.flush()
status = 'done'
message = '%i sequencer configurations have been undeleted' % len( rt_id_list )
return trans.response.send_redirect( web.url_for( controller='sequencer',
action='browse_request_types',
message=message,
status=status ) )
@web.expose
@web.require_admin
def request_type_permissions( self, trans, **kwd ):
params = util.Params( kwd )
message = util.restore_text( params.get( 'message', '' ) )
status = params.get( 'status', 'done' )
request_type_id = kwd.get( 'id', '' )
try:
request_type = trans.sa_session.query( trans.model.RequestType ).get( trans.security.decode_id( request_type_id ) )
except:
return invalid_id_redirect( trans, 'sequencer', request_type_id, action='browse_request_types' )
roles = trans.sa_session.query( trans.model.Role ) \
.filter( trans.model.Role.table.c.deleted==False ) \
.order_by( trans.model.Role.table.c.name )
if params.get( 'update_roles_button', False ):
permissions = {}
for k, v in trans.model.RequestType.permitted_actions.items():
in_roles = [ trans.sa_session.query( trans.model.Role ).get( x ) for x in util.listify( params.get( k + '_in', [] ) ) ]
permissions[ trans.app.security_agent.get_action( v.action ) ] = in_roles
trans.app.security_agent.set_request_type_permissions( request_type, permissions )
trans.sa_session.refresh( request_type )
message = "Permissions updated for sequencer configuration '%s'" % request_type.name
return trans.fill_template( '/admin/request_type/request_type_permissions.mako',
request_type=request_type,
roles=roles,
status=status,
message=message )
# ===== Methods for building SelectFields used on various admin_requests forms
def __build_rename_dataset_select_field( self, trans, request_type=None ):
if request_type:
selected_value = request_type.datatx_info.get( 'rename_dataset', trans.model.RequestType.rename_dataset_options.NO )
else:
selected_value = trans.model.RequestType.rename_dataset_options.NO
return build_select_field( trans,
objs=[ v for k, v in trans.model.RequestType.rename_dataset_options.items() ],
label_attr='self',
select_field_name='rename_dataset',
selected_value=selected_value,
refresh_on_change=False )
@@ -17,7 +17,7 @@
and a <b>Sequencing Sample Form</b>, which must be created first. Click the <b>Create new form</b>
button to create them.
%else:
<form name="create_request_type" action="${h.url_for( controller='requests_admin', action='create_request_type')}" method="post" >
<form name="create_request_type" action="${h.url_for( controller='sequencer', action='create_request_type')}" method="post" >
<div class="toolForm">
<div class="toolFormTitle">Create a new sequencer configuration</div>
%for rt_info in rt_info_widgets:
@@ -4,21 +4,24 @@
<br/><br/>
<ul class="manage-table-actions">
<li><a class="action-button" href="${h.url_for( controller='requests_admin', action='view_request_type', id=trans.security.encode_id( request_type.id ) )}">Browse configuration</a></li>
%if not request_type.deleted:
<li><a class="action-button" href="${h.url_for( controller='requests_admin', action='request_type_permissions', id=trans.security.encode_id( request_type.id ) )}">Edit permissions</a></li>
<li><a class="action-button" href="${h.url_for( controller='requests_admin', action='delete_request_type', id=trans.security.encode_id( request_type.id ) )}">Delete configuration</a></li>
%endif
%if request_type.deleted:
<li><a class="action-button" href="${h.url_for( controller='requests_common', action='undelete_request_type', id=trans.security.encode_id( request_type.id ) )}">Undelete configuration</a></li>
%endif
<li><a class="action-button" id="request_type-${request_type.id}-popup" class="menubutton">Configuration Actions</a></li>
<div popupmenu="request_type-${request_type.id}-popup">
<li><a class="action-button" href="${h.url_for( controller='sequencer', action='view_request_type', id=trans.security.encode_id( request_type.id ) )}">Browse configuration</a></li>
%if not request_type.deleted:
<li><a class="action-button" href="${h.url_for( controller='sequencer', action='request_type_permissions', id=trans.security.encode_id( request_type.id ) )}">Edit permissions</a></li>
<li><a class="action-button" href="${h.url_for( controller='sequencer', action='delete_request_type', id=trans.security.encode_id( request_type.id ) )}">Delete configuration</a></li>
%endif
%if request_type.deleted:
<li><a class="action-button" href="${h.url_for( controller='sequencer', action='undelete_request_type', id=trans.security.encode_id( request_type.id ) )}">Undelete configuration</a></li>
%endif
</div>
</ul>
%if message:
${render_msg( message, status )}
%endif
<form name="edit_request_type" action="${h.url_for( controller='requests_admin', action='edit_request_type', id=trans.security.encode_id( request_type.id ) )}" method="post" >
<form name="edit_request_type" action="${h.url_for( controller='sequencer', action='edit_request_type', id=trans.security.encode_id( request_type.id ) )}" method="post" >
<div class="toolForm">
<div class="toolFormTitle">"Edit ${request_type.name}" sequencer configuration</div>
<div class="form-row">
+1
View File
@@ -0,0 +1 @@
<%inherit file="/grid_base.mako"/>
@@ -25,9 +25,12 @@
<br/><br/>
<ul class="manage-table-actions">
<li><a class="action-button" href="${h.url_for( controller='requests_admin', action='view_request_type', id=trans.security.encode_id( request_type.id ) )}">Browse configuration</a></li>
<li><a class="action-button" href="${h.url_for( controller='requests_admin', action='edit_request_type', id=trans.security.encode_id( request_type.id ) )}">Edit configuration</a></li>
<li><a class="action-button" href="${h.url_for( controller='requests_admin', action='delete_request_type', id=trans.security.encode_id( request_type.id ) )}">Delete configuration</a></li>
<li><a class="action-button" id="request_type-${request_type.id}-popup" class="menubutton">Configuration Actions</a></li>
<div popupmenu="request_type-${request_type.id}-popup">
<li><a class="action-button" href="${h.url_for( controller='sequencer', action='view_request_type', id=trans.security.encode_id( request_type.id ) )}">Browse configuration</a></li>
<li><a class="action-button" href="${h.url_for( controller='sequencer', action='edit_request_type', id=trans.security.encode_id( request_type.id ) )}">Edit configuration</a></li>
<li><a class="action-button" href="${h.url_for( controller='sequencer', action='delete_request_type', id=trans.security.encode_id( request_type.id ) )}">Delete configuration</a></li>
</div>
</ul>
%if message:
@@ -37,7 +40,7 @@
<div class="toolForm">
<div class="toolFormTitle">Manage access permissions on sequencer interface "${request_type.name}"</div>
<div class="toolFormBody">
<form name="request_type_permissions" id="request_type_permissions" action="${h.url_for( controller='requests_admin', action='request_type_permissions', id=trans.security.encode_id( request_type.id ) )}" method="post">
<form name="request_type_permissions" id="request_type_permissions" action="${h.url_for( controller='sequencer', action='request_type_permissions', id=trans.security.encode_id( request_type.id ) )}" method="post">
<div class="form-row">
<%
current_actions = request_type.actions
@@ -3,14 +3,17 @@
<br/><br/>
<ul class="manage-table-actions">
%if not request_type.deleted:
<li><a class="action-button" href="${h.url_for( controller='requests_admin', action='edit_request_type', id=trans.security.encode_id( request_type.id ) )}">Edit configuration</a></li>
<li><a class="action-button" href="${h.url_for( controller='requests_admin', action='request_type_permissions', id=trans.security.encode_id( request_type.id ) )}">Edit permissions</a></li>
<li><a class="action-button" href="${h.url_for( controller='requests_admin', action='delete_request_type', id=trans.security.encode_id( request_type.id ) )}">Delete configuration</a></li>
%endif
%if request_type.deleted:
<li><a class="action-button" href="${h.url_for( controller='requests_common', action='undelete_request_type', id=trans.security.encode_id( request_type.id ) )}">Undelete configuration</a></li>
%endif
<li><a class="action-button" id="request_type-${request_type.id}-popup" class="menubutton">Configuration Actions</a></li>
<div popupmenu="request_type-${request_type.id}-popup">
%if not request_type.deleted:
<li><a class="action-button" href="${h.url_for( controller='sequencer', action='edit_request_type', id=trans.security.encode_id( request_type.id ) )}">Edit configuration</a></li>
<li><a class="action-button" href="${h.url_for( controller='sequencer', action='request_type_permissions', id=trans.security.encode_id( request_type.id ) )}">Edit permissions</a></li>
<li><a class="action-button" href="${h.url_for( controller='sequencer', action='delete_request_type', id=trans.security.encode_id( request_type.id ) )}">Delete configuration</a></li>
%endif
%if request_type.deleted:
<li><a class="action-button" href="${h.url_for( controller='sequencer', action='undelete_request_type', id=trans.security.encode_id( request_type.id ) )}">Undelete configuration</a></li>
%endif
</div>
</ul>
%if message:
@@ -77,7 +77,7 @@ ${h.js( "ui.core", "jquery.cookie", "jquery.dynatree" )}
<br/><br/>
<ul class="manage-table-actions">
<li><a class="action-button" href="${h.url_for( controller='requests_admin', action='view_request_type', id=trans.security.encode_id( request.type.id ) )}">Sequencer configuration</a></li>
<li><a class="action-button" href="${h.url_for( controller='sequencer', action='view_request_type', id=trans.security.encode_id( request.type.id ) )}">Sequencer configuration</a></li>
%if can_transfer_datasets:
<li><a class="action-button" href="${h.url_for( controller='requests_admin', action='manage_datasets', cntrller=cntrller, sample_id=trans.security.encode_id( sample.id ) )}">Transfer datasets</a></li>
%endif
-4
View File
@@ -323,10 +323,6 @@
%elif sample.datasets and len(sample.datasets ) == len( transferred_dataset_files ):
<li><a class="action-button" href="${h.url_for( controller='requests_common', action='view_sample_datasets', cntrller=cntrller, sample_id=trans.security.encode_id( sample.id ), transfer_status=trans.model.SampleDataset.transfer_status.COMPLETE )}">View transferred datasets</a></li>
%endif
###
### For demo
<li><a class="action-button" target="demolocal" href="http://localhost:9011/">Validate sample sheet</a></li>
###
</div>
%else:
${sample_widget_name}
+1 -1
View File
@@ -114,7 +114,7 @@
</div>
<div class="toolSectionBody">
<div class="toolSectionBg">
<div class="toolTitle"><a href="${h.url_for( controller='requests_admin', action='browse_request_types' )}" target="galaxy_main">Manage sequencers</a></div>
<div class="toolTitle"><a href="${h.url_for( controller='sequencer', action='browse_request_types' )}" target="galaxy_main">Manage sequencers</a></div>
<div class="toolTitle"><a href="${h.url_for( controller='requests_admin', action='browse_requests' )}" target="galaxy_main">Sequencing requests</a></div>
<div class="toolTitle"><a href="${h.url_for( controller='requests_common', action='find_samples', cntrller='requests_admin' )}" target="galaxy_main">Find samples</a></div>
</div>
+3 -3
View File
@@ -1463,7 +1463,7 @@ class TwillTestCase( unittest.TestCase ):
self.check_page_for_string( check_str )
def create_request_type( self, name, desc, request_form_id, sample_form_id, states, strings_displayed=[], strings_displayed_after_submit=[] ):
self.home()
self.visit_url( "%s/requests_admin/create_request_type" % self.url )
self.visit_url( "%s/sequencer/create_request_type" % self.url )
for check_str in strings_displayed:
self.check_page_for_string( check_str )
tc.fv( "1", "name", name )
@@ -1479,7 +1479,7 @@ class TwillTestCase( unittest.TestCase ):
self.check_page_for_string( check_str )
def request_type_permissions( self, request_type_id, request_type_name, role_ids_str, permissions_in, permissions_out ):
# role_ids_str must be a comma-separated string of role ids
url = "requests_admin/request_type_permissions?id=%s&update_roles_button=Save" % ( request_type_id )
url = "sequencer/request_type_permissions?id=%s&update_roles_button=Save" % ( request_type_id )
for po in permissions_out:
key = '%s_out' % po
url ="%s&%s=%s" % ( url, key, role_ids_str )
@@ -1494,7 +1494,7 @@ class TwillTestCase( unittest.TestCase ):
def view_request_type( self, request_type_id, request_type_name, sample_states, strings_displayed=[] ):
'''View request_type details'''
self.home()
self.visit_url( "%s/requests_admin/view_request_type?id=%s" % ( self.url, request_type_id ) )
self.visit_url( "%s/sequencer/view_request_type?id=%s" % ( self.url, request_type_id ) )
self.check_page_for_string( '"%s" sequencer configuration' % request_type_name )
for name, desc in sample_states:
self.check_page_for_string( name )