galaxy-dev
Threads by month
- ----- 2025 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- 10008 discussions

16 Apr '10
details: http://www.bx.psu.edu/hg/galaxy/rev/56f4041ca926
changeset: 3585:56f4041ca926
user: Dan Blankenberg <dan(a)bx.psu.edu>
date: Wed Mar 31 10:59:20 2010 -0400
description:
Fix header to column assignment in interval.set_meta().
diffstat:
lib/galaxy/datatypes/interval.py | 16 ++++++----------
1 files changed, 6 insertions(+), 10 deletions(-)
diffs (26 lines):
diff -r e34b76fcdb82 -r 56f4041ca926 lib/galaxy/datatypes/interval.py
--- a/lib/galaxy/datatypes/interval.py Wed Mar 31 10:32:23 2010 -0400
+++ b/lib/galaxy/datatypes/interval.py Wed Mar 31 10:59:20 2010 -0400
@@ -90,16 +90,12 @@
self.init_meta( dataset )
line = line.strip( '#' )
elems = line.split( '\t' )
- valid = dict( alias_helper ) # shrinks
- for index, col_name in enumerate( elems ):
- if col_name in valid:
- meta_name = valid[col_name]
- if overwrite or not dataset.metadata.element_is_set( meta_name ):
- setattr( dataset.metadata, meta_name, index+1 )
- values = alias_spec[ meta_name ]
- start = values.index( col_name )
- for lower in values[ start: ]:
- del valid[ lower ] # removes lower priority keys
+ for meta_name, header_list in alias_spec.iteritems():
+ for header_val in header_list:
+ if header_val in elems:
+ #found highest priority header to meta_name
+ setattr( dataset.metadata, meta_name, elems.index( header_val ) + 1 )
+ break #next meta_name
break # Our metadata is set, so break out of the outer loop
else:
# Header lines in Interval files are optional. For example, BED is Interval but has no header.
1
0

16 Apr '10
details: http://www.bx.psu.edu/hg/galaxy/rev/e34b76fcdb82
changeset: 3584:e34b76fcdb82
user: jeremy goecks <jeremy.goecks(a)emory.edu>
date: Wed Mar 31 10:32:23 2010 -0400
description:
Improve display of tables in pages; tables in pages now closely match tables in page editor.
diffstat:
templates/page/display.mako | 17 +++++++++++++++++
1 files changed, 17 insertions(+), 0 deletions(-)
diffs (27 lines):
diff -r 193e5f4e2444 -r e34b76fcdb82 templates/page/display.mako
--- a/templates/page/display.mako Wed Mar 31 09:42:50 2010 -0400
+++ b/templates/page/display.mako Wed Mar 31 10:32:23 2010 -0400
@@ -230,6 +230,23 @@
.embedded-item h4 {
margin: 0px;
}
+ ## Format tables in pages so that they look like they do in the page editor.
+ .page-body table {
+ padding: 8px 5px 5px;
+ min-width: 500px;
+ border: none;
+ border-collapse: separate;
+ }
+ .page-body caption {
+ text-align: left;
+ background: #E4E4B0;
+ padding: 5px;
+ font-weight: bold;
+ }
+ .page-body td {
+ width: 25%;
+ padding: 0.2em 0.8em;
+ }
</style>
</%def>
1
0

16 Apr '10
details: http://www.bx.psu.edu/hg/galaxy/rev/193e5f4e2444
changeset: 3583:193e5f4e2444
user: Greg Von Kuster <greg(a)bx.psu.edu>
date: Wed Mar 31 09:42:50 2010 -0400
description:
De-couple the user controller from the model, adding a webapp param to some method signatures to allow for different webapps to use the controller. Clean up the methods in the controller, eliminating all that are no longer used. Fix the verification mehtod for resetting user names to use rules for setting user names. Add new mako templates for the login and reset password methods instead of the inline form building. Fix a bug where the user's private roles was not correctly updated when the user's email address was changed. Overhaul the test_user_info functional test script, cleaning up the mehtod code and to provide coverage for all of the above fixed bugs.
diffstat:
lib/galaxy/web/controllers/admin.py | 5 +-
lib/galaxy/web/controllers/mobile.py | 3 +-
lib/galaxy/web/controllers/user.py | 647 +++++++++++-------------
lib/galaxy/web/framework/__init__.py | 2 +-
lib/galaxy/webapps/__init__.py | 2 +-
lib/galaxy/webapps/reports/controllers/root.py | 12 +-
templates/user/index.mako | 6 +-
templates/user/info.mako | 98 +-
templates/user/login.mako | 30 +
templates/user/register.mako | 127 ++--
templates/user/reset_password.mako | 21 +
test/base/test_db_util.py | 13 +
test/base/twilltestcase.py | 70 +-
test/functional/test_admin_features.py | 8 +-
test/functional/test_data_security.py | 8 +-
test/functional/test_history_functions.py | 8 +-
test/functional/test_library_features.py | 8 +-
test/functional/test_library_security.py | 8 +-
test/functional/test_metadata_editing.py | 2 +-
test/functional/test_user_info.py | 227 +++++---
20 files changed, 688 insertions(+), 617 deletions(-)
diffs (2010 lines):
diff -r feff604427ee -r 193e5f4e2444 lib/galaxy/web/controllers/admin.py
--- a/lib/galaxy/web/controllers/admin.py Tue Mar 30 17:03:29 2010 -0400
+++ b/lib/galaxy/web/controllers/admin.py Wed Mar 31 09:42:50 2010 -0400
@@ -710,7 +710,7 @@
def create_new_user( self, trans, **kwargs ):
return trans.response.send_redirect( web.url_for( controller='user',
action='create',
- admin_view='True' ) )
+ admin_view=True ) )
email = ''
password = ''
confirm = ''
@@ -956,7 +956,8 @@
return trans.response.send_redirect( web.url_for( controller='user',
action='show_info',
user_id=user.id,
- admin_view=True, **kwd ) )
+ admin_view=True,
+ **kwd ) )
@web.expose
@web.require_admin
def name_autocomplete_data( self, trans, q=None, limit=None, timestamp=None ):
diff -r feff604427ee -r 193e5f4e2444 lib/galaxy/web/controllers/mobile.py
--- a/lib/galaxy/web/controllers/mobile.py Tue Mar 30 17:03:29 2010 -0400
+++ b/lib/galaxy/web/controllers/mobile.py Wed Mar 31 09:42:50 2010 -0400
@@ -55,7 +55,6 @@
elif not user.check_password( password ):
error = "Invalid password"
else:
- trans.handle_user_login( user )
+ trans.handle_user_login( user, 'galaxy' )
trans.log_event( "User logged in" )
return error
-
diff -r feff604427ee -r 193e5f4e2444 lib/galaxy/web/controllers/user.py
--- a/lib/galaxy/web/controllers/user.py Tue Mar 30 17:03:29 2010 -0400
+++ b/lib/galaxy/web/controllers/user.py Wed Mar 31 09:42:50 2010 -0400
@@ -6,9 +6,7 @@
from galaxy import util
import logging, os, string, re
from random import choice
-from galaxy.web.controllers.forms import get_all_forms
from galaxy.web.form_builder import *
-from galaxy.web.controllers import admin
log = logging.getLogger( __name__ )
@@ -26,182 +24,127 @@
VALID_USERNAME_RE = re.compile( "^[a-z0-9\-]+$" )
class User( BaseController ):
-
@web.expose
- def index( self, trans, **kwd ):
- return trans.fill_template( '/user/index.mako', user=trans.get_user() )
-
+ def index( self, trans, webapp='galaxy', **kwd ):
+ return trans.fill_template( '/user/index.mako', user=trans.get_user(), webapp=webapp )
@web.expose
- 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( web.url_for( action='login' ) )
- if trans.request.method == 'POST':
- 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 )
- trans.sa_session.add( user )
- trans.sa_session.flush()
- trans.log_event( "User change password" )
- return trans.show_ok_message( "Password has been changed for " + user.email)
- # Generate input form
- return trans.show_form(
- web.FormBuilder( web.url_for() , "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 ) )
- @web.expose
- 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( web.url_for( action='login' ) )
- if trans.request.method == "POST":
- 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 trans.sa_session.query( trans.app.model.User ).filter_by( email=email ).first():
- email_err = "User with that email already exists"
- elif email != conf_email:
- conf_email_err = "Email addresses do not match."
- else:
- user.email = email
- trans.sa_session.add( user )
- trans.sa_session.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( web.url_for(), "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 ) )
- @web.expose
- def change_username(self, trans, username='', **kwd):
- username_err = ''
- user = trans.get_user()
- if not user:
- trans.response.send_redirect( web.url_for( action='login' ) )
- if trans.request.method == "POST":
- if len( username ) < 4:
- username_err = "Username must be at least 4 characters in length"
- elif len( username ) > 255:
- username_err = "USername must be at most 255 characters in length"
- elif not( VALID_USERNAME_RE.match( username ) ):
- username_err = "Username must contain only letters, numbers, '-', and '_'"
- elif trans.sa_session.query( trans.app.model.User ).filter_by( username=username ).first():
- username_err = "This username is not available"
- else:
- user.username = username
- trans.sa_session.add( user )
- trans.sa_session.flush()
- trans.log_event( "User change username" )
- return trans.show_ok_message( "Username been set to: " + user.username )
- else:
- username = user.username or ''
- return trans.show_form(
- web.FormBuilder( web.url_for(), "Change username", submit_text="Submit" )
- .add_text( "username", "Username", value=username, error=username_err,
- help="""Your username is an optional identifier that
- will be used to generate adresses for information
- you share publicly. Usernames must be at least
- four characters in length and contain only lowercase
- letters, numbers, and the '-' character.""" ) )
-
- @web.expose
- def login( self, trans, email='', password='', referer='', use_panels='True' ):
- email_error = password_error = None
-
+ def login( self, trans, webapp='galaxy', **kwd ):
+ use_panels = kwd.get( 'use_panels', 'True' )
# Convert use_panels to Boolean.
use_panels = use_panels in [ 'True', 'true', 't', 'T' ]
-
- # Attempt login
- if trans.app.config.require_login:
- refresh_frames = [ 'masthead', 'history', 'tools' ]
- else:
- refresh_frames = [ 'masthead', 'history' ]
- if email or password:
+ msg = kwd.get( 'msg', '' )
+ messagetype = kwd.get( 'messagetype', 'done' )
+ if kwd.get( 'login_button', False ):
+ email = kwd.get( 'email', '' )
+ password = kwd.get( 'password', '' )
+ referer = kwd.get( 'referer', '' )
+ if webapp == 'galaxy':
+ if trans.app.config.require_login:
+ refresh_frames = [ 'masthead', 'history', 'tools' ]
+ else:
+ refresh_frames = [ 'masthead', 'history' ]
user = trans.sa_session.query( trans.app.model.User ).filter( trans.app.model.User.table.c.email==email ).first()
if not user:
- email_error = "No such user"
+ msg = "No such user"
+ messagetype = 'error'
elif user.deleted:
- email_error = "This account has been marked deleted, contact your Galaxy administrator to restore the account."
+ msg = "This account has been marked deleted, contact your Galaxy administrator to restore the account."
+ messagetype = 'error'
elif user.external:
- email_error = "This account was created for use with an external authentication method, contact your local Galaxy administrator to activate it."
+ msg = "This account was created for use with an external authentication method, contact your local Galaxy administrator to activate it."
+ messagetype = 'error'
elif not user.check_password( password ):
- password_error = "Invalid password"
+ msg = "Invalid password"
+ messagetype = 'error'
else:
- trans.handle_user_login( user )
+ trans.handle_user_login( user, webapp )
trans.log_event( "User logged in" )
- msg = "You are now logged in as %s.<br>You can <a href='%s'>go back to the page you were visiting</a> or <a href='%s'>go to the Galaxy homepage</a>." % ( user.email, referer, url_for( '/' ) )
+ msg = "You are now logged in as %s.<br>You can <a href='%s'>go back to the page you were visiting</a> or <a href='%s'>go to the home page</a>." % \
+ ( user.email, referer, url_for( '/' ) )
if trans.app.config.require_login:
- msg += ' <a href="%s">Click here</a> to continue to the front page.' % web.url_for( '/static/welcome.html' )
+ msg += ' <a href="%s">Click here</a> to continue to the home page.' % web.url_for( '/static/welcome.html' )
return trans.show_ok_message( msg, refresh_frames=refresh_frames, use_panels=use_panels, active_view="user" )
- form = web.FormBuilder( web.url_for(), "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='%s'>Forgot password? Reset here</a>" % web.url_for( action='reset_password' ) ) \
- .add_input( "hidden", "referer", "referer", value=trans.request.referer, use_label=False )
if trans.app.config.require_login:
if trans.app.config.allow_user_creation:
- return trans.show_form( form, header = require_login_creation_template % web.url_for( action = 'create' ), use_panels=use_panels, active_view="user" )
+ return trans.fill_template( '/user/login.mako',
+ webapp=webapp,
+ header=require_login_creation_template % web.url_for( action='create' ),
+ use_panels=use_panels,
+ msg=msg,
+ messagetype=messagetype,
+ active_view="user" )
else:
- return trans.show_form( form, header = require_login_nocreation_template, use_panels=use_panels, active_view="user" )
+ return trans.fill_template( '/user/login.mako',
+ webapp=webapp,
+ header=require_login_nocreation_template,
+ use_panels=use_panels,
+ msg=msg,
+ messagetype=messagetype,
+ active_view="user" )
+ return trans.fill_template( '/user/login.mako',
+ webapp=webapp,
+ use_panels=use_panels,
+ msg=msg,
+ messagetype=messagetype,
+ active_view="use" )
+ @web.expose
+ def logout( self, trans, webapp='galaxy' ):
+ if webapp == 'galaxy':
+ if trans.app.config.require_login:
+ refresh_frames = [ 'masthead', 'history', 'tools' ]
+ else:
+ refresh_frames = [ 'masthead', 'history' ]
else:
- return trans.show_form( form, use_panels=use_panels, active_view="user" )
-
- @web.expose
- def logout( self, trans ):
- if trans.app.config.require_login:
- refresh_frames = [ 'masthead', 'history', 'tools' ]
- else:
- refresh_frames = [ 'masthead', 'history' ]
+ refresh_frames = []
# Since logging an event requires a session, we'll log prior to ending the session
trans.log_event( "User logged out" )
trans.handle_user_logout()
- msg = "You have been logged out.<br>You can <a href='%s'>go back to the page you were visiting</a> or <a href='%s'>go to the Galaxy homepage</a>." % ( trans.request.referer, url_for( '/' ) )
+ msg = "You have been logged out.<br>You can <a href='%s'>go back to the page you were visiting</a> or <a href='%s'>go to the home page</a>." % \
+ ( trans.request.referer, url_for( '/' ) )
if trans.app.config.require_login:
msg += ' <a href="%s">Click here</a> to return to the login page.' % web.url_for( controller='user', action='login' )
return trans.show_ok_message( msg, refresh_frames=refresh_frames, use_panels=True, active_view="user" )
-
@web.expose
- def create( self, trans, **kwd ):
+ def create( self, trans, webapp='galaxy', **kwd ):
params = util.Params( kwd )
+ use_panels = kwd.get( 'use_panels', 'True' )
+ # Convert use_panels to Boolean.
+ use_panels = use_panels in [ 'True', 'true', 't', 'T' ]
email = util.restore_text( params.get( 'email', '' ) )
- username = util.restore_text( params.get( 'username', '' ) )
# Do not sanitize passwords, so take from kwd
# instead of params ( which were sanitized )
password = kwd.get( 'password', '' )
confirm = kwd.get( 'confirm', '' )
- subscribe = CheckboxField.is_checked( params.get( 'subscribe', '' ) )
- admin_view = params.get( 'admin_view', 'False' )
+ username = util.restore_text( params.get( 'username', '' ) )
+ subscribe = params.get( 'subscribe', '' )
+ subscribe_checked = CheckboxField.is_checked( subscribe )
+ admin_view = util.string_as_bool( params.get( 'admin_view', False ) )
msg = util.restore_text( params.get( 'msg', '' ) )
messagetype = params.get( 'messagetype', 'done' )
- if trans.app.config.require_login:
- refresh_frames = [ 'masthead', 'history', 'tools' ]
- else:
- refresh_frames = [ 'masthead', 'history' ]
+ if webapp == 'galaxy':
+ if trans.app.config.require_login:
+ refresh_frames = [ 'masthead', 'history', 'tools' ]
+ else:
+ refresh_frames = [ 'masthead', 'history' ]
if not trans.app.config.allow_user_creation and not trans.user_is_admin():
return trans.show_error_message( 'User registration is disabled. Please contact your Galaxy administrator for an account.' )
# Create the user, save all the user info and login to Galaxy
- if params.get('create_user_button', None) == "Submit":
- # check email and password validity
- error = self.__validate(trans, params, email, password, confirm)
+ if params.get( 'create_user_button', False ):
+ # Check email and password validity
+ error = self.__validate( trans, params, email, password, confirm, webapp )
if error:
- kwd[ 'msg' ] = error
- kwd[ 'messagetype' ] = 'error'
- kwd[ 'create_user_button' ] = None
return trans.response.send_redirect( web.url_for( controller='user',
action='create',
- **kwd ) )
+ webapp=webapp,email=email,
+ password=password,
+ confirm=confirm,
+ username=username,
+ subscribe=subscribe,
+ subscribe_checked=subscribe_checked,
+ admin_view=admin_view,
+ use_panels=use_panels,
+ msg=error,
+ messagetype='error' ) )
# all the values are valid
user = trans.app.model.User( email=email )
user.set_password_cleartext( password )
@@ -209,39 +152,55 @@
trans.sa_session.add( user )
trans.sa_session.flush()
trans.app.security_agent.create_private_user_role( user )
- # We set default user permissions, before we log in and set the default history permissions
- trans.app.security_agent.user_set_default_permissions( user, default_access_private = trans.app.config.new_user_dataset_access_role_default_private )
- # save user info
- self.__save_user_info(trans, user, action='create', new_user=True, **kwd)
- if subscribe:
- mail = os.popen("%s -t" % trans.app.config.sendmail_path, 'w')
- mail.write("To: %s\nFrom: %s\nSubject: Join Mailing List\n\nJoin Mailing list." % (trans.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=refresh_frames )
- if admin_view == 'False':
- # The handle_user_login() method has a call to the history_set_default_permissions() method
- # (needed when logging in with a history), user needs to have default permissions set before logging in
- trans.handle_user_login( user )
- trans.log_event( "User created a new account" )
- trans.log_event( "User logged in" )
- # subscribe user to email list
- return trans.show_ok_message( "Now logged in as %s.<br><a href='%s'>Return to the Galaxy start page.</a>" % ( user.email, url_for( '/' ) ), refresh_frames=refresh_frames, use_panels=True )
+ if webapp == 'galaxy':
+ # We set default user permissions, before we log in and set the default history permissions
+ trans.app.security_agent.user_set_default_permissions( user,
+ default_access_private=trans.app.config.new_user_dataset_access_role_default_private )
+ # save user info
+ self.__save_user_info( trans, user, action='create', new_user=True, **kwd )
+ if subscribe_checked:
+ mail = os.popen( "%s -t" % trans.app.config.sendmail_path, 'w' )
+ mail.write( "To: %s\nFrom: %s\nSubject: Join Mailing List\n\nJoin Mailing list." % ( trans.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=refresh_frames )
+ if not admin_view:
+ # The handle_user_login() method has a call to the history_set_default_permissions() method
+ # (needed when logging in with a history), user needs to have default permissions set before logging in
+ trans.handle_user_login( user, webapp )
+ trans.log_event( "User created a new account" )
+ trans.log_event( "User logged in" )
+ # subscribe user to email list
+ return trans.show_ok_message( "Now logged in as %s.<br><a href='%s'>Return to the home page.</a>" % \
+ ( user.email, url_for( '/' ) ), refresh_frames=refresh_frames, use_panels=True )
+ else:
+ trans.response.send_redirect( web.url_for( controller='admin',
+ action='users',
+ message='Created new user account (%s)' % user.email,
+ status='done' ) )
else:
- trans.response.send_redirect( web.url_for( controller='admin',
- action='users',
- message='Created new user account (%s)' % user.email,
- status='done' ) )
+ return trans.show_ok_message( "Now logged in as %s.<br><a href='%s'>Return to the home page.</a>" % \
+ ( user.email, url_for( '/' ) ), use_panels=False )
+ if webapp == 'galaxy':
+ user_info_select, user_info_form, widgets = self.__user_info_ui( trans, **kwd )
else:
- #
- # Show the user registration form
- #
- user_info_select, user_info_form, login_info, widgets = self.__user_info_ui(trans, **kwd)
- return trans.fill_template( '/user/register.mako',
- user_info_select=user_info_select,
- user_info_form=user_info_form, widgets=widgets,
- login_info=login_info, admin_view=admin_view,
- msg=msg, messagetype=messagetype)
-
+ user_info_select = []
+ user_info_form = []
+ widgets = []
+ return trans.fill_template( '/user/register.mako',
+ email=email,
+ password=password,
+ confirm=confirm,
+ username=username,
+ subscribe_checked=subscribe_checked,
+ admin_view=admin_view,
+ user_info_select=user_info_select,
+ user_info_form=user_info_form,
+ widgets=widgets,
+ webapp=webapp,
+ use_panels=use_panels,
+ msg=msg,
+ messagetype=messagetype )
def __save_user_info(self, trans, user, action, new_user=True, **kwd):
'''
This method saves the user information for new users as well as editing user
@@ -249,6 +208,10 @@
the one that user has selected. And for existing users, the user info form is
retrieved from the db.
'''
+ # TODO: the user controller must be decoupled from the model, so this import causes problems.
+ # The get_all_forms method is used only if Galaxy is the webapp, so it needs to be re-worked
+ # so that it can be imported with no problems if the controller is not 'galaxy'.
+ from galaxy.web.controllers.forms import get_all_forms
params = util.Params( kwd )
# get all the user information forms
user_info_forms = get_all_forms( trans, filter=dict(deleted=False),
@@ -325,53 +288,56 @@
trans.sa_session.add( user.values )
trans.sa_session.add( user )
trans.sa_session.flush()
- def __validate_email(self, trans, params, email, user=None):
+ def __validate_email( self, trans, email, user=None ):
error = None
- if user:
- if user.email == email:
- return None
- if len(email) == 0 or "@" not in email or "." not in email:
- error = "Please enter a real email address"
- elif len(email) > 255:
+ if user and user.email == email:
+ return None
+ if len( email ) == 0 or "@" not in email or "." not in email:
+ error = "Enter a real email address"
+ elif len( email ) > 255:
error = "Email address exceeds maximum allowable length"
- elif trans.sa_session.query( trans.app.model.User ).filter_by(email=email).all():
+ elif trans.sa_session.query( trans.app.model.User ).filter_by( email=email ).first():
error = "User with that email already exists"
return error
- def __validate_username(self, trans, params, username, user=None):
+ def __validate_username( self, trans, username, user=None ):
+ # User names must be at least four characters in length and contain only lower-case
+ # letters, numbers, and the '-' character.
+ if user and user.username == username:
+ return None
+ if len( username ) < 4:
+ return "User name must be at least 4 characters in length"
+ if len( username ) > 255:
+ return "User name cannot be more than 255 characters in length"
+ if not( VALID_USERNAME_RE.match( username ) ):
+ return "User name must contain only letters, numbers and '-'"
+ if trans.sa_session.query( trans.app.model.User ).filter_by( username=username ).first():
+ return "This user name is not available"
+ return None
+ def __validate_password( self, trans, password, confirm ):
error = None
- if user:
- if user.username == username:
- return None
- if len( username ) < 3:
- error = "Username must be at least 3 characters long"
- elif len( username ) > 255:
- error = "Username cannot be more than 255 characters"
- elif trans.sa_session.query( trans.app.model.User ).filter_by( username=username ).all():
- error = "User with that username already exists"
- return error
-
- def __validate_password(self, trans, params, password, confirm):
- error = None
- if len(password) < 6:
- error = "Please use a password of at least 6 characters"
+ if len( password ) < 6:
+ error = "Use a password of at least 6 characters"
elif password != confirm:
error = "Passwords do not match"
return error
-
- def __validate(self, trans, params, email, password, confirm):
- error = self.__validate_email(trans, params, email)
+ def __validate( self, trans, params, email, password, confirm, webapp ):
+ error = self.__validate_email( trans, email )
if error:
return error
- error = self.__validate_password(trans, params, password, confirm)
+ error = self.__validate_password( trans, password, confirm )
if error:
return error
- if len(get_all_forms( trans,
- filter=dict(deleted=False),
- form_type=trans.app.model.FormDefinition.types.USER_INFO )):
- if params.get('user_info_select', 'none') == 'none':
- return 'Select the user type and the user information'
+ if webapp == 'galaxy':
+ # TODO: the user controller must be decoupled from the model, so this import causes problems.
+ # The get_all_forms method is used only if Galaxy is the webapp, so it needs to be re-worked
+ # so that it can be imported with no problems if the controller is not 'galaxy'.
+ from galaxy.web.controllers.forms import get_all_forms
+ if len( get_all_forms( trans,
+ filter=dict( deleted=False ),
+ form_type=trans.app.model.FormDefinition.types.USER_INFO ) ):
+ if params.get( 'user_info_select', 'none' ) == 'none':
+ return 'Select the user type and the user information'
return None
-
def __user_info_ui(self, trans, user=None, **kwd):
'''
This method creates the user type select box & user information form widgets
@@ -381,6 +347,10 @@
show a selectbox containing all the forms, then the user can select
the one that fits the user's description the most
'''
+ # TODO: the user controller must be decoupled from the model, so this import causes problems.
+ # The get_all_forms method is used only if Galaxy is the webapp, so it needs to be re-worked
+ # so that it can be imported with no problems if the controller is not 'galaxy'.
+ from galaxy.web.controllers.forms import get_all_forms
params = util.Params( kwd )
# get all the user information forms
user_info_forms = get_all_forms( trans, filter=dict(deleted=False),
@@ -411,30 +381,11 @@
# when there is just one user information form the just render that form
elif len(user_info_forms) == 1:
selected_user_form_id = user_info_forms[0].id
- # now, create the selected user form widgets starting with the basic
- # login information
- if user:
- login_info = { 'Email': TextField( 'email', 40, user.email ),
- 'Public Username': TextField( 'username', 40, user.username ),
- 'Current Password': PasswordField( 'current', 40, '' ),
- 'New Password': PasswordField( 'password', 40, '' ),
- 'Confirm': PasswordField( 'confirm', 40, '' ) }
- else:
- login_info = { 'Email': TextField( 'email', 40,
- util.restore_text( params.get('email', '') ) ),
- 'Public Username': TextField( 'username', 40,
- util.restore_text( params.get( 'username', '' ) ) ),
- 'Password': PasswordField( 'password', 40,
- params.get( 'password', '' ) ),
- 'Confirm': PasswordField( 'confirm', 40,
- params.get( 'confirm', '' ) ),
- 'Subscribe To Mailing List': CheckboxField( 'subscribe',
- util.restore_text( params.get('subscribe', '') ) ) }
# user information
try:
user_info_form = trans.sa_session.query( trans.app.model.FormDefinition ).get(int(selected_user_form_id))
except:
- return user_info_select, None, login_info, None
+ return user_info_select, None, None
if user:
if user.values:
widgets = user_info_form.get_widgets(user=user,
@@ -444,32 +395,39 @@
widgets = user_info_form.get_widgets(None, contents=[], **kwd)
else:
widgets = user_info_form.get_widgets(None, contents=[], **kwd)
- return user_info_select, user_info_form, login_info, widgets
-
+ return user_info_select, user_info_form, widgets
@web.expose
def show_info( self, trans, **kwd ):
'''
This method displays the user information page which consists of login
- information, public username, reset password & other user information
+ information, public user name, reset password & other user information
obtained during registration
'''
+ # TODO: the user controller must be decoupled from the model, so this import causes problems.
+ # The get_all_forms method is used only if Galaxy is the webapp, so it needs to be re-worked
+ # so that it can be imported with no problems if the controller is not 'galaxy'.
+ from galaxy.web.controllers.forms import get_all_forms
params = util.Params( kwd )
+ user_id = params.get( 'user_id', None )
+ if user_id:
+ user = trans.sa_session.query( trans.app.model.User ).get( int( user_id ) )
+ else:
+ user = trans.user
+ if not user:
+ raise "In show_info, we don't have a valid user"
+ email = util.restore_text( params.get( 'email', user.email ) )
+ # Do not sanitize passwords, so take from kwd
+ # instead of params ( which were sanitized )
+ current = kwd.get( 'current', '' )
+ password = kwd.get( 'password', '' )
+ confirm = kwd.get( 'confirm', '' )
+ username = util.restore_text( params.get( 'username', '' ) )
+ if not username:
+ username = user.username
+ admin_view = util.string_as_bool( params.get( 'admin_view', False ) )
msg = util.restore_text( params.get( 'msg', '' ) )
messagetype = params.get( 'messagetype', 'done' )
- # check if this method is called from the admin perspective,
- if params.get('admin_view', 'False') == 'True':
- try:
- user = trans.sa_session.query( trans.app.model.User ).get( int( params.get( 'user_id', None ) ) )
- except:
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='users',
- message='Invalid user',
- status='error' ) )
- admin_view = True
- else:
- user = trans.user
- admin_view = False
- user_info_select, user_info_form, login_info, widgets = self.__user_info_ui(trans, user, **kwd)
+ user_info_select, user_info_form, widgets = self.__user_info_ui( trans, user, **kwd )
# user's addresses
show_filter = util.restore_text( params.get( 'show_filter', 'Active' ) )
if show_filter == 'All':
@@ -480,73 +438,75 @@
addresses = [address for address in user.addresses if not address.deleted]
user_info_forms = get_all_forms( trans, filter=dict(deleted=False),
form_type=trans.app.model.FormDefinition.types.USER_INFO )
- return trans.fill_template( '/user/info.mako', user=user, admin_view=admin_view,
+ return trans.fill_template( '/user/info.mako',
+ user=user,
+ email=email,
+ current=current,
+ password=password,
+ confirm=confirm,
+ username=username,
user_info_select=user_info_select,
- user_info_form=user_info_form, widgets=widgets,
- login_info=login_info, user_info_forms=user_info_forms,
- addresses=addresses, show_filter=show_filter,
- msg=msg, messagetype=messagetype)
+ user_info_forms=user_info_forms,
+ user_info_form=user_info_form,
+ widgets=widgets,
+ addresses=addresses,
+ show_filter=show_filter,
+ admin_view=admin_view,
+ msg=msg,
+ messagetype=messagetype )
@web.expose
def edit_info( self, trans, **kwd ):
params = util.Params( kwd )
+ user_id = params.get( 'user_id', None )
+ admin_view = util.string_as_bool( params.get( 'admin_view', False ) )
msg = util.restore_text( params.get( 'msg', '' ) )
messagetype = params.get( 'messagetype', 'done' )
- if params.get('admin_view', 'False') == 'True':
- try:
- user = trans.sa_session.query( trans.app.model.User ).get( int( params.get( 'user_id', None ) ) )
- except:
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='users',
- message='Invalid user',
- status='error' ) )
+ if user_id:
+ user = trans.sa_session.query( trans.app.model.User ).get( int( user_id ) )
else:
user = trans.user
- #
- # Editing login info (email & username)
- #
- if params.get('login_info_button', None) == 'Save':
- email = util.restore_text( params.get('email', '') ).lower()
- username = util.restore_text( params.get('username', '') ).lower()
+ # Editing login info ( email & username )
+ if params.get( 'login_info_button', False ):
+ email = util.restore_text( params.get( 'email', '' ) )
+ username = util.restore_text( params.get( 'username', '' ) ).lower()
# validate the new values
- error = self.__validate_email(trans, params, email, user)
+ error = self.__validate_email( trans, email, user )
+ if not error:
+ error = self.__validate_username( trans, username, user )
if error:
return trans.response.send_redirect( web.url_for( controller='user',
action='show_info',
msg=error,
messagetype='error') )
- error = self.__validate_username( trans, params, username, user )
- if error:
- return trans.response.send_redirect( web.url_for( controller='user',
- action='show_info',
- msg=error,
- messagetype='error') )
- # the new email & username
+ # The user's private role name must match the user's login ( email )
+ private_role = trans.app.security_agent.get_private_user_role( user )
+ private_role.name = email
+ private_role.description = 'Private role for ' + email
+ # Now change the user info
user.email = email
user.username = username
- trans.sa_session.add( user )
+ trans.sa_session.add_all( ( user, private_role ) )
trans.sa_session.flush()
msg = 'The login information has been updated with the changes'
- if params.get('admin_view', 'False') == 'True':
+ if admin_view:
return trans.response.send_redirect( web.url_for( controller='user',
action='show_info',
user_id=user.id,
- admin_view=True,
+ admin_view=admin_view,
msg=msg,
messagetype='done' ) )
return trans.response.send_redirect( web.url_for( controller='user',
action='show_info',
msg=msg,
messagetype='done') )
- #
# Change password
- #
- elif params.get('change_password_button', None) == 'Save':
+ elif params.get( 'change_password_button', False ):
# Do not sanitize passwords, so get from kwd and not params
# ( which were sanitized ).
password = kwd.get( 'password', '' )
confirm = kwd.get( 'confirm', '' )
- # when from the user perspective, validate the current password
- if params.get('admin_view', 'False') == 'False':
+ # When from the user perspective, validate the current password
+ if not admin_view:
# Do not sanitize passwords, so get from kwd and not params
# ( which were sanitized ).
current = kwd.get( 'current', '' )
@@ -556,13 +516,13 @@
msg='Invalid current password',
messagetype='error') )
# validate the new values
- error = self.__validate_password(trans, params, password, confirm)
+ error = self.__validate_password( trans, password, confirm )
if error:
- if params.get('admin_view', 'False') == 'True':
+ if admin_view:
return trans.response.send_redirect( web.url_for( controller='user',
action='show_info',
user_id=user.id,
- admin_view=True,
+ admin_view=admin_view,
msg=error,
messagetype='error' ) )
return trans.response.send_redirect( web.url_for( controller='user',
@@ -575,28 +535,26 @@
trans.sa_session.flush()
trans.log_event( "User change password" )
msg = 'The password has been changed.'
- if params.get('admin_view', 'False') == 'True':
+ if admin_view:
return trans.response.send_redirect( web.url_for( controller='user',
action='show_info',
user_id=user.id,
- admin_view=True,
+ admin_view=admin_view,
msg=msg,
messagetype='done' ) )
return trans.response.send_redirect( web.url_for( controller='user',
action='show_info',
msg=msg,
messagetype='done') )
- #
# Edit user information
- #
- elif params.get('edit_user_info_button', None) == 'Save':
+ elif params.get( 'edit_user_info_button', False ):
self.__save_user_info(trans, user, "show_info", new_user=False, **kwd)
msg = "The user information has been updated with the changes."
- if params.get('admin_view', 'False') == 'True':
+ if admin_view:
return trans.response.send_redirect( web.url_for( controller='user',
action='show_info',
user_id=user.id,
- admin_view=True,
+ admin_view=admin_view,
msg=msg,
messagetype='done' ) )
return trans.response.send_redirect( web.url_for( controller='user',
@@ -604,43 +562,48 @@
msg=msg,
messagetype='done') )
else:
- if params.get('admin_view', 'False') == 'True':
+ if admin_view:
return trans.response.send_redirect( web.url_for( controller='user',
action='show_info',
user_id=user.id,
- admin_view=True ) )
+ admin_view=admin_view ) )
return trans.response.send_redirect( web.url_for( controller='user',
action='show_info' ) )
-
@web.expose
- def reset_password( self, trans, email=None, **kwd ):
- error = ''
- reset_user = trans.sa_session.query( trans.app.model.User ).filter( trans.app.model.User.table.c.email==email ).first()
- 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" % trans.app.config.sendmail_path, 'w')
- mail.write("To: %s\nFrom: no-reply(a)nowhere.edu\nSubject: Galaxy Password Reset\n\nYour password has been reset to \"%s\" (no quotes)." % (email, new_pass) )
- if mail.close():
- return trans.show_error_message( 'Failed to reset password. If this problem persists, please submit a bug report.' )
- reset_user.set_password_cleartext( new_pass )
- trans.sa_session.add( reset_user )
- trans.sa_session.flush()
- trans.log_event( "User reset password: %s" % email )
- return trans.show_ok_message( "Password has been reset and emailed to: %s. <a href='%s'>Click here</a> to return to the login form." % ( email, web.url_for( action='login' ) ) )
- elif email != None:
- error = "The specified user does not exist"
- elif email is None:
- email = ""
- return trans.show_form(
- web.FormBuilder( web.url_for(), "Reset Password", submit_text="Submit" )
- .add_text( "email", "Email", value=email, error=error ) )
+ def reset_password( self, trans, email=None, webapp='galaxy', **kwd ):
+ msg = util.restore_text( kwd.get( 'msg', '' ) )
+ messagetype = 'done'
+ if kwd.get( 'reset_password_button', False ):
+ reset_user = trans.sa_session.query( trans.app.model.User ).filter( trans.app.model.User.table.c.email==email ).first()
+ user = trans.get_user()
+ if reset_user:
+ if user and user.id != reset_user.id:
+ msg = "You may only reset your own password"
+ messagetype = 'error'
+ else:
+ chars = string.letters + string.digits
+ new_pass = ""
+ for i in range(15):
+ new_pass = new_pass + choice(chars)
+ mail = os.popen("%s -t" % trans.app.config.sendmail_path, 'w')
+ mail.write("To: %s\nFrom: no-reply(a)nowhere.edu\nSubject: Galaxy Password Reset\n\nYour password has been reset to \"%s\" (no quotes)." % (email, new_pass) )
+ if mail.close():
+ msg = 'Failed to reset password. If this problem persists, please submit a bug report.'
+ messagetype = 'error'
+ reset_user.set_password_cleartext( new_pass )
+ trans.sa_session.add( reset_user )
+ trans.sa_session.flush()
+ trans.log_event( "User reset password: %s" % email )
+ return trans.show_ok_message( "Password has been reset and emailed to: %s. <a href='%s'>Click here</a> to return to the login form." % ( email, web.url_for( action='login' ) ) )
+ elif email != None:
+ msg = "The specified user does not exist"
+ messagetype = 'error'
+ elif email is None:
+ email = ""
+ return trans.fill_template( '/user/reset_password.mako',
+ webapp=webapp,
+ msg=msg,
+ messagetype=messagetype )
@web.expose
def set_default_permissions( self, trans, **kwd ):
"""Sets the user's default permissions for the new histories"""
@@ -687,7 +650,7 @@
params = util.Params( kwd )
msg = util.restore_text( params.get( 'msg', '' ) )
messagetype = params.get( 'messagetype', 'done' )
- admin_view = params.get( 'admin_view', 'False' )
+ admin_view = util.string_as_bool( params.get( 'admin_view', False ) )
error = ''
user = trans.sa_session.query( trans.app.model.User ).get( int( params.get( 'user_id', None ) ) )
if not trans.app.config.allow_user_creation and not trans.user_is_admin():
@@ -723,10 +686,10 @@
trans.sa_session.add( user_address )
trans.sa_session.flush()
msg = 'Address <b>%s</b> has been added' % user_address.desc
- if admin_view == 'True':
+ if admin_view:
return trans.response.send_redirect( web.url_for( controller='user',
action='show_info',
- admin_view=True,
+ admin_view=admin_view,
user_id=user.id,
msg=msg,
messagetype='done') )
@@ -758,26 +721,23 @@
widget=TextField( 'country', 40, '' ) ) )
widgets.append(dict(label='Phone',
widget=TextField( 'phone', 40, '' ) ) )
- return trans.fill_template( 'user/new_address.mako', user=user,
+ return trans.fill_template( 'user/new_address.mako',
+ user=user,
admin_view=admin_view,
- widgets=widgets, msg=msg, messagetype=messagetype)
+ widgets=widgets,
+ msg=msg,
+ messagetype=messagetype)
@web.expose
def edit_address( self, trans, **kwd ):
params = util.Params( kwd )
+ user_id = params.get( 'user_id', None )
+ address_id = params.get( 'address_id', None )
msg = util.restore_text( params.get( 'msg', '' ) )
messagetype = params.get( 'messagetype', 'done' )
- admin_view = params.get( 'admin_view', 'False' )
+ admin_view = util.string_as_bool( params.get( 'admin_view', False ) )
error = ''
- user = trans.sa_session.query( trans.app.model.User ).get( int( params.get( 'user_id', None ) ) )
- try:
- user_address = trans.sa_session.query( trans.app.model.UserAddress ).get(int(params.get( 'address_id', None )))
- except:
- return trans.response.send_redirect( web.url_for( controller='user',
- action='show_info',
- user_id=user.id,
- admin_view=admin_view,
- msg='Invalid address ID',
- messagetype='error' ) )
+ user = trans.sa_session.query( trans.app.model.User ).get( int( user_id ) )
+ user_address = trans.sa_session.query( trans.app.model.UserAddress ).get( int( address_id ) )
if params.get( 'edit_address_button', None ) == 'Save changes':
if not len( util.restore_text( params.get( 'short_desc', '' ) ) ):
error = 'Enter a short description for this address'
@@ -808,11 +768,11 @@
trans.sa_session.add( user_address )
trans.sa_session.flush()
msg = 'Changes made to address <b>%s</b> are saved.' % user_address.desc
- if admin_view == 'True':
+ if admin_view:
return trans.response.send_redirect( web.url_for( controller='user',
action='show_info',
user_id=user.id,
- admin_view=True,
+ admin_view=admin_view,
msg=msg,
messagetype='done' ) )
return trans.response.send_redirect( web.url_for( controller='user',
@@ -843,11 +803,15 @@
widget=TextField( 'country', 40, user_address.country ) ) )
widgets.append(dict(label='Phone',
widget=TextField( 'phone', 40, user_address.phone ) ) )
- return trans.fill_template( 'user/edit_address.mako', user=user,
- address=user_address, admin_view=admin_view,
- widgets=widgets, msg=msg, messagetype=messagetype)
+ return trans.fill_template( 'user/edit_address.mako',
+ user=user,
+ address=user_address,
+ admin_view=admin_view,
+ widgets=widgets,
+ msg=msg,
+ messagetype=messagetype)
@web.expose
- def delete_address( self, trans, address_id=None, user_id=None, admin_view='False'):
+ def delete_address( self, trans, address_id=None, user_id=None, admin_view=False ):
try:
user_address = trans.sa_session.query( trans.app.model.UserAddress ).get( int( address_id ) )
except:
@@ -866,7 +830,7 @@
msg='Address <b>%s</b> deleted' % user_address.desc,
messagetype='done') )
@web.expose
- def undelete_address( self, trans, address_id=None, user_id=None, admin_view='False'):
+ def undelete_address( self, trans, address_id=None, user_id=None, admin_view=False ):
try:
user_address = trans.sa_session.query( trans.app.model.UserAddress ).get( int( address_id ) )
except:
@@ -884,4 +848,3 @@
user_id=user_id,
msg='Address <b>%s</b> undeleted' % user_address.desc,
messagetype='done') )
-
diff -r feff604427ee -r 193e5f4e2444 lib/galaxy/web/framework/__init__.py
--- a/lib/galaxy/web/framework/__init__.py Tue Mar 30 17:03:29 2010 -0400
+++ b/lib/galaxy/web/framework/__init__.py Wed Mar 31 09:42:50 2010 -0400
@@ -411,7 +411,7 @@
Update the session cookie to match the current session.
"""
self.set_cookie( self.security.encode_session_key( self.galaxy_session.session_key ), name=name )
- def handle_user_login( self, user ):
+ def handle_user_login( self, user, webapp ):
"""
Login a new user (possibly newly created)
- create a new session
diff -r feff604427ee -r 193e5f4e2444 lib/galaxy/webapps/__init__.py
--- a/lib/galaxy/webapps/__init__.py Tue Mar 30 17:03:29 2010 -0400
+++ b/lib/galaxy/webapps/__init__.py Wed Mar 31 09:42:50 2010 -0400
@@ -1,3 +1,3 @@
-"""Galaxy Reports root package -- this is a namespace package."""
+"""Galaxy webapps root package -- this is a namespace package."""
__import__( "pkg_resources" ).declare_namespace( __name__ )
\ No newline at end of file
diff -r feff604427ee -r 193e5f4e2444 lib/galaxy/webapps/reports/controllers/root.py
--- a/lib/galaxy/webapps/reports/controllers/root.py Tue Mar 30 17:03:29 2010 -0400
+++ b/lib/galaxy/webapps/reports/controllers/root.py Wed Mar 31 09:42:50 2010 -0400
@@ -14,9 +14,11 @@
brand = trans.app.config.get( "brand", "" )
if brand:
brand ="<span class='brand'>/%s</span>" % brand
- wiki_url = trans.app.config.get( "wiki_url", "http://g2.trac.bx.psu.edu/" )
+ wiki_url = trans.app.config.get( "wiki_url", "http://bitbucket.org/galaxy/galaxy-central/wiki/Home" )
bugs_email = trans.app.config.get( "bugs_email", "mailto:galaxy-bugs@bx.psu.edu" )
- blog_url = trans.app.config.get( "blog_url", "http://g2.trac.bx.psu.edu/blog" )
- screencasts_url = trans.app.config.get( "screencasts_url", "http://g2.trac.bx.psu.edu/wiki/ScreenCasts" )
- return trans.fill_template( "masthead.mako", brand=brand, wiki_url=wiki_url, blog_url=blog_url,bugs_email=bugs_email, screencasts_url=screencasts_url )
-
+ screencasts_url = trans.app.config.get( "screencasts_url", "http://galaxycast.org" )
+ return trans.fill_template( "masthead.mako",
+ brand=brand,
+ wiki_url=wiki_url,
+ bugs_email=bugs_email,
+ screencasts_url=screencasts_url )
diff -r feff604427ee -r 193e5f4e2444 templates/user/index.mako
--- a/templates/user/index.mako Tue Mar 30 17:03:29 2010 -0400
+++ b/templates/user/index.mako Wed Mar 31 09:42:50 2010 -0400
@@ -7,8 +7,10 @@
%if user:
<p>You are currently logged in as ${user.email}.</p>
<ul>
- <li><a href="${h.url_for( action='show_info' )}">${_('Manage your information')}</a></li>
- <li><a href="${h.url_for( action='set_default_permissions' )}">${_('Change default permissions')}</a> for new histories</li>
+ %if webapp == 'galaxy':
+ <li><a href="${h.url_for( action='show_info' )}">${_('Manage your information')}</a></li>
+ <li><a href="${h.url_for( action='set_default_permissions' )}">${_('Change default permissions')}</a> for new histories</li>
+ %endif
<li><a href="${h.url_for( action='logout' )}">${_('Logout')}</a></li>
</ul>
%else:
diff -r feff604427ee -r 193e5f4e2444 templates/user/info.mako
--- a/templates/user/info.mako Tue Mar 30 17:03:29 2010 -0400
+++ b/templates/user/info.mako Wed Mar 31 09:42:50 2010 -0400
@@ -1,7 +1,6 @@
<%inherit file="/base.mako"/>
<%namespace file="/message.mako" import="render_msg" />
-
%if msg:
${render_msg( msg, messagetype )}
%endif
@@ -45,15 +44,20 @@
<form name="login_info" id="login_info" action="${h.url_for( controller='user', action='edit_info', user_id=user.id, admin_view=admin_view )}" method="post" >
<div class="toolFormTitle">Login Information</div>
<div class="form-row">
- <label>Email</label>
- ${login_info[ 'Email' ].get_html()}
+ <label>Email address:</label>
+ <input type="text" name="email" value="${email}" size="40"/>
</div>
<div class="form-row">
- <label>Public Username</label>
- ${login_info[ 'Public Username' ].get_html()}
+ <label>Public user name:</label>
+ <input type="text" name="username" size="40" value="${username}"/>
+ <div class="toolParamHelp" style="clear: both;">
+ Your user name is an optional identifier that will be used to generate addresses for information
+ you share publicly. User names must be at least four characters in length and contain only lower-case
+ letters, numbers, and the '-' character.
+ </div>
</div>
<div class="form-row">
- <input type="submit" name="login_info_button" value="Save">
+ <input type="submit" name="login_info_button" value="Save"/>
</div>
</form>
</div>
@@ -63,54 +67,54 @@
<div class="toolFormTitle">Change Password</div>
%if not admin_view:
<div class="form-row">
- <label>Current Password</label>
- ${login_info[ 'Current Password' ].get_html()}
+ <label>Current Password:</label>
+ <input type="password" name="current" value="${current}" size="40"/>
</div>
%endif
<div class="form-row">
- <label>New Password</label>
- ${login_info[ 'New Password' ].get_html()}
+ <label>New Password:</label>
+ <input type="password" name="password" value="${password}" size="40"/>
</div>
<div class="form-row">
- <label>Confirm</label>
- ${login_info[ 'Confirm' ].get_html()}
+ <label>Confirm:</label>
+ <input type="password" name="confirm" value="${confirm}" size="40"/>
</div>
<div class="form-row">
- <input type="submit" name="change_password_button" value="Save">
+ <input type="submit" name="change_password_button" value="Save"/>
</div>
</form>
</div>
%if user.values or user_info_forms:
-<p></p>
-<div class="toolForm">
- <form name="user_info" id="user_info" action="${h.url_for( controller='user', action='edit_info', user_id=user.id, admin_view=admin_view )}" method="post" >
- <div class="toolFormTitle">User information</div>
- %if user_info_select:
+ <p></p>
+ <div class="toolForm">
+ <form name="user_info" id="user_info" action="${h.url_for( controller='user', action='edit_info', user_id=user.id, admin_view=admin_view )}" method="post" >
+ <div class="toolFormTitle">User information</div>
+ %if user_info_select:
+ <div class="form-row">
+ <label>User type:</label>
+ ${user_info_select.get_html()}
+ </div>
+ %endif
+
+ %for field in widgets:
+ <div class="form-row">
+ <label>${field['label']}:</label>
+ ${field['widget'].get_html()}
+ <div class="toolParamHelp" style="clear: both;">
+ ${field['helptext']}
+ </div>
+ <div style="clear: both"></div>
+ </div>
+ %endfor
+ %if not user_info_select:
+ <input type="hidden" name="user_info_select" value="${user_info_form.id}"/>
+ %endif
+
<div class="form-row">
- <label>User type</label>
- ${user_info_select.get_html()}
+ <input type="submit" name="edit_user_info_button" value="Save"/>
</div>
- %endif
-
- %for field in widgets:
- <div class="form-row">
- <label>${field['label']}</label>
- ${field['widget'].get_html()}
- <div class="toolParamHelp" style="clear: both;">
- ${field['helptext']}
- </div>
- <div style="clear: both"></div>
- </div>
- %endfor
- %if not user_info_select:
- <input type="hidden" name="user_info_select" value="${user_info_form.id}"/>
- %endif
-
- <div class="form-row">
- <input type="submit" name="edit_user_info_button" value="Save">
- </div>
- </form>
-</div>
+ </form>
+ </div>
%endif
<p></p>
<div class="toolForm">
@@ -139,7 +143,7 @@
<tr class="libraryRow libraryOrFolderRow" id="libraryRow">
<td>
<div class="form-row">
- <label>${address.desc}</label>
+ <label>${address.desc}:</label>
${address.get_html()}
</div>
<div class="form-row">
@@ -167,10 +171,6 @@
<div class="form-row">
<input type="submit" value="Add a new address">
</div>
- </div>
- </form>
-
-
-
-
-</div>
\ No newline at end of file
+ </div>
+ </form>
+</div>
diff -r feff604427ee -r 193e5f4e2444 templates/user/login.mako
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/user/login.mako Wed Mar 31 09:42:50 2010 -0400
@@ -0,0 +1,30 @@
+<%inherit file="/base.mako"/>
+<%namespace file="/message.mako" import="render_msg" />
+
+%if msg:
+ ${render_msg( msg, messagetype )}
+%endif
+<div class="toolForm">
+ <div class="toolFormTitle">Login</div>
+ %if header:
+ ${header}
+ %endif
+ <form name="login" id="login" action="${h.url_for( controller='user', action='login' )}" method="post" >
+ <div class="form-row">
+ <label>Email address:</label>
+ <input type="text" name="email" value="" size="40"/>
+ <input type="hidden" name="webapp" value="${webapp}" size="40"/>
+ <input type="hidden" name="referer" value="${trans.request.referer}" size="40"/>
+ </div>
+ <div class="form-row">
+ <label>Password:</label>
+ <input type="password" name="password" value="" size="40"/>
+ <div class="toolParamHelp" style="clear: both;">
+ <a href="${h.url_for( controller='user', action='reset_password', webapp=webapp, use_panels=use_panels )}">Forgot password? Reset here</a>
+ </div>
+ </div>
+ <div class="form-row">
+ <input type="submit" name="login_button" value="Login"/>
+ </div>
+ </form>
+</div>
diff -r feff604427ee -r 193e5f4e2444 templates/user/register.mako
--- a/templates/user/register.mako Tue Mar 30 17:03:29 2010 -0400
+++ b/templates/user/register.mako Wed Mar 31 09:42:50 2010 -0400
@@ -1,15 +1,6 @@
-<%inherit file="/base_panels.mako"/>
+<%inherit file="/base.mako"/>
<%namespace file="/message.mako" import="render_msg" />
-<%def name="init()">
-<%
- self.has_left_panel=False
- self.has_right_panel=False
- self.active_view="user"
- self.message_box_visible=False
-%>
-</%def>
-
<%def name="javascripts()">
${parent.javascripts()}
<script type="text/javascript">
@@ -36,64 +27,68 @@
});
});
</script>
-
</%def>
-<%def name="center_panel()">
- %if msg:
- ${render_msg( msg, messagetype )}
- %endif
-
- <div class="toolForm" style="margin: 1em">
- <form name="registration" id="registration" action="${h.url_for( controller='user', action='create', admin_view=admin_view )}" method="post" >
- <div class="toolFormTitle">Create account</div>
+<%
+ from galaxy.web.form_builder import CheckboxField
+ subscribe_check_box = CheckboxField( 'subscribe' )
+%>
+%if msg:
+ ${render_msg( msg, messagetype )}
+%endif
+<div class="toolForm">
+ <form name="registration" id="registration" action="${h.url_for( controller='user', action='create', admin_view=admin_view )}" method="post" >
+ <div class="toolFormTitle">Create account</div>
+ <div class="form-row">
+ <label>Email address:</label>
+ <input type="text" name="email" value="${email}" size="40"/>
+ <input type="hidden" name="webapp" value="${webapp}" size="40"/>
+ </div>
+ <div class="form-row">
+ <label>Password:</label>
+ <input type="password" name="password" value="${password}" size="40"/>
+ </div>
+ <div class="form-row">
+ <label>Confirm password:</label>
+ <input type="password" name="confirm" value="${confirm}" size="40"/>
+ </div>
+ <div class="form-row">
+ <label>Public user name:</label>
+ <input type="text" name="username" size="40" value="${username}"/>
+ <div class="toolParamHelp" style="clear: both;">
+ When you share or publish items, this name is shown as the author.
+ </div>
+ </div>
+ <div class="form-row">
+ <label>Subscribe to mailing list:</label>
+ %if subscribe_checked:
+ <% subscribe_check_box.checked = True %>
+ %endif
+ ${subscribe_check_box.get_html()}
+ </div>
+ %if user_info_select:
<div class="form-row">
- <label>Email</label>
- ${login_info[ 'Email' ].get_html()}
+ <label>User type</label>
+ ${user_info_select.get_html()}
</div>
- <div class="form-row">
- <label>Password</label>
- ${login_info[ 'Password' ].get_html()}
- </div>
- <div class="form-row">
- <label>Confirm Password</label>
- ${login_info[ 'Confirm' ].get_html()}
- </div>
- <div class="form-row">
- <label>Public Username</label>
- ${login_info[ 'Public Username' ].get_html()}
- <div class="toolParamHelp" style="clear: both;">
- When you share or publish items, this name is shown as the author.
+ %endif
+ %if user_info_form:
+ %for field in widgets:
+ <div class="form-row">
+ <label>${field['label']}</label>
+ ${field['widget'].get_html()}
+ <div class="toolParamHelp" style="clear: both;">
+ ${field['helptext']}
+ </div>
+ <div style="clear: both"></div>
</div>
- </div>
- <div class="form-row">
- <label>Subscribe To Mailing List</label>
- ${login_info[ 'Subscribe To Mailing List' ].get_html()}
- </div>
- %if user_info_select:
- <div class="form-row">
- <label>User type</label>
- ${user_info_select.get_html()}
- </div>
- %endif
- %if user_info_form:
- %for field in widgets:
- <div class="form-row">
- <label>${field['label']}</label>
- ${field['widget'].get_html()}
- <div class="toolParamHelp" style="clear: both;">
- ${field['helptext']}
- </div>
- <div style="clear: both"></div>
- </div>
- %endfor
- %if not user_info_select:
- <input type="hidden" name="user_info_select" value="${user_info_form.id}"/>
- %endif
- %endif
- <div class="form-row">
- <input type="submit" name="create_user_button" value="Submit">
- </div>
- </form>
- </div>
-</%def>
\ No newline at end of file
+ %endfor
+ %if not user_info_select:
+ <input type="hidden" name="user_info_select" value="${user_info_form.id}"/>
+ %endif
+ %endif
+ <div class="form-row">
+ <input type="submit" name="create_user_button" value="Submit"/>
+ </div>
+ </form>
+</div>
diff -r feff604427ee -r 193e5f4e2444 templates/user/reset_password.mako
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/user/reset_password.mako Wed Mar 31 09:42:50 2010 -0400
@@ -0,0 +1,21 @@
+<%inherit file="/base.mako"/>
+<%namespace file="/message.mako" import="render_msg" />
+
+%if msg:
+ ${render_msg( msg, messagetype )}
+%endif
+
+<div class="toolForm">
+ <div class="toolFormTitle">Login</div>
+ <form name="reset_password" id="reset_password" action="${h.url_for( controller='user', action='reset_password' )}" method="post" >
+ <div class="form-row">
+ <label>Email:</label>
+ <input type="text" name="email" value="" size="40"/>
+ <input type="hidden" name="webapp" value="${webapp}" size="40"/>
+ </div>
+ <div style="clear: both"></div>
+ <div class="form-row">
+ <input type="submit" name="reset_password_button" value="Submit"/>
+ </div>
+ </form>
+</div>
diff -r feff604427ee -r 193e5f4e2444 test/base/test_db_util.py
--- a/test/base/test_db_util.py Tue Mar 30 17:03:29 2010 -0400
+++ b/test/base/test_db_util.py Wed Mar 31 09:42:50 2010 -0400
@@ -4,6 +4,13 @@
from base.twilltestcase import *
import sys
+def delete_obj( obj ):
+ sa_session.delete( obj )
+ sa_session.flush()
+def delete_user_roles( user ):
+ for ura in user.roles:
+ sa_session.delete( ura )
+ sa_session.flush()
def flush( obj ):
sa_session.add( obj )
sa_session.flush()
@@ -106,9 +113,15 @@
return sa_session.query( galaxy.model.UserGroupAssociation ) \
.filter( galaxy.model.UserGroupAssociation.table.c.group_id == group.id ) \
.all()
+def get_user_info_form_definition():
+ return galaxy.model.FormDefinition.types.USER_INFO
def get_user_role_associations_by_role( role ):
return sa_session.query( galaxy.model.UserRoleAssociation ) \
.filter( galaxy.model.UserRoleAssociation.table.c.role_id == role.id ) \
.all()
+def mark_form_deleted( form ):
+ form.current.deleted = True
+ sa_session.add( form )
+ sa_session.flush()
def refresh( obj ):
sa_session.refresh( obj )
diff -r feff604427ee -r 193e5f4e2444 test/base/twilltestcase.py
--- a/test/base/twilltestcase.py Tue Mar 30 17:03:29 2010 -0400
+++ b/test/base/twilltestcase.py Wed Mar 31 09:42:50 2010 -0400
@@ -280,7 +280,7 @@
num_deleted = len( id.split( ',' ) )
self.home()
self.visit_page( "history/list?operation=delete&id=%s" % ( id ) )
- check_str = 'Deleted %d %s' % ( num_deleted, iff( num_deleted != 1, "histories","history") )
+ check_str = 'Deleted %d %s' % ( num_deleted, iff( num_deleted != 1, "histories", "history" ) )
self.check_page_for_string( check_str )
self.home()
def delete_current_history( self, check_str='' ):
@@ -793,41 +793,41 @@
self.assertTrue( genome_build == dbkey )
# Functions associated with user accounts
- def create( self, email='test(a)bx.psu.edu', password='testuser' ):
- self.home()
- # Create user, setting username to email.
- self.visit_page( "user/create?email=%s&username=%s&password=%s&confirm=%s&create_user_button=Submit" % ( email, email, password, password ) )
- self.check_page_for_string( "now logged in as %s" %email )
- self.home()
+ def create( self, email='test(a)bx.psu.edu', password='testuser', username='admin-user', webapp='galaxy' ):
+ # HACK: don't use panels because late_javascripts() messes up the twill browser and it
+ # can't find form fields (and hence user can't be logged in).
+ self.visit_url( "%s/user/create?use_panels=False&webapp=%s" % ( self.url, webapp ) )
+ tc.fv( '1', 'email', email )
+ tc.fv( '1', 'password', password )
+ tc.fv( '1', 'confirm', password )
+ tc.fv( '1', 'username', username )
+ tc.submit( 'create_user_button' )
+ self.check_page_for_string( "now logged in as %s" % email )
# Make sure a new private role was created for the user
- self.visit_page( "user/set_default_permissions" )
+ self.visit_url( "%s/user/set_default_permissions" % self.url )
self.check_page_for_string( email )
self.home()
def create_user_with_info( self, email, password, username, user_info_forms, user_info_form_id, user_info_values ):
'''
This method registers a new user and also provides use info
'''
- self.home()
if user_info_forms == 'multiple':
- self.visit_page( "user/create?user_info_select=%i&admin_view=False" % user_info_form_id )
+ self.visit_url( "%s/user/create?user_info_select=%i&admin_view=False&use_panels=False" % ( self.url, user_info_form_id ) )
else:
- self.visit_page( "user/create?admin_view=False" )
- print self.write_temp_file( self.last_page() )
+ self.visit_url( "%s/user/create?admin_view=False&use_panels=False" % self.url )
+ ##print self.write_temp_file( self.last_page() )
self.check_page_for_string( "Create account" )
- tc.fv( "2", "email", email )
- tc.fv( "2", "password", password )
- tc.fv( "2", "confirm", password )
- tc.fv( "2", "username", username )
+ tc.fv( "1", "email", email )
+ tc.fv( "1", "password", password )
+ tc.fv( "1", "confirm", password )
+ tc.fv( "1", "username", username )
if user_info_forms == 'multiple':
self.check_page_for_string( "User type" )
for index, info_value in enumerate(user_info_values):
- tc.fv( "2", "field_%i" % index, info_value )
+ tc.fv( "1", "field_%i" % index, info_value )
tc.submit( "create_user_button" )
- self.check_page_for_string( "ogged in as %s" % email )
def create_user_with_info_as_admin( self, email, password, username, user_info_forms, user_info_form_id, user_info_values ):
- '''
- This method registers a new user and also provides use info as an admin
- '''
+ # This method creates a new user with associated info
self.home()
if user_info_forms == 'multiple':
self.visit_page( "admin/users?operation=create?user_info_select=%i&admin_view=False" % user_info_form_id )
@@ -844,16 +844,15 @@
tc.fv( "2", "field_%i" % index, info_value )
tc.submit( "create_user_button" )
self.check_page_for_string( "Created new user account (%s)" % email )
- def edit_login_info( self, new_email, new_username ):
+ def edit_login_info( self, new_email, new_username, check_str1='' ):
self.home()
- self.visit_page( "user/show_info" )
+ self.visit_url( "%s/user/show_info" % self.url )
self.check_page_for_string( "Manage User Information" )
tc.fv( "1", "email", new_email )
tc.fv( "1", "username", new_username )
tc.submit( "login_info_button" )
- self.check_page_for_string( 'The login information has been updated with the changes' )
- self.check_page_for_string( new_email )
- self.check_page_for_string( new_username )
+ if check_str1:
+ self.check_page_for_string( check_str1 )
def change_password( self, password, new_password ):
self.home()
self.visit_page( "user/show_info" )
@@ -907,13 +906,14 @@
self.visit_url( "%s/%s" % ( self.url, url ) )
self.check_page_for_string( 'Default history permissions have been changed.' )
self.home()
- def login( self, email='test(a)bx.psu.edu', password='testuser' ):
+ def login( self, email='test(a)bx.psu.edu', password='testuser', username='admin-user', webapp='galaxy' ):
# test(a)bx.psu.edu is configured as an admin user
try:
- self.create( email=email, password=password )
+ self.create( email=email, password=password, username=username, webapp=webapp )
except:
self.home()
- # HACK: don't use panels because late_javascripts() messes up the twill browser and it can't find form fields (and hence user can't be logged in).
+ # HACK: don't use panels because late_javascripts() messes up the twill browser and it
+ # can't find form fields (and hence user can't be logged in).
self.visit_url( "%s/user/login?use_panels=False" % self.url )
tc.fv( '1', 'email', email )
tc.fv( '1', 'password', password )
@@ -1161,12 +1161,14 @@
# Dataset Security stuff
# Tests associated with users
- def create_new_account_as_admin( self, email='test4(a)bx.psu.edu', password='testuser' ):
+ def create_new_account_as_admin( self, email='test4(a)bx.psu.edu', password='testuser', username='regular-user4' ):
"""Create a new account for another user"""
- # TODO: fix this so that it uses the form rather than the following URL.
- self.home()
- self.visit_url( "%s/user/create?admin_view=True&email=%s&password=%s&confirm=%s&create_user_button=Submit&subscribe=False" \
- % ( self.url, email, password, password ) )
+ self.visit_url( "%s/user/create?admin_view=True" % self.url )
+ tc.fv( '1', 'email', email )
+ tc.fv( '1', 'password', password )
+ tc.fv( '1', 'confirm', password )
+ tc.fv( '1', 'username', username )
+ tc.submit( 'create_user_button' )
try:
self.check_page_for_string( "Created new user account" )
previously_created = False
diff -r feff604427ee -r 193e5f4e2444 test/functional/test_admin_features.py
--- a/test/functional/test_admin_features.py Tue Mar 30 17:03:29 2010 -0400
+++ b/test/functional/test_admin_features.py Wed Mar 31 09:42:50 2010 -0400
@@ -5,17 +5,17 @@
def test_000_initiate_users( self ):
"""Ensuring all required user accounts exist"""
self.logout()
- self.login( email='test1(a)bx.psu.edu' )
+ self.login( email='test1(a)bx.psu.edu', username='regular-user1' )
global regular_user1
regular_user1 = get_user( 'test1(a)bx.psu.edu' )
assert regular_user1 is not None, 'Problem retrieving user with email "test1(a)bx.psu.edu" from the database'
self.logout()
- self.login( email='test2(a)bx.psu.edu' )
+ self.login( email='test2(a)bx.psu.edu', username='regular-user2' )
global regular_user2
regular_user2 = get_user( 'test2(a)bx.psu.edu' )
assert regular_user2 is not None, 'Problem retrieving user with email "test2(a)bx.psu.edu" from the database'
self.logout()
- self.login( email='test(a)bx.psu.edu' )
+ self.login( email='test(a)bx.psu.edu', username='admin-user' )
global admin_user
admin_user = get_user( 'test(a)bx.psu.edu' )
assert admin_user is not None, 'Problem retrieving user with email "test(a)bx.psu.edu" from the database'
@@ -24,7 +24,7 @@
# Logged in as admin_user
email = 'test3(a)bx.psu.edu'
password = 'testuser'
- previously_created = self.create_new_account_as_admin( email=email, password=password )
+ previously_created = self.create_new_account_as_admin( email=email, password=password, username='regular-user3' )
# Get the user object for later tests
global regular_user3
regular_user3 = get_user( email )
diff -r feff604427ee -r 193e5f4e2444 test/functional/test_data_security.py
--- a/test/functional/test_data_security.py Tue Mar 30 17:03:29 2010 -0400
+++ b/test/functional/test_data_security.py Wed Mar 31 09:42:50 2010 -0400
@@ -5,28 +5,28 @@
def test_000_initiate_users( self ):
"""Ensuring all required user accounts exist"""
self.logout()
- self.login( email='test1(a)bx.psu.edu' )
+ self.login( email='test1(a)bx.psu.edu', username='regular-user1' )
global regular_user1
regular_user1 = get_user( 'test1(a)bx.psu.edu' )
assert regular_user1 is not None, 'Problem retrieving user with email "test1(a)bx.psu.edu" from the database'
global regular_user1_private_role
regular_user1_private_role = get_private_role( regular_user1 )
self.logout()
- self.login( email='test2(a)bx.psu.edu' )
+ self.login( email='test2(a)bx.psu.edu', username='regular-user2' )
global regular_user2
regular_user2 = get_user( 'test2(a)bx.psu.edu' )
assert regular_user2 is not None, 'Problem retrieving user with email "test2(a)bx.psu.edu" from the database'
global regular_user2_private_role
regular_user2_private_role = get_private_role( regular_user2 )
self.logout()
- self.login( email='test3(a)bx.psu.edu' )
+ self.login( email='test3(a)bx.psu.edu', username='regular-user3' )
global regular_user3
regular_user3 = get_user( 'test3(a)bx.psu.edu' )
assert regular_user3 is not None, 'Problem retrieving user with email "test3(a)bx.psu.edu" from the database'
global regular_user3_private_role
regular_user3_private_role = get_private_role( regular_user3 )
self.logout()
- self.login( email='test(a)bx.psu.edu' )
+ self.login( email='test(a)bx.psu.edu', username='admin-user' )
global admin_user
admin_user = get_user( 'test(a)bx.psu.edu' )
assert admin_user is not None, 'Problem retrieving user with email "test(a)bx.psu.edu" from the database'
diff -r feff604427ee -r 193e5f4e2444 test/functional/test_history_functions.py
--- a/test/functional/test_history_functions.py Tue Mar 30 17:03:29 2010 -0400
+++ b/test/functional/test_history_functions.py Wed Mar 31 09:42:50 2010 -0400
@@ -22,7 +22,7 @@
assert anonymous_history is not None, "Problem retrieving anonymous_history from database"
# Upload a dataset to anonymous_history so it will be set as the current history after login
self.upload_file( '1.bed', dbkey='hg18' )
- self.login( email='test1(a)bx.psu.edu' )
+ self.login( email='test1(a)bx.psu.edu', username='regular-user1' )
global regular_user1
regular_user1 = sa_session.query( galaxy.model.User ) \
.filter( galaxy.model.User.table.c.email=='test1(a)bx.psu.edu' ) \
@@ -35,21 +35,21 @@
self.login( email=regular_user1.email )
self.check_history_for_string( name )
self.logout()
- self.login( email='test2(a)bx.psu.edu' )
+ self.login( email='test2(a)bx.psu.edu', username='regular-user2' )
global regular_user2
regular_user2 = sa_session.query( galaxy.model.User ) \
.filter( galaxy.model.User.table.c.email=='test2(a)bx.psu.edu' ) \
.first()
assert regular_user2 is not None, 'Problem retrieving user with email "test2(a)bx.psu.edu" from the database'
self.logout()
- self.login( email='test3(a)bx.psu.edu' )
+ self.login( email='test3(a)bx.psu.edu', username='regular-user3' )
global regular_user3
regular_user3 = sa_session.query( galaxy.model.User ) \
.filter( galaxy.model.User.table.c.email=='test3(a)bx.psu.edu' ) \
.first()
assert regular_user3 is not None, 'Problem retrieving user with email "test3(a)bx.psu.edu" from the database'
self.logout()
- self.login( email='test(a)bx.psu.edu' )
+ self.login( email='test(a)bx.psu.edu', username='admin-user' )
global admin_user
admin_user = sa_session.query( galaxy.model.User ) \
.filter( galaxy.model.User.table.c.email=='test(a)bx.psu.edu' ) \
diff -r feff604427ee -r 193e5f4e2444 test/functional/test_library_features.py
--- a/test/functional/test_library_features.py Tue Mar 30 17:03:29 2010 -0400
+++ b/test/functional/test_library_features.py Wed Mar 31 09:42:50 2010 -0400
@@ -5,28 +5,28 @@
def test_000_initiate_users( self ):
"""Ensuring all required user accounts exist"""
self.logout()
- self.login( email='test1(a)bx.psu.edu' )
+ self.login( email='test1(a)bx.psu.edu', username='regular-user1' )
global regular_user1
regular_user1 = get_user( 'test1(a)bx.psu.edu' )
assert regular_user1 is not None, 'Problem retrieving user with email "test1(a)bx.psu.edu" from the database'
global regular_user1_private_role
regular_user1_private_role = get_private_role( regular_user1 )
self.logout()
- self.login( email='test2(a)bx.psu.edu' )
+ self.login( email='test2(a)bx.psu.edu', username='regular-user2' )
global regular_user2
regular_user2 = get_user( 'test2(a)bx.psu.edu' )
assert regular_user2 is not None, 'Problem retrieving user with email "test2(a)bx.psu.edu" from the database'
global regular_user2_private_role
regular_user2_private_role = get_private_role( regular_user2 )
self.logout()
- self.login( email='test3(a)bx.psu.edu' )
+ self.login( email='test3(a)bx.psu.edu', username='regular-user3' )
global regular_user3
regular_user3 = get_user( 'test3(a)bx.psu.edu' )
assert regular_user3 is not None, 'Problem retrieving user with email "test3(a)bx.psu.edu" from the database'
global regular_user3_private_role
regular_user3_private_role = get_private_role( regular_user3 )
self.logout()
- self.login( email='test(a)bx.psu.edu' )
+ self.login( email='test(a)bx.psu.edu', username='admin-user' )
global admin_user
admin_user = get_user( 'test(a)bx.psu.edu' )
assert admin_user is not None, 'Problem retrieving user with email "test(a)bx.psu.edu" from the database'
diff -r feff604427ee -r 193e5f4e2444 test/functional/test_library_security.py
--- a/test/functional/test_library_security.py Tue Mar 30 17:03:29 2010 -0400
+++ b/test/functional/test_library_security.py Wed Mar 31 09:42:50 2010 -0400
@@ -5,28 +5,28 @@
def test_000_initiate_users( self ):
"""Ensuring all required user accounts exist"""
self.logout()
- self.login( email='test1(a)bx.psu.edu' )
+ self.login( email='test1(a)bx.psu.edu', username='regular-user1' )
global regular_user1
regular_user1 = get_user( 'test1(a)bx.psu.edu' )
assert regular_user1 is not None, 'Problem retrieving user with email "test1(a)bx.psu.edu" from the database'
global regular_user1_private_role
regular_user1_private_role = get_private_role( regular_user1 )
self.logout()
- self.login( email='test2(a)bx.psu.edu' )
+ self.login( email='test2(a)bx.psu.edu', username='regular-user2' )
global regular_user2
regular_user2 = get_user( 'test2(a)bx.psu.edu' )
assert regular_user2 is not None, 'Problem retrieving user with email "test2(a)bx.psu.edu" from the database'
global regular_user2_private_role
regular_user2_private_role = get_private_role( regular_user2 )
self.logout()
- self.login( email='test3(a)bx.psu.edu' )
+ self.login( email='test3(a)bx.psu.edu', username='regular-user3' )
global regular_user3
regular_user3 = get_user( 'test3(a)bx.psu.edu' )
assert regular_user3 is not None, 'Problem retrieving user with email "test3(a)bx.psu.edu" from the database'
global regular_user3_private_role
regular_user3_private_role = get_private_role( regular_user3 )
self.logout()
- self.login( email='test(a)bx.psu.edu' )
+ self.login( email='test(a)bx.psu.edu', username='admin-user' )
global admin_user
admin_user = get_user( 'test(a)bx.psu.edu' )
assert admin_user is not None, 'Problem retrieving user with email "test(a)bx.psu.edu" from the database'
diff -r feff604427ee -r 193e5f4e2444 test/functional/test_metadata_editing.py
--- a/test/functional/test_metadata_editing.py Tue Mar 30 17:03:29 2010 -0400
+++ b/test/functional/test_metadata_editing.py Wed Mar 31 09:42:50 2010 -0400
@@ -8,7 +8,7 @@
def test_00_metadata_edit( self ):
"""test_metadata_edit: Testing metadata editing"""
self.logout()
- self.login( email='test(a)bx.psu.edu' )
+ self.login( email='test(a)bx.psu.edu', username='admin-user' )
admin_user = sa_session.query( galaxy.model.User ) \
.filter( galaxy.model.User.table.c.email=='test(a)bx.psu.edu' ) \
.one()
diff -r feff604427ee -r 193e5f4e2444 test/functional/test_user_info.py
--- a/test/functional/test_user_info.py Tue Mar 30 17:03:29 2010 -0400
+++ b/test/functional/test_user_info.py Wed Mar 31 09:42:50 2010 -0400
@@ -1,38 +1,55 @@
-import galaxy.model
-from galaxy.model.orm import *
-from galaxy.model.mapping import context as sa_session
from base.twilltestcase import *
+from base.test_db_util import *
not_logged_in_as_admin_security_msg = 'You must be logged in as an administrator to access this feature.'
logged_in_as_admin_security_msg = 'You must be an administrator to access this feature.'
not_logged_in_security_msg = 'You must be logged in to create/submit sequencing requests'
+global form_one_name
form_one_name = "Student"
+global form_two_name
form_two_name = "Researcher"
-def get_latest_form(form_name):
- fdc_list = sa_session.query( galaxy.model.FormDefinitionCurrent ) \
- .filter( galaxy.model.FormDefinitionCurrent.table.c.deleted==False ) \
- .order_by( galaxy.model.FormDefinitionCurrent.table.c.create_time.desc() )
- for fdc in fdc_list:
- sa_session.refresh( fdc )
- sa_session.refresh( fdc.latest_form )
- if form_name == fdc.latest_form.name:
- return fdc.latest_form
- return None
-
class TestUserInfo( TwillTestCase ):
- def test_000_create_user_info_forms( self ):
+ def test_000_initiate_users( self ):
+ """Ensuring all required user accounts exist"""
+ self.logout()
+ self.login( email='test1(a)bx.psu.edu', username='regular-user1' )
+ global regular_user1
+ regular_user1 = get_user( 'test1(a)bx.psu.edu' )
+ assert regular_user1 is not None, 'Problem retrieving user with email "test1(a)bx.psu.edu" from the database'
+ global regular_user1_private_role
+ regular_user1_private_role = get_private_role( regular_user1 )
+ self.logout()
+ self.login( email='test2(a)bx.psu.edu', username='regular-user2' )
+ global regular_user2
+ regular_user2 = get_user( 'test2(a)bx.psu.edu' )
+ assert regular_user2 is not None, 'Problem retrieving user with email "test2(a)bx.psu.edu" from the database'
+ global regular_user2_private_role
+ regular_user2_private_role = get_private_role( regular_user2 )
+ self.logout()
+ self.login( email='test3(a)bx.psu.edu', username='regular-user3' )
+ global regular_user3
+ regular_user3 = get_user( 'test3(a)bx.psu.edu' )
+ assert regular_user3 is not None, 'Problem retrieving user with email "test3(a)bx.psu.edu" from the database'
+ global regular_user3_private_role
+ regular_user3_private_role = get_private_role( regular_user3 )
+ self.logout()
+ self.login( email='test(a)bx.psu.edu', username='admin-user' )
+ global admin_user
+ admin_user = get_user( 'test(a)bx.psu.edu' )
+ assert admin_user is not None, 'Problem retrieving user with email "test(a)bx.psu.edu" from the database'
+ global admin_user_private_role
+ admin_user_private_role = get_private_role( admin_user )
+ def test_005_create_user_info_forms( self ):
"""Testing creating a new user info form and editing it"""
- self.logout()
- self.login( email='test(a)bx.psu.edu' )
- # create a the first form
- global form_one_name
+ # Logged in as admin_user
+ # Create a the first form
name = form_one_name
desc = "This is Student user info form's description"
- formtype = galaxy.model.FormDefinition.types.USER_INFO
+ formtype = get_user_info_form_definition()
self.create_form( name=name, desc=desc, formtype=formtype, num_fields=0 )
# Get the form_definition object for later tests
- form_one = get_latest_form(form_one_name)
+ form_one = get_form( form_one_name )
assert form_one is not None, 'Problem retrieving form named "%s" from the database' % name
# edit form & add few more fields
fields = [dict(name='Affiliation',
@@ -48,17 +65,20 @@
desc='',
type='CheckboxField',
required='optional')]
- form_one = get_latest_form(form_one_name)
- self.form_add_field(form_one.current.id, form_one.name, form_one.desc, form_one.type, field_index=len(form_one.fields), fields=fields)
- form_one_latest = get_latest_form(form_one_name)
- assert len(form_one_latest.fields) == len(form_one.fields)+len(fields)
+ self.form_add_field( form_one.current.id,
+ form_one.name,
+ form_one.desc,
+ form_one.type,
+ field_index=len( form_one.fields ),
+ fields=fields)
+ form_one_latest = get_form( form_one_name )
+ assert len( form_one_latest.fields ) == len( form_one.fields ) + len( fields )
# create the second form
- global form_two_name
name = form_two_name
desc = "This is Researcher user info form's description"
self.create_form( name=name, desc=desc, formtype=formtype, num_fields=0 )
# Get the form_definition object for later tests
- form_two = get_latest_form(form_two_name)
+ form_two = get_form( form_two_name )
assert form_two is not None, 'Problem retrieving form named "%s" from the database' % name
# edit form & add few more fields
fields = [dict(name='Affiliation',
@@ -74,94 +94,117 @@
desc='',
type='CheckboxField',
required='optional')]
- form_two = get_latest_form(form_two_name)
- self.form_add_field(form_two.current.id, form_two.name, form_two.desc, form_two.type, field_index=len(form_one.fields), fields=fields)
- form_two_latest = get_latest_form(form_two_name)
- assert len(form_two_latest.fields) == len(form_two.fields)+len(fields)
- def test_005_user_reqistration_multiple_user_info_forms( self ):
+ self.form_add_field( form_two.current.id,
+ form_two.name,
+ form_two.desc,
+ form_two.type,
+ field_index=len( form_one.fields ),
+ fields=fields )
+ form_two_latest = get_form( form_two_name )
+ assert len( form_two_latest.fields ) == len( form_two.fields ) + len( fields )
+ def test_010_user_reqistration_multiple_user_info_forms( self ):
''' Testing user registration with multiple user info forms '''
+ # Logged in as admin_user
self.logout()
- # user a new user with 'Student' user info form
- form_one = get_latest_form(form_one_name)
+ # Create a new user with 'Student' user info form
+ form_one = get_form(form_one_name)
user_info_values=['Educational', 'Penn State', True]
- self.create_user_with_info( 'test11(a)bx.psu.edu', 'testuser', 'test11',
+ self.create_user_with_info( 'test11(a)bx.psu.edu',
+ 'testuser',
+ 'test11',
user_info_forms='multiple',
user_info_form_id=form_one.id,
user_info_values=user_info_values )
- self.home()
- self.visit_page( "user/show_info" )
+ global regular_user11
+ regular_user11 = get_user( 'test11(a)bx.psu.edu' )
+ assert regular_user11 is not None, 'Problem retrieving user with email "test11(a)bx.psu.edu" from the database'
+ global regular_user11_private_role
+ regular_user11_private_role = get_private_role( regular_user11 )
+ self.logout()
+ self.login( email=regular_user11.email, username='regular-user11' )
+ self.visit_url( "%s/user/show_info" % self.url )
self.check_page_for_string( "Manage User Information" )
self.check_page_for_string( user_info_values[0] )
self.check_page_for_string( user_info_values[1] )
self.check_page_for_string( '<input type="checkbox" name="field_2" value="true" checked>' )
- def test_010_user_reqistration_single_user_info_forms( self ):
+ def test_015_user_reqistration_single_user_info_forms( self ):
''' Testing user registration with a single user info form '''
- # lets delete the 'Researcher' user info form
- self.login( 'test(a)bx.psu.edu' )
- form_two_latest = get_latest_form(form_two_name)
- form_two_latest.current.deleted = True
- sa_session.add( form_two_latest.current )
- sa_session.flush()
- self.home()
- self.visit_page('forms/manage?sort=create_time&f-deleted=True')
- self.check_page_for_string(form_two_latest.name)
+ # Logged in as regular_user_11
self.logout()
- # user a new user with 'Student' user info form
- form_one = get_latest_form(form_one_name)
+ self.login( email=admin_user.email )
+ # Delete the 'Researcher' user info form
+ form_two_latest = get_form( form_two_name )
+ mark_form_deleted( form_two_latest )
+ self.visit_url( '%s/forms/manage?sort=create_time&f-deleted=True' % self.url )
+ self.check_page_for_string( form_two_latest.name )
+ # Create a new user with 'Student' user info form
+ form_one = get_form( form_one_name )
user_info_values=['Educational', 'Penn State', True]
self.create_user_with_info( 'test12(a)bx.psu.edu', 'testuser', 'test12',
user_info_forms='single',
user_info_form_id=form_one.id,
user_info_values=user_info_values )
- self.home()
- self.visit_page( "user/show_info" )
+ global regular_user12
+ regular_user12 = get_user( 'test12(a)bx.psu.edu' )
+ assert regular_user12 is not None, 'Problem retrieving user with email "test12(a)bx.psu.edu" from the database'
+ global regular_user12_private_role
+ regular_user12_private_role = get_private_role( regular_user12 )
+ self.logout()
+ self.login( email=regular_user12.email, username='regular-user12' )
+ self.visit_url( "%s/user/show_info" % self.url )
self.check_page_for_string( "Manage User Information" )
self.check_page_for_string( user_info_values[0] )
self.check_page_for_string( user_info_values[1] )
self.check_page_for_string( '<input type="checkbox" name="field_2" value="true" checked>' )
- def test_015_edit_user_info( self ):
+ def test_020_edit_user_info( self ):
"""Testing editing user info as a regular user"""
- self.logout()
- self.login( 'test11(a)bx.psu.edu' )
- user = sa_session.query( galaxy.model.User ) \
- .filter( and_( galaxy.model.User.table.c.email=='test11(a)bx.psu.edu' ) ).first()
- self.edit_login_info( new_email='test11_new(a)bx.psu.edu', new_username='test11_new' )
+ # Logged in as regular_user_12
+ # Test changing email and user name - first try an invalid user name
+ self.edit_login_info( new_email='test12_new(a)bx.psu.edu',
+ new_username='test12_new',
+ check_str1='User name must contain only letters, numbers and' )
+ # Now try a valid user name
+ self.edit_login_info( new_email='test12_new(a)bx.psu.edu',
+ new_username='test12-new',
+ check_str1='The login information has been updated with the changes' )
+ # Since we changed the user's account. make sure the user's private role was changed accordingly
+ if not get_private_role( regular_user12 ):
+ raise AssertionError, "The private role for %s was not correctly set when their account (email) was changed" % regular_user12.email
+ # Test changing password
self.change_password( 'testuser', 'testuser#' )
self.logout()
- self.login( email='test11_new(a)bx.psu.edu', password='testuser#' )
- self.edit_login_info( new_email='test11(a)bx.psu.edu', new_username='test11' )
- self.change_password( 'testuser#', 'testuser' )
+ refresh( regular_user12 )
+ # Test logging in with new email and password
+ self.login( email=regular_user12.email, password='testuser#' )
+ # Test editing the user info
self.edit_user_info( ['Research', 'PSU'] )
- def test_020_create_user_as_admin( self ):
- ''' Testing creating users as an admin '''
+ def test_999_reset_data_for_later_test_runs( self ):
+ # Logged in as regular_user_12
self.logout()
- self.login( 'test(a)bx.psu.edu' )
- form_one = get_latest_form(form_one_name)
- user_info_values=['Educational', 'Penn State', True]
- self.create_user_with_info( 'test13(a)bx.psu.edu', 'testuser', 'test13',
- user_info_forms='single',
- user_info_form_id=form_one.id,
- user_info_values=user_info_values )
- self.logout()
- self.login( 'test(a)bx.psu.edu' )
- user = sa_session.query( galaxy.model.User ) \
- .filter( and_( galaxy.model.User.table.c.email=='test13(a)bx.psu.edu' ) ).first()
- self.home()
- page = "admin/users?id=%s&operation=information&f-deleted=False" % self.security.encode_id( user.id )
- self.visit_page( page )
- self.check_page_for_string( 'Manage User Information' )
- self.check_page_for_string( 'test13(a)bx.psu.edu' )
- self.check_page_for_string( user_info_values[0] )
- self.check_page_for_string( user_info_values[1] )
- self.check_page_for_string( '<input type="checkbox" name="field_2" value="true" checked>' )
- # lets delete the 'Student' user info form
- self.login( 'test(a)bx.psu.edu' )
- form_one_latest = get_latest_form(form_one_name)
- form_one_latest.current.deleted = True
- sa_session.add( form_one_latest.current )
- sa_session.flush()
- self.home()
- self.visit_page('forms/manage?sort=create_time&f-deleted=True')
- self.check_page_for_string(form_one_latest.name)
- self.logout()
-
+ self.login( email=admin_user.email )
+ ###############
+ # Mark form_one as deleted ( form_two was marked deleted earlier )
+ ###############
+ form_latest = get_form( form_one_name )
+ mark_form_deleted( form_latest )
+ ###############
+ # Manually delete the test_user11
+ ###############
+ self.mark_user_deleted( user_id=self.security.encode_id( regular_user11.id ), email=regular_user11.email )
+ refresh( regular_user11 )
+ self.purge_user( self.security.encode_id( regular_user11.id ), regular_user11.email )
+ refresh( regular_user11 )
+ # We should now only the the user and his private role
+ delete_user_roles( regular_user11 )
+ delete_obj( regular_user11 )
+ ###############
+ # Manually delete the test_user12
+ ###############
+ refresh( regular_user12 )
+ self.mark_user_deleted( user_id=self.security.encode_id( regular_user12.id ), email=regular_user12.email )
+ refresh( regular_user12 )
+ self.purge_user( self.security.encode_id( regular_user12.id ), regular_user12.email )
+ refresh( regular_user12 )
+ # We should now only the the user and his private role
+ delete_user_roles( regular_user12 )
+ delete_obj( regular_user12 )
1
0

16 Apr '10
details: http://www.bx.psu.edu/hg/galaxy/rev/feff604427ee
changeset: 3582:feff604427ee
user: jeremy goecks <jeremy.goecks(a)emory.edu>
date: Tue Mar 30 17:03:29 2010 -0400
description:
Patch: show User menu's history, dataset, and pages links independent of app.config.use_remote_user setting. Patch contributed by Ryan Brase ( ry4an+galaxy(a)msi.umn.edu ).
diffstat:
templates/base_panels.mako | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)
diffs (22 lines):
diff -r c07a6bdc794c -r feff604427ee templates/base_panels.mako
--- a/templates/base_panels.mako Tue Mar 30 16:33:19 2010 -0400
+++ b/templates/base_panels.mako Tue Mar 30 17:03:29 2010 -0400
@@ -269,12 +269,12 @@
logout_url = h.url_for( controller='/user', action='logout' )
%>
<li><a target="${logout_target}" href="${logout_url}">Logout</a></li>
- <li><hr style="color: inherit; background-color: gray"/></li>
- <li><a target="galaxy_main" href="${h.url_for( controller='/history', action='list' )}">Histories</a></li>
- <li><a target="galaxy_main" href="${h.url_for( controller='/dataset', action='list' )}">Datasets</a></li>
- %if app.config.get_bool( 'enable_pages', False ):
- <li><a href="${h.url_for( controller='/page', action='list' )}">Pages</a></li>
- %endif
+ %endif
+ <li><hr style="color: inherit; background-color: gray"/></li>
+ <li><a target="galaxy_main" href="${h.url_for( controller='/history', action='list' )}">Histories</a></li>
+ <li><a target="galaxy_main" href="${h.url_for( controller='/dataset', action='list' )}">Datasets</a></li>
+ %if app.config.get_bool( 'enable_pages', False ):
+ <li><a href="${h.url_for( controller='/page', action='list' )}">Pages</a></li>
%endif
</ul>
</div>
1
0

16 Apr '10
details: http://www.bx.psu.edu/hg/galaxy/rev/c07a6bdc794c
changeset: 3581:c07a6bdc794c
user: Kelly Vincent <kpvincent(a)bx.psu.edu>
date: Tue Mar 30 16:33:19 2010 -0400
description:
Updated several NGS tools to better handle stderr (allow for extremely large stderr output)
diffstat:
tools/metag_tools/megablast_wrapper.py | 43 +++++++++----
tools/metag_tools/megablast_wrapper.xml | 98 ++++++++++++++++----------------
tools/samtools/sam_merge.py | 11 +++-
tools/samtools/sam_pileup.py | 22 ++++++-
tools/samtools/sam_to_bam.py | 33 ++++++++++-
tools/sr_mapping/bowtie_wrapper.py | 21 ++++++-
tools/sr_mapping/bowtie_wrapper_code.py | 4 +-
tools/sr_mapping/bwa_wrapper.py | 42 ++++++++++++-
8 files changed, 197 insertions(+), 77 deletions(-)
diffs (453 lines):
diff -r 8268439390c6 -r c07a6bdc794c tools/metag_tools/megablast_wrapper.py
--- a/tools/metag_tools/megablast_wrapper.py Tue Mar 30 15:39:14 2010 -0400
+++ b/tools/metag_tools/megablast_wrapper.py Tue Mar 30 16:33:19 2010 -0400
@@ -15,7 +15,7 @@
usage: %prog db_build input_file word_size identity_cutoff eval_cutoff filter_query index_dir output_file
"""
-import sys, os, tempfile
+import os, subprocess, sys, tempfile
from galaxy import eggs
import pkg_resources; pkg_resources.require( "bx-python" )
from bx.cookbook import doc_optparse
@@ -29,7 +29,7 @@
def __main__():
#Parse Command Line
options, args = doc_optparse.parse( __doc__ )
-
+
db_build = options.db_build
query_filename = options.input.strip()
output_filename = options.output.strip()
@@ -66,18 +66,33 @@
if not db.has_key( db_build ):
stop_err( 'Cannot locate the target database. Please check your location file.' )
-
+
# arguments for megablast
chunk = db[ ( db_build ) ]
- megablast_command = "megablast -d %s -i %s -o %s -m 8 -a 8 -W %s -p %s -e %s -F %s > /dev/null 2>&1 " \
+ megablast_command = "megablast -d %s -i %s -o %s -m 8 -a 8 -W %s -p %s -e %s -F %s > /dev/null " \
% ( chunk, query_filename, mega_temp_output, mega_word_size, mega_iden_cutoff, mega_evalue_cutoff, mega_filter )
-
+
print megablast_command
-
+
try:
- os.system( megablast_command )
+ proc = subprocess.Popen( args=megablast_command, shell=True, stderr=subprocess.PIPE )
+ returncode = proc.wait()
+ # get stderr, allowing for case where it's very large
+ stderr = ''
+ buffsize = 1048576
+ try:
+ while True:
+ stderr += proc.stderr.read( buffsize )
+ if not stderr or len( stderr ) % buffsize != 0:
+ break
+ except OverflowError:
+ pass
+ if returncode != 0:
+ raise Exception, stderr
except Exception, e:
- stop_err( str( e ) )
+ if os.path.exists( mega_temp_output ):
+ os.unlink( mega_temp_output )
+ stop_err( 'Error indexing reference sequence. ' + str( e ) )
output = open( output_filename, 'w' )
invalid_lines = 0
@@ -89,24 +104,24 @@
gi, gi_len = fields[1].split( '_' )
# convert the last column (causing problem in filter tool) to float
fields[-1] = float( fields[-1] )
-
new_line = "%s\t%s\t%s\t%s\t%0.1f" % ( fields[0], gi, gi_len, '\t'.join( fields[2:-1] ), fields[-1] )
except:
new_line = line
invalid_lines += 1
output.write( "%s\n" % new_line )
output.close()
-
- os.unlink( mega_temp_output ) #remove the tempfile that we just reformatted the contents of
-
+
+ if os.path.exists( mega_temp_output ):
+ os.unlink( mega_temp_output ) #remove the tempfile that we just reformatted the contents of
+
if invalid_lines:
print "Unable to parse %d lines. Keep the default format." % invalid_lines
-
+
# megablast generates a file called error.log, if empty, delete it, if not, show the contents
if os.path.exists( './error.log' ):
for i, line in enumerate( file( './error.log' ) ):
line = line.rstrip( '\r\n' )
print line
os.remove( './error.log' )
-
+
if __name__ == "__main__" : __main__()
diff -r 8268439390c6 -r c07a6bdc794c tools/metag_tools/megablast_wrapper.xml
--- a/tools/metag_tools/megablast_wrapper.xml Tue Mar 30 15:39:14 2010 -0400
+++ b/tools/metag_tools/megablast_wrapper.xml Tue Mar 30 16:33:19 2010 -0400
@@ -1,55 +1,55 @@
<tool id="megablast_wrapper" name="Megablast" version="1.0.5">
- <description> compare short reads against htgs, nt, and wgs databases</description>
- <command interpreter="python">
- megablast_wrapper.py
- --db_build="$source_select"
- --input=$input_query
- --word_size=$word_size
- --identity_cutoff=$iden_cutoff
- --eval_cutoff=$evalue_cutoff
- --filter_query=$filter_query
- --index_dir=${GALAXY_DATA_INDEX_DIR}
- --output=$output1
- </command>
- <inputs>
- <param name="input_query" type="data" format="fasta" label="Compare these sequences"/>
- <param name="source_select" type="select" display="radio" label="against target database">
- <options from_file="blastdb.loc">
- <column name="name" index="0"/>
- <column name="value" index="0"/>
- </options>
- </param>
- <param name="word_size" type="select" label="using word size" help="Size of best perfect match">
- <option value="28">28</option>
- <option value="16">16</option>
- </param>
- <param name="iden_cutoff" type="float" size="15" value="90.0" label="report hits above this identity" help="no cutoff if 0" />
+ <description> compare short reads against htgs, nt, and wgs databases</description>
+ <command interpreter="python">
+ megablast_wrapper.py
+ --db_build="$source_select"
+ --input=$input_query
+ --word_size=$word_size
+ --identity_cutoff=$iden_cutoff
+ --eval_cutoff=$evalue_cutoff
+ --filter_query=$filter_query
+ --index_dir=${GALAXY_DATA_INDEX_DIR}
+ --output=$output1
+ </command>
+ <inputs>
+ <param name="input_query" type="data" format="fasta" label="Compare these sequences"/>
+ <param name="source_select" type="select" display="radio" label="against target database">
+ <options from_file="blastdb.loc">
+ <column name="name" index="0"/>
+ <column name="value" index="0"/>
+ </options>
+ </param>
+ <param name="word_size" type="select" label="using word size" help="Size of best perfect match">
+ <option value="28">28</option>
+ <option value="16">16</option>
+ </param>
+ <param name="iden_cutoff" type="float" size="15" value="90.0" label="report hits above this identity" help="no cutoff if 0" />
<param name="evalue_cutoff" type="float" size="15" value="0.001" label="set expectation value cutoff" />
- <param name="filter_query" type="select" label="Filter out low complexity regions?">
+ <param name="filter_query" type="select" label="Filter out low complexity regions?">
<option value="T">Yes</option>
<option value="F">No</option>
- </param>
- </inputs>
- <outputs>
- <data name="output1" format="tabular"/>
- </outputs>
- <requirements>
- <requirement type="binary">megablast</requirement>
- </requirements>
- <tests>
- <test>
- <param name="input_query" value="megablast_wrapper_test1.fa" ftype="fasta"/>
- <!-- source_select needs to match the entry in the blastdb.loc file, which includes the last update date if appropriate -->
- <param name="source_select" value="phiX" />
- <param name="word_size" value="28" />
- <param name="iden_cutoff" value="99.0" />
- <param name="evalue_cutoff" value="10.0" />
- <param name="filter_query" value="T" />
- <output name="output1" file="megablast_wrapper_test1.out"/>
- </test>
- </tests>
- <help>
-
+ </param>
+ </inputs>
+ <outputs>
+ <data name="output1" format="tabular"/>
+ </outputs>
+ <requirements>
+ <requirement type="binary">megablast</requirement>
+ </requirements>
+ <tests>
+ <test>
+ <param name="input_query" value="megablast_wrapper_test1.fa" ftype="fasta"/>
+ <!-- source_select needs to match the entry in the blastdb.loc file, which includes the last update date if appropriate -->
+ <param name="source_select" value="phiX" />
+ <param name="word_size" value="28" />
+ <param name="iden_cutoff" value="99.0" />
+ <param name="evalue_cutoff" value="10.0" />
+ <param name="filter_query" value="T" />
+ <output name="output1" file="megablast_wrapper_test1.out"/>
+ </test>
+ </tests>
+ <help>
+
.. class:: warningmark
**Note**. Database searches may take substantial amount of time. For large input datasets it is advisable to allow overnight processing.
@@ -86,5 +86,5 @@
Zhang et al. A Greedy Algorithm for Aligning DNA Sequences. 2000. JCB: 203-214.
- </help>
+ </help>
</tool>
diff -r 8268439390c6 -r c07a6bdc794c tools/samtools/sam_merge.py
--- a/tools/samtools/sam_merge.py Tue Mar 30 15:39:14 2010 -0400
+++ b/tools/samtools/sam_merge.py Tue Mar 30 16:33:19 2010 -0400
@@ -25,7 +25,16 @@
try:
proc = subprocess.Popen( args=cmd, shell=True, stderr=subprocess.PIPE )
returncode = proc.wait()
- stderr = proc.stderr.read()
+ # get stderr, allowing for case where it's very large
+ stderr = ''
+ buffsize = 1048576
+ try:
+ while True:
+ stderr += proc.stderr.read( buffsize )
+ if not stderr or len( stderr ) % buffsize != 0:
+ break
+ except OverflowError:
+ pass
if returncode != 0:
raise Exception, stderr
except Exception, e:
diff -r 8268439390c6 -r c07a6bdc794c tools/samtools/sam_pileup.py
--- a/tools/samtools/sam_pileup.py Tue Mar 30 15:39:14 2010 -0400
+++ b/tools/samtools/sam_pileup.py Tue Mar 30 16:33:19 2010 -0400
@@ -90,7 +90,16 @@
cmdIndex = 'samtools faidx %s' % ( tmpf1_name )
proc = subprocess.Popen( args=cmdIndex, shell=True, cwd=tmpDir, stderr=subprocess.PIPE )
returncode = proc.wait()
- stderr = proc.stderr.read()
+ # get stderr, allowing for case where it's very large
+ stderr = ''
+ buffsize = 1048576
+ try:
+ while True:
+ stderr += proc.stderr.read( buffsize )
+ if not stderr or len( stderr ) % buffsize != 0:
+ break
+ except OverflowError:
+ pass
#did index succeed?
if returncode != 0:
raise Exception, 'Error creating index file\n' + stderr
@@ -99,7 +108,16 @@
proc = subprocess.Popen( args=cmd, shell=True, cwd=tmpDir, stderr=subprocess.PIPE )
returncode = proc.wait()
#did it succeed?
- stderr = proc.stderr.read()
+ # get stderr, allowing for case where it's very large
+ stderr = ''
+ buffsize = 1048576
+ try:
+ while True:
+ stderr += proc.stderr.read( buffsize )
+ if not stderr or len( stderr ) % buffsize != 0:
+ break
+ except OverflowError:
+ pass
if returncode != 0:
raise Exception, stderr
except Exception, e:
diff -r 8268439390c6 -r c07a6bdc794c tools/samtools/sam_to_bam.py
--- a/tools/samtools/sam_to_bam.py Tue Mar 30 15:39:14 2010 -0400
+++ b/tools/samtools/sam_to_bam.py Tue Mar 30 16:33:19 2010 -0400
@@ -77,7 +77,16 @@
command = 'samtools faidx %s' % fai_index_file_base
proc = subprocess.Popen( args=command, shell=True, cwd=tmp_dir, stderr=subprocess.PIPE )
returncode = proc.wait()
- stderr = proc.stderr.read()
+ # get stderr, allowing for case where it's very large
+ stderr = ''
+ buffsize = 1048576
+ try:
+ while True:
+ stderr += proc.stderr.read( buffsize )
+ if not stderr or len( stderr ) % buffsize != 0:
+ break
+ except OverflowError:
+ pass
if returncode != 0:
raise Exception, stderr
if len( open( fai_index_file_path ).read().strip() ) == 0:
@@ -97,7 +106,16 @@
command = 'samtools view -bt %s -o %s %s' % ( fai_index_file_path, tmp_aligns_file_name, options.input1 )
proc = subprocess.Popen( args=command, shell=True, cwd=tmp_dir, stderr=subprocess.PIPE )
returncode = proc.wait()
- stderr = proc.stderr.read()
+ # get stderr, allowing for case where it's very large
+ stderr = ''
+ buffsize = 1048576
+ try:
+ while True:
+ stderr += proc.stderr.read( buffsize )
+ if not stderr or len( stderr ) % buffsize != 0:
+ break
+ except OverflowError:
+ pass
if returncode != 0:
raise Exception, stderr
if len( open( tmp_aligns_file_name ).read() ) == 0:
@@ -117,7 +135,16 @@
command = 'samtools sort %s %s' % ( tmp_aligns_file_name, tmp_sorted_aligns_file_name )
proc = subprocess.Popen( args=command, shell=True, cwd=tmp_dir, stderr=subprocess.PIPE )
returncode = proc.wait()
- stderr = proc.stderr.read()
+ # get stderr, allowing for case where it's very large
+ stderr = ''
+ buffsize = 1048576
+ try:
+ while True:
+ stderr += proc.stderr.read( buffsize )
+ if not stderr or len( stderr ) % buffsize != 0:
+ break
+ except OverflowError:
+ pass
if returncode != 0:
raise Exception, stderr
except Exception, e:
diff -r 8268439390c6 -r c07a6bdc794c tools/sr_mapping/bowtie_wrapper.py
--- a/tools/sr_mapping/bowtie_wrapper.py Tue Mar 30 15:39:14 2010 -0400
+++ b/tools/sr_mapping/bowtie_wrapper.py Tue Mar 30 16:33:19 2010 -0400
@@ -196,7 +196,15 @@
try:
proc = subprocess.Popen( args=cmd1, shell=True, cwd=tmp_index_dir, stderr=subprocess.PIPE, stdout=subprocess.PIPE )
returncode = proc.wait()
- stderr = proc.stderr.read()
+ stderr = ''
+ buffsize = 1048576
+ try:
+ while True:
+ stderr += proc.stderr.read( buffsize )
+ if not stderr or len( stderr ) % buffsize != 0:
+ break
+ except OverflowError:
+ pass
if returncode != 0:
raise Exception, stderr
except Exception, e:
@@ -352,7 +360,16 @@
# align
proc = subprocess.Popen( args=cmd2, shell=True, cwd=tmp_index_dir, stderr=subprocess.PIPE )
returncode = proc.wait()
- stderr = proc.stderr.read()
+ # get stderr, allowing for case where it's very large
+ stderr = ''
+ buffsize = 1048576
+ try:
+ while True:
+ stderr += proc.stderr.read( buffsize )
+ if not stderr or len( stderr ) % buffsize != 0:
+ break
+ except OverflowError:
+ pass
if returncode != 0:
raise Exception, stderr
# check that there are results in the output file
diff -r 8268439390c6 -r c07a6bdc794c tools/sr_mapping/bowtie_wrapper_code.py
--- a/tools/sr_mapping/bowtie_wrapper_code.py Tue Mar 30 15:39:14 2010 -0400
+++ b/tools/sr_mapping/bowtie_wrapper_code.py Tue Mar 30 16:33:19 2010 -0400
@@ -10,6 +10,6 @@
refFile = '?'
dbkey = os.path.split( refFile )[1].split( '.' )[0]
# deal with the one odd case
- if dbkey.find( 'chrM' ) >= 0 or dbkey.find( 'chr_m' ) >= 0:
+ if dbkey == 'equCab2chrM':
dbkey = 'equCab2'
- out_data[ 'output' ].set_dbkey(dbkey)
+ out_data[ 'output' ].set_dbkey( dbkey )
diff -r 8268439390c6 -r c07a6bdc794c tools/sr_mapping/bwa_wrapper.py
--- a/tools/sr_mapping/bwa_wrapper.py Tue Mar 30 15:39:14 2010 -0400
+++ b/tools/sr_mapping/bwa_wrapper.py Tue Mar 30 16:33:19 2010 -0400
@@ -93,7 +93,16 @@
try:
proc = subprocess.Popen( args=cmd1, shell=True, cwd=tmp_index_dir, stderr=subprocess.PIPE )
returncode = proc.wait()
- stderr = proc.stderr.read()
+ # get stderr, allowing for case where it's very large
+ stderr = ''
+ buffsize = 1048576
+ try:
+ while True:
+ stderr += proc.stderr.read( buffsize )
+ if not stderr or len( stderr ) % buffsize != 0:
+ break
+ except OverflowError:
+ pass
if returncode != 0:
raise Exception, stderr
except Exception, e:
@@ -151,6 +160,7 @@
else:
cmd3 = 'bwa samse %s %s %s %s >> %s' % ( gen_alignment_cmds, ref_file_name, tmp_align_out_name, options.fastq, options.output )
# perform alignments
+ buffsize = 1048576
try:
# need to nest try-except in try-finally to handle 2.4
try:
@@ -158,7 +168,15 @@
try:
proc = subprocess.Popen( args=cmd2, shell=True, cwd=tmp_dir, stderr=subprocess.PIPE )
returncode = proc.wait()
- stderr = proc.stderr.read()
+ # get stderr, allowing for case where it's very large
+ stderr = ''
+ try:
+ while True:
+ stderr += proc.stderr.read( buffsize )
+ if not stderr or len( stderr ) % buffsize != 0:
+ break
+ except OverflowError:
+ pass
if returncode != 0:
raise Exception, stderr
except Exception, e:
@@ -168,7 +186,15 @@
if cmd2b:
proc = subprocess.Popen( args=cmd2b, shell=True, cwd=tmp_dir, stderr=subprocess.PIPE )
returncode = proc.wait()
- stderr = proc.stderr.read()
+ # get stderr, allowing for case where it's very large
+ stderr = ''
+ try:
+ while True:
+ stderr += proc.stderr.read( buffsize )
+ if not stderr or len( stderr ) % buffsize != 0:
+ break
+ except OverflowError:
+ pass
if returncode != 0:
raise Exception, stderr
except Exception, e:
@@ -177,7 +203,15 @@
try:
proc = subprocess.Popen( args=cmd3, shell=True, cwd=tmp_dir, stderr=subprocess.PIPE )
returncode = proc.wait()
- stderr = proc.stderr.read()
+ # get stderr, allowing for case where it's very large
+ stderr = ''
+ try:
+ while True:
+ stderr += proc.stderr.read( buffsize )
+ if not stderr or len( stderr ) % buffsize != 0:
+ break
+ except OverflowError:
+ pass
if returncode != 0:
raise Exception, stderr
except Exception, e:
1
0

16 Apr '10
details: http://www.bx.psu.edu/hg/galaxy/rev/8268439390c6
changeset: 3580:8268439390c6
user: rc
date: Tue Mar 30 15:39:14 2010 -0400
description:
lims: fixed a bug in selecting workflow in the samples page
diffstat:
templates/admin/requests/show_request.mako | 10 ++++++----
templates/requests/show_request.mako | 20 +++++++++++++++++++-
2 files changed, 25 insertions(+), 5 deletions(-)
diffs (60 lines):
diff -r 153e7dd5ba1e -r 8268439390c6 templates/admin/requests/show_request.mako
--- a/templates/admin/requests/show_request.mako Tue Mar 30 09:34:56 2010 -0400
+++ b/templates/admin/requests/show_request.mako Tue Mar 30 15:39:14 2010 -0400
@@ -287,10 +287,12 @@
%elif field['type'] == 'WorkflowField':
<select name="sample_${index}_field_${field_index}">
%for option_index, option in enumerate(request.user.stored_workflows):
- %if option == sample_values[field_index]:
- <option value="${option.id}" selected>${option.name}</option>
- %else:
- <option value="${option.id}">${option.name}</option>
+ %if not option.deleted:
+ %if str(option.id) == str(sample_values[field_index]):
+ <option value="${option.id}" selected>${option.name}</option>
+ %else:
+ <option value="${option.id}">${option.name}</option>
+ %endif
%endif
%endfor
</select>
diff -r 153e7dd5ba1e -r 8268439390c6 templates/requests/show_request.mako
--- a/templates/requests/show_request.mako Tue Mar 30 09:34:56 2010 -0400
+++ b/templates/requests/show_request.mako Tue Mar 30 15:39:14 2010 -0400
@@ -212,6 +212,18 @@
%endif
%endfor
</select>
+ %elif field['type'] == 'WorkflowField':
+ <select name="sample_${index}_field_${field_index}">
+ %for option_index, option in enumerate(request.user.stored_workflows):
+ %if not option.deleted:
+ %if str(option.id) == str(sample_values[field_index]):
+ <option value="${option.id}" selected>${option.name}</option>
+ %else:
+ <option value="${option.id}">${option.name}</option>
+ %endif
+ %endif
+ %endfor
+ </select>
%elif field['type'] == 'CheckboxField':
<input type="checkbox" name="sample_${index}_field_${field_index}" value="Yes"/>
%endif
@@ -229,10 +241,16 @@
%for field_index, field in fields_dict.items():
<td>
%if sample_values[field_index]:
- ${sample_values[field_index]}
+ %if field['type'] == 'WorkflowField':
+ <% workflow = trans.sa_session.query( trans.app.model.StoredWorkflow ).get( int(sample_values[field_index]) ) %>
+ <a href="${h.url_for( controller='workflow', action='run', id=trans.security.encode_id(workflow.id) )}">${workflow.name}</a>
+ %else:
+ ${sample_values[field_index]}
+ %endif
%else:
<i>None</i>
%endif
+
</td>
%endfor
</%def>
1
0

16 Apr '10
details: http://www.bx.psu.edu/hg/galaxy/rev/153e7dd5ba1e
changeset: 3579:153e7dd5ba1e
user: Nate Coraor <nate(a)bx.psu.edu>
date: Tue Mar 30 09:34:56 2010 -0400
description:
Only display history name/rename if logged in
diffstat:
templates/root/history.mako | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diffs (15 lines):
diff -r 2f4807d6c38c -r 153e7dd5ba1e templates/root/history.mako
--- a/templates/root/history.mako Mon Mar 29 14:54:23 2010 -0400
+++ b/templates/root/history.mako Tue Mar 30 09:34:56 2010 -0400
@@ -410,9 +410,11 @@
<div id="history-name-area" class="historyLinks">
+ %if trans.get_user():
<div id="history-name-container">
<div id="history-name" class="tooltip editable-text" title="Click to rename history">${history.get_display_name() | h}</div>
</div>
+ %endif
</div>
1
0

16 Apr '10
details: http://www.bx.psu.edu/hg/galaxy/rev/2f4807d6c38c
changeset: 3578:2f4807d6c38c
user: Dan Blankenberg <dan(a)bx.psu.edu>
date: Mon Mar 29 14:54:23 2010 -0400
description:
Add ability for reverse complement in e.g. FASTQ Manipulation tool to handle ambiguity codes.
diffstat:
lib/galaxy_utils/sequence/transform.py | 7 +++----
test-data/misc_dna_as_sanger_rev_comp_1.fastqsanger | 16 ++++++++++++++++
test-data/misc_dna_original_sanger.fastqsanger | 16 ++++++++++++++++
test-data/misc_rna_as_sanger_rev_comp_1.fastqsanger | 16 ++++++++++++++++
test-data/misc_rna_original_sanger.fastqsanger | 16 ++++++++++++++++
tools/fastq/fastq_manipulation.xml | 20 ++++++++++++++++++++
6 files changed, 87 insertions(+), 4 deletions(-)
diffs (127 lines):
diff -r d34c1a8df003 -r 2f4807d6c38c lib/galaxy_utils/sequence/transform.py
--- a/lib/galaxy_utils/sequence/transform.py Mon Mar 29 14:33:23 2010 -0400
+++ b/lib/galaxy_utils/sequence/transform.py Mon Mar 29 14:54:23 2010 -0400
@@ -2,10 +2,9 @@
#Contains methods to tranform sequence strings
import string
-#FIXME: This should Handle ambiguity codes...
-#Translation table for reverse Complement
-DNA_COMPLEMENT = string.maketrans( "ACGTacgt", "TGCAtgca" )
-RNA_COMPLEMENT = string.maketrans( "ACGUacgu", "UGCAugca" )
+#Translation table for reverse Complement, with ambiguity codes
+DNA_COMPLEMENT = string.maketrans( "ACGTRYKMBDHVacgtrykmbdhv", "TGCAYRMKVHDBtgcayrmkvhdb" )
+RNA_COMPLEMENT = string.maketrans( "ACGURYKMBDHVacgurykmbdhv", "UGCAYRMKVHDBugcayrmkvhdb" )
#Translation table for DNA <--> RNA
DNA_TO_RNA = string.maketrans( "Tt", "Uu" )
RNA_TO_DNA = string.maketrans( "Uu", "Tt" )
diff -r d34c1a8df003 -r 2f4807d6c38c test-data/misc_dna_as_sanger_rev_comp_1.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/misc_dna_as_sanger_rev_comp_1.fastqsanger Mon Mar 29 14:54:23 2010 -0400
@@ -0,0 +1,16 @@
+@FAKE0007 Original version has lower case unambiguous DNA with PHRED scores from 0 to 40 inclusive (in that order)
+TACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
++
+IHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
+@FAKE0008 Original version has mixed case unambiguous DNA with PHRED scores from 0 to 40 inclusive (in that order)
+cgCTatgAcgCTatgAcgCTatgAcgCTatgAcgCTatgAc
++
+IHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
+@FAKE0009 Original version has lower case unambiguous DNA with PHRED scores from 0 to 40 inclusive (in that order)
+actgactgactgactgactgactgactgactgactgactga
++
+IHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
+@FAKE0010 Original version has mixed case ambiguous DNA and PHRED scores of 40, 30, 20, 10 (cycled)
+NHBVDMKSWRYGATCnhbvdmkswrygatc
++
+?I+5?I+5?I+5?I+5?I+5?I+5?I+5?I
diff -r d34c1a8df003 -r 2f4807d6c38c test-data/misc_dna_original_sanger.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/misc_dna_original_sanger.fastqsanger Mon Mar 29 14:54:23 2010 -0400
@@ -0,0 +1,16 @@
+@FAKE0007 Original version has lower case unambiguous DNA with PHRED scores from 0 to 40 inclusive (in that order)
+ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTA
++
+!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI
+@FAKE0008 Original version has mixed case unambiguous DNA with PHRED scores from 0 to 40 inclusive (in that order)
+gTcatAGcgTcatAGcgTcatAGcgTcatAGcgTcatAGcg
++
+!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI
+@FAKE0009 Original version has lower case unambiguous DNA with PHRED scores from 0 to 40 inclusive (in that order)
+tcagtcagtcagtcagtcagtcagtcagtcagtcagtcagt
++
+!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI
+@FAKE0010 Original version has mixed case ambiguous DNA and PHRED scores of 40, 30, 20, 10 (cycled)
+gatcrywsmkhbvdnGATCRYWSMKHBVDN
++
+I?5+I?5+I?5+I?5+I?5+I?5+I?5+I?
diff -r d34c1a8df003 -r 2f4807d6c38c test-data/misc_rna_as_sanger_rev_comp_1.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/misc_rna_as_sanger_rev_comp_1.fastqsanger Mon Mar 29 14:54:23 2010 -0400
@@ -0,0 +1,16 @@
+@FAKE0011 Original version has lower case unambiguous RNA with PHRED scores from 0 to 40 inclusive (in that order)
+UACGUACGUACGUACGUACGUACGUACGUACGUACGUACGU
++
+IHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
+@FAKE0012 Original version has mixed case unambiguous RNA with PHRED scores from 0 to 40 inclusive (in that order)
+cgCUaugAcgCUaugAcgCUaugAcgCUaugAcgCUaugAc
++
+IHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
+@FAKE0013 Original version has lower case unambiguous RNA with PHRED scores from 0 to 40 inclusive (in that order)
+acugacugacugacugacugacugacugacugacugacuga
++
+IHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
+@FAKE0014 Original version has mixed case ambiguous RNA with PHRED scores from 35 to 40 inclusive (cycled)
+NHBVDMKSWRYGAUCnhbvdmkswrygauc
++
+IHGFEDIHGFEDIHGFEDIHGFEDIHGFED
diff -r d34c1a8df003 -r 2f4807d6c38c test-data/misc_rna_original_sanger.fastqsanger
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/misc_rna_original_sanger.fastqsanger Mon Mar 29 14:54:23 2010 -0400
@@ -0,0 +1,16 @@
+@FAKE0011 Original version has lower case unambiguous RNA with PHRED scores from 0 to 40 inclusive (in that order)
+ACGUACGUACGUACGUACGUACGUACGUACGUACGUACGUA
++
+!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI
+@FAKE0012 Original version has mixed case unambiguous RNA with PHRED scores from 0 to 40 inclusive (in that order)
+gUcauAGcgUcauAGcgUcauAGcgUcauAGcgUcauAGcg
++
+!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI
+@FAKE0013 Original version has lower case unambiguous RNA with PHRED scores from 0 to 40 inclusive (in that order)
+ucagucagucagucagucagucagucagucagucagucagu
++
+!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI
+@FAKE0014 Original version has mixed case ambiguous RNA with PHRED scores from 35 to 40 inclusive (cycled)
+gaucrywsmkhbvdnGAUCRYWSMKHBVDN
++
+DEFGHIDEFGHIDEFGHIDEFGHIDEFGHI
diff -r d34c1a8df003 -r 2f4807d6c38c tools/fastq/fastq_manipulation.xml
--- a/tools/fastq/fastq_manipulation.xml Mon Mar 29 14:33:23 2010 -0400
+++ b/tools/fastq/fastq_manipulation.xml Mon Mar 29 14:54:23 2010 -0400
@@ -331,6 +331,26 @@
<param name="manipulation_selector" value="rev_comp" />
<output name="output_file" file="sanger_full_range_rev_comp.fastqsanger" />
</test>
+ <!-- match all and rev comp, with ambiguous DNA -->
+ <test>
+ <param name="input_file" value="misc_dna_original_sanger.fastqsanger" ftype="fastqsanger" />
+ <param name="match_type_selector" value="identifier" />
+ <param name="match_selector" value="regex" />
+ <param name="match_by" value=".*" />
+ <param name="manipulation_type_selector" value="sequence" />
+ <param name="manipulation_selector" value="rev_comp" />
+ <output name="output_file" file="misc_dna_as_sanger_rev_comp_1.fastqsanger" />
+ </test>
+ <!-- match all and rev comp, with ambiguous RNA -->
+ <test>
+ <param name="input_file" value="misc_rna_original_sanger.fastqsanger" ftype="fastqsanger" />
+ <param name="match_type_selector" value="identifier" />
+ <param name="match_selector" value="regex" />
+ <param name="match_by" value=".*" />
+ <param name="manipulation_type_selector" value="sequence" />
+ <param name="manipulation_selector" value="rev_comp" />
+ <output name="output_file" file="misc_rna_as_sanger_rev_comp_1.fastqsanger" />
+ </test>
<!-- match first seq and rev comp -->
<test>
<param name="input_file" value="sanger_full_range_original_sanger.fastqsanger" ftype="fastqsanger" />
1
0

16 Apr '10
details: http://www.bx.psu.edu/hg/galaxy/rev/d34c1a8df003
changeset: 3577:d34c1a8df003
user: Greg Von Kuster <greg(a)bx.psu.edu>
date: Mon Mar 29 14:33:23 2010 -0400
description:
Fix the column_maker tool so that if round is set to 'yes', the computed result is actually rounded. Added 2 new functional test to cover behavior.
diffstat:
test-data/column_maker_out1.interval | 65 ++++++++++++++++++++++++++++++++++++
test-data/column_maker_out2.interval | 5 ++
test-data/column_maker_out3.interval | 5 ++
test-data/eq-compute.dat | 65 ------------------------------------
tools/stats/column_maker.py | 11 +++--
tools/stats/column_maker.xml | 16 +++++++-
6 files changed, 96 insertions(+), 71 deletions(-)
diffs (224 lines):
diff -r 5b793b193cac -r d34c1a8df003 test-data/column_maker_out1.interval
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/column_maker_out1.interval Mon Mar 29 14:33:23 2010 -0400
@@ -0,0 +1,65 @@
+chr1 147962192 147962580 CCDS989.1_cds_0_0_chr1_147962193_r 0 - 388.0
+chr1 147984545 147984630 CCDS990.1_cds_0_0_chr1_147984546_f 0 + 85.0
+chr1 148078400 148078582 CCDS993.1_cds_0_0_chr1_148078401_r 0 - 182.0
+chr1 148185136 148185276 CCDS996.1_cds_0_0_chr1_148185137_f 0 + 140.0
+chr10 55251623 55253124 CCDS7248.1_cds_0_0_chr10_55251624_r 0 - 1501.0
+chr11 116124407 116124501 CCDS8374.1_cds_0_0_chr11_116124408_r 0 - 94.0
+chr11 116206508 116206563 CCDS8377.1_cds_0_0_chr11_116206509_f 0 + 55.0
+chr11 116211733 116212337 CCDS8378.1_cds_0_0_chr11_116211734_r 0 - 604.0
+chr11 1812377 1812407 CCDS7726.1_cds_0_0_chr11_1812378_f 0 + 30.0
+chr12 38440094 38440321 CCDS8736.1_cds_0_0_chr12_38440095_r 0 - 227.0
+chr13 112381694 112381953 CCDS9526.1_cds_0_0_chr13_112381695_f 0 + 259.0
+chr14 98710240 98712285 CCDS9949.1_cds_0_0_chr14_98710241_r 0 - 2045.0
+chr15 41486872 41487060 CCDS10096.1_cds_0_0_chr15_41486873_r 0 - 188.0
+chr15 41673708 41673857 CCDS10097.1_cds_0_0_chr15_41673709_f 0 + 149.0
+chr15 41679161 41679250 CCDS10098.1_cds_0_0_chr15_41679162_r 0 - 89.0
+chr15 41826029 41826196 CCDS10101.1_cds_0_0_chr15_41826030_f 0 + 167.0
+chr16 142908 143003 CCDS10397.1_cds_0_0_chr16_142909_f 0 + 95.0
+chr16 179963 180135 CCDS10401.1_cds_0_0_chr16_179964_r 0 - 172.0
+chr16 244413 244681 CCDS10402.1_cds_0_0_chr16_244414_f 0 + 268.0
+chr16 259268 259383 CCDS10403.1_cds_0_0_chr16_259269_r 0 - 115.0
+chr18 23786114 23786321 CCDS11891.1_cds_0_0_chr18_23786115_r 0 - 207.0
+chr18 59406881 59407046 CCDS11985.1_cds_0_0_chr18_59406882_f 0 + 165.0
+chr18 59455932 59456337 CCDS11986.1_cds_0_0_chr18_59455933_r 0 - 405.0
+chr18 59600586 59600754 CCDS11988.1_cds_0_0_chr18_59600587_f 0 + 168.0
+chr19 59068595 59069564 CCDS12866.1_cds_0_0_chr19_59068596_f 0 + 969.0
+chr19 59236026 59236146 CCDS12872.1_cds_0_0_chr19_59236027_r 0 - 120.0
+chr19 59297998 59298008 CCDS12877.1_cds_0_0_chr19_59297999_f 0 + 10.0
+chr19 59302168 59302288 CCDS12878.1_cds_0_0_chr19_59302169_r 0 - 120.0
+chr2 118288583 118288668 CCDS2120.1_cds_0_0_chr2_118288584_f 0 + 85.0
+chr2 118394148 118394202 CCDS2121.1_cds_0_0_chr2_118394149_r 0 - 54.0
+chr2 220190202 220190242 CCDS2441.1_cds_0_0_chr2_220190203_f 0 + 40.0
+chr2 220229609 220230869 CCDS2443.1_cds_0_0_chr2_220229610_r 0 - 1260.0
+chr20 33330413 33330423 CCDS13249.1_cds_0_0_chr20_33330414_r 0 - 10.0
+chr20 33513606 33513792 CCDS13255.1_cds_0_0_chr20_33513607_f 0 + 186.0
+chr20 33579500 33579527 CCDS13256.1_cds_0_0_chr20_33579501_r 0 - 27.0
+chr20 33593260 33593348 CCDS13257.1_cds_0_0_chr20_33593261_f 0 + 88.0
+chr21 32707032 32707192 CCDS13614.1_cds_0_0_chr21_32707033_f 0 + 160.0
+chr21 32869641 32870022 CCDS13615.1_cds_0_0_chr21_32869642_r 0 - 381.0
+chr21 33321040 33322012 CCDS13620.1_cds_0_0_chr21_33321041_f 0 + 972.0
+chr21 33744994 33745040 CCDS13625.1_cds_0_0_chr21_33744995_r 0 - 46.0
+chr22 30120223 30120265 CCDS13897.1_cds_0_0_chr22_30120224_f 0 + 42.0
+chr22 30160419 30160661 CCDS13898.1_cds_0_0_chr22_30160420_r 0 - 242.0
+chr22 30665273 30665360 CCDS13901.1_cds_0_0_chr22_30665274_f 0 + 87.0
+chr22 30939054 30939266 CCDS13903.1_cds_0_0_chr22_30939055_r 0 - 212.0
+chr5 131424298 131424460 CCDS4149.1_cds_0_0_chr5_131424299_f 0 + 162.0
+chr5 131556601 131556672 CCDS4151.1_cds_0_0_chr5_131556602_r 0 - 71.0
+chr5 131621326 131621419 CCDS4152.1_cds_0_0_chr5_131621327_f 0 + 93.0
+chr5 131847541 131847666 CCDS4155.1_cds_0_0_chr5_131847542_r 0 - 125.0
+chr6 108299600 108299744 CCDS5061.1_cds_0_0_chr6_108299601_r 0 - 144.0
+chr6 108594662 108594687 CCDS5063.1_cds_0_0_chr6_108594663_f 0 + 25.0
+chr6 108640045 108640151 CCDS5064.1_cds_0_0_chr6_108640046_r 0 - 106.0
+chr6 108722976 108723115 CCDS5067.1_cds_0_0_chr6_108722977_f 0 + 139.0
+chr7 113660517 113660685 CCDS5760.1_cds_0_0_chr7_113660518_f 0 + 168.0
+chr7 116512159 116512389 CCDS5771.1_cds_0_0_chr7_116512160_r 0 - 230.0
+chr7 116714099 116714152 CCDS5773.1_cds_0_0_chr7_116714100_f 0 + 53.0
+chr7 116945541 116945787 CCDS5774.1_cds_0_0_chr7_116945542_r 0 - 246.0
+chr8 118881131 118881317 CCDS6324.1_cds_0_0_chr8_118881132_r 0 - 186.0
+chr9 128764156 128764189 CCDS6914.1_cds_0_0_chr9_128764157_f 0 + 33.0
+chr9 128787519 128789136 CCDS6915.1_cds_0_0_chr9_128787520_r 0 - 1617.0
+chr9 128882427 128882523 CCDS6917.1_cds_0_0_chr9_128882428_f 0 + 96.0
+chr9 128937229 128937445 CCDS6919.1_cds_0_0_chr9_128937230_r 0 - 216.0
+chrX 122745047 122745924 CCDS14606.1_cds_0_0_chrX_122745048_f 0 + 877.0
+chrX 152648964 152649196 CCDS14733.1_cds_0_0_chrX_152648965_r 0 - 232.0
+chrX 152691446 152691471 CCDS14735.1_cds_0_0_chrX_152691447_f 0 + 25.0
+chrX 152694029 152694263 CCDS14736.1_cds_0_0_chrX_152694030_r 0 - 234.0
diff -r 5b793b193cac -r d34c1a8df003 test-data/column_maker_out2.interval
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/column_maker_out2.interval Mon Mar 29 14:33:23 2010 -0400
@@ -0,0 +1,5 @@
+chr1 4348187 4348589 3.70 4.90 2.55 0.24 0.46 3.7
+chr1 4488177 4488442 4.03 5.77 1.92 -0.67 0.81 4.03
+chr1 4774091 4774440 8.07 8.33 7.82 0.85 -0.40 8.07
+chr1 4800122 4800409 6.40 7.35 5.44 1.19 -0.42 6.4
+chr1 4878925 4879277 2.18 0.28 4.93 -0.96 1.24 2.18
diff -r 5b793b193cac -r d34c1a8df003 test-data/column_maker_out3.interval
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/column_maker_out3.interval Mon Mar 29 14:33:23 2010 -0400
@@ -0,0 +1,5 @@
+chr1 4348187 4348589 3.70 4.90 2.55 0.24 0.46 4
+chr1 4488177 4488442 4.03 5.77 1.92 -0.67 0.81 4
+chr1 4774091 4774440 8.07 8.33 7.82 0.85 -0.40 8
+chr1 4800122 4800409 6.40 7.35 5.44 1.19 -0.42 6
+chr1 4878925 4879277 2.18 0.28 4.93 -0.96 1.24 2
diff -r 5b793b193cac -r d34c1a8df003 test-data/eq-compute.dat
--- a/test-data/eq-compute.dat Mon Mar 29 11:48:05 2010 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-chr1 147962192 147962580 CCDS989.1_cds_0_0_chr1_147962193_r 0 - 388.0
-chr1 147984545 147984630 CCDS990.1_cds_0_0_chr1_147984546_f 0 + 85.0
-chr1 148078400 148078582 CCDS993.1_cds_0_0_chr1_148078401_r 0 - 182.0
-chr1 148185136 148185276 CCDS996.1_cds_0_0_chr1_148185137_f 0 + 140.0
-chr10 55251623 55253124 CCDS7248.1_cds_0_0_chr10_55251624_r 0 - 1501.0
-chr11 116124407 116124501 CCDS8374.1_cds_0_0_chr11_116124408_r 0 - 94.0
-chr11 116206508 116206563 CCDS8377.1_cds_0_0_chr11_116206509_f 0 + 55.0
-chr11 116211733 116212337 CCDS8378.1_cds_0_0_chr11_116211734_r 0 - 604.0
-chr11 1812377 1812407 CCDS7726.1_cds_0_0_chr11_1812378_f 0 + 30.0
-chr12 38440094 38440321 CCDS8736.1_cds_0_0_chr12_38440095_r 0 - 227.0
-chr13 112381694 112381953 CCDS9526.1_cds_0_0_chr13_112381695_f 0 + 259.0
-chr14 98710240 98712285 CCDS9949.1_cds_0_0_chr14_98710241_r 0 - 2045.0
-chr15 41486872 41487060 CCDS10096.1_cds_0_0_chr15_41486873_r 0 - 188.0
-chr15 41673708 41673857 CCDS10097.1_cds_0_0_chr15_41673709_f 0 + 149.0
-chr15 41679161 41679250 CCDS10098.1_cds_0_0_chr15_41679162_r 0 - 89.0
-chr15 41826029 41826196 CCDS10101.1_cds_0_0_chr15_41826030_f 0 + 167.0
-chr16 142908 143003 CCDS10397.1_cds_0_0_chr16_142909_f 0 + 95.0
-chr16 179963 180135 CCDS10401.1_cds_0_0_chr16_179964_r 0 - 172.0
-chr16 244413 244681 CCDS10402.1_cds_0_0_chr16_244414_f 0 + 268.0
-chr16 259268 259383 CCDS10403.1_cds_0_0_chr16_259269_r 0 - 115.0
-chr18 23786114 23786321 CCDS11891.1_cds_0_0_chr18_23786115_r 0 - 207.0
-chr18 59406881 59407046 CCDS11985.1_cds_0_0_chr18_59406882_f 0 + 165.0
-chr18 59455932 59456337 CCDS11986.1_cds_0_0_chr18_59455933_r 0 - 405.0
-chr18 59600586 59600754 CCDS11988.1_cds_0_0_chr18_59600587_f 0 + 168.0
-chr19 59068595 59069564 CCDS12866.1_cds_0_0_chr19_59068596_f 0 + 969.0
-chr19 59236026 59236146 CCDS12872.1_cds_0_0_chr19_59236027_r 0 - 120.0
-chr19 59297998 59298008 CCDS12877.1_cds_0_0_chr19_59297999_f 0 + 10.0
-chr19 59302168 59302288 CCDS12878.1_cds_0_0_chr19_59302169_r 0 - 120.0
-chr2 118288583 118288668 CCDS2120.1_cds_0_0_chr2_118288584_f 0 + 85.0
-chr2 118394148 118394202 CCDS2121.1_cds_0_0_chr2_118394149_r 0 - 54.0
-chr2 220190202 220190242 CCDS2441.1_cds_0_0_chr2_220190203_f 0 + 40.0
-chr2 220229609 220230869 CCDS2443.1_cds_0_0_chr2_220229610_r 0 - 1260.0
-chr20 33330413 33330423 CCDS13249.1_cds_0_0_chr20_33330414_r 0 - 10.0
-chr20 33513606 33513792 CCDS13255.1_cds_0_0_chr20_33513607_f 0 + 186.0
-chr20 33579500 33579527 CCDS13256.1_cds_0_0_chr20_33579501_r 0 - 27.0
-chr20 33593260 33593348 CCDS13257.1_cds_0_0_chr20_33593261_f 0 + 88.0
-chr21 32707032 32707192 CCDS13614.1_cds_0_0_chr21_32707033_f 0 + 160.0
-chr21 32869641 32870022 CCDS13615.1_cds_0_0_chr21_32869642_r 0 - 381.0
-chr21 33321040 33322012 CCDS13620.1_cds_0_0_chr21_33321041_f 0 + 972.0
-chr21 33744994 33745040 CCDS13625.1_cds_0_0_chr21_33744995_r 0 - 46.0
-chr22 30120223 30120265 CCDS13897.1_cds_0_0_chr22_30120224_f 0 + 42.0
-chr22 30160419 30160661 CCDS13898.1_cds_0_0_chr22_30160420_r 0 - 242.0
-chr22 30665273 30665360 CCDS13901.1_cds_0_0_chr22_30665274_f 0 + 87.0
-chr22 30939054 30939266 CCDS13903.1_cds_0_0_chr22_30939055_r 0 - 212.0
-chr5 131424298 131424460 CCDS4149.1_cds_0_0_chr5_131424299_f 0 + 162.0
-chr5 131556601 131556672 CCDS4151.1_cds_0_0_chr5_131556602_r 0 - 71.0
-chr5 131621326 131621419 CCDS4152.1_cds_0_0_chr5_131621327_f 0 + 93.0
-chr5 131847541 131847666 CCDS4155.1_cds_0_0_chr5_131847542_r 0 - 125.0
-chr6 108299600 108299744 CCDS5061.1_cds_0_0_chr6_108299601_r 0 - 144.0
-chr6 108594662 108594687 CCDS5063.1_cds_0_0_chr6_108594663_f 0 + 25.0
-chr6 108640045 108640151 CCDS5064.1_cds_0_0_chr6_108640046_r 0 - 106.0
-chr6 108722976 108723115 CCDS5067.1_cds_0_0_chr6_108722977_f 0 + 139.0
-chr7 113660517 113660685 CCDS5760.1_cds_0_0_chr7_113660518_f 0 + 168.0
-chr7 116512159 116512389 CCDS5771.1_cds_0_0_chr7_116512160_r 0 - 230.0
-chr7 116714099 116714152 CCDS5773.1_cds_0_0_chr7_116714100_f 0 + 53.0
-chr7 116945541 116945787 CCDS5774.1_cds_0_0_chr7_116945542_r 0 - 246.0
-chr8 118881131 118881317 CCDS6324.1_cds_0_0_chr8_118881132_r 0 - 186.0
-chr9 128764156 128764189 CCDS6914.1_cds_0_0_chr9_128764157_f 0 + 33.0
-chr9 128787519 128789136 CCDS6915.1_cds_0_0_chr9_128787520_r 0 - 1617.0
-chr9 128882427 128882523 CCDS6917.1_cds_0_0_chr9_128882428_f 0 + 96.0
-chr9 128937229 128937445 CCDS6919.1_cds_0_0_chr9_128937230_r 0 - 216.0
-chrX 122745047 122745924 CCDS14606.1_cds_0_0_chrX_122745048_f 0 + 877.0
-chrX 152648964 152649196 CCDS14733.1_cds_0_0_chrX_152648965_r 0 - 232.0
-chrX 152691446 152691471 CCDS14735.1_cds_0_0_chrX_152691447_f 0 + 25.0
-chrX 152694029 152694263 CCDS14736.1_cds_0_0_chrX_152694030_r 0 - 234.0
diff -r 5b793b193cac -r d34c1a8df003 tools/stats/column_maker.py
--- a/tools/stats/column_maker.py Mon Mar 29 11:48:05 2010 -0400
+++ b/tools/stats/column_maker.py Mon Mar 29 14:33:23 2010 -0400
@@ -17,7 +17,7 @@
inp_file = sys.argv[1]
out_file = sys.argv[2]
expr = sys.argv[3]
-round = sys.argv[4]
+round_result = sys.argv[4]
try:
in_columns = int( sys.argv[5] )
except:
@@ -52,11 +52,11 @@
col_name = "c%d" % col
cols.append( col_name )
col_type = in_column_types[ col - 1 ].strip()
- if round == 'no' and col_type == 'int':
+ if round_result == 'no' and col_type == 'int':
col_type = 'float'
type_cast = "%s(%s)" % ( col_type, col_name )
type_casts.append( type_cast )
-
+
col_str = ', '.join( cols ) # 'c1, c2, c3, c4'
type_cast_str = ', '.join( type_casts ) # 'str(c1), int(c2), int(c3), str(c4)'
assign = "%s = line.split( '\\t' )" % col_str
@@ -82,7 +82,10 @@
try:
%s
%s
- new_line = line + '\\t' + str( %s )
+ new_val = %s
+ if round_result == "yes":
+ new_val = int( round( new_val ) )
+ new_line = line + '\\t' + str( new_val )
print >> out, new_line
lines_kept += 1
except:
diff -r 5b793b193cac -r d34c1a8df003 tools/stats/column_maker.xml
--- a/tools/stats/column_maker.xml Mon Mar 29 11:48:05 2010 -0400
+++ b/tools/stats/column_maker.xml Mon Mar 29 14:33:23 2010 -0400
@@ -1,4 +1,4 @@
-<tool id="Add_a_column1" name="Compute">
+<tool id="Add_a_column1" name="Compute" version="1.1.0">
<description>an expression on every row</description>
<command interpreter="python">
column_maker.py $input $out_file1 "$cond" $round ${input.metadata.columns} "${input.metadata.column_types}"
@@ -19,7 +19,19 @@
<param name="cond" value="c3-c2"/>
<param name="input" value="1.bed"/>
<param name="round" value="no"/>
- <output name="out_file1" file="eq-compute.dat"/>
+ <output name="out_file1" file="column_maker_out1.interval"/>
+ </test>
+ <test>
+ <param name="cond" value="c4*1"/>
+ <param name="input" value="1.interval"/>
+ <param name="round" value="no"/>
+ <output name="out_file1" file="column_maker_out2.interval"/>
+ </test>
+ <test>
+ <param name="cond" value="c4*1"/>
+ <param name="input" value="1.interval"/>
+ <param name="round" value="yes"/>
+ <output name="out_file1" file="column_maker_out3.interval"/>
</test>
</tests>
<help>
1
0

16 Apr '10
details: http://www.bx.psu.edu/hg/galaxy/rev/5b793b193cac
changeset: 3576:5b793b193cac
user: Nate Coraor <nate(a)bx.psu.edu>
date: Mon Mar 29 11:48:05 2010 -0400
description:
Fix an eggs bug wherein compatible platform versions would match even when python versions differed
diffstat:
lib/galaxy/eggs/__init__.py | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diffs (11 lines):
diff -r b1165a0614ff -r 5b793b193cac lib/galaxy/eggs/__init__.py
--- a/lib/galaxy/eggs/__init__.py Sat Mar 27 14:25:10 2010 -0400
+++ b/lib/galaxy/eggs/__init__.py Mon Mar 29 11:48:05 2010 -0400
@@ -97,6 +97,7 @@
if tmp_dist.platform is not None and \
self.distribution.project_name == tmp_dist.project_name and \
self.distribution.version == tmp_dist.version and \
+ self.distribution.py_version == tmp_dist.py_version and \
pkg_resources.compatible_platforms( tmp_dist.platform, pkg_resources.get_platform() ):
return file
return None
1
0