Пример #1
0
 def create( self, trans, visualization_title="", visualization_slug="", visualization_annotation="", visualization_dbkey="",
             visualization_type="" ):
     """
     Creates a new visualization or returns a form for creating visualization.
     """
     visualization_title_err = visualization_slug_err = visualization_annotation_err = ""
     if trans.request.method == "POST":
         rval = self.create_visualization( trans, title=visualization_title, 
                                           slug=visualization_slug, 
                                           annotation=visualization_annotation,
                                           dbkey=visualization_dbkey,
                                           type=visualization_type )
         if isinstance( rval, dict ):
             # Found error creating viz.
             visualization_title_err = rval[ 'title_err' ]
             visualization_slug_err = rval[ 'slug_err' ]
         else:
             # Successfully created viz.
             return trans.response.send_redirect( web.url_for(controller='visualization', action='list' ) )
     
     viz_type_options = [ ( t, t ) for t in self.viz_types ]
     return trans.show_form( 
         web.FormBuilder( web.url_for(controller='visualization', action='create'), "Create new visualization", submit_text="Submit" )
             .add_text( "visualization_title", "Visualization title", value=visualization_title, error=visualization_title_err )
             .add_select( "visualization_type", "Type", options=viz_type_options, error=None )
             .add_text( "visualization_slug", "Visualization identifier", value=visualization_slug, error=visualization_slug_err,
                        help="""A unique identifier that will be used for
                             public links to this visualization. A default is generated
                             from the visualization title, but can be edited. This field
                             must contain only lowercase letters, numbers, and
                             the '-' character.""" )
             .add_select( "visualization_dbkey", "Visualization DbKey/Build", value=visualization_dbkey, options=trans.app.genomes.get_dbkeys( trans, chrom_info=True ), error=None)
             .add_text( "visualization_annotation", "Visualization annotation", value=visualization_annotation, error=visualization_annotation_err,
                         help="A description of the visualization; annotation is shown alongside published visualizations."),
             template="visualization/create.mako" )
Пример #2
0
 def reset_password(self, trans, email=None, **kwd):
     error = ''
     reset_user = trans.app.model.User.get_by(email=email)
     user = trans.get_user()
     if reset_user:
         if user and user.id != reset_user.id:
             error = "You may only reset your own password"
         else:
             chars = string.letters + string.digits
             new_pass = ""
             for i in range(15):
                 new_pass = new_pass + choice(chars)
             mail = os.popen("%s -t" % self.app.config.sendmail_path, 'w')
             mail.write(
                 "To: %s\nFrom: no-reply@%s\nSubject: Galaxy Password Reset\n\nYour password has been reset to \"%s\" (no quotes)."
                 % (email, trans.request.remote_addr, new_pass))
             if mail.close():
                 return trans.show_ok_message(
                     "Failed to reset password! If this problem persist, submit a bug report."
                 )
             reset_user.set_password_cleartext(new_pass)
             reset_user.flush()
             trans.log_event("User reset password: %s" % email)
             return trans.show_ok_message(
                 "Password has been reset and emailed to: %s." % email)
     elif email != None:
         error = "The specified user does not exist"
     return trans.show_form(
         web.FormBuilder("/user/reset_password",
                         "Reset Password",
                         submit_text="Submit").add_text("email",
                                                        "Email",
                                                        value=email,
                                                        error=error))
Пример #3
0
 def create(self,
            trans,
            email='',
            password='',
            confirm='',
            subscribe=False):
     email_error = password_error = confirm_error = None
     if email:
         if len(email) == 0 or "@" not in email or "." not in email:
             email_error = "Please enter a real email address"
         elif len(email) > 255:
             email_error = "Email address exceeds maximum allowable length"
         elif len(trans.app.model.User.select_by(email=email)) > 0:
             email_error = "User with that email already exists"
         elif len(password) < 6:
             password_error = "Please use a password of at least 6 characters"
         elif password != confirm:
             confirm_error = "Passwords do not match"
         else:
             user = trans.app.model.User(email=email)
             user.set_password_cleartext(password)
             user.flush()
             trans.set_user(user)
             trans.log_event("User new")
             trans.log_event("User logged in")
             #subscribe user to email list
             if subscribe:
                 mail = os.popen("%s -t" % self.app.config.sendmail_path,
                                 'w')
                 mail.write(
                     "To: %s\nFrom: %s\nSubject: Join Mailing List\n\nJoin Mailing list."
                     % (self.app.config.mailing_join_addr, email))
                 if mail.close():
                     return trans.show_warn_message(
                         "Now logged in as " + user.email +
                         ". However, subscribing to the mailing list has failed.",
                         refresh_frames=['masthead', 'history'])
             return trans.show_ok_message(
                 "Now logged in as " + user.email,
                 refresh_frames=['masthead', 'history'])
     return trans.show_form(
         web.FormBuilder("/user/create",
                         "Create account",
                         submit_text="Create").add_text(
                             "email",
                             "Email address",
                             value=email,
                             error=email_error).add_password(
                                 "password",
                                 "Password",
                                 value='',
                                 error=password_error).add_password(
                                     "confirm",
                                     "Confirm password",
                                     value='',
                                     error=confirm_error).add_input(
                                         "checkbox",
                                         "Subscribe To Mailing List",
                                         "subscribe",
                                         value='subscribe'))
Пример #4
0
 def login(self, trans, email='', password=''):
     email_error = password_error = None
     # Attempt login
     if email or password:
         user = trans.app.model.User.get_by(email=email)
         if not user:
             email_error = "No such user"
         elif not user.check_password(password):
             password_error = "Invalid password"
         else:
             trans.set_user(user)
             trans.log_event("User logged in")
             return trans.show_ok_message( "Now logged in as " + user.email, \
                 refresh_frames=['masthead', 'history'] )
     return trans.show_form(
         web.FormBuilder("/user/login", "Login",
                         submit_text="Login").add_text("email",
                                                       "Email address",
                                                       value=email,
                                                       error=email_error).
         add_password(
             "password",
             "Password",
             value='',
             error=password_error,
             help=
             "<a href=\"/user/reset_password\">Forgot password? Reset here</a>"
         ))
 def edit( self, trans, id, page_title="", page_slug="", page_annotation="" ):
     """
     Edit a page's attributes.
     """
     encoded_id = id
     id = trans.security.decode_id( id )
     session = trans.sa_session
     page = session.query( model.Page ).get( id )
     user = trans.user
     assert page.user == user
     page_title_err = page_slug_err = page_annotation_err = ""
     if trans.request.method == "POST":
         if not page_title:
             page_title_err = "Page name is required"
         elif not page_slug:
             page_slug_err = "Page id is required"
         elif not self._is_valid_slug( page_slug ):
             page_slug_err = "Page identifier must consist of only lowercase letters, numbers, and the '-' character"
         elif page_slug != page.slug and trans.sa_session.query( model.Page ).filter_by( user=user, slug=page_slug, deleted=False ).first():
             page_slug_err = "Page id must be unique"
         elif not page_annotation:
             page_annotation_err = "Page annotation is required"
         else:
             page.title = page_title
             page.slug = page_slug
             page_annotation = sanitize_html( page_annotation, 'utf-8', 'text/html' )
             self.add_item_annotation( trans.sa_session, trans.get_user(), page, page_annotation )
             session.flush()
             # Redirect to page list.
             return trans.response.send_redirect( web.url_for(controller='page', action='list' ) )
     else:
         page_title = page.title
         page_slug = page.slug
         page_annotation = self.get_item_annotation_str( trans.sa_session, trans.user, page )
         if not page_annotation:
             page_annotation = ""
     return trans.show_form(
         web.FormBuilder( web.url_for(controller='page', action='edit', id=encoded_id ), "Edit page attributes", submit_text="Submit" )
             .add_text( "page_title", "Page title", value=page_title, error=page_title_err )
             .add_text( "page_slug", "Page identifier", value=page_slug, error=page_slug_err,
                        help="""A unique identifier that will be used for
                             public links to this page. A default is generated
                             from the page title, but can be edited. This field
                             must contain only lowercase letters, numbers, and
                             the '-' character.""" )
             .add_text( "page_annotation", "Page annotation", value=page_annotation, error=page_annotation_err,
                         help="A description of the page; annotation is shown alongside published pages."),
         template="page/create.mako" )
 def create( self, trans, page_title="", page_slug="", page_annotation="" ):
     """
     Create a new page
     """
     user = trans.get_user()
     page_title_err = page_slug_err = page_annotation_err = ""
     if trans.request.method == "POST":
         if not page_title:
             page_title_err = "Page name is required"
         elif not page_slug:
             page_slug_err = "Page id is required"
         elif not self._is_valid_slug( page_slug ):
             page_slug_err = "Page identifier must consist of only lowercase letters, numbers, and the '-' character"
         elif trans.sa_session.query( model.Page ).filter_by( user=user, slug=page_slug, deleted=False ).first():
             page_slug_err = "Page id must be unique"
         else:
             # Create the new stored page
             page = model.Page()
             page.title = page_title
             page.slug = page_slug
             page_annotation = sanitize_html( page_annotation, 'utf-8', 'text/html' )
             self.add_item_annotation( trans.sa_session, trans.get_user(), page, page_annotation )
             page.user = user
             # And the first (empty) page revision
             page_revision = model.PageRevision()
             page_revision.title = page_title
             page_revision.page = page
             page.latest_revision = page_revision
             page_revision.content = ""
             # Persist
             session = trans.sa_session
             session.add( page )
             session.flush()
             # Display the management page
             ## trans.set_message( "Page '%s' created" % page.title )
             return trans.response.send_redirect( web.url_for(controller='page', action='list' ) )
     return trans.show_form(
         web.FormBuilder( web.url_for(controller='page', action='create'), "Create new page", submit_text="Submit" )
             .add_text( "page_title", "Page title", value=page_title, error=page_title_err )
             .add_text( "page_slug", "Page identifier", value=page_slug, error=page_slug_err,
                        help="""A unique identifier that will be used for
                             public links to this page. A default is generated
                             from the page title, but can be edited. This field
                             must contain only lowercase letters, numbers, and
                             the '-' character.""" )
             .add_text( "page_annotation", "Page annotation", value=page_annotation, error=page_annotation_err,
                         help="A description of the page; annotation is shown alongside published pages."),
             template="page/create.mako" )
Пример #7
0
 def edit( self, trans, id, visualization_title="", visualization_slug="", visualization_annotation="" ):
     """
     Edit a visualization's attributes.
     """
     visualization = self.get_visualization( trans, id, check_ownership=True )
     session = trans.sa_session
     
     visualization_title_err = visualization_slug_err = visualization_annotation_err = ""
     if trans.request.method == "POST":
         if not visualization_title:
             visualization_title_err = "Visualization name is required"
         elif not visualization_slug:
             visualization_slug_err = "Visualization id is required"
         elif not self._is_valid_slug( visualization_slug ):
             visualization_slug_err = "Visualization identifier must consist of only lowercase letters, numbers, and the '-' character"
         elif visualization_slug != visualization.slug and trans.sa_session.query( model.Visualization ).filter_by( user=visualization.user, slug=visualization_slug, deleted=False ).first():
             visualization_slug_err = "Visualization id must be unique"
         else:
             visualization.title = visualization_title
             visualization.slug = visualization_slug
             if visualization_annotation != "":
                 visualization_annotation = sanitize_html( visualization_annotation, 'utf-8', 'text/html' )
                 self.add_item_annotation( trans.sa_session, trans.get_user(), visualization, visualization_annotation )
             session.flush()
             # Redirect to visualization list.
             return trans.response.send_redirect( web.url_for(controller='visualization', action='list' ) )
     else:
         visualization_title = visualization.title
         # Create slug if it's not already set.
         if visualization.slug is None:
             self.create_item_slug( trans.sa_session, visualization )
         visualization_slug = visualization.slug
         visualization_annotation = self.get_item_annotation_str( trans.sa_session, trans.user, visualization )
         if not visualization_annotation:
             visualization_annotation = ""
     return trans.show_form( 
         web.FormBuilder( web.url_for(controller='visualization', action='edit', id=id ), "Edit visualization attributes", submit_text="Submit" )
             .add_text( "visualization_title", "Visualization title", value=visualization_title, error=visualization_title_err )
             .add_text( "visualization_slug", "Visualization identifier", value=visualization_slug, error=visualization_slug_err,
                        help="""A unique identifier that will be used for
                             public links to this visualization. A default is generated
                             from the visualization title, but can be edited. This field
                             must contain only lowercase letters, numbers, and
                             the '-' character.""" )
             .add_text( "visualization_annotation", "Visualization annotation", value=visualization_annotation, error=visualization_annotation_err,
                         help="A description of the visualization; annotation is shown alongside published visualizations."),
         template="visualization/create.mako" )
Пример #8
0
    def get_config_form(self):
        type_hints = odict.odict()
        type_hints["list"] = "List of Datasets"
        type_hints["paired"] = "Dataset Pair"
        type_hints["list:paired"] = "List of Dataset Pairs"

        type_input = web.framework.DatalistInput(
            name="collection_type",
            label="Collection Type",
            value=self.state["collection_type"],
            extra_attributes=dict(refresh_on_change='true'),
            options=type_hints)
        form = web.FormBuilder(title=self.name).add_text(
            "name", "Name", value=self.state['name'])
        form.inputs.append(type_input)
        return self.trans.fill_template("workflow/editor_generic_form.mako",
                                        module=self,
                                        form=form)
Пример #9
0
    def change_password(self,
                        trans,
                        old_pass='',
                        new_pass='',
                        conf_pass='',
                        **kwd):
        old_pass_err = new_pass_err = conf_pass_err = ''
        user = trans.get_user()
        if not user:
            trans.response.send_redirect("/user/login")

        if not user.check_password(old_pass):
            old_pass_err = "Invalid password"
        elif len(new_pass) < 6:
            new_pass_err = "Please use a password of at least 6 characters"
        elif new_pass != conf_pass:
            conf_pass_err = "New passwords do not match."
        else:
            user.set_password_cleartext(new_pass)
            user.flush()
            trans.log_event("User change password")
            return trans.show_ok_message("Password has been changed for " +
                                         user.email)

        return trans.show_form(
            web.FormBuilder("/user/change_password",
                            "Change Password",
                            submit_text="Submit").add_password(
                                "old_pass",
                                "Old Password",
                                value='',
                                error=old_pass_err).add_password(
                                    "new_pass",
                                    "New Password",
                                    value='',
                                    error=new_pass_err).add_password(
                                        "conf_pass",
                                        "Confirm Password",
                                        value='',
                                        error=conf_pass_err))
Пример #10
0
    def change_email(self, trans, email='', conf_email='', password='', **kwd):
        email_err = conf_email_err = pass_err = ''
        user = trans.get_user()
        if not user:
            trans.response.send_redirect("/user/login")

        if not user.check_password(password):
            pass_err = "Invalid password"
        elif len(email) == 0 or "@" not in email or "." not in email:
            email_err = "Please enter a real email address"
        elif len(email) > 255:
            email_err = "Email address exceeds maximum allowable length"
        elif len(trans.app.model.User.select_by(email=email)) > 0:
            email_err = "User with that email already exists"
        elif email != conf_email:
            conf_email_err = "Email addresses do not match."
        else:
            user.email = email
            user.flush()
            trans.log_event("User change email")
            return trans.show_ok_message(
                "Email has been changed to: " + user.email,
                refresh_frames=['masthead', 'history'])

        return trans.show_form(
            web.FormBuilder("/user/change_email",
                            "Change Email",
                            submit_text="Submit").add_text(
                                "email", "Email", value=email,
                                error=email_err).add_text(
                                    "conf_email",
                                    "Confirm Email",
                                    value='',
                                    error=conf_email_err).add_password(
                                        "password",
                                        "Password",
                                        value='',
                                        error=pass_err))
Пример #11
0
 def get_config_form( self ):
     form = web.FormBuilder( title=self.name ) \
         .add_text( "name", "Name", value=self.state['name'] )
     return self.trans.fill_template( "workflow/editor_generic_form.mako",
                                      module=self, form=form )