From 136fccb99158d6b4e8f7b3afc428bf085c2f330c Mon Sep 17 00:00:00 2001 From: Khoroshevskyi Date: Fri, 16 Feb 2024 00:00:14 +0100 Subject: [PATCH] added model of output metadata --- bedboss/bedmaker/bedmaker.py | 1 + bedboss/bedstat/bedstat.py | 3 +++ bedboss/models.py | 29 +++++++++++++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 bedboss/models.py diff --git a/bedboss/bedmaker/bedmaker.py b/bedboss/bedmaker/bedmaker.py index df92a3c..d908c8e 100755 --- a/bedboss/bedmaker/bedmaker.py +++ b/bedboss/bedmaker/bedmaker.py @@ -195,6 +195,7 @@ def make(self) -> dict: return { "bed_type": bed_type, "file_type": file_type, + "genome": self.genome, } def make_bed(self) -> None: diff --git a/bedboss/bedstat/bedstat.py b/bedboss/bedstat/bedstat.py index 84f4bf6..1a4dbfb 100755 --- a/bedboss/bedstat/bedstat.py +++ b/bedboss/bedstat/bedstat.py @@ -24,6 +24,7 @@ ) from bedboss.utils import download_file, convert_unit from bedboss.exceptions import OpenSignalMatrixException +from bedboss.models import BedMetadata _LOGGER = logging.getLogger("bedboss") @@ -56,6 +57,8 @@ def load_to_pephub( sample_data = {} sample_data.update({"sample_name": bed_digest, "genome": genome}) + metadata = BedMetadata(**metadata).model_dump() + for key, value in metadata.items(): # TODO: Confirm this key is in the schema # Then update sample_data diff --git a/bedboss/models.py b/bedboss/models.py new file mode 100644 index 0000000..0ffae94 --- /dev/null +++ b/bedboss/models.py @@ -0,0 +1,29 @@ +from pydantic import BaseModel, ConfigDict, Field + +from enum import Enum + + +class BED_TYPE(str, Enum): + BED = "bed" + NARROWPEAK = "narrowpeak" + BROADPEAK = "broadpeak" + + +class BedMetadata(BaseModel): + sample_name: str + genome: str + file_type: BED_TYPE = BED_TYPE.BED + bed_type: str = Field( + default="bed3", pattern="^bed(?:[3-9]|1[0-2])(?:\+|$)[0-9]?+$" + ) + description: str = None + organism: str = None + cell_type: str = None + tissue: str = None + antibody: str = None + sample_library_strategy: str = None + + model_config = ConfigDict( + populate_by_name=True, + extra="allow", + )