diff --git a/src/nsls2api/api/models/beamline_model.py b/src/nsls2api/api/models/beamline_model.py deleted file mode 100644 index 4db4503d..00000000 --- a/src/nsls2api/api/models/beamline_model.py +++ /dev/null @@ -1,15 +0,0 @@ -# This is for response models relating to the beamline api endpoints. - -from enum import Enum - - -class AssetDirectoryGranularity(Enum): - """ - Represents the granularity options for asset directory YYYY/MM/DD/HH tree structure. - The value specifies the most granular level to create directories for. - """ - - year = "year" - month = "month" - day = "day" - hour = "hour" diff --git a/src/nsls2api/api/models/proposal_model.py b/src/nsls2api/api/models/proposal_model.py index 1760c4c8..f037a4d3 100644 --- a/src/nsls2api/api/models/proposal_model.py +++ b/src/nsls2api/api/models/proposal_model.py @@ -4,7 +4,7 @@ import pydantic from nsls2api.models.proposals import Proposal, User -from nsls2api.api.models.beamline_model import AssetDirectoryGranularity +from nsls2api.models.beamlines import AssetDirectoryGranularity class UsernamesList(pydantic.BaseModel): @@ -69,7 +69,7 @@ class ProposalDirectories(pydantic.BaseModel): cycle: str | None = None users: list[dict[str, str]] groups: list[dict[str, str]] - directory_most_granular_level: AssetDirectoryGranularity | None = None + directory_most_granular_level: AssetDirectoryGranularity | None = AssetDirectoryGranularity.day model_config = { "json_schema_extra": { diff --git a/src/nsls2api/models/beamlines.py b/src/nsls2api/models/beamlines.py index 9b57f5dd..df80394e 100644 --- a/src/nsls2api/models/beamlines.py +++ b/src/nsls2api/models/beamlines.py @@ -4,10 +4,29 @@ import beanie import pydantic +from enum import StrEnum + + +class AssetDirectoryGranularity(StrEnum): + """ + Represents the granularity options for asset directory YYYY/MM/DD/HH tree structure. + The value specifies the most granular level to create directories for. If no date + structure is wanted then the value "flat" is used. + """ + + flat = "flat" + year = "year" + month = "month" + day = "day" + hour = "hour" + class Detector(pydantic.BaseModel): name: str - directory_name: str | None = None + directory_name: str + granularity: AssetDirectoryGranularity | None = AssetDirectoryGranularity.day + description: str | None = None + manufacturer: str | None = None class DetectorView(pydantic.BaseModel): diff --git a/src/nsls2api/services/beamline_service.py b/src/nsls2api/services/beamline_service.py index d3ca6ef6..5a483dc6 100644 --- a/src/nsls2api/services/beamline_service.py +++ b/src/nsls2api/services/beamline_service.py @@ -5,7 +5,7 @@ from beanie.odm.operators.find.comparison import In from beanie.odm.operators.find.array import ElemMatch -from nsls2api.api.models.beamline_model import AssetDirectoryGranularity +from nsls2api.models.beamlines import AssetDirectoryGranularity from nsls2api.infrastructure.logging import logger from nsls2api.models.beamlines import ( Beamline, @@ -146,7 +146,7 @@ async def operator_username(name: str) -> str: if operator_account is None: raise LookupError( - f"Could not find a the operattor account for the {name} beamline." + f"Could not find a the operator account for the {name} beamline." ) return operator_account.username @@ -228,6 +228,7 @@ async def proposal_directory_skeleton(name: str): "users": users_acl, "groups": groups_acl, "beamline": name.upper(), + "directory_most_granular_level": AssetDirectoryGranularity.flat, } directory_list.append(asset_directory) @@ -241,7 +242,7 @@ async def proposal_directory_skeleton(name: str): "users": users_acl, "groups": groups_acl, "beamline": name.upper(), - "directory_most_granular_level": AssetDirectoryGranularity.day, + "directory_most_granular_level": detector.granularity, } directory_list.append(directory)