Loading lib/galaxy/tool_util/xsd/galaxy.xsd +5 −0 Original line number Diff line number Diff line Loading @@ -2275,6 +2275,11 @@ $attribute_list::5 </xs:annotation> <xs:attributeGroup ref="AssertAttributeN"/> <xs:attributeGroup ref="AssertAttributeNegate"/> <xs:attribute name="comment" type="xs:string"> <xs:annotation> <xs:documentation xml:lang="en">Comment character(s) used to skip comment lines (which should not be used for counting columns)</xs:documentation> </xs:annotation> </xs:attribute> </xs:complexType> <xs:complexType name="AssertHasArchiveMember"> <xs:annotation> Loading scripts/cleanup_datasets/admin_cleanup_datasets.py +24 −23 Original line number Diff line number Diff line Loading @@ -204,14 +204,15 @@ def administrative_delete_datasets( # We really only need the id column here, but sqlalchemy barfs when # trying to select only 1 column hda_ids_query = sa.select( (app.model.HistoryDatasetAssociation.table.c.id, app.model.HistoryDatasetAssociation.table.c.deleted), (app.model.HistoryDatasetAssociation.__table__.c.id, app.model.HistoryDatasetAssociation.__table__.c.deleted), whereclause=and_( app.model.Dataset.table.c.deleted == false(), app.model.HistoryDatasetAssociation.table.c.update_time < cutoff_time, app.model.HistoryDatasetAssociation.table.c.deleted == false(), ), from_obj=[sa.outerjoin(app.model.Dataset.table, app.model.HistoryDatasetAssociation.table)], ) app.model.Dataset.__table__.c.deleted == false(), app.model.HistoryDatasetAssociation.__table__.c.update_time < cutoff_time, app.model.HistoryDatasetAssociation.__table__.c.deleted == false()), from_obj=[sa.outerjoin( app.model.Dataset.__table__, app.model.HistoryDatasetAssociation.__table__)]) # Add all datasets associated with Histories to our list hda_ids = [] Loading @@ -232,17 +233,19 @@ def administrative_delete_datasets( # Process each of the Dataset objects for hda_id in hda_ids: user_query = sa.select( [app.model.HistoryDatasetAssociation.table, app.model.History.table, app.model.User.table], whereclause=and_(app.model.HistoryDatasetAssociation.table.c.id == hda_id), from_obj=[ sa.join(app.model.User.table, app.model.History.table).join(app.model.HistoryDatasetAssociation.table) ], use_labels=True, ) [app.model.HistoryDatasetAssociation.__table__, app.model.History.__table__, app.model.User.__table__], whereclause=and_( app.model.HistoryDatasetAssociation.__table__.c.id == hda_id), from_obj=[sa.join(app.model.User.__table__, app.model.History.__table__) .join(app.model.HistoryDatasetAssociation.__table__)], use_labels=True) for result in app.sa_session.execute(user_query): user_notifications[result[app.model.User.table.c.email]].append( (result[app.model.HistoryDatasetAssociation.table.c.name], result[app.model.History.table.c.name]) ) user_notifications[result[app.model.User.__table__.c.email]].append( (result[app.model.HistoryDatasetAssociation.__table__.c.name], result[app.model.History.__table__.c.name])) deleted_instance_count += 1 if not info_only and not email_only: # Get the HistoryDatasetAssociation objects Loading Loading @@ -279,12 +282,10 @@ def _get_tool_id_for_hda(app, hda_id): # TODO Some datasets don't seem to have an entry in jtod or a copied_from if hda_id is None: return None job = ( app.sa_session.query(app.model.Job) .join(app.model.JobToOutputDatasetAssociation) .filter(app.model.JobToOutputDatasetAssociation.table.c.dataset_id == hda_id) .first() ) job = app.sa_session.query(app.model.Job).\ join(app.model.JobToOutputDatasetAssociation).\ filter(app.model.JobToOutputDatasetAssociation.__table__.c.dataset_id == hda_id).first() if job is not None: return job.tool_id else: Loading scripts/cleanup_datasets/cleanup_datasets.py +65 −98 Original line number Diff line number Diff line Loading @@ -222,17 +222,14 @@ def delete_userless_histories(app, cutoff_time, info_only=False, force_retry=Fal history_count = 0 start = time.time() if force_retry: histories = app.sa_session.query(app.model.History).filter( and_(app.model.History.table.c.user_id == null(), app.model.History.update_time < cutoff_time) ) histories = app.sa_session.query(app.model.History) \ .filter(and_(app.model.History.__table__.c.user_id == null(), app.model.History.update_time < cutoff_time)) else: histories = app.sa_session.query(app.model.History).filter( and_( app.model.History.table.c.user_id == null(), app.model.History.table.c.deleted == false(), app.model.History.update_time < cutoff_time, ) ) histories = app.sa_session.query(app.model.History) \ .filter(and_(app.model.History.__table__.c.user_id == null(), app.model.History.__table__.c.deleted == false(), app.model.History.update_time < cutoff_time)) for history in histories: if not info_only: log.info("Deleting history id %d", history.id) Loading @@ -255,23 +252,16 @@ def purge_histories(app, cutoff_time, remove_from_disk, info_only=False, force_r history_count = 0 start = time.time() if force_retry: histories = ( app.sa_session.query(app.model.History) .filter(and_(app.model.History.table.c.deleted == true(), app.model.History.update_time < cutoff_time)) .options(joinedload("datasets")) ) histories = app.sa_session.query(app.model.History) \ .filter(and_(app.model.History.__table__.c.deleted == true(), app.model.History.update_time < cutoff_time)) \ .options(eagerload('datasets')) else: histories = ( app.sa_session.query(app.model.History) .filter( and_( app.model.History.table.c.deleted == true(), app.model.History.table.c.purged == false(), app.model.History.update_time < cutoff_time, ) ) .options(joinedload("datasets")) ) histories = app.sa_session.query(app.model.History) \ .filter(and_(app.model.History.__table__.c.deleted == true(), app.model.History.__table__.c.purged == false(), app.model.History.update_time < cutoff_time)) \ .options(eagerload('datasets')) for history in histories: log.info("### Processing history id %d (%s)", history.id, unicodify(history.name)) for dataset_assoc in history.datasets: Loading Loading @@ -306,17 +296,14 @@ def purge_libraries(app, cutoff_time, remove_from_disk, info_only=False, force_r library_count = 0 start = time.time() if force_retry: libraries = app.sa_session.query(app.model.Library).filter( and_(app.model.Library.table.c.deleted == true(), app.model.Library.table.c.update_time < cutoff_time) ) libraries = app.sa_session.query(app.model.Library) \ .filter(and_(app.model.Library.__table__.c.deleted == true(), app.model.Library.__table__.c.update_time < cutoff_time)) else: libraries = app.sa_session.query(app.model.Library).filter( and_( app.model.Library.table.c.deleted == true(), app.model.Library.table.c.purged == false(), app.model.Library.table.c.update_time < cutoff_time, ) ) libraries = app.sa_session.query(app.model.Library) \ .filter(and_(app.model.Library.__table__.c.deleted == true(), app.model.Library.__table__.c.purged == false(), app.model.Library.__table__.c.update_time < cutoff_time)) for library in libraries: _purge_folder(library.root_folder, app, remove_from_disk, info_only=info_only) if not info_only: Loading @@ -340,20 +327,14 @@ def purge_folders(app, cutoff_time, remove_from_disk, info_only=False, force_ret folder_count = 0 start = time.time() if force_retry: folders = app.sa_session.query(app.model.LibraryFolder).filter( and_( app.model.LibraryFolder.table.c.deleted == true(), app.model.LibraryFolder.table.c.update_time < cutoff_time, ) ) folders = app.sa_session.query(app.model.LibraryFolder) \ .filter(and_(app.model.LibraryFolder.__table__.c.deleted == true(), app.model.LibraryFolder.__table__.c.update_time < cutoff_time)) else: folders = app.sa_session.query(app.model.LibraryFolder).filter( and_( app.model.LibraryFolder.table.c.deleted == true(), app.model.LibraryFolder.table.c.purged == false(), app.model.LibraryFolder.table.c.update_time < cutoff_time, ) ) folders = app.sa_session.query(app.model.LibraryFolder) \ .filter(and_(app.model.LibraryFolder.__table__.c.deleted == true(), app.model.LibraryFolder.__table__.c.purged == false(), app.model.LibraryFolder.__table__.c.update_time < cutoff_time)) for folder in folders: _purge_folder(folder, app, remove_from_disk, info_only=info_only) folder_count += 1 Loading @@ -367,36 +348,30 @@ def delete_datasets(app, cutoff_time, remove_from_disk, info_only=False, force_r # Marks datasets as deleted if associated items are all deleted. start = time.time() if force_retry: history_dataset_ids_query = sa.select( (app.model.Dataset.table.c.id, app.model.Dataset.table.c.state), whereclause=app.model.HistoryDatasetAssociation.table.c.update_time < cutoff_time, from_obj=[sa.outerjoin(app.model.Dataset.table, app.model.HistoryDatasetAssociation.table)], ) library_dataset_ids_query = sa.select( (app.model.LibraryDataset.table.c.id, app.model.LibraryDataset.table.c.deleted), whereclause=app.model.LibraryDataset.table.c.update_time < cutoff_time, from_obj=[app.model.LibraryDataset.table], ) history_dataset_ids_query = sa.select((app.model.Dataset.__table__.c.id, app.model.Dataset.__table__.c.state), whereclause=app.model.HistoryDatasetAssociation.__table__.c.update_time < cutoff_time, from_obj=[sa.outerjoin(app.model.Dataset.__table__, app.model.HistoryDatasetAssociation.__table__)]) library_dataset_ids_query = sa.select((app.model.LibraryDataset.__table__.c.id, app.model.LibraryDataset.__table__.c.deleted), whereclause=app.model.LibraryDataset.__table__.c.update_time < cutoff_time, from_obj=[app.model.LibraryDataset.__table__]) else: # We really only need the id column here, but sqlalchemy barfs when trying to select only 1 column history_dataset_ids_query = sa.select( (app.model.Dataset.table.c.id, app.model.Dataset.table.c.state), whereclause=and_( app.model.Dataset.table.c.deleted == false(), app.model.HistoryDatasetAssociation.table.c.update_time < cutoff_time, app.model.HistoryDatasetAssociation.table.c.deleted == true(), ), from_obj=[sa.outerjoin(app.model.Dataset.table, app.model.HistoryDatasetAssociation.table)], ) library_dataset_ids_query = sa.select( (app.model.LibraryDataset.table.c.id, app.model.LibraryDataset.table.c.deleted), whereclause=and_( app.model.LibraryDataset.table.c.deleted == true(), app.model.LibraryDataset.table.c.purged == false(), app.model.LibraryDataset.table.c.update_time < cutoff_time, ), from_obj=[app.model.LibraryDataset.table], ) history_dataset_ids_query = sa.select((app.model.Dataset.__table__.c.id, app.model.Dataset.__table__.c.state), whereclause=and_(app.model.Dataset.__table__.c.deleted == false(), app.model.HistoryDatasetAssociation.__table__.c.update_time < cutoff_time, app.model.HistoryDatasetAssociation.__table__.c.deleted == true()), from_obj=[sa.outerjoin(app.model.Dataset.__table__, app.model.HistoryDatasetAssociation.__table__)]) library_dataset_ids_query = sa.select((app.model.LibraryDataset.__table__.c.id, app.model.LibraryDataset.__table__.c.deleted), whereclause=and_(app.model.LibraryDataset.__table__.c.deleted == true(), app.model.LibraryDataset.__table__.c.purged == false(), app.model.LibraryDataset.__table__.c.update_time < cutoff_time), from_obj=[app.model.LibraryDataset.__table__]) deleted_dataset_count = 0 deleted_instance_count = 0 skip = [] Loading Loading @@ -469,22 +444,16 @@ def purge_datasets(app, cutoff_time, remove_from_disk, info_only=False, force_re disk_space = 0 start = time.time() if force_retry: datasets = app.sa_session.query(app.model.Dataset).filter( and_( app.model.Dataset.table.c.deleted == true(), app.model.Dataset.table.c.purgable == true(), app.model.Dataset.table.c.update_time < cutoff_time, ) ) datasets = app.sa_session.query(app.model.Dataset) \ .filter(and_(app.model.Dataset.__table__.c.deleted == true(), app.model.Dataset.__table__.c.purgable == true(), app.model.Dataset.__table__.c.update_time < cutoff_time)) else: datasets = app.sa_session.query(app.model.Dataset).filter( and_( app.model.Dataset.table.c.deleted == true(), app.model.Dataset.table.c.purgable == true(), app.model.Dataset.table.c.purged == false(), app.model.Dataset.table.c.update_time < cutoff_time, ) ) datasets = app.sa_session.query(app.model.Dataset) \ .filter(and_(app.model.Dataset.__table__.c.deleted == true(), app.model.Dataset.__table__.c.purgable == true(), app.model.Dataset.__table__.c.purged == false(), app.model.Dataset.__table__.c.update_time < cutoff_time)) for dataset in datasets: file_size = dataset.file_size _purge_dataset(app, dataset, remove_from_disk, info_only=info_only) Loading Loading @@ -554,14 +523,12 @@ def _delete_dataset(dataset, app, remove_from_disk, info_only=False, is_deletabl metadata_files = [] # lets create a list of metadata files, then perform actions on them for hda in dataset.history_associations: for metadata_file in app.sa_session.query(app.model.MetadataFile).filter( app.model.MetadataFile.table.c.hda_id == hda.id ): for metadata_file in app.sa_session.query(app.model.MetadataFile) \ .filter(app.model.MetadataFile.__table__.c.hda_id == hda.id): metadata_files.append(metadata_file) for ldda in dataset.library_associations: for metadata_file in app.sa_session.query(app.model.MetadataFile).filter( app.model.MetadataFile.table.c.lda_id == ldda.id ): for metadata_file in app.sa_session.query(app.model.MetadataFile) \ .filter(app.model.MetadataFile.__table__.c.lda_id == ldda.id): metadata_files.append(metadata_file) for metadata_file in metadata_files: op_description = "marked as deleted" Loading Loading
lib/galaxy/tool_util/xsd/galaxy.xsd +5 −0 Original line number Diff line number Diff line Loading @@ -2275,6 +2275,11 @@ $attribute_list::5 </xs:annotation> <xs:attributeGroup ref="AssertAttributeN"/> <xs:attributeGroup ref="AssertAttributeNegate"/> <xs:attribute name="comment" type="xs:string"> <xs:annotation> <xs:documentation xml:lang="en">Comment character(s) used to skip comment lines (which should not be used for counting columns)</xs:documentation> </xs:annotation> </xs:attribute> </xs:complexType> <xs:complexType name="AssertHasArchiveMember"> <xs:annotation> Loading
scripts/cleanup_datasets/admin_cleanup_datasets.py +24 −23 Original line number Diff line number Diff line Loading @@ -204,14 +204,15 @@ def administrative_delete_datasets( # We really only need the id column here, but sqlalchemy barfs when # trying to select only 1 column hda_ids_query = sa.select( (app.model.HistoryDatasetAssociation.table.c.id, app.model.HistoryDatasetAssociation.table.c.deleted), (app.model.HistoryDatasetAssociation.__table__.c.id, app.model.HistoryDatasetAssociation.__table__.c.deleted), whereclause=and_( app.model.Dataset.table.c.deleted == false(), app.model.HistoryDatasetAssociation.table.c.update_time < cutoff_time, app.model.HistoryDatasetAssociation.table.c.deleted == false(), ), from_obj=[sa.outerjoin(app.model.Dataset.table, app.model.HistoryDatasetAssociation.table)], ) app.model.Dataset.__table__.c.deleted == false(), app.model.HistoryDatasetAssociation.__table__.c.update_time < cutoff_time, app.model.HistoryDatasetAssociation.__table__.c.deleted == false()), from_obj=[sa.outerjoin( app.model.Dataset.__table__, app.model.HistoryDatasetAssociation.__table__)]) # Add all datasets associated with Histories to our list hda_ids = [] Loading @@ -232,17 +233,19 @@ def administrative_delete_datasets( # Process each of the Dataset objects for hda_id in hda_ids: user_query = sa.select( [app.model.HistoryDatasetAssociation.table, app.model.History.table, app.model.User.table], whereclause=and_(app.model.HistoryDatasetAssociation.table.c.id == hda_id), from_obj=[ sa.join(app.model.User.table, app.model.History.table).join(app.model.HistoryDatasetAssociation.table) ], use_labels=True, ) [app.model.HistoryDatasetAssociation.__table__, app.model.History.__table__, app.model.User.__table__], whereclause=and_( app.model.HistoryDatasetAssociation.__table__.c.id == hda_id), from_obj=[sa.join(app.model.User.__table__, app.model.History.__table__) .join(app.model.HistoryDatasetAssociation.__table__)], use_labels=True) for result in app.sa_session.execute(user_query): user_notifications[result[app.model.User.table.c.email]].append( (result[app.model.HistoryDatasetAssociation.table.c.name], result[app.model.History.table.c.name]) ) user_notifications[result[app.model.User.__table__.c.email]].append( (result[app.model.HistoryDatasetAssociation.__table__.c.name], result[app.model.History.__table__.c.name])) deleted_instance_count += 1 if not info_only and not email_only: # Get the HistoryDatasetAssociation objects Loading Loading @@ -279,12 +282,10 @@ def _get_tool_id_for_hda(app, hda_id): # TODO Some datasets don't seem to have an entry in jtod or a copied_from if hda_id is None: return None job = ( app.sa_session.query(app.model.Job) .join(app.model.JobToOutputDatasetAssociation) .filter(app.model.JobToOutputDatasetAssociation.table.c.dataset_id == hda_id) .first() ) job = app.sa_session.query(app.model.Job).\ join(app.model.JobToOutputDatasetAssociation).\ filter(app.model.JobToOutputDatasetAssociation.__table__.c.dataset_id == hda_id).first() if job is not None: return job.tool_id else: Loading
scripts/cleanup_datasets/cleanup_datasets.py +65 −98 Original line number Diff line number Diff line Loading @@ -222,17 +222,14 @@ def delete_userless_histories(app, cutoff_time, info_only=False, force_retry=Fal history_count = 0 start = time.time() if force_retry: histories = app.sa_session.query(app.model.History).filter( and_(app.model.History.table.c.user_id == null(), app.model.History.update_time < cutoff_time) ) histories = app.sa_session.query(app.model.History) \ .filter(and_(app.model.History.__table__.c.user_id == null(), app.model.History.update_time < cutoff_time)) else: histories = app.sa_session.query(app.model.History).filter( and_( app.model.History.table.c.user_id == null(), app.model.History.table.c.deleted == false(), app.model.History.update_time < cutoff_time, ) ) histories = app.sa_session.query(app.model.History) \ .filter(and_(app.model.History.__table__.c.user_id == null(), app.model.History.__table__.c.deleted == false(), app.model.History.update_time < cutoff_time)) for history in histories: if not info_only: log.info("Deleting history id %d", history.id) Loading @@ -255,23 +252,16 @@ def purge_histories(app, cutoff_time, remove_from_disk, info_only=False, force_r history_count = 0 start = time.time() if force_retry: histories = ( app.sa_session.query(app.model.History) .filter(and_(app.model.History.table.c.deleted == true(), app.model.History.update_time < cutoff_time)) .options(joinedload("datasets")) ) histories = app.sa_session.query(app.model.History) \ .filter(and_(app.model.History.__table__.c.deleted == true(), app.model.History.update_time < cutoff_time)) \ .options(eagerload('datasets')) else: histories = ( app.sa_session.query(app.model.History) .filter( and_( app.model.History.table.c.deleted == true(), app.model.History.table.c.purged == false(), app.model.History.update_time < cutoff_time, ) ) .options(joinedload("datasets")) ) histories = app.sa_session.query(app.model.History) \ .filter(and_(app.model.History.__table__.c.deleted == true(), app.model.History.__table__.c.purged == false(), app.model.History.update_time < cutoff_time)) \ .options(eagerload('datasets')) for history in histories: log.info("### Processing history id %d (%s)", history.id, unicodify(history.name)) for dataset_assoc in history.datasets: Loading Loading @@ -306,17 +296,14 @@ def purge_libraries(app, cutoff_time, remove_from_disk, info_only=False, force_r library_count = 0 start = time.time() if force_retry: libraries = app.sa_session.query(app.model.Library).filter( and_(app.model.Library.table.c.deleted == true(), app.model.Library.table.c.update_time < cutoff_time) ) libraries = app.sa_session.query(app.model.Library) \ .filter(and_(app.model.Library.__table__.c.deleted == true(), app.model.Library.__table__.c.update_time < cutoff_time)) else: libraries = app.sa_session.query(app.model.Library).filter( and_( app.model.Library.table.c.deleted == true(), app.model.Library.table.c.purged == false(), app.model.Library.table.c.update_time < cutoff_time, ) ) libraries = app.sa_session.query(app.model.Library) \ .filter(and_(app.model.Library.__table__.c.deleted == true(), app.model.Library.__table__.c.purged == false(), app.model.Library.__table__.c.update_time < cutoff_time)) for library in libraries: _purge_folder(library.root_folder, app, remove_from_disk, info_only=info_only) if not info_only: Loading @@ -340,20 +327,14 @@ def purge_folders(app, cutoff_time, remove_from_disk, info_only=False, force_ret folder_count = 0 start = time.time() if force_retry: folders = app.sa_session.query(app.model.LibraryFolder).filter( and_( app.model.LibraryFolder.table.c.deleted == true(), app.model.LibraryFolder.table.c.update_time < cutoff_time, ) ) folders = app.sa_session.query(app.model.LibraryFolder) \ .filter(and_(app.model.LibraryFolder.__table__.c.deleted == true(), app.model.LibraryFolder.__table__.c.update_time < cutoff_time)) else: folders = app.sa_session.query(app.model.LibraryFolder).filter( and_( app.model.LibraryFolder.table.c.deleted == true(), app.model.LibraryFolder.table.c.purged == false(), app.model.LibraryFolder.table.c.update_time < cutoff_time, ) ) folders = app.sa_session.query(app.model.LibraryFolder) \ .filter(and_(app.model.LibraryFolder.__table__.c.deleted == true(), app.model.LibraryFolder.__table__.c.purged == false(), app.model.LibraryFolder.__table__.c.update_time < cutoff_time)) for folder in folders: _purge_folder(folder, app, remove_from_disk, info_only=info_only) folder_count += 1 Loading @@ -367,36 +348,30 @@ def delete_datasets(app, cutoff_time, remove_from_disk, info_only=False, force_r # Marks datasets as deleted if associated items are all deleted. start = time.time() if force_retry: history_dataset_ids_query = sa.select( (app.model.Dataset.table.c.id, app.model.Dataset.table.c.state), whereclause=app.model.HistoryDatasetAssociation.table.c.update_time < cutoff_time, from_obj=[sa.outerjoin(app.model.Dataset.table, app.model.HistoryDatasetAssociation.table)], ) library_dataset_ids_query = sa.select( (app.model.LibraryDataset.table.c.id, app.model.LibraryDataset.table.c.deleted), whereclause=app.model.LibraryDataset.table.c.update_time < cutoff_time, from_obj=[app.model.LibraryDataset.table], ) history_dataset_ids_query = sa.select((app.model.Dataset.__table__.c.id, app.model.Dataset.__table__.c.state), whereclause=app.model.HistoryDatasetAssociation.__table__.c.update_time < cutoff_time, from_obj=[sa.outerjoin(app.model.Dataset.__table__, app.model.HistoryDatasetAssociation.__table__)]) library_dataset_ids_query = sa.select((app.model.LibraryDataset.__table__.c.id, app.model.LibraryDataset.__table__.c.deleted), whereclause=app.model.LibraryDataset.__table__.c.update_time < cutoff_time, from_obj=[app.model.LibraryDataset.__table__]) else: # We really only need the id column here, but sqlalchemy barfs when trying to select only 1 column history_dataset_ids_query = sa.select( (app.model.Dataset.table.c.id, app.model.Dataset.table.c.state), whereclause=and_( app.model.Dataset.table.c.deleted == false(), app.model.HistoryDatasetAssociation.table.c.update_time < cutoff_time, app.model.HistoryDatasetAssociation.table.c.deleted == true(), ), from_obj=[sa.outerjoin(app.model.Dataset.table, app.model.HistoryDatasetAssociation.table)], ) library_dataset_ids_query = sa.select( (app.model.LibraryDataset.table.c.id, app.model.LibraryDataset.table.c.deleted), whereclause=and_( app.model.LibraryDataset.table.c.deleted == true(), app.model.LibraryDataset.table.c.purged == false(), app.model.LibraryDataset.table.c.update_time < cutoff_time, ), from_obj=[app.model.LibraryDataset.table], ) history_dataset_ids_query = sa.select((app.model.Dataset.__table__.c.id, app.model.Dataset.__table__.c.state), whereclause=and_(app.model.Dataset.__table__.c.deleted == false(), app.model.HistoryDatasetAssociation.__table__.c.update_time < cutoff_time, app.model.HistoryDatasetAssociation.__table__.c.deleted == true()), from_obj=[sa.outerjoin(app.model.Dataset.__table__, app.model.HistoryDatasetAssociation.__table__)]) library_dataset_ids_query = sa.select((app.model.LibraryDataset.__table__.c.id, app.model.LibraryDataset.__table__.c.deleted), whereclause=and_(app.model.LibraryDataset.__table__.c.deleted == true(), app.model.LibraryDataset.__table__.c.purged == false(), app.model.LibraryDataset.__table__.c.update_time < cutoff_time), from_obj=[app.model.LibraryDataset.__table__]) deleted_dataset_count = 0 deleted_instance_count = 0 skip = [] Loading Loading @@ -469,22 +444,16 @@ def purge_datasets(app, cutoff_time, remove_from_disk, info_only=False, force_re disk_space = 0 start = time.time() if force_retry: datasets = app.sa_session.query(app.model.Dataset).filter( and_( app.model.Dataset.table.c.deleted == true(), app.model.Dataset.table.c.purgable == true(), app.model.Dataset.table.c.update_time < cutoff_time, ) ) datasets = app.sa_session.query(app.model.Dataset) \ .filter(and_(app.model.Dataset.__table__.c.deleted == true(), app.model.Dataset.__table__.c.purgable == true(), app.model.Dataset.__table__.c.update_time < cutoff_time)) else: datasets = app.sa_session.query(app.model.Dataset).filter( and_( app.model.Dataset.table.c.deleted == true(), app.model.Dataset.table.c.purgable == true(), app.model.Dataset.table.c.purged == false(), app.model.Dataset.table.c.update_time < cutoff_time, ) ) datasets = app.sa_session.query(app.model.Dataset) \ .filter(and_(app.model.Dataset.__table__.c.deleted == true(), app.model.Dataset.__table__.c.purgable == true(), app.model.Dataset.__table__.c.purged == false(), app.model.Dataset.__table__.c.update_time < cutoff_time)) for dataset in datasets: file_size = dataset.file_size _purge_dataset(app, dataset, remove_from_disk, info_only=info_only) Loading Loading @@ -554,14 +523,12 @@ def _delete_dataset(dataset, app, remove_from_disk, info_only=False, is_deletabl metadata_files = [] # lets create a list of metadata files, then perform actions on them for hda in dataset.history_associations: for metadata_file in app.sa_session.query(app.model.MetadataFile).filter( app.model.MetadataFile.table.c.hda_id == hda.id ): for metadata_file in app.sa_session.query(app.model.MetadataFile) \ .filter(app.model.MetadataFile.__table__.c.hda_id == hda.id): metadata_files.append(metadata_file) for ldda in dataset.library_associations: for metadata_file in app.sa_session.query(app.model.MetadataFile).filter( app.model.MetadataFile.table.c.lda_id == ldda.id ): for metadata_file in app.sa_session.query(app.model.MetadataFile) \ .filter(app.model.MetadataFile.__table__.c.lda_id == ldda.id): metadata_files.append(metadata_file) for metadata_file in metadata_files: op_description = "marked as deleted" Loading