def create_category( self, trans, **kwd ):
     message = kwd.get( 'message', ''  )
     status = kwd.get( 'status', 'done' )
     name = kwd.get( 'name', '' ).strip()
     description = kwd.get( 'description', '' ).strip()
     if kwd.get( 'create_category_button', False ):
         if not name or not description:
             message = 'Enter a valid name and a description'
             status = 'error'
         elif suc.get_category_by_name( trans.app, name ):
             message = 'A category with that name already exists'
             status = 'error'
         else:
             # Create the category
             category = trans.app.model.Category( name=name, description=description )
             trans.sa_session.add( category )
             trans.sa_session.flush()
             # Update the Tool Shed's repository registry.
             trans.app.repository_registry.add_category_entry( category )
             message = "Category '%s' has been created" % category.name
             status = 'done'
             trans.response.send_redirect( web.url_for( controller='admin',
                                                        action='manage_categories',
                                                        message=message,
                                                        status=status ) )
     return trans.fill_template( '/webapps/tool_shed/category/create_category.mako',
                                 name=name,
                                 description=description,
                                 message=message,
                                 status=status )
Beispiel #2
0
 def create_category(self, trans, **kwd):
     message = escape(kwd.get('message', ''))
     status = kwd.get('status', 'done')
     name = kwd.get('name', '').strip()
     description = kwd.get('description', '').strip()
     if kwd.get('create_category_button', False):
         if not name or not description:
             message = 'Enter a valid name and a description'
             status = 'error'
         elif suc.get_category_by_name(trans.app, name):
             message = 'A category with that name already exists'
             status = 'error'
         else:
             # Create the category
             category = trans.app.model.Category(name=name,
                                                 description=description)
             trans.sa_session.add(category)
             trans.sa_session.flush()
             # Update the Tool Shed's repository registry.
             trans.app.repository_registry.add_category_entry(category)
             message = "Category '%s' has been created" % escape(
                 category.name)
             status = 'done'
             trans.response.send_redirect(
                 web.url_for(controller='admin',
                             action='manage_categories',
                             message=message,
                             status=status))
     return trans.fill_template(
         '/webapps/tool_shed/category/create_category.mako',
         name=name,
         description=description,
         message=message,
         status=status)
Beispiel #3
0
 def create_category(self, trans, **kwd):
     message = escape(kwd.get("message", ""))
     status = kwd.get("status", "done")
     name = kwd.get("name", "").strip()
     description = kwd.get("description", "").strip()
     if kwd.get("create_category_button", False):
         if not name or not description:
             message = "Enter a valid name and a description"
             status = "error"
         elif suc.get_category_by_name(trans.app, name):
             message = "A category with that name already exists"
             status = "error"
         else:
             # Create the category
             category = trans.app.model.Category(name=name, description=description)
             trans.sa_session.add(category)
             trans.sa_session.flush()
             # Update the Tool Shed's repository registry.
             trans.app.repository_registry.add_category_entry(category)
             message = "Category '%s' has been created" % escape(category.name)
             status = "done"
             trans.response.send_redirect(
                 web.url_for(controller="admin", action="manage_categories", message=message, status=status)
             )
     return trans.fill_template(
         "/webapps/tool_shed/category/create_category.mako",
         name=name,
         description=description,
         message=message,
         status=status,
     )
def create_repository_and_import_archive( trans, repository_archive_dict, import_results_tups ):
    """
    Create a new repository in the tool shed and populate it with the contents of a gzip compressed tar archive that was exported
    as part or all of the contents of a capsule.
    """
    results_message = ''
    name = repository_archive_dict.get( 'name', None )
    username = repository_archive_dict.get( 'owner', None )
    if name is None or username is None:
        results_message += 'Import failed: required repository name <b>%s</b> or owner <b>%s</b> is missing.' % ( str( name ), str( username ))
        import_results_tups.append( ( ( str( name ), str( username ) ), results_message ) )
    else:
        if repository_archive_dict[ 'status' ] is None:
            # The repository does not yet exist in this Tool Shed and the current user is authorized to import
            # the current archive file.
            type = repository_archive_dict.get( 'type', 'unrestricted' )
            description = repository_archive_dict.get( 'description', '' )
            long_description = repository_archive_dict.get( 'long_description', '' )
            # The owner entry in the repository_archive_dict is the public username of the user associated with
            # the exported repository archive.
            user = suc.get_user_by_username( trans.app, username )
            if user is None:
                results_message += 'Import failed: repository owner <b>%s</b> does not have an account in this Tool Shed.' % str( username )
                import_results_tups.append( ( ( str( name ), str( username ) ), results_message ) )
            else:
                user_id = user.id
                # The categories entry in the repository_archive_dict is a list of category names.  If a name does not
                # exist in the current Tool Shed, the category will not be created, so it will not be associated with
                # the repository.
                category_ids = []
                category_names = repository_archive_dict[ 'category_names' ]
                for category_name in category_names:
                    category = suc.get_category_by_name( trans, category_name )
                    if category is None:
                        results_message += 'This Tool Shed does not have the category <b>%s</b> so it will not be associated with this repository.' % \
                            str( category_name )
                    else:
                        category_ids.append( trans.security.encode_id( category.id ) )
                # Create the repository record in the database.
                repository, create_message = create_repository( trans,
                                                                name,
                                                                type,
                                                                description,
                                                                long_description,
                                                                user_id=user_id,
                                                                category_ids=category_ids )
                if create_message:
                    results_message += create_message
                # Populate the new repository with the contents of exported repository archive.
                results_dict = import_util.import_repository_archive( trans, repository, repository_archive_dict )
                import_results_tups.append( ( ( str( name ), str( username ) ), results_message ) )
        else:
            # The repository either already exists in this Tool Shed or the current user is not authorized to create it.
            results_message += 'Import not necessary: repository status for this Tool Shed is: %s.' % str( repository_archive_dict[ 'status' ] )
            import_results_tups.append( ( ( str( name ), str( username ) ), results_message ) )
    return import_results_tups
Beispiel #5
0
 def edit_category(self, trans, **kwd):
     '''Handle requests to edit TS category name or description'''
     message = escape(kwd.get('message', ''))
     status = kwd.get('status', 'done')
     id = kwd.get('id', None)
     if not id:
         message = "No category ids received for editing"
         trans.response.send_redirect(
             web.url_for(controller='admin',
                         action='manage_categories',
                         message=message,
                         status='error'))
     category = suc.get_category(trans.app, id)
     original_category_name = str(category.name)
     original_category_description = str(category.description)
     if kwd.get('edit_category_button', False):
         flush_needed = False
         new_name = kwd.get('name', '').strip()
         new_description = kwd.get('description', '').strip()
         if original_category_name != new_name:
             if not new_name:
                 message = 'Enter a valid name'
                 status = 'error'
             elif original_category_name != new_name and suc.get_category_by_name(
                     trans.app, new_name):
                 message = 'A category with that name already exists'
                 status = 'error'
             else:
                 category.name = new_name
                 flush_needed = True
         if original_category_description != new_description:
             category.description = new_description
             if not flush_needed:
                 flush_needed = True
         if flush_needed:
             trans.sa_session.add(category)
             trans.sa_session.flush()
             if original_category_name != new_name:
                 # Update the Tool Shed's repository registry.
                 trans.app.repository_registry.edit_category_entry(
                     original_category_name, new_name)
             message = "The information has been saved for category '%s'" % escape(
                 category.name)
             status = 'done'
             return trans.response.send_redirect(
                 web.url_for(controller='admin',
                             action='manage_categories',
                             message=message,
                             status=status))
     return trans.fill_template(
         '/webapps/tool_shed/category/edit_category.mako',
         category=category,
         message=message,
         status=status)
Beispiel #6
0
    def create(self, trans, payload, **kwd):
        """
        POST /api/categories
        Returns a dictionary of information about the created category.

:       param key: the current Galaxy admin user's API key

        The following parameters are included in the payload.
        :param name (required): the name of the category
        :param description (optional): the description of the category (if not provided, the name will be used)
        """
        category_dict = dict(message='', status='ok')
        # Make sure the current user's API key proves he is an admin user in this Tool Shed.
        if trans.user_is_admin():
            # Get the information about the category to be created from the payload.
            name = payload.get('name', '')
            if name:
                description = payload.get('description', '')
                if not description:
                    # Default the description to the name.
                    description = name
                if suc.get_category_by_name(trans.app, name):
                    category_dict[
                        'message'] = 'A category with that name already exists'
                    category_dict['status'] = 'error'
                else:
                    # Create the category
                    category = trans.app.model.Category(
                        name=name, description=description)
                    trans.sa_session.add(category)
                    trans.sa_session.flush()
                    category_dict = category.to_dict(
                        view='element',
                        value_mapper=self.__get_value_mapper(trans))
                    category_dict[
                        'message'] = "Category '%s' has been created" % str(
                            category.name)
                    category_dict['url'] = web.url_for(
                        controller='categories',
                        action='show',
                        id=trans.security.encode_id(category.id))
            else:
                category_dict['message'] = "Missing required parameter 'name'."
                category_dict['status'] = 'error'
        else:
            category_dict[
                'message'] = 'You are not authorized to create a category in this Tool Shed.'
            category_dict['status'] = 'error'
        return category_dict
Beispiel #7
0
 def edit_category(self, trans, **kwd):
     '''Handle requests to edit TS category name or description'''
     message = escape(kwd.get('message', ''))
     status = kwd.get('status', 'done')
     id = kwd.get('id', None)
     if not id:
         message = "No category ids received for editing"
         trans.response.send_redirect(web.url_for(controller='admin',
                                                  action='manage_categories',
                                                  message=message,
                                                  status='error'))
     category = suc.get_category(trans.app, id)
     original_category_name = str(category.name)
     original_category_description = str(category.description)
     if kwd.get('edit_category_button', False):
         flush_needed = False
         new_name = kwd.get('name', '').strip()
         new_description = kwd.get('description', '').strip()
         if original_category_name != new_name:
             if not new_name:
                 message = 'Enter a valid name'
                 status = 'error'
             elif original_category_name != new_name and suc.get_category_by_name(trans.app, new_name):
                 message = 'A category with that name already exists'
                 status = 'error'
             else:
                 category.name = new_name
                 flush_needed = True
         if original_category_description != new_description:
             category.description = new_description
             if not flush_needed:
                 flush_needed = True
         if flush_needed:
             trans.sa_session.add(category)
             trans.sa_session.flush()
             if original_category_name != new_name:
                 # Update the Tool Shed's repository registry.
                 trans.app.repository_registry.edit_category_entry(original_category_name, new_name)
             message = "The information has been saved for category '%s'" % escape(category.name)
             status = 'done'
             return trans.response.send_redirect(web.url_for(controller='admin',
                                                             action='manage_categories',
                                                             message=message,
                                                             status=status))
     return trans.fill_template('/webapps/tool_shed/category/edit_category.mako',
                                category=category,
                                message=message,
                                status=status)
Beispiel #8
0
 def edit_category(self, trans, **kwd):
     message = escape(kwd.get("message", ""))
     status = kwd.get("status", "done")
     id = kwd.get("id", None)
     if not id:
         message = "No category ids received for editing"
         trans.response.send_redirect(
             web.url_for(controller="admin", action="manage_categories", message=message, status="error")
         )
     category = suc.get_category(trans.app, id)
     original_category_name = str(category.name)
     original_category_description = str(category.description)
     if kwd.get("edit_category_button", False):
         flush_needed = False
         new_name = kwd.get("name", "").strip()
         new_description = kwd.get("description", "").strip()
         if original_category_name != new_name:
             if not new_name:
                 message = "Enter a valid name"
                 status = "error"
             elif original_category_name != new_name and suc.get_category_by_name(trans.app, new_name):
                 message = "A category with that name already exists"
                 status = "error"
             else:
                 category.name = new_name
                 flush_needed = True
             if original_category_description != new_description:
                 category.description = new_description
                 if not flush_needed:
                     flush_needed = True
             if flush_needed:
                 trans.sa_session.add(category)
                 trans.sa_session.flush()
                 if original_category_name != new_name:
                     # Update the Tool Shed's repository registry.
                     trans.app.repository_registry.edit_category_entry(original_category_name, new_name)
                 message = "The information has been saved for category '%s'" % escape(category.name)
                 status = "done"
                 return trans.response.send_redirect(
                     web.url_for(controller="admin", action="manage_categories", message=message, status=status)
                 )
     return trans.fill_template(
         "/webapps/tool_shed/category/edit_category.mako", category=category, message=message, status=status
     )
Beispiel #9
0
    def create(self, trans, payload, **kwd):
        """
        POST /api/categories
        Return a dictionary of information about the created category.
        The following parameters are included in the payload:

        :param name (required): the name of the category
        :param description (optional): the description of the category (if not provided, the name will be used)

        Example: POST /api/categories/?key=XXXYYYXXXYYY
        Content-Disposition: form-data; name="name" Category_Name
        Content-Disposition: form-data; name="description" Category_Description
        """
        category_dict = dict(message='', status='ok')
        name = payload.get('name', '')
        if name:
            description = payload.get('description', '')
            if not description:
                # Default the description to the name.
                description = name
            if suc.get_category_by_name(self.app, name):
                raise exceptions.Conflict(
                    'A category with that name already exists.')
            else:
                # Create the category
                category = self.app.model.Category(name=name,
                                                   description=description)
                trans.sa_session.add(category)
                trans.sa_session.flush()
                category_dict = category.to_dict(
                    view='element',
                    value_mapper=self.__get_value_mapper(trans))
                category_dict[
                    'message'] = "Category '%s' has been created" % str(
                        category.name)
                category_dict['url'] = web.url_for(controller='categories',
                                                   action='show',
                                                   id=trans.security.encode_id(
                                                       category.id))
        else:
            raise exceptions.RequestParameterMissingException(
                'Missing required parameter "name".')
        return category_dict
Beispiel #10
0
    def create( self, trans, payload, **kwd ):
        """
        POST /api/categories
        Returns a dictionary of information about the created category.

:       param key: the current Galaxy admin user's API key

        The following parameters are included in the payload.
        :param name (required): the name of the category
        :param description (optional): the description of the category (if not provided, the name will be used)
        """
        category_dict = dict( message = '',
                              status = 'ok' )
        # Make sure the current user's API key proves he is an admin user in this Tool Shed.
        if trans.user_is_admin():
            # Get the information about the category to be created from the payload.
            name = payload.get( 'name', '' )
            if name:
                description = payload.get( 'description', '' )
                if not description:
                    # Default the description to the name.
                    description = name
                if suc.get_category_by_name( trans.app, name ):
                    category_dict[ 'message' ] = 'A category with that name already exists'
                    category_dict[ 'status' ] = 'error'
                else:
                    # Create the category
                    category = trans.app.model.Category( name=name, description=description )
                    trans.sa_session.add( category )
                    trans.sa_session.flush()
                    category_dict = category.to_dict( view='element',
                                                      value_mapper=self.__get_value_mapper( trans ) )
                    category_dict[ 'message' ] = "Category '%s' has been created" % str( category.name )
                    category_dict[ 'url' ] = web.url_for( controller='categories',
                                                          action='show',
                                                          id=trans.security.encode_id( category.id ) )
            else:
                category_dict[ 'message' ] = "Missing required parameter 'name'."
                category_dict[ 'status' ] = 'error'
        else:
            category_dict[ 'message' ] = 'You are not authorized to create a category in this Tool Shed.'
            category_dict[ 'status' ] = 'error'
        return category_dict
Beispiel #11
0
    def create( self, trans, payload, **kwd ):
        """
        POST /api/categories
        Return a dictionary of information about the created category.
        The following parameters are included in the payload:

        :param name (required): the name of the category
        :param description (optional): the description of the category (if not provided, the name will be used)

        Example: POST /api/categories/?key=XXXYYYXXXYYY
        Content-Disposition: form-data; name="name" Category_Name
        Content-Disposition: form-data; name="description" Category_Description
        """
        category_dict = dict( message='', status='ok' )
        name = payload.get( 'name', '' )
        if name:
            description = payload.get( 'description', '' )
            if not description:
                # Default the description to the name.
                description = name
            if suc.get_category_by_name( self.app, name ):
                raise exceptions.Conflict( 'A category with that name already exists.' )
            else:
                # Create the category
                category = self.app.model.Category( name=name, description=description )
                trans.sa_session.add( category )
                trans.sa_session.flush()
                category_dict = category.to_dict( view='element',
                                                  value_mapper=self.__get_value_mapper( trans ) )
                category_dict[ 'message' ] = "Category '%s' has been created" % str( category.name )
                category_dict[ 'url' ] = web.url_for( controller='categories',
                                                      action='show',
                                                      id=trans.security.encode_id( category.id ) )
        else:
            raise exceptions.RequestParameterMissingException( 'Missing required parameter "name".' )
        return category_dict
Beispiel #12
0
 def edit_category( self, trans, **kwd ):
     message = kwd.get( 'message', ''  )
     status = kwd.get( 'status', 'done' )
     id = kwd.get( 'id', None )
     if not id:
         message = "No category ids received for editing"
         trans.response.send_redirect( web.url_for( controller='admin',
                                                    action='manage_categories',
                                                    message=message,
                                                    status='error' ) )
     category = suc.get_category( trans, id )
     if kwd.get( 'edit_category_button', False ):
         new_name = kwd.get( 'name', '' ).strip()
         new_description = kwd.get( 'description', '' ).strip()
         if category.name != new_name or category.description != new_description:
             if not new_name:
                 message = 'Enter a valid name'
                 status = 'error'
             elif category.name != new_name and suc.get_category_by_name( trans, new_name ):
                 message = 'A category with that name already exists'
                 status = 'error'
             else:
                 category.name = new_name
                 category.description = new_description
                 trans.sa_session.add( category )
                 trans.sa_session.flush()
                 message = "The information has been saved for category '%s'" % ( category.name )
                 status = 'done'
                 return trans.response.send_redirect( web.url_for( controller='admin',
                                                                   action='manage_categories',
                                                                   message=message,
                                                                   status=status ) )
     return trans.fill_template( '/webapps/tool_shed/category/edit_category.mako',
                                 category=category,
                                 message=message,
                                 status=status )