Skip to content

Commit

Permalink
Merge pull request #450 from ssjunnebo/release_ONT
Browse files Browse the repository at this point in the history
Release ONT DDS project
  • Loading branch information
ssjunnebo authored Dec 10, 2024
2 parents dc8948e + 9665c68 commit fa12734
Show file tree
Hide file tree
Showing 5 changed files with 104 additions and 11 deletions.
5 changes: 5 additions & 0 deletions VERSIONLOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
# TACA Version Log

## 20241210.3

Add support for releasing DDS projects

## 20241210.2

Add support for uploading ONT data to DDS

## 20241210.1
Expand Down
2 changes: 1 addition & 1 deletion taca/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
"""Main TACA module"""

__version__ = "1.4.0"
__version__ = "1.5.0"
23 changes: 17 additions & 6 deletions taca/delivery/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,13 +113,24 @@ def upload(
### Release data ###
@delivery.command()
@click.option(
"-d",
"--dds_id",
"--dds_project",
type=str,
required=True,
help="DDS PID generated by the upload command",
help="DDS PID to release, generated by the upload command",
)
@click.option(
"--dds_deadline",
default=45,
type=click.IntRange(1, 90),
help="Deadline for DDS project in days [min 1; max 90; default 45]",
)
@click.option(
"--no_dds_mail",
is_flag=True,
default=False,
help="Do not send DDS e-mail notifications regarding project updates",
)
@click.argument("project")
def release(project, dds_id):
"""Release a DDS project."""
deliver.release_dds_project(project, dds_id)
def release(project, dds_project, dds_deadline, no_dds_mail):
"""Release a DDS project to user."""
deliver.release_dds_project(project, dds_project, dds_deadline, no_dds_mail)
14 changes: 10 additions & 4 deletions taca/delivery/deliver.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@
import os
import sys

from taca.delivery.delivery_classes import get_staging_object, get_upload_object
from taca.delivery.delivery_classes import (
get_release_object,
get_staging_object,
get_upload_object,
)
from taca.utils.config import CONFIG

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -72,8 +76,10 @@ def upload_to_dds(
)


def release_dds_project(project, dds_id):
def release_dds_project(project, dds_project, dds_deadline, no_dds_mail):
"""Release DDS project to user"""
# Release DDS project
# Update statusdb with status "delivered"
# Future todo: Add query to confirm release
release_object = get_release_object(project, dds_project, dds_deadline, no_dds_mail)
release_object.release_project()
# Future todo: Update statusdb with status "delivered"
pass
71 changes: 71 additions & 0 deletions taca/delivery/delivery_classes.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ def get_upload_object(
)


def get_release_object(project, dds_project, dds_deadline=45, no_dds_mail=False):
return ReleaseNanopore(project, dds_project, dds_deadline, no_dds_mail)


class Stage:
"""Defines a generic staging object."""

Expand Down Expand Up @@ -389,3 +393,70 @@ class UploadElement(Upload):

def __init__(self, project, stage_dir):
super().__init__(project, stage_dir)


class Release:
"""Defines a generic release object."""

def __init__(self, project, dds_project, dds_deadline, no_dds_mail):
self.project_id = project
self.dds_project = dds_project
self.dds_deadline = dds_deadline
self.no_dds_mail = no_dds_mail

def release_project(self):
"""Release DDS project to user."""
try:
cmd = [
"dds",
"--no-prompt",
"project",
"status",
"release",
"--project",
self.dds_project,
"--deadline",
str(self.dds_deadline),
]
if self.no_dds_mail:
cmd.append("--no-mail")
process_handle = subprocess.run(cmd)
process_handle.check_returncode()
logger.info(
f"Project {self.project_id} succefully delivered. Delivery project {self.dds_project} was released to the user."
)
except subprocess.CalledProcessError as e:
logger.error(
f"Could not release project {self.project_id}, an error occurred."
)
raise e


class ReleaseNanopore(Release):
"""Defines an object for releasing Nanopore data."""

def __init__(self, project, dds_project, dds_deadline, no_dds_mail):
super().__init__(project, dds_project, dds_deadline, no_dds_mail)

def update_statusdb(self):
pass


class ReleaseIllumina(Release):
"""Defines an object for releasing Illumina data."""

def __init__(self, project, dds_project, dds_deadline, no_dds_mail):
super().__init__(project, dds_project, dds_deadline, no_dds_mail)

def update_statusdb(self):
pass


class ReleaseElement(Release):
"""Defines an object for releasing Element data."""

def __init__(self, project, dds_project, dds_deadline, no_dds_mail):
super().__init__(project, dds_project, dds_deadline, no_dds_mail)

def update_statusdb(self):
pass

0 comments on commit fa12734

Please sign in to comment.