Skip to content

Commit 1392d82

Browse files
committed
found a way to pull in schema enum in api.py and models.py
1 parent a264d4a commit 1392d82

File tree

4 files changed

+60
-22
lines changed

4 files changed

+60
-22
lines changed

nmdc_server/api.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from fastapi import APIRouter, Depends, Header, HTTPException, Query, Response, status
1313
from fastapi.responses import JSONResponse
1414
from linkml_runtime.utils.schemaview import SchemaView
15+
from nmdc_schema.nmdc_data import get_nmdc_schema_definition
1516
from sqlalchemy.orm import Session
1617
from starlette.responses import StreamingResponse
1718

@@ -39,6 +40,15 @@
3940
logger = get_logger(__name__)
4041

4142

43+
def get_submission_status_enum():
44+
"""Get SubmissionStatusEnum from the NMDC schema definition."""
45+
schema = get_nmdc_schema_definition()
46+
return schema.enums["SubmissionStatusEnum"].permissible_values
47+
48+
49+
SubmissionStatusEnum = get_submission_status_enum()
50+
51+
4252
# get application settings
4353
@router.get("/settings", name="Get application settings")
4454
async def get_settings() -> Dict[str, Any]:
@@ -1183,7 +1193,7 @@ async def update_submission(
11831193
# Create GitHub issue when metadata is being submitted and not a test submission
11841194
if (
11851195
submission.status == "In Progress"
1186-
and body_dict.get("status", None) == "Submitted - Pending Review"
1196+
and body_dict.get("status", None) == SubmissionStatusEnum["SubmittedPendingReview"].title
11871197
and submission.is_test_submission is False
11881198
):
11891199
submission_model = schemas_submission.SubmissionMetadataSchema.model_validate(submission)
@@ -1210,7 +1220,8 @@ async def update_submission(
12101220

12111221
if body_dict.get("status", None):
12121222
if (
1213-
body_dict.get("status", None) == "Submitted - Pending Review"
1223+
body_dict.get("status", None)
1224+
== SubmissionStatusEnum["SubmittedPendingReview"].title
12141225
and submission.is_test_submission is False
12151226
):
12161227
submission.status = body_dict["status"]
@@ -1263,7 +1274,7 @@ def create_github_issue(submission: schemas_submission.SubmissionMetadataSchema,
12631274
f"Has data been generated: {data_generated}",
12641275
f"PI name: {pi_name}",
12651276
f"PI orcid: {pi_orcid}",
1266-
"Status: Submitted - Pending Review",
1277+
f"{SubmissionStatusEnum["SubmittedPendingReview"].title}",
12671278
f"Data types: {omics_processing_types}",
12681279
f"Sample type: {sample_types}",
12691280
f"Number of samples: {num_samples}",
@@ -1487,4 +1498,4 @@ async def update_user(
14871498
):
14881499
if body.id != id:
14891500
raise HTTPException(status_code=400, detail="Invalid id")
1490-
return crud.update_user(db, body)
1501+
return crud.update_user(db, body)

nmdc_server/fakes.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,21 @@
66
from factory import Faker, SubFactory, lazy_attribute, post_generation
77
from factory.alchemy import SQLAlchemyModelFactory
88
from faker.providers import BaseProvider, date_time, geo, internet, lorem, misc, person, python
9+
from nmdc_schema.nmdc_data import get_nmdc_schema_definition
910
from sqlalchemy.orm.scoping import scoped_session
1011

1112
from nmdc_server import models
1213
from nmdc_server.database import SessionLocal
1314
from nmdc_server.schemas import AnnotationValue
1415

15-
from nmdc_schema.nmdc_materialized_patterns import SubmissionStatusEnum
16+
17+
def get_submission_status_enum():
18+
"""Get SubmissionStatusEnum from the NMDC schema definition."""
19+
schema = get_nmdc_schema_definition()
20+
return schema.enums["SubmissionStatusEnum"].permissible_values
21+
22+
23+
SubmissionStatusEnum = get_submission_status_enum()
1624

1725

1826
class DoiProvider(BaseProvider):
@@ -341,7 +349,7 @@ class Meta:
341349
id: UUID = Faker("uuid")
342350
author = SubFactory(UserFactory)
343351
author_orcid = Faker("pystr")
344-
status = SubmissionStatusEnum.InProgress.title
352+
status = SubmissionStatusEnum["InProgress"].title
345353
study_name = Faker("word")
346354
templates = Faker("pylist", nb_elements=2, value_types=[str])
347355
created = datetime.utcnow()

nmdc_server/models.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from typing import Any, Dict, Iterator, List, Optional, Type, Union
44
from uuid import uuid4
55

6+
from nmdc_schema.nmdc_data import get_nmdc_schema_definition
67
from sqlalchemy import (
78
BigInteger,
89
Boolean,
@@ -34,6 +35,15 @@
3435
# described by https://microbiomedata.github.io/nmdc-schema/.
3536

3637

38+
def get_submission_status_enum():
39+
"""Get SubmissionStatusEnum from the NMDC schema definition."""
40+
schema = get_nmdc_schema_definition()
41+
return schema.enums["SubmissionStatusEnum"].permissible_values
42+
43+
44+
SubmissionStatusEnum = get_submission_status_enum()
45+
46+
3747
def gold_url(base: str, id: str, gold_identifiers: Optional[list[str]] = None) -> Optional[str]:
3848
if id.startswith("gold:"):
3949
return f"{base}{id[5:]}"
@@ -1015,4 +1025,4 @@ class AuthorizationCode(Base):
10151025
class InvalidatedToken(Base):
10161026
__tablename__ = "invalidated_token"
10171027

1018-
token = Column(String, primary_key=True)
1028+
token = Column(String, primary_key=True)

tests/test_submission.py

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,23 @@
33
from datetime import datetime, timedelta
44

55
import pytest
6+
from nmdc_schema.nmdc_data import get_nmdc_schema_definition
67
from sqlalchemy.orm.session import Session
78
from starlette.testclient import TestClient
89

910
from nmdc_server import fakes
1011
from nmdc_server.models import SubmissionEditorRole, SubmissionRole
1112
from nmdc_server.schemas_submission import SubmissionMetadataSchema, SubmissionMetadataSchemaPatch
1213

13-
from nmdc_schema.nmdc import SubmissionStatusEnum
14+
15+
def get_submission_status_enum():
16+
"""Get SubmissionStatusEnum from the NMDC schema definition."""
17+
schema = get_nmdc_schema_definition()
18+
return schema.enums["SubmissionStatusEnum"].permissible_values
19+
20+
21+
SubmissionStatusEnum = get_submission_status_enum()
22+
1423

1524
@pytest.fixture
1625
def suggest_payload():
@@ -45,20 +54,18 @@ def test_get_metadata_submissions_mixs_as_non_admin(
4554
response = client.request(method="GET", url="/api/metadata_submission/mixs_report")
4655
assert response.status_code == 403
4756

57+
4858
def test_print_submission_enum(db: Session, client: TestClient, logged_in_user):
4959
submission = fakes.MetadataSubmissionFactory(
5060
author=logged_in_user, author_orcid=logged_in_user.orcid
5161
)
5262
print("Available submission status enum values:")
53-
for attr_name in dir(SubmissionStatusEnum):
54-
attr_value = getattr(SubmissionStatusEnum, attr_name)
55-
if hasattr(attr_value, 'text'):
56-
print(attr_value.text)
57-
58-
print('\nSpecific enum value string')
59-
print(SubmissionStatusEnum.InProgress.text)
63+
print(SubmissionStatusEnum)
64+
print("\nSpecific enum value string")
65+
print(SubmissionStatusEnum["InProgress"].title)
66+
67+
assert submission
6068

61-
assert not submission
6269

6370
def test_get_metadata_submissions_mixs_as_admin(
6471
db: Session, client: TestClient, logged_in_admin_user
@@ -74,7 +81,7 @@ def test_get_metadata_submissions_mixs_as_admin(
7481
author=logged_in_user,
7582
author_orcid=logged_in_user.orcid,
7683
created=now,
77-
status=SubmissionStatusEnum.SubmittedPendingReview.text,
84+
status=SubmissionStatusEnum["SubmittedPendingReview"].title,
7885
metadata_submission={
7986
"sampleData": {
8087
"built_env_data": [
@@ -126,7 +133,7 @@ def test_get_metadata_submissions_mixs_as_admin(
126133

127134
data_row = rows[1] # first data row (data about Sample A in submission1)
128135
assert data_row["Submission ID"] == str(submission1.id)
129-
assert data_row["Status"] == SubmissionStatusEnum.SubmittedPendingReview.text
136+
assert data_row["Status"] == SubmissionStatusEnum["SubmittedPendingReview"].title
130137
assert data_row["Sample Name"] == "Sample A"
131138
assert data_row["Environmental Package/Extension"] == "Env Pkg 1"
132139
assert data_row["Environmental Broad Scale"] == "Broad Scale A"
@@ -139,7 +146,7 @@ def test_get_metadata_submissions_mixs_as_admin(
139146

140147
data_row = rows[2] # second data row (data about Sample B in submission1)
141148
assert data_row["Submission ID"] == str(submission1.id)
142-
assert data_row["Status"] == SubmissionStatusEnum.SubmittedPendingReview.text
149+
assert data_row["Status"] == SubmissionStatusEnum["SubmittedPendingReview"].title
143150
assert data_row["Sample Name"] == "Sample B"
144151
assert data_row["Environmental Package/Extension"] == "Env Pkg 1"
145152
assert data_row["Environmental Broad Scale"] == "Broad Scale B"
@@ -321,7 +328,7 @@ def test_get_metadata_submissions_report_as_admin(
321328
"packageName": [],
322329
},
323330
is_test_submission=True,
324-
status=SubmissionStatusEnum.InProgress.text,
331+
status=SubmissionStatusEnum["InProgress"].title,
325332
source_client="field_notes",
326333
)
327334
db.commit()
@@ -362,7 +369,7 @@ def test_get_metadata_submissions_report_as_admin(
362369
assert data_row["PI Name"] == "My PI name"
363370
assert data_row["PI Email"] == "My PI email"
364371
assert data_row["Source Client"] == "field_notes"
365-
assert data_row["Status"] == SubmissionStatusEnum.InProgress.text
372+
assert data_row["Status"] == SubmissionStatusEnum["InProgress"].title
366373
assert data_row["Is Test Submission"] == "True"
367374
assert data_row["Number of Samples"] == "4"
368375
assert isinstance(data_row["Date Last Modified"], str)
@@ -376,7 +383,9 @@ def test_get_metadata_submissions_report_as_admin(
376383
assert data_row["PI Name"] == ""
377384
assert data_row["PI Email"] == ""
378385
assert data_row["Source Client"] == "" # upstream faker lacks `source_client` attribute
379-
assert data_row["Status"] == SubmissionStatusEnum.InProgress.text # matches value in upstream faker
386+
assert (
387+
data_row["Status"] == SubmissionStatusEnum["InProgress"].title
388+
) # matches value in upstream faker
380389
assert data_row["Is Test Submission"] == "False"
381390
assert data_row["Number of Samples"] == "0"
382391
assert isinstance(data_row["Date Last Modified"], str)

0 commit comments

Comments
 (0)