Add model stores manager.

Reused for a bunch of things in the deferred data branch but it does simplify the tasks file for now and move more logic into managers - which I think is a better place.
This commit is contained in:
John Chilton
2022-03-10 10:51:28 -05:00
parent 3bb3e90e5d
commit 62dae772ec
4 changed files with 65 additions and 32 deletions
+5 -17
View File
@@ -1,10 +1,10 @@
from galaxy import model
from galaxy.celery import galaxy_task
from galaxy.jobs.manager import JobManager
from galaxy.managers.hdas import HDAManager
from galaxy.managers.lddas import LDDAManager
from galaxy.managers.model_stores import ModelStoreManager
from galaxy.model.scoped_session import galaxy_scoped_session
from galaxy.structured_app import MinimalManagerApp
from galaxy.schema.tasks import SetupHistoryExportJob
from galaxy.util.custom_logging import get_logger
log = get_logger(__name__)
@@ -42,22 +42,10 @@ def set_metadata(
@galaxy_task(ignore_result=True, action="setting up export history job")
def export_history(
app: MinimalManagerApp,
sa_session: galaxy_scoped_session,
job_manager: JobManager,
store_directory: str,
history_id: int,
job_id: int,
include_hidden=False,
include_deleted=False,
model_store_manager: ModelStoreManager,
request: SetupHistoryExportJob,
):
history = sa_session.query(model.History).get(history_id)
with model.store.DirectoryModelExportStore(store_directory, app=app, export_files="symlink") as export_store:
export_store.export_history(history, include_hidden=include_hidden, include_deleted=include_deleted)
job = sa_session.query(model.Job).filter_by(id=job_id).one()
job.state = model.Job.states.NEW
sa_session.flush()
job_manager.enqueue(job)
model_store_manager.setup_history_export_job(request)
@galaxy_task(action="pruning history audit table")
+38
View File
@@ -0,0 +1,38 @@
from galaxy import model
from galaxy.app import MinimalManagerApp
from galaxy.jobs.manager import JobManager
from galaxy.managers.histories import HistoryManager
from galaxy.model.scoped_session import galaxy_scoped_session
from galaxy.schema.tasks import SetupHistoryExportJob
class ModelStoreManager:
def __init__(
self,
app: MinimalManagerApp,
history_manager: HistoryManager,
sa_session: galaxy_scoped_session,
job_manager: JobManager,
):
self._app = app
self._sa_session = sa_session
self._job_manager = job_manager
self._history_manager = history_manager
def setup_history_export_job(self, request: SetupHistoryExportJob):
history_id = request.history_id
job_id = request.job_id
include_hidden = request.include_hidden
include_deleted = request.include_deleted
store_directory = request.store_directory
history = self._sa_session.query(model.History).get(history_id)
# symlink files on export, on worker files will tarred up in a dereferenced manner.
with model.store.DirectoryModelExportStore(
store_directory, app=self._app, export_files="symlink"
) as export_store:
export_store.export_history(history, include_hidden=include_hidden, include_deleted=include_deleted)
job = self._sa_session.query(model.Job).get(job_id)
job.state = model.Job.states.NEW
self._sa_session.flush()
self._job_manager.enqueue(job)
+10
View File
@@ -0,0 +1,10 @@
from pydantic import BaseModel
class SetupHistoryExportJob(BaseModel):
history_id: int
job_id: int
store_directory: str
include_files: bool
include_hidden: bool
include_deleted: bool
+12 -15
View File
@@ -5,6 +5,7 @@ import shutil
from galaxy import model
from galaxy.model import store
from galaxy.schema.tasks import SetupHistoryExportJob
from galaxy.util.path import external_chown
log = logging.getLogger(__name__)
@@ -98,23 +99,19 @@ class JobExportHistoryArchiveWrapper:
Perform setup for job to export a history into an archive.
"""
app = self.app
# TODO: prevent circular import here...
from galaxy.celery.tasks import export_history
request = SetupHistoryExportJob(
history_id=history.id,
job_id=self.job_id,
store_directory=store_directory,
include_files=True,
include_hidden=include_hidden,
include_deleted=include_deleted,
)
if app.config.enable_celery_tasks:
# symlink files on export, on worker files will tarred up in a dereferenced manner.
export_history.delay(
store_directory=store_directory,
history_id=history.id,
job_id=self.job_id,
include_hidden=include_hidden,
include_deleted=include_deleted,
)
export_history.delay(request=request)
else:
export_history(
store_directory=store_directory,
history_id=history.id,
job_id=self.job_id,
include_hidden=include_hidden,
include_deleted=include_deleted,
)
export_history(request=request)