コード例 #1
0
 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, 'request_type', request_type_id, 'request type', 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 request type '%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 )
コード例 #2
0
 def view_editable_request_type( self, trans, **kwd ):
     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, 'request_type', request_type_id, 'request type', action='browse_request_types' )
     # See if we have any associated templates
     widgets = request_type.get_template_widgets( trans )
     widget_fields_have_contents = self.widget_fields_have_contents( widgets )
     # get all the external services selected till now
     external_service_select_fields_list = []
     for index, external_service in enumerate( request_type.external_services ): 
         external_service_select_field = self.__build_external_service_select_field( trans, 
                                                                                     'external_service_id_%i' % index, 
                                                                                     external_service )
         external_service_select_fields_list.append( external_service_select_field )
     return trans.fill_template( '/admin/request_type/edit_request_type.mako',
                                 request_type=request_type,
                                 widgets=widgets,
                                 widget_fields_have_contents=widget_fields_have_contents,
                                 external_service_select_fields_list=external_service_select_fields_list,
                                 message=message,
                                 status=status )
コード例 #3
0
ファイル: requests_admin.py プロジェクト: linked2safety/code
 def reject_request( self, trans, **kwd ):
     params = util.Params( kwd )
     request_id = params.get( 'id', '' )
     status = params.get( 'status', 'done' )
     message = params.get( 'message', 'done' )
     if params.get( 'cancel_reject_button', False ):
         return trans.response.send_redirect( web.url_for( controller='requests_common',
                                                           action='view_request',
                                                           cntrller='requests_admin',
                                                           id=request_id ) )
     try:
         request = trans.sa_session.query( trans.model.Request ).get( trans.security.decode_id( request_id ) )
     except:
         return invalid_id_redirect( trans, 'requests_admin', request_id )
     # Validate
     comment = util.restore_text( params.get( 'comment', '' ) )
     if not comment:
         status='error'
         message='A reason for rejecting the request is required.'
         return trans.fill_template( '/admin/requests/reject.mako', 
                                     cntrller='requests_admin',
                                     request=request,
                                     status=status,
                                     message=message )
     # Create an event with state 'Rejected' for this request
     event_comment = "Sequencing request marked rejected by %s. Reason: %s " % ( trans.user.email, comment )
     event = trans.model.RequestEvent( request, request.states.REJECTED, event_comment )
     trans.sa_session.add( event )
     trans.sa_session.flush()
     message='Sequencing request (%s) has been rejected.' % request.name
     return trans.response.send_redirect( web.url_for( controller='requests_admin',
                                                       action='browse_requests',
                                                       status=status,
                                                       message=message,
                                                       **kwd ) )
コード例 #4
0
 def view_form_definition( self, trans, **kwd ):
     form_definition_id = kwd.get( 'id', None )
     try:
         form_definition = trans.sa_session.query( trans.model.FormDefinition ).get( trans.security.decode_id( form_definition_id ) )
     except:
         return invalid_id_redirect( trans, 'request_type', form_definition_id, 'form definition', action='browse_request_types' )
     return trans.fill_template( '/admin/forms/view_form_definition.mako',
                                 form_definition=form_definition )
コード例 #5
0
 def view_external_service( self, trans, **kwd ):
     external_service_id = kwd.get( 'id', None )
     try:
         external_service = trans.sa_session.query( trans.model.ExternalService ).get( trans.security.decode_id( external_service_id ) )
     except:
         return invalid_id_redirect( trans, 'external_service', external_service_id, 'external_service', action='browse_external_services' )
     external_service_type = self.get_external_service_type( trans, external_service.external_service_type_id )
     return trans.fill_template( '/admin/external_service/view_external_service.mako', 
                                 external_service=external_service,
                                 external_service_type=external_service_type )
コード例 #6
0
 def view_external_service( self, trans, **kwd ):
     external_service_id = kwd.get( 'id', None )
     try:
         external_service = trans.sa_session.query( trans.model.ExternalService ).get( trans.security.decode_id( external_service_id ) )
     except:
         return invalid_id_redirect( trans, 'external_service', external_service_id, 'external_service', action='browse_external_services' )
     external_service_type = self.get_external_service_type( trans, external_service.external_service_type_id )
     return trans.fill_template( '/admin/external_service/view_external_service.mako', 
                                 external_service=external_service,
                                 external_service_type=external_service_type )
コード例 #7
0
 def edit_external_service_form_definition( self, trans, **kwd ):
     params = util.Params( kwd )
     external_service_id = kwd.get( 'id', None )
     try:
         external_service = trans.sa_session.query( trans.model.ExternalService ).get( trans.security.decode_id( external_service_id ) )
     except:
         return invalid_id_redirect( trans, 'external_service', external_service_id, 'external_service', action='browse_external_services' )
     vars = dict( id=trans.security.encode_id( external_service.form_definition.form_definition_current_id ),
                  response_redirect=web.url_for( controller='external_service',
                                                 action='update_external_service_form_definition',
                                                 **kwd ) )
     return trans.response.send_redirect( web.url_for( controller='forms', action='edit_form_definition', **vars ) )
コード例 #8
0
 def edit_external_service_form_definition( self, trans, **kwd ):
     params = util.Params( kwd )
     external_service_id = kwd.get( 'id', None )
     try:
         external_service = trans.sa_session.query( trans.model.ExternalService ).get( trans.security.decode_id( external_service_id ) )
     except:
         return invalid_id_redirect( trans, 'external_service', external_service_id, 'external_service', action='browse_external_services' )
     vars = dict( id=trans.security.encode_id( external_service.form_definition.form_definition_current_id ),
                  response_redirect=web.url_for( controller='external_service',
                                                 action='update_external_service_form_definition',
                                                 **kwd ) )
     return trans.response.send_redirect( web.url_for( controller='forms', action='edit_form_definition', **vars ) )
コード例 #9
0
ファイル: requests_admin.py プロジェクト: linked2safety/code
 def rename_datasets( self, trans, **kwd ):
     # This method is called from the DataTransferGrid when a user is renaming 1 or more
     # SampleDatasets.
     params = util.Params( kwd )
     message = util.restore_text( params.get( 'message', ''  ) )
     status = params.get( 'status', 'done' )
     sample_id = kwd.get( 'sample_id', None )
     try:
         sample = trans.sa_session.query( trans.model.Sample ).get( trans.security.decode_id( sample_id ) )
     except:
         return invalid_id_redirect( trans, 'requests_admin', sample_id, 'sample' )
     # id_list is list of SampleDataset ids, which is a subset of all
     # of the SampleDatasets associated with the Sample.  The user may
     # or may not have selected all of the SampleDatasets for renaming.
     id_list = util.listify( kwd.get( 'id_list', [] ) )
     # Get all of the SampleDatasets
     sample_datasets = []
     for sample_dataset_id in id_list:
         sample_dataset = trans.sa_session.query( trans.app.model.SampleDataset ).get( trans.security.decode_id( sample_dataset_id ) )
         sample_datasets.append( sample_dataset )
     if params.get( 'rename_datasets_button', False ):
         incorrect_dataset_names = []
         for sample_dataset in sample_datasets:
             encoded_id = trans.security.encode_id( sample_dataset.id )
             selected_option = util.restore_text( params.get( 'rename_datasets_for_sample_%s' % encoded_id, '' ) )
             new_name = util.restore_text( params.get( 'new_name_%s' % encoded_id, '' ) )
             if not new_name:
                 incorrect_dataset_names.append( sample_dataset.name )
                 continue
             new_name = util.sanitize_for_filename( new_name )
             if selected_option == 'none':
                 sample_dataset.name = new_name
             else: 
                 sample_dataset.name = '%s_%s' % ( selected_option, new_name )
             trans.sa_session.add( sample_dataset )
             trans.sa_session.flush()
         if len( sample_datasets ) == len( incorrect_dataset_names ):
             status = 'error'
             message = 'All datasets renamed incorrectly.'
         elif len( incorrect_dataset_names ):
             status = 'done'
             message = 'Changes saved successfully. The following datasets were renamed incorrectly: %s.' % str( incorrect_dataset_names )
         else:
             message = 'Changes saved successfully.'
         return trans.fill_template( '/admin/requests/rename_datasets.mako', 
                                     sample=sample,
                                     id_list=id_list,
                                     message=message,
                                     status=status )
     return trans.response.send_redirect( web.url_for( controller='requests_admin',
                                                       action='manage_datasets',
                                                       sample_id=sample_id ) )
コード例 #10
0
 def __get_external_services(self, trans, request_type=None, **kwd):
     params = util.Params( kwd )
     external_services_list = []
     i = 0
     while True:
         if kwd.has_key( 'external_service_id_%i' % i ):
             id = params.get( 'external_service_id_%i' % i, '' )
             try:
                 external_service = trans.sa_session.query( trans.model.ExternalService ).get( trans.security.decode_id( id ) )
             except:
                 return invalid_id_redirect( trans, 'request_type', id, 'external service', action='browse_request_types' )
             external_services_list.append( external_service )
             i += 1
         else:
             break
     return external_services_list
コード例 #11
0
 def update_external_service_form_definition( self, trans, **kwd ):
     params = util.Params( kwd )
     external_service_id = kwd.get( 'id', None )
     try:
         external_service = trans.sa_session.query( trans.model.ExternalService ).get( trans.security.decode_id( external_service_id ) )
     except:
         return invalid_id_redirect( trans, 'external_service', external_service_id, 'external_service', action='browse_external_services' )
     external_service.form_definition = external_service.form_definition.current.latest_form
     trans.sa_session.add( external_service )
     trans.sa_session.flush()
     message = "The form definition for the '%s' external service has been updated with your changes." % external_service.name
     return trans.response.send_redirect( web.url_for( controller='external_service',
                                                       action='edit_external_service',
                                                       message=message,
                                                       status='done',
                                                       **kwd ) )
コード例 #12
0
 def update_external_service_form_definition( self, trans, **kwd ):
     params = util.Params( kwd )
     external_service_id = kwd.get( 'id', None )
     try:
         external_service = trans.sa_session.query( trans.model.ExternalService ).get( trans.security.decode_id( external_service_id ) )
     except:
         return invalid_id_redirect( trans, 'external_service', external_service_id, 'external_service', action='browse_external_services' )
     external_service.form_definition = external_service.form_definition.current.latest_form
     trans.sa_session.add( external_service )
     trans.sa_session.flush()
     message = "The form definition for the '%s' external service has been updated with your changes." % external_service.name
     return trans.response.send_redirect( web.url_for( controller='external_service',
                                                       action='edit_external_service',
                                                       message=message,
                                                       status='done',
                                                       **kwd ) )
コード例 #13
0
 def undelete_external_service( self, trans, **kwd ):
     external_service_id = kwd.get( 'id', '' )
     external_service_id_list = util.listify( external_service_id )
     for external_service_id in external_service_id_list:
         try:
             external_service = trans.sa_session.query( trans.model.ExternalService ).get( trans.security.decode_id( external_service_id ) )
         except:
             return invalid_id_redirect( trans, 'external_service', external_service_id, 'external_service', action='browse_external_services' )
         external_service.deleted = False
         trans.sa_session.add( external_service )
         trans.sa_session.flush()
     status = 'done'
     message = '%i external services have been undeleted' % len( external_service_id_list )
     return trans.response.send_redirect( web.url_for( controller='external_service',
                                                       action='browse_external_services',
                                                       message=message,
                                                       status=status ) )
コード例 #14
0
 def undelete_external_service( self, trans, **kwd ):
     external_service_id = kwd.get( 'id', '' )
     external_service_id_list = util.listify( external_service_id )
     for external_service_id in external_service_id_list:
         try:
             external_service = trans.sa_session.query( trans.model.ExternalService ).get( trans.security.decode_id( external_service_id ) )
         except:
             return invalid_id_redirect( trans, 'external_service', external_service_id, 'external_service', action='browse_external_services' )
         external_service.deleted = False
         trans.sa_session.add( external_service )
         trans.sa_session.flush()
     status = 'done'
     message = '%i external services have been undeleted' % len( external_service_id_list )
     return trans.response.send_redirect( web.url_for( controller='external_service',
                                                       action='browse_external_services',
                                                       message=message,
                                                       status=status ) )
コード例 #15
0
 def undelete_request_type( self, trans, **kwd ):
     request_type_id = kwd.get( 'id', '' )
     request_type_id_list = util.listify( request_type_id )
     for request_type_id in request_type_id_list:
         try:
             request_type = trans.sa_session.query( trans.model.RequestType ).get( trans.security.decode_id( request_type_id ) )
         except:
             return invalid_id_redirect( trans, 'request_type', request_type_id, 'request type', action='browse_request_types' )
         request_type.deleted = False
         trans.sa_session.add( request_type )
         trans.sa_session.flush()
     status = 'done'
     message = '%i request types have been undeleted' % len( request_type_id_list )
     return trans.response.send_redirect( web.url_for( controller='request_type',
                                                       action='browse_request_types',
                                                       message=message,
                                                       status=status ) )
コード例 #16
0
 def view_request_type( 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', 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, 'request_type', request_type_id, 'request type', action='browse_request_types' )
     # See if we have any associated templates
     widgets = request_type.get_template_widgets( trans )
     widget_fields_have_contents = self.widget_fields_have_contents( widgets )
     return trans.fill_template( '/admin/request_type/view_request_type.mako', 
                                 request_type=request_type,
                                 widgets=widgets,
                                 widget_fields_have_contents=widget_fields_have_contents,
                                 message=message,
                                 status=status )
コード例 #17
0
 def reject_request(self, trans, **kwd):
     params = util.Params(kwd)
     request_id = params.get('id', '')
     status = params.get('status', 'done')
     message = params.get('message', 'done')
     if params.get('cancel_reject_button', False):
         return trans.response.send_redirect(
             web.url_for(controller='requests_common',
                         action='view_request',
                         cntrller='requests_admin',
                         id=request_id))
     try:
         request = trans.sa_session.query(trans.model.Request).get(
             trans.security.decode_id(request_id))
     except:
         return invalid_id_redirect(trans, 'requests_admin', request_id)
     # Validate
     comment = util.restore_text(params.get('comment', ''))
     if not comment:
         status = 'error'
         message = 'A reason for rejecting the request is required.'
         return trans.fill_template('/admin/requests/reject.mako',
                                    cntrller='requests_admin',
                                    request=request,
                                    status=status,
                                    message=message)
     # Create an event with state 'Rejected' for this request
     event_comment = "Sequencing request marked rejected by %s. Reason: %s " % (
         trans.user.email, comment)
     event = trans.model.RequestEvent(request, request.states.REJECTED,
                                      event_comment)
     trans.sa_session.add(event)
     trans.sa_session.flush()
     message = 'Sequencing request (%s) has been rejected.' % request.name
     return trans.response.send_redirect(
         web.url_for(controller='requests_admin',
                     action='browse_requests',
                     status=status,
                     message=message,
                     **kwd))
コード例 #18
0
 def edit_external_service( self, trans, **kwd ):
     params = util.Params( kwd )
     message = util.restore_text( params.get( 'message', ''  ) )
     status = params.get( 'status', 'done' )
     external_service_id = params.get( 'id', None )
     try:
         external_service = trans.sa_session.query( trans.model.ExternalService ).get( trans.security.decode_id( external_service_id ) )
     except:
         return invalid_id_redirect( trans, 'external_service', external_service_id, 'external_service', action='browse_external_services' )
     if params.get( 'edit_external_service_button', False ):
         external_service = self.__save_external_service( trans, **kwd )
         trans.sa_session.refresh( external_service )
         message = 'Changes made to external service (%s) have been saved' % external_service.name
     widgets = self.__build_external_service_widgets( trans, external_service, **kwd )
     widgets.extend( external_service.form_definition.get_widgets( trans.user, external_service.form_values.content, **kwd ) )
     external_service_type = self.get_external_service_type( trans, external_service.external_service_type_id )
     return trans.fill_template( '/admin/external_service/edit_external_service.mako',
                                 external_service=external_service,
                                 widgets=widgets,
                                 message=message,
                                 status=status,
                                 external_service_type=external_service_type )
コード例 #19
0
 def edit_external_service( self, trans, **kwd ):
     params = util.Params( kwd )
     message = util.restore_text( params.get( 'message', ''  ) )
     status = params.get( 'status', 'done' )
     external_service_id = params.get( 'id', None )
     try:
         external_service = trans.sa_session.query( trans.model.ExternalService ).get( trans.security.decode_id( external_service_id ) )
     except:
         return invalid_id_redirect( trans, 'external_service', external_service_id, 'external_service', action='browse_external_services' )
     if params.get( 'edit_external_service_button', False ):
         external_service = self.__save_external_service( trans, **kwd )
         trans.sa_session.refresh( external_service )
         message = 'Changes made to external service (%s) have been saved' % external_service.name
     widgets = self.__build_external_service_widgets( trans, external_service, **kwd )
     widgets.extend( external_service.form_definition.get_widgets( trans.user, external_service.form_values.content, **kwd ) )
     external_service_type = self.get_external_service_type( trans, external_service.external_service_type_id )
     return trans.fill_template( '/admin/external_service/edit_external_service.mako',
                                 external_service=external_service,
                                 widgets=widgets,
                                 message=message,
                                 status=status,
                                 external_service_type=external_service_type )
コード例 #20
0
 def edit_request_type( self, trans, **kwd ):
     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, 'request_type', request_type_id, 'request type', action='browse_request_types' )
     # See if we have any associated templates
     widgets = request_type.get_template_widgets( trans )
     widget_fields_have_contents = self.widget_fields_have_contents( widgets )
     # get all the external services selected till now
     external_service_select_fields_list = []
     external_services_list = self.__get_external_services( trans, request_type, **kwd )
     if params.get( 'edit_request_type_button', False ):
         request_type = self.__save_request_type( trans, action='edit_request_type', **kwd )
         message = 'Changes made to request type (%s) have been saved' % request_type.name
     elif params.get( 'add_external_service_button', False ):
         external_services_list.append( None )
     elif params.get( 'remove_external_service_button', False ):
         index = int( kwd[ 'remove_external_service_button' ].split(' ')[3] ) - 1
         del external_services_list[index]
     #if external_services_list
     for index, external_service in enumerate( external_services_list ): 
         external_service_select_field = self.__build_external_service_select_field( trans, 
                                                                                     'external_service_id_%i' % index, 
                                                                                     external_service )
         external_service_select_fields_list.append( external_service_select_field )
     return trans.fill_template( '/admin/request_type/edit_request_type.mako',
                                 request_type=request_type,
                                 widgets=widgets,
                                 widget_fields_have_contents=widget_fields_have_contents,
                                 external_service_select_fields_list=external_service_select_fields_list,
                                 message=message,
                                 status=status )
コード例 #21
0
 def __save_request_type( self, trans, action, **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' )
     sample_form_id = params.get( 'sample_form_id', 'none' )
     external_service_id = params.get( 'external_service_id', 'none' )
     # validate
     if not name or request_form_id == 'none' or sample_form_id == 'none':
         message = 'Enter the name, request form, sample form and at least one sample state associated with this request type.'
         return trans.response.send_redirect( web.url_for( controller='request_type',
                                                           action=action,
                                                           message=message,
                                                           status='error' ) )
     try:
         request_form = trans.sa_session.query( trans.model.FormDefinition ).get( trans.security.decode_id( request_form_id ) )
     except:
         return invalid_id_redirect( trans, 'request_type', request_type_id, 'form definition', action='browse_request_types' )
     
     try:
         sample_form = trans.sa_session.query( trans.model.FormDefinition ).get( trans.security.decode_id( sample_form_id ) )
     except:
         return invalid_id_redirect( trans, 'request_type', request_type_id, 'form definition', action='browse_request_types' )
     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
         for sample_state in request_type.states:
             sample_state_id = trans.security.encode_id( sample_state.id )
             name = util.restore_text( params.get( 'state_name_%s' % sample_state_id, '' ) )
             desc = util.restore_text( params.get( 'state_desc_%s' % sample_state_id, '' ) )
             sample_state.name = name
             sample_state.desc = desc
             trans.sa_session.add( sample_state )
             trans.sa_session.flush()
         trans.sa_session.add( request_type )
         trans.sa_session.flush()
     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 ) 
         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, '' ) )
                 desc = util.restore_text( params.get( 'state_desc_%i' % i, '' ) )
                 sample_state = trans.model.SampleState( name, desc, request_type ) 
                 trans.sa_session.add( sample_state )
                 trans.sa_session.flush()
                 i += 1
             else:
                 break
     # delete existing associations
     request_type.delete_external_service_associations( trans )
     # save the external services associated with this request_type
     external_services_list = self.__get_external_services( trans, **kwd )
     for external_service in external_services_list:
         request_type.add_external_service_association( trans, external_service )
     return request_type
コード例 #22
0
 def initiate_data_transfer(self,
                            trans,
                            sample_id,
                            sample_datasets=[],
                            sample_dataset_id=''):
     # Initiate the transfer of the datasets from the external service to the target Galaxy data library.
     # The admin user must have LIBRARY_ADD permission for the target library and folder
     try:
         sample = trans.sa_session.query(trans.model.Sample).get(
             trans.security.decode_id(sample_id))
     except:
         return invalid_id_redirect(trans, 'requests_admin', sample_id,
                                    'sample')
     message = ""
     status = "done"
     # Make sure the current admin user has LIBRARY_ADD permission on the target data library and folder.
     self.__ensure_library_add_permission(trans, sample.library,
                                          sample.folder)
     if sample_dataset_id and not sample_datasets:
         # Either a list of SampleDataset objects or a comma-separated string of
         # encoded SampleDataset ids can be received.  If the latter, parse the
         # sample_dataset_id string to build the list of sample_datasets.
         id_list = util.listify(sample_dataset_id)
         for sample_dataset_id in id_list:
             sample_dataset = trans.sa_session.query(
                 trans.model.SampleDataset).get(
                     trans.security.decode_id(sample_dataset_id))
             sample_datasets.append(sample_dataset)
     if trans.app.config.enable_beta_job_managers:
         # For now, assume that all SampleDatasets use the same external service ( this may not be optimal ).
         if sample_datasets:
             external_service_type_id = sample_datasets[
                 0].external_service.external_service_type_id
             # Here external_service_type_id will be something like '454_life_sciences'
             external_service = sample.request.type.get_external_service(
                 external_service_type_id)
             external_service_type = external_service.get_external_service_type(
                 trans)
             external_service.load_data_transfer_settings(trans)
             # For now only scp is supported.
             scp_configs = external_service.data_transfer[
                 trans.model.ExternalService.data_transfer_protocol.SCP]
             if not scp_configs['automatic_transfer']:
                 deferred_plugin = 'ManualDataTransferPlugin'
             else:
                 raise Exception(
                     "Automatic data transfer using scp is not yet supported."
                 )
         trans.app.job_manager.deferred_job_queue.plugins[
             deferred_plugin].create_job(
                 trans,
                 sample=sample,
                 sample_datasets=sample_datasets,
                 external_service=external_service,
                 external_service_type=external_service_type)
     else:
         # TODO: Using RabbitMq for now, but eliminate this entire block when we replace RabbitMq with Galaxy's
         # own messaging engine.  We're holding off on using the new way to transfer files manually until we
         # implement a Galaxy-proprietary messaging engine because the deferred job plugins currently perform
         # constant db hits to check for deferred jobs that are not in a finished state.
         # Create the message
         messages = self.__create_data_transfer_messages(
             trans, sample, sample_datasets)
         # Send the messages
         for rmq_msg in messages:
             try:
                 conn = amqp.Connection(
                     host=trans.app.config.amqp['host'] + ":" +
                     trans.app.config.amqp['port'],
                     userid=trans.app.config.amqp['userid'],
                     password=trans.app.config.amqp['password'],
                     virtual_host=trans.app.config.amqp['virtual_host'],
                     insist=False)
                 chan = conn.channel()
                 msg = amqp.Message(
                     rmq_msg,
                     content_type='text/plain',
                     application_headers={'msg_type': 'data_transfer'})
                 msg.properties["delivery_mode"] = 2
                 chan.basic_publish(
                     msg,
                     exchange=trans.app.config.amqp['exchange'],
                     routing_key=trans.app.config.amqp['routing_key'])
                 chan.close()
                 conn.close()
             except Exception, e:
                 message = "Error sending the data transfer message to the Galaxy AMQP message queue:<br/>%s" % str(
                     e)
                 status = "error"
         if not message:
             message = "%i datasets have been queued for transfer from the external service." % len(
                 sample_datasets)
             status = "done"
コード例 #23
0
 def rename_datasets(self, trans, **kwd):
     # This method is called from the DataTransferGrid when a user is renaming 1 or more
     # SampleDatasets.
     params = util.Params(kwd)
     message = util.restore_text(params.get('message', ''))
     status = params.get('status', 'done')
     sample_id = kwd.get('sample_id', None)
     try:
         sample = trans.sa_session.query(trans.model.Sample).get(
             trans.security.decode_id(sample_id))
     except:
         return invalid_id_redirect(trans, 'requests_admin', sample_id,
                                    'sample')
     # id_list is list of SampleDataset ids, which is a subset of all
     # of the SampleDatasets associated with the Sample.  The user may
     # or may not have selected all of the SampleDatasets for renaming.
     id_list = util.listify(kwd.get('id_list', []))
     # Get all of the SampleDatasets
     sample_datasets = []
     for sample_dataset_id in id_list:
         sample_dataset = trans.sa_session.query(
             trans.app.model.SampleDataset).get(
                 trans.security.decode_id(sample_dataset_id))
         sample_datasets.append(sample_dataset)
     if params.get('rename_datasets_button', False):
         incorrect_dataset_names = []
         for sample_dataset in sample_datasets:
             encoded_id = trans.security.encode_id(sample_dataset.id)
             selected_option = util.restore_text(
                 params.get('rename_datasets_for_sample_%s' % encoded_id,
                            ''))
             new_name = util.restore_text(
                 params.get('new_name_%s' % encoded_id, ''))
             if not new_name:
                 incorrect_dataset_names.append(sample_dataset.name)
                 continue
             new_name = util.sanitize_for_filename(new_name)
             if selected_option == 'none':
                 sample_dataset.name = new_name
             else:
                 sample_dataset.name = '%s_%s' % (selected_option, new_name)
             trans.sa_session.add(sample_dataset)
             trans.sa_session.flush()
         if len(sample_datasets) == len(incorrect_dataset_names):
             status = 'error'
             message = 'All datasets renamed incorrectly.'
         elif len(incorrect_dataset_names):
             status = 'done'
             message = 'Changes saved successfully. The following datasets were renamed incorrectly: %s.' % str(
                 incorrect_dataset_names)
         else:
             message = 'Changes saved successfully.'
         return trans.fill_template('/admin/requests/rename_datasets.mako',
                                    sample=sample,
                                    id_list=id_list,
                                    message=message,
                                    status=status)
     return trans.response.send_redirect(
         web.url_for(controller='requests_admin',
                     action='manage_datasets',
                     sample_id=sample_id))
コード例 #24
0
    def manage_datasets(self, trans, **kwd):
        def handle_error(**kwd):
            kwd['status'] = 'error'
            return trans.response.send_redirect(
                web.url_for(controller='requests_admin',
                            action='manage_datasets',
                            **kwd))

        params = util.Params(kwd)
        message = util.restore_text(params.get('message', ''))
        status = params.get('status', 'done')
        sample_id = params.get('sample_id', None)
        try:
            sample = trans.sa_session.query(trans.model.Sample).get(
                trans.security.decode_id(sample_id))
        except:
            return invalid_id_redirect(trans, 'requests_admin', sample_id,
                                       'sample')
        if 'operation' in kwd:
            operation = kwd['operation'].lower()
            sample_dataset_id = params.get('id', None)
            if not sample_dataset_id:
                message = 'Select at least 1 dataset to %s.' % operation
                kwd['message'] = message
                del kwd['operation']
                handle_error(**kwd)
            id_list = util.listify(sample_dataset_id)
            selected_sample_datasets = []
            for sample_dataset_id in id_list:
                try:
                    sample_dataset = trans.sa_session.query(
                        trans.model.SampleDataset).get(
                            trans.security.decode_id(sample_dataset_id))
                except:
                    return invalid_id_redirect(trans, 'requests_admin',
                                               sample_dataset_id,
                                               'sample dataset')
                selected_sample_datasets.append(sample_dataset)
            if operation == "view":
                return trans.fill_template(
                    '/admin/requests/view_sample_dataset.mako',
                    cntrller='requests_admin',
                    sample_dataset=selected_sample_datasets[0])
            elif operation == "delete":
                not_deleted = []
                for sample_dataset in selected_sample_datasets:
                    # Make sure the dataset has been transferred before deleting it.
                    if sample_dataset in sample_dataset.sample.untransferred_dataset_files:
                        # Save the sample dataset
                        sample = sample_dataset.sample
                        trans.sa_session.delete(sample_dataset)
                        trans.sa_session.flush()
                    else:
                        not_deleted.append(sample_dataset.name)
                message = '%i datasets have been deleted.' % (len(id_list) -
                                                              len(not_deleted))
                if not_deleted:
                    status = 'warning'
                    message = message + '  %s could not be deleted because their transfer status is not "Not Started". ' % str(
                        not_deleted)
                return trans.response.send_redirect(
                    web.url_for(controller='requests_admin',
                                action='manage_datasets',
                                sample_id=trans.security.encode_id(sample.id),
                                status=status,
                                message=message))
            elif operation == "rename":
                # If one of the selected sample datasets is in the NOT_STARTED state,
                # then display an error message.  A NOT_STARTED state implies the dataset
                # has not yet been transferred.
                no_datasets_transferred = True
                for selected_sample_dataset in selected_sample_datasets:
                    if selected_sample_dataset in selected_sample_dataset.sample.untransferred_dataset_files:
                        no_datasets_transferred = False
                        break
                if no_datasets_transferred:
                    status = 'error'
                    message = 'A dataset can be renamed only if it has been transferred.'
                    return trans.response.send_redirect(
                        web.url_for(controller='requests_admin',
                                    action='manage_datasets',
                                    sample_id=trans.security.encode_id(
                                        selected_sample_datasets[0].sample.id),
                                    status=status,
                                    message=message))
                return trans.fill_template(
                    '/admin/requests/rename_datasets.mako',
                    sample=selected_sample_datasets[0].sample,
                    id_list=id_list)
            elif operation == "transfer":
                self.initiate_data_transfer(
                    trans,
                    trans.security.encode_id(
                        selected_sample_datasets[0].sample.id),
                    sample_datasets=selected_sample_datasets)
            elif operation == "view_external_service":
                return trans.response.send_redirect(
                    web.url_for(controller='external_service',
                                action='view_external_service',
                                **kwd))

        # Render the grid view
        request_id = trans.security.encode_id(sample.request.id)
        library_id = trans.security.encode_id(sample.library.id)
        self.datatx_grid.title = 'Manage "%s" datasets' % sample.name
        self.datatx_grid.global_actions = [
            grids.GridAction(
                "Browse target data library",
                dict(controller='library_common',
                     action='browse_library',
                     cntrller='library_admin',
                     id=library_id)),
            grids.GridAction(
                "Browse this request",
                dict(controller='requests_common',
                     action='view_request',
                     cntrller='requests_admin',
                     id=request_id))
        ]
        return self.datatx_grid(trans, **kwd)
コード例 #25
0
ファイル: requests_admin.py プロジェクト: linked2safety/code
 def initiate_data_transfer( self, trans, sample_id, sample_datasets=[], sample_dataset_id='' ):
     # Initiate the transfer of the datasets from the external service to the target Galaxy data library.
     # The admin user must have LIBRARY_ADD permission for the target library and folder
     try:
         sample = trans.sa_session.query( trans.model.Sample ).get( trans.security.decode_id( sample_id ) )
     except:
         return invalid_id_redirect( trans, 'requests_admin', sample_id, 'sample' )
     message = ""
     status = "done"
     # Make sure the current admin user has LIBRARY_ADD permission on the target data library and folder.
     self.__ensure_library_add_permission( trans, sample.library, sample.folder )
     if sample_dataset_id and not sample_datasets:
         # Either a list of SampleDataset objects or a comma-separated string of
         # encoded SampleDataset ids can be received.  If the latter, parse the
         # sample_dataset_id string to build the list of sample_datasets.
         id_list = util.listify( sample_dataset_id )
         for sample_dataset_id in id_list:
             sample_dataset = trans.sa_session.query( trans.model.SampleDataset ).get( trans.security.decode_id( sample_dataset_id ) )
             sample_datasets.append( sample_dataset )
     if trans.app.config.enable_beta_job_managers:
         # For now, assume that all SampleDatasets use the same external service ( this may not be optimal ).
         if sample_datasets:
             external_service_type_id = sample_datasets[0].external_service.external_service_type_id
             # Here external_service_type_id will be something like '454_life_sciences'
             external_service = sample.request.type.get_external_service( external_service_type_id )
             external_service_type = external_service.get_external_service_type( trans )
             external_service.load_data_transfer_settings( trans )
             # For now only scp is supported.
             scp_configs = external_service.data_transfer[ trans.model.ExternalService.data_transfer_protocol.SCP ]
             if not scp_configs[ 'automatic_transfer' ]:
                 deferred_plugin = 'ManualDataTransferPlugin'
             else:
                 raise Exception( "Automatic data transfer using scp is not yet supported." )
         trans.app.job_manager.deferred_job_queue.plugins[ deferred_plugin ].create_job( trans,
                                                                                         sample=sample,
                                                                                         sample_datasets=sample_datasets,
                                                                                         external_service=external_service,
                                                                                         external_service_type=external_service_type )
     else:
         # TODO: Using RabbitMq for now, but eliminate this entire block when we replace RabbitMq with Galaxy's
         # own messaging engine.  We're holding off on using the new way to transfer files manually until we 
         # implement a Galaxy-proprietary messaging engine because the deferred job plugins currently perform
         # constant db hits to check for deferred jobs that are not in a finished state.
         # Create the message
         messages = self.__create_data_transfer_messages( trans, sample, sample_datasets )
         # Send the messages 
         for rmq_msg in messages:
             try:
                 conn = amqp.Connection( host=trans.app.config.amqp[ 'host' ] + ":" + trans.app.config.amqp[ 'port' ], 
                                         userid=trans.app.config.amqp[ 'userid' ], 
                                         password=trans.app.config.amqp[ 'password' ], 
                                         virtual_host=trans.app.config.amqp[ 'virtual_host' ], 
                                         insist=False )   
                 chan = conn.channel()
                 msg = amqp.Message( rmq_msg, 
                                     content_type='text/plain', 
                                     application_headers={ 'msg_type': 'data_transfer' } )
                 msg.properties[ "delivery_mode" ] = 2
                 chan.basic_publish( msg,
                                     exchange=trans.app.config.amqp[ 'exchange' ],
                                     routing_key=trans.app.config.amqp[ 'routing_key' ] )
                 chan.close()
                 conn.close()
             except Exception, e:
                 message = "Error sending the data transfer message to the Galaxy AMQP message queue:<br/>%s" % str(e)
                 status = "error"
         if not message:
             message = "%i datasets have been queued for transfer from the external service." % len( sample_datasets )
             status = "done"
コード例 #26
0
ファイル: requests_admin.py プロジェクト: linked2safety/code
    def manage_datasets( self, trans, **kwd ):
        def handle_error( **kwd ):
            kwd[ 'status' ] = 'error'
            return trans.response.send_redirect( web.url_for( controller='requests_admin',
                                                              action='manage_datasets',
                                                              **kwd ) )
        params = util.Params( kwd )
        message = util.restore_text( params.get( 'message', ''  ) )
        status = params.get( 'status', 'done' )
        sample_id = params.get( 'sample_id', None )
        try:
            sample = trans.sa_session.query( trans.model.Sample ).get( trans.security.decode_id ( sample_id ) )
        except:
            return invalid_id_redirect( trans, 'requests_admin', sample_id, 'sample' )
        if 'operation' in kwd:
            operation = kwd[ 'operation' ].lower()
            sample_dataset_id = params.get( 'id', None )
            if not sample_dataset_id:
                message = 'Select at least 1 dataset to %s.' % operation
                kwd[ 'message' ] = message
                del kwd[ 'operation' ]
                handle_error( **kwd )
            id_list = util.listify( sample_dataset_id )
            selected_sample_datasets = []
            for sample_dataset_id in id_list:
                try:
                    sample_dataset = trans.sa_session.query( trans.model.SampleDataset ).get( trans.security.decode_id( sample_dataset_id ) )
                except:
                    return invalid_id_redirect( trans, 'requests_admin', sample_dataset_id, 'sample dataset' )
                selected_sample_datasets.append( sample_dataset )
            if operation == "view":
                return trans.fill_template( '/admin/requests/view_sample_dataset.mako',
                                            cntrller='requests_admin',
                                            sample_dataset=selected_sample_datasets[0] )
            elif operation == "delete":
                not_deleted = []
                for sample_dataset in selected_sample_datasets:
                    # Make sure the dataset has been transferred before deleting it.
                    if sample_dataset in sample_dataset.sample.untransferred_dataset_files:
                        # Save the sample dataset
                        sample = sample_dataset.sample
                        trans.sa_session.delete( sample_dataset )
                        trans.sa_session.flush()
                    else:
                        not_deleted.append( sample_dataset.name )
                message = '%i datasets have been deleted.' % ( len( id_list ) - len( not_deleted ) )
                if not_deleted:
                    status = 'warning'
                    message = message + '  %s could not be deleted because their transfer status is not "Not Started". ' % str( not_deleted )
                return trans.response.send_redirect( web.url_for( controller='requests_admin',
                                                                  action='manage_datasets',
                                                                  sample_id=trans.security.encode_id( sample.id ),
                                                                  status=status,
                                                                  message=message ) )
            elif operation == "rename":
                # If one of the selected sample datasets is in the NOT_STARTED state,
                # then display an error message.  A NOT_STARTED state implies the dataset
                # has not yet been transferred.
                no_datasets_transferred = True
                for selected_sample_dataset in selected_sample_datasets:
                    if selected_sample_dataset in selected_sample_dataset.sample.untransferred_dataset_files:
                        no_datasets_transferred = False
                        break
                if no_datasets_transferred:
                    status = 'error'
                    message = 'A dataset can be renamed only if it has been transferred.'
                    return trans.response.send_redirect( web.url_for( controller='requests_admin',
                                                                      action='manage_datasets',
                                                                      sample_id=trans.security.encode_id( selected_sample_datasets[0].sample.id ),
                                                                      status=status,
                                                                      message=message ) )
                return trans.fill_template( '/admin/requests/rename_datasets.mako', 
                                            sample=selected_sample_datasets[0].sample,
                                            id_list=id_list )
            elif operation == "transfer":
                self.initiate_data_transfer( trans,
                                             trans.security.encode_id( selected_sample_datasets[0].sample.id ),
                                             sample_datasets=selected_sample_datasets )
            elif operation == "view_external_service":
                return trans.response.send_redirect( web.url_for( controller='external_service',
                                                                  action='view_external_service',
                                                                  **kwd ) )

        # Render the grid view
        request_id = trans.security.encode_id( sample.request.id )
        library_id = trans.security.encode_id( sample.library.id )
        self.datatx_grid.title = 'Manage "%s" datasets'  % sample.name
        self.datatx_grid.global_actions = [ grids.GridAction( "Browse target data library", 
                                                              dict( controller='library_common', 
                                                                    action='browse_library', 
                                                                    cntrller='library_admin', 
                                                                    id=library_id ) ),
                                            grids.GridAction( "Browse this request", 
                                                              dict( controller='requests_common', 
                                                                    action='view_request',
                                                                    cntrller='requests_admin',
                                                                    id=request_id ) ) ]
        return self.datatx_grid( trans, **kwd )