mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
LibraryFolders now track last used dbkey ( silimar to histories ), so when a new dataset is added to a folder, the last used dbkey is selected.
This commit is contained in:
@@ -285,34 +285,26 @@ class DatasetInstance( object ):
|
||||
self.dataset = dataset
|
||||
self.parent_id = parent_id
|
||||
self.validation_errors = validation_errors
|
||||
|
||||
@property
|
||||
def ext( self ):
|
||||
return self.extension
|
||||
|
||||
def get_dataset_state( self ):
|
||||
return self.dataset.state
|
||||
def set_dataset_state ( self, state ):
|
||||
self.dataset.state = state
|
||||
self.dataset.flush() #flush here, because hda.flush() won't flush the Dataset object
|
||||
state = property( get_dataset_state, set_dataset_state )
|
||||
|
||||
def get_file_name( self ):
|
||||
return self.dataset.get_file_name()
|
||||
|
||||
def set_file_name (self, filename):
|
||||
return self.dataset.set_file_name( filename )
|
||||
|
||||
file_name = property( get_file_name, set_file_name )
|
||||
|
||||
@property
|
||||
def extra_files_path( self ):
|
||||
return self.dataset.extra_files_path
|
||||
|
||||
@property
|
||||
def datatype( self ):
|
||||
return datatypes_registry.get_datatype_by_extension( self.extension )
|
||||
|
||||
def get_metadata( self ):
|
||||
if not self._metadata:
|
||||
self._metadata = dict()
|
||||
@@ -321,11 +313,8 @@ class DatasetInstance( object ):
|
||||
# Needs to accept a MetadataCollection, a bunch, or a dict
|
||||
self._metadata = dict( bunch.items() )
|
||||
metadata = property( get_metadata, set_metadata )
|
||||
|
||||
"""
|
||||
This provide backwards compatibility with using the old dbkey
|
||||
field in the database. That field now maps to "old_dbkey" (see mapping.py).
|
||||
"""
|
||||
# This provide backwards compatibility with using the old dbkey
|
||||
# field in the database. That field now maps to "old_dbkey" (see mapping.py).
|
||||
def get_dbkey( self ):
|
||||
dbkey = self.metadata.dbkey
|
||||
if not isinstance(dbkey, list): dbkey = [dbkey]
|
||||
@@ -343,7 +332,6 @@ class DatasetInstance( object ):
|
||||
#else:
|
||||
# self.old_dbkey = value
|
||||
dbkey = property( get_dbkey, set_dbkey )
|
||||
|
||||
def change_datatype( self, new_ext ):
|
||||
self.clear_associated_files()
|
||||
datatypes_registry.change_datatype( self, new_ext )
|
||||
@@ -400,16 +388,12 @@ class DatasetInstance( object ):
|
||||
if child.designation == designation:
|
||||
return child
|
||||
return None
|
||||
|
||||
def get_converter_types(self):
|
||||
return self.datatype.get_converter_types( self, datatypes_registry)
|
||||
|
||||
def add_validation_error( self, validation_error ):
|
||||
self.validation_errors.append( validation_error )
|
||||
|
||||
def extend_validation_errors( self, validation_errors ):
|
||||
self.validation_errors.extend(validation_errors)
|
||||
|
||||
def mark_deleted( self, include_children=True ):
|
||||
self.deleted = True
|
||||
if include_children:
|
||||
@@ -429,7 +413,6 @@ class HistoryDatasetAssociation( DatasetInstance ):
|
||||
self.history = history
|
||||
self.copied_from_history_dataset_association = copied_from_history_dataset_association
|
||||
self.copied_from_library_folder_dataset_association = copied_from_library_folder_dataset_association
|
||||
|
||||
def copy( self, copy_children = False, parent_id = None ):
|
||||
des = HistoryDatasetAssociation( hid=self.hid,
|
||||
name=self.name,
|
||||
@@ -451,7 +434,6 @@ class HistoryDatasetAssociation( DatasetInstance ):
|
||||
des.set_peek() #in some instances peek relies on dataset_id, i.e. gmaj.zip for viewing MAFs
|
||||
des.flush()
|
||||
return des
|
||||
|
||||
def clear_associated_files( self, metadata_safe = False, purge = False ):
|
||||
#metadata_safe = True means to only clear when assoc.metadata_safe == False
|
||||
for assoc in self.implicitly_converted_datasets:
|
||||
@@ -469,7 +451,6 @@ class History( object ):
|
||||
self.user = user
|
||||
self.datasets = []
|
||||
self.galaxy_sessions = []
|
||||
|
||||
def _next_hid( self ):
|
||||
# TODO: override this with something in the database that ensures
|
||||
# better integrity
|
||||
@@ -481,13 +462,11 @@ class History( object ):
|
||||
if dataset.hid > last_hid:
|
||||
last_hid = dataset.hid
|
||||
return last_hid + 1
|
||||
|
||||
def add_galaxy_session( self, galaxy_session, association=None ):
|
||||
if association is None:
|
||||
self.galaxy_sessions.append( GalaxySessionToHistoryAssociation( galaxy_session, self ) )
|
||||
else:
|
||||
self.galaxy_sessions.append( association )
|
||||
|
||||
def add_dataset( self, dataset, parent_id=None, genome_build=None, set_hid = True ):
|
||||
if isinstance( dataset, Dataset ):
|
||||
dataset = HistoryDatasetAssociation( dataset = dataset )
|
||||
@@ -507,7 +486,6 @@ class History( object ):
|
||||
if genome_build not in [None, '?']:
|
||||
self.genome_build = genome_build
|
||||
self.datasets.append( dataset )
|
||||
|
||||
def copy( self, target_user = None ):
|
||||
if not target_user:
|
||||
target_user = self.user
|
||||
@@ -534,10 +512,13 @@ class LibraryFolder( object ):
|
||||
self.description = description
|
||||
self.item_count = item_count
|
||||
self.order_id = order_id
|
||||
def add_dataset( self, dataset ):
|
||||
self.genome_build = None
|
||||
def add_dataset( self, dataset, genome_build=None ):
|
||||
dataset.folder_id = self.id
|
||||
dataset.order_id = self.item_count
|
||||
self.item_count += 1
|
||||
if genome_build not in [None, '?']:
|
||||
self.genome_build = genome_build
|
||||
def add_folder( self, folder ):
|
||||
folder.parent_id = self.id
|
||||
folder.order_id = self.item_count
|
||||
@@ -555,7 +536,6 @@ class LibraryFolderDatasetAssociation( DatasetInstance ):
|
||||
self.order_id = order_id
|
||||
self.copied_from_history_dataset_association = copied_from_history_dataset_association
|
||||
self.copied_from_library_folder_dataset_association = copied_from_library_folder_dataset_association
|
||||
|
||||
def to_history_dataset_association( self, parent_id = None ):
|
||||
des = HistoryDatasetAssociation( name=self.name,
|
||||
info=self.info,
|
||||
@@ -575,8 +555,6 @@ class LibraryFolderDatasetAssociation( DatasetInstance ):
|
||||
des.set_peek() #in some instances peek relies on dataset_id, i.e. gmaj.zip for viewing MAFs
|
||||
des.flush()
|
||||
return des
|
||||
|
||||
|
||||
def copy( self, copy_children = False, parent_id = None ):
|
||||
des = LibraryFolderDatasetAssociation( name=self.name,
|
||||
info=self.info,
|
||||
@@ -597,11 +575,9 @@ class LibraryFolderDatasetAssociation( DatasetInstance ):
|
||||
des.set_peek() #in some instances peek relies on dataset_id, i.e. gmaj.zip for viewing MAFs
|
||||
des.flush()
|
||||
return des
|
||||
|
||||
def clear_associated_files( self, metadata_safe = False, purge = False ):
|
||||
return
|
||||
|
||||
|
||||
class LibraryTag( object ):
|
||||
def __init__( self, tag ):
|
||||
self.tag = tag
|
||||
|
||||
@@ -66,7 +66,6 @@ History.table = Table( "history", metadata,
|
||||
# Column( "state", String( 64 ) ),
|
||||
# Column( "tool_parameters", Pickle() ) )
|
||||
|
||||
|
||||
HistoryDatasetAssociation.table = Table( "history_dataset_association", metadata,
|
||||
Column( "id", Integer, primary_key=True ),
|
||||
Column( "history_id", Integer, ForeignKey( "history.id" ), index=True ),
|
||||
@@ -194,7 +193,8 @@ LibraryFolder.table = Table( "library_folder", metadata,
|
||||
Column( "name", TEXT ),
|
||||
Column( "description", TEXT ),
|
||||
Column( "order_id", Integer ),
|
||||
Column( "item_count", Integer ) )
|
||||
Column( "item_count", Integer ),
|
||||
Column( "genome_build", TrimmedString( 40 ) ) )
|
||||
|
||||
LibraryTag.table = Table( "library_tag", metadata,
|
||||
Column( "id", Integer, primary_key=True ),
|
||||
|
||||
@@ -68,7 +68,6 @@ class GalaxyRBACAgent( RBACAgent ):
|
||||
raise 'No valid method of checking action (%s) on %s for user %s.' % ( action, kwd, user )
|
||||
def allow_dataset_action( self, user, action, dataset ):
|
||||
"""Returns true when user has permission to perform an action"""
|
||||
log.debug("In allow_dataset_action, user: %s, action: %s, dataset: %s" % ( str(user), str(action), str(dataset)))
|
||||
if not isinstance( dataset, self.model.Dataset ):
|
||||
dataset = dataset.dataset
|
||||
# If dataset is in public group, we always return true for viewing and using
|
||||
@@ -146,7 +145,6 @@ class GalaxyRBACAgent( RBACAgent ):
|
||||
assoc.flush()
|
||||
return assoc
|
||||
def disassociate_group_dataset( self, group, dataset ):
|
||||
log.debug("In disassociate_group_dataset, removing %s -> %s" % (group.id, dataset.id))
|
||||
assoc = self.model.GroupDatasetAssociation.selectone_by( group_id = group.id, dataset_id = dataset.id )
|
||||
assoc.delete()
|
||||
assoc.flush()
|
||||
@@ -239,11 +237,9 @@ class GalaxyRBACAgent( RBACAgent ):
|
||||
def get_permitted_actions( self, filter=None ):
|
||||
'''Utility method to return a subset of RBACAgent's permitted actions'''
|
||||
if filter is None:
|
||||
log.debug("In get_permitted_actions, returning RBACAgent.permitted_actions: %s" % str( RBACAgent.permitted_actions))
|
||||
return RBACAgent.permitted_actions
|
||||
if not filter.endswith('_'):
|
||||
filter += '_'
|
||||
tmp_bunch = Bunch()
|
||||
[tmp_bunch.__dict__.__setitem__(k, v) for k, v in RBACAgent.permitted_actions.items() if k.startswith(filter)]
|
||||
log.debug("In get_permitted_actions, returning tmp_bunch: %s" % str( tmp_bunch))
|
||||
return tmp_bunch
|
||||
|
||||
@@ -513,6 +513,10 @@ class Admin( BaseController ):
|
||||
return trans.show_error_message( no_privilege_msg )
|
||||
if 'create_folder' in kwd:
|
||||
folder = trans.app.model.LibraryFolder( name = name, description = description )
|
||||
# We are associating the last used genome_build with folders, so we will always
|
||||
# initialize a new folder with the first dbkey in util.dbnames which is currently
|
||||
# ? unspecified (?)
|
||||
folder.genome_build = util.dbnames.default_value
|
||||
if parent_id:
|
||||
parent_folder = trans.app.model.LibraryFolder.get( parent_id )
|
||||
parent_folder.add_folder( folder )
|
||||
@@ -540,8 +544,17 @@ class Admin( BaseController ):
|
||||
def dataset( self, trans, id=None, name="Unnamed", info='no info', extension=None, folder_id=None, dbkey=None, **kwd ):
|
||||
if not self.user_is_admin( trans ):
|
||||
return trans.show_error_message( no_privilege_msg )
|
||||
if isinstance( dbkey, list ):
|
||||
last_used_build = dbkey[0]
|
||||
else:
|
||||
last_used_build = dbkey
|
||||
if folder_id and not last_used_build:
|
||||
folder = trans.app.model.LibraryFolder.get( folder_id )
|
||||
last_used_build = folder.genome_build
|
||||
data_files = []
|
||||
def add_file( file_obj, name, extension, dbkey, groups, info='no info', space_to_tab=False ):
|
||||
|
||||
# add_file method
|
||||
def add_file( file_obj, name, extension, dbkey, last_used_build, groups, info='no info', space_to_tab=False ):
|
||||
data_type = None
|
||||
temp_name = sniff.stream_to_file( file_obj )
|
||||
if space_to_tab:
|
||||
@@ -552,9 +565,13 @@ class Admin( BaseController ):
|
||||
data_type = sniff.guess_ext( temp_name, sniff_order=trans.app.datatypes_registry.sniff_order )
|
||||
else:
|
||||
data_type = extension
|
||||
dataset = trans.app.model.LibraryFolderDatasetAssociation( name = name, info = info, extension = data_type, dbkey = dbkey, create_dataset = True )
|
||||
dataset = trans.app.model.LibraryFolderDatasetAssociation( name=name,
|
||||
info=info,
|
||||
extension=data_type,
|
||||
dbkey=dbkey,
|
||||
create_dataset=True )
|
||||
folder = trans.app.model.LibraryFolder.get( folder_id )
|
||||
folder.add_dataset( dataset )
|
||||
folder.add_dataset( dataset, genome_build=last_used_build )
|
||||
dataset.flush()
|
||||
# GroupDatasetAssociations will enable security on the dataset based on the permitted_actions
|
||||
# associated with the GroupDatasetAssociation. The default permitted_actions at this point
|
||||
@@ -575,12 +592,12 @@ class Admin( BaseController ):
|
||||
else:
|
||||
dataset.set_peek()
|
||||
dataset.set_size()
|
||||
|
||||
if dataset.missing_meta():
|
||||
dataset.datatype.set_meta( dataset )
|
||||
trans.app.model.flush()
|
||||
|
||||
return dataset
|
||||
# END add_file method
|
||||
|
||||
if 'create_dataset' in kwd:
|
||||
# Copied from upload tool action
|
||||
last_dataset_created = None
|
||||
@@ -603,12 +620,13 @@ class Admin( BaseController ):
|
||||
file_name = data_file.filename
|
||||
file_name = file_name.split( '\\' )[-1]
|
||||
file_name = file_name.split( '/' )[-1]
|
||||
last_dataset_created = add_file( data_file.file,
|
||||
file_name,
|
||||
extension,
|
||||
dbkey,
|
||||
last_dataset_created = add_file( data_file.file,
|
||||
file_name,
|
||||
extension,
|
||||
dbkey,
|
||||
last_used_build,
|
||||
groups,
|
||||
info="uploaded file",
|
||||
info="uploaded file",
|
||||
space_to_tab=space_to_tab )
|
||||
elif url_paste not in [ None, "" ]:
|
||||
if url_paste.lower().find( 'http://' ) >= 0 or url_paste.lower().find( 'ftp://' ) >= 0:
|
||||
@@ -618,10 +636,11 @@ class Admin( BaseController ):
|
||||
if line:
|
||||
last_dataset_created = add_file( urllib.urlopen( line ),
|
||||
line,
|
||||
extension,
|
||||
dbkey,
|
||||
extension,
|
||||
dbkey,
|
||||
last_used_build,
|
||||
groups,
|
||||
info="uploaded url",
|
||||
info="uploaded url",
|
||||
space_to_tab=space_to_tab )
|
||||
else:
|
||||
is_valid = False
|
||||
@@ -632,22 +651,22 @@ class Admin( BaseController ):
|
||||
break
|
||||
if is_valid:
|
||||
last_dataset_created = add_file( StringIO.StringIO( url_paste ),
|
||||
'Pasted Entry',
|
||||
extension,
|
||||
dbkey,
|
||||
'Pasted Entry',
|
||||
extension,
|
||||
dbkey,
|
||||
last_used_build,
|
||||
groups,
|
||||
info="pasted entry",
|
||||
info="pasted entry",
|
||||
space_to_tab=space_to_tab )
|
||||
trans.response.send_redirect( web.url_for( action='dataset', id=last_dataset_created.id ) )
|
||||
elif id is None:
|
||||
# Send list of data formats to the form so the "extension" select list can be populated dynamically
|
||||
file_formats = trans.app.datatypes_registry.upload_file_formats
|
||||
# Send list of genome builds to the form so the "dbkey" select list can be populated dynamically
|
||||
def get_dbkey_options():
|
||||
last_used_build = trans.history.genome_build
|
||||
def get_dbkey_options( last_used_build ):
|
||||
for dbkey, build_name in util.dbnames:
|
||||
yield build_name, dbkey, ( dbkey==last_used_build )
|
||||
dbkeys = get_dbkey_options()
|
||||
dbkeys = get_dbkey_options( last_used_build )
|
||||
# Send list of groups to the form so the dataset can be associated with 1 or more of them.
|
||||
groups = []
|
||||
q = sa.select( ( ( galaxy.model.Group.table.c.id ).label( 'group_id' ),
|
||||
@@ -660,6 +679,7 @@ class Admin( BaseController ):
|
||||
folder_id=folder_id,
|
||||
file_formats=file_formats,
|
||||
dbkeys=dbkeys,
|
||||
last_used_build=last_used_build,
|
||||
groups=groups )
|
||||
dataset = trans.app.model.LibraryFolderDatasetAssociation.get( id )
|
||||
if dataset:
|
||||
|
||||
@@ -52,7 +52,11 @@
|
||||
<div style="float: left; width: 250px; margin-right: 10px;">
|
||||
<select name="dbkey">
|
||||
%for dbkey in dbkeys:
|
||||
<option value="${dbkey[1]}">${dbkey[0]}</option>
|
||||
%if dbkey[1] == last_used_build:
|
||||
<option value="${dbkey[1]}" selected>${dbkey[0]}</option>
|
||||
%else:
|
||||
<option value="${dbkey[1]}">${dbkey[0]}</option>
|
||||
%endif
|
||||
%endfor
|
||||
</select>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user