Skip to content

Commit 2cb0083

Browse files
committed
Replace deprecated json method
1 parent cf58cb9 commit 2cb0083

File tree

3 files changed

+43
-42
lines changed

3 files changed

+43
-42
lines changed

nmdc_server/fakes.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from collections import OrderedDict
2-
from datetime import datetime
2+
from datetime import UTC, datetime
33
from typing import Dict, List, Optional
44
from uuid import UUID, uuid4
55

@@ -342,7 +342,8 @@ class Meta:
342342
status = "In Progress"
343343
study_name = Faker("word")
344344
templates = Faker("pylist", nb_elements=2, value_types=[str])
345-
created = datetime.utcnow()
345+
created = datetime.now(tz=UTC)
346+
date_last_modified = created
346347
# TODO specify all fields!
347348
metadata_submission = {
348349
"sampleData": {},
@@ -400,6 +401,7 @@ class Meta:
400401
}
401402
locked_by = None
402403
lock_updated = None
404+
is_test_submission = False
403405

404406

405407
class SubmissionRoleFactory(SQLAlchemyModelFactory):

nmdc_server/schemas_submission.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@ class SubmissionMetadataSchemaCreate(BaseModel):
126126

127127

128128
class SubmissionMetadataSchemaPatch(BaseModel):
129+
model_config = ConfigDict(from_attributes=True)
130+
129131
metadata_submission: PartialMetadataSubmissionRecord
130132
status: Optional[str] = None
131133
# Map of ORCID iD to permission level

tests/test_submission.py

Lines changed: 37 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import json
21
from csv import DictReader
32
from datetime import UTC, datetime, timedelta
43

54
import pytest
5+
from fastapi.encoders import jsonable_encoder
66
from sqlalchemy.orm.session import Session
77
from starlette.testclient import TestClient
88

@@ -154,7 +154,6 @@ def test_get_metadata_submissions_report_as_admin(
154154
author=logged_in_user,
155155
author_orcid=logged_in_user.orcid,
156156
created=now,
157-
date_last_modified=datetime.now(tz=UTC),
158157
is_test_submission=False,
159158
)
160159
fakes.SubmissionRoleFactory(
@@ -168,7 +167,6 @@ def test_get_metadata_submissions_report_as_admin(
168167
author=other_user,
169168
author_orcid=other_user.orcid,
170169
created=now + timedelta(seconds=1),
171-
date_last_modified=datetime.now(tz=UTC),
172170
# TODO: Omit some optional fields in order to simplify the test data.
173171
# See: `class MetadataSubmissionRecordCreate` in `schema_submission.py`
174172
# See: https://microbiomedata.github.io/submission-schema/SampleData/
@@ -467,7 +465,6 @@ def test_cannot_release_other_users_submission_lock(
467465
author_orcid=logged_in_user.orcid,
468466
locked_by=locking_user,
469467
lock_updated=datetime.now(tz=UTC),
470-
date_last_modified=datetime.now(tz=UTC),
471468
)
472469
fakes.SubmissionRoleFactory(
473470
submission=submission,
@@ -492,21 +489,20 @@ def test_try_edit_locked_submission(db: Session, client: TestClient, logged_in_u
492489
author_orcid=logged_in_user.orcid,
493490
locked_by=fakes.UserFactory(),
494491
lock_updated=datetime.now(tz=UTC),
495-
date_last_modified=datetime.now(tz=UTC),
496492
)
497493
fakes.SubmissionRoleFactory(
498494
submission=submission,
499495
submission_id=submission.id,
500496
user_orcid=logged_in_user.orcid,
501497
role=SubmissionEditorRole.owner,
502498
)
503-
payload = SubmissionMetadataSchema(**submission.__dict__).json(exclude_unset=True)
499+
payload = SubmissionMetadataSchema.model_validate(submission)
504500
db.commit()
505501

506502
response = client.request(
507503
method="patch",
508504
url=f"/api/metadata_submission/{submission.id}",
509-
json=json.loads(payload),
505+
json=jsonable_encoder(payload, exclude_unset=True),
510506
)
511507
assert response.status_code == 400
512508

@@ -518,19 +514,20 @@ def test_try_edit_expired_locked_submission(db: Session, client: TestClient, log
518514
author_orcid=logged_in_user.orcid,
519515
locked_by=fakes.UserFactory(),
520516
lock_updated=datetime.now(tz=UTC) - timedelta(hours=1),
521-
date_last_modified=datetime.now(tz=UTC),
522517
)
523518
fakes.SubmissionRoleFactory(
524519
submission=submission,
525520
submission_id=submission.id,
526521
user_orcid=logged_in_user.orcid,
527522
role=SubmissionEditorRole.owner,
528523
)
529-
payload = SubmissionMetadataSchema(**submission.__dict__).json(exclude_unset=True)
524+
payload = SubmissionMetadataSchema.model_validate(submission)
530525
db.commit()
531526

532527
response = client.request(
533-
method="patch", url=f"/api/metadata_submission/{submission.id}", json=json.loads(payload)
528+
method="patch",
529+
url=f"/api/metadata_submission/{submission.id}",
530+
json=jsonable_encoder(payload, exclude_unset=True),
534531
)
535532
assert response.status_code == 200
536533

@@ -543,36 +540,32 @@ def test_try_edit_locked_by_current_user_submission(
543540
author_orcid=logged_in_user.orcid,
544541
locked_by=logged_in_user,
545542
lock_updated=datetime.now(tz=UTC),
546-
date_last_modified=datetime.now(tz=UTC),
547543
)
548544
fakes.SubmissionRoleFactory(
549545
submission=submission,
550546
submission_id=submission.id,
551547
user_orcid=logged_in_user.orcid,
552548
role=SubmissionEditorRole.owner,
553549
)
554-
payload = SubmissionMetadataSchema(**submission.__dict__).json(exclude_unset=True)
550+
payload = SubmissionMetadataSchema.model_validate(submission)
555551
db.commit()
556552

557553
response = client.request(
558-
method="patch", url=f"/api/metadata_submission/{submission.id}", json=json.loads(payload)
554+
method="patch",
555+
url=f"/api/metadata_submission/{submission.id}",
556+
json=jsonable_encoder(payload, exclude_unset=True),
559557
)
560558
assert response.status_code == 200
561559

562560

563561
def test_submission_list_with_roles(db: Session, client: TestClient, logged_in_user):
564562
user_a = fakes.UserFactory()
565-
submission_a = fakes.MetadataSubmissionFactory(
566-
author=user_a, author_orcid=user_a.orcid, date_last_modified=datetime.now(tz=UTC)
567-
)
563+
submission_a = fakes.MetadataSubmissionFactory(author=user_a, author_orcid=user_a.orcid)
568564
fakes.MetadataSubmissionFactory(
569565
author=logged_in_user,
570566
author_orcid=logged_in_user.orcid,
571-
date_last_modified=datetime.now(tz=UTC),
572-
)
573-
fakes.MetadataSubmissionFactory(
574-
author=user_a, author_orcid=user_a.orcid, date_last_modified=datetime.now(tz=UTC)
575567
)
568+
fakes.MetadataSubmissionFactory(author=user_a, author_orcid=user_a.orcid)
576569
db.commit()
577570
fakes.SubmissionRoleFactory(
578571
submission=submission_a,
@@ -593,13 +586,13 @@ def test_submission_list_with_roles(db: Session, client: TestClient, logged_in_u
593586
@pytest.mark.parametrize("role,code", [(SubmissionEditorRole.owner, 200), (None, 403)])
594587
def test_get_submission_with_roles(db: Session, client: TestClient, logged_in_user, role, code):
595588
if role == SubmissionEditorRole.owner:
596-
submission = fakes.MetadataSubmissionFactory(date_last_modified=datetime.now(tz=UTC))
589+
submission = fakes.MetadataSubmissionFactory()
597590
db.commit()
598591
role = fakes.SubmissionRoleFactory(
599592
submission=submission, submission_id=submission.id, user_orcid=logged_in_user.orcid
600593
)
601594
else:
602-
submission = fakes.MetadataSubmissionFactory(date_last_modified=datetime.now(tz=UTC))
595+
submission = fakes.MetadataSubmissionFactory()
603596
db.commit()
604597
response = client.request(method="get", url=f"/api/metadata_submission/{submission.id}")
605598
assert response.status_code == code
@@ -608,20 +601,22 @@ def test_get_submission_with_roles(db: Session, client: TestClient, logged_in_us
608601
@pytest.mark.parametrize("role,code", [(SubmissionEditorRole.owner, 200), (None, 403)])
609602
def test_edit_submission_with_roles(db: Session, client: TestClient, logged_in_user, role, code):
610603
if role == SubmissionEditorRole.owner:
611-
submission = fakes.MetadataSubmissionFactory(date_last_modified=datetime.now(tz=UTC))
612-
payload = SubmissionMetadataSchema(**submission.__dict__).json()
604+
submission = fakes.MetadataSubmissionFactory()
605+
payload = SubmissionMetadataSchema.model_validate(submission)
613606
db.commit()
614607
role = fakes.SubmissionRoleFactory(
615608
submission=submission,
616609
submission_id=submission.id,
617610
user_orcid=logged_in_user.orcid,
618611
)
619612
else:
620-
submission = fakes.MetadataSubmissionFactory(date_last_modified=datetime.now(tz=UTC))
621-
payload = SubmissionMetadataSchema(**submission.__dict__).json()
613+
submission = fakes.MetadataSubmissionFactory()
614+
payload = SubmissionMetadataSchema.model_validate(submission)
622615
db.commit()
623616
response = client.request(
624-
method="patch", url=f"/api/metadata_submission/{submission.id}", json=json.loads(payload)
617+
method="patch",
618+
url=f"/api/metadata_submission/{submission.id}",
619+
json=jsonable_encoder(payload),
625620
)
626621
assert response.status_code == code
627622

@@ -641,7 +636,7 @@ def test_create_role_on_patch(db: Session, client: TestClient, logged_in_user):
641636
response = client.request(
642637
method="patch",
643638
url=f"/api/metadata_submission/{submission.id}",
644-
json=json.loads(payload.json()),
639+
json=jsonable_encoder(payload),
645640
)
646641
assert response.status_code == 200
647642

@@ -667,22 +662,24 @@ def test_piecewise_patch_metadata_contributor(
667662
user_orcid=logged_in_user.orcid,
668663
role=SubmissionEditorRole.metadata_contributor,
669664
)
670-
full_payload = SubmissionMetadataSchemaPatch(**submission.__dict__)
665+
full_payload = SubmissionMetadataSchemaPatch.model_validate(submission)
671666
db.commit()
672667

673668
if samples_only:
674669
request_dict = {
675670
"metadata_submission": {"sampleData": full_payload.metadata_submission.sampleData}
676671
}
677-
request_payload = SubmissionMetadataSchemaPatch(**request_dict).json(exclude_unset=True)
672+
request_payload = jsonable_encoder(
673+
SubmissionMetadataSchemaPatch.model_validate(request_dict), exclude_unset=True
674+
)
678675
else:
679-
request_payload = full_payload.json()
676+
request_payload = jsonable_encoder(full_payload)
680677

681678
# Logged in user should not be able to submit full payload because it contains non-sample data
682679
response = client.request(
683680
method="patch",
684681
url=f"/api/metadata_submission/{submission.id}",
685-
json=json.loads(request_payload),
682+
json=request_payload,
686683
)
687684
assert response.status_code == code
688685

@@ -709,15 +706,15 @@ def test_delete_role_on_patch(db: Session, client: TestClient, logged_in_user):
709706
user_orcid=user_orcid,
710707
role=SubmissionEditorRole.viewer,
711708
)
712-
payload = SubmissionMetadataSchemaPatch(**submission.__dict__)
709+
payload = SubmissionMetadataSchemaPatch.model_validate(submission)
713710
db.commit()
714711

715712
payload.permissions = {}
716713

717714
response = client.request(
718715
method="patch",
719716
url=f"/api/metadata_submission/{submission.id}",
720-
json=json.loads(payload.json()),
717+
json=jsonable_encoder(payload),
721718
)
722719
assert response.status_code == 200
723720
roles = db.query(SubmissionRole)
@@ -742,14 +739,14 @@ def test_update_role_on_patch(db: Session, client: TestClient, logged_in_user):
742739
user_orcid=user_orcid,
743740
role=SubmissionEditorRole.viewer,
744741
)
745-
payload = SubmissionMetadataSchemaPatch(**submission.__dict__)
742+
payload = SubmissionMetadataSchemaPatch.model_validate(submission)
746743
db.commit()
747744

748745
payload.permissions = {str(user_orcid): SubmissionEditorRole.editor.value}
749746
response = client.request(
750747
method="patch",
751748
url=f"/api/metadata_submission/{submission.id}",
752-
json=json.loads(payload.json()),
749+
json=jsonable_encoder(payload),
753750
)
754751
assert response.status_code == 200
755752
roles = db.query(SubmissionRole).filter(SubmissionRole.user_orcid == str(user_orcid))
@@ -844,8 +841,8 @@ def test_sync_submission_templates(db: Session, client: TestClient, logged_in_us
844841
user_orcid=logged_in_user.orcid,
845842
role=SubmissionEditorRole.owner,
846843
)
847-
payload = json.loads(
848-
SubmissionMetadataSchemaPatch(**submission.__dict__).json(exclude_unset=True)
844+
payload = jsonable_encoder(
845+
SubmissionMetadataSchemaPatch.model_validate(submission), exclude_unset=True
849846
)
850847
payload["metadata_submission"]["templates"] = [template]
851848
db.commit()
@@ -873,8 +870,8 @@ def test_sync_submission_study_name(db: Session, client: TestClient, logged_in_u
873870
user_orcid=logged_in_user.orcid,
874871
role=SubmissionEditorRole.owner,
875872
)
876-
payload = json.loads(
877-
SubmissionMetadataSchemaPatch(**submission.__dict__).json(exclude_unset=True)
873+
payload = jsonable_encoder(
874+
SubmissionMetadataSchemaPatch.model_validate(submission), exclude_unset=True
878875
)
879876
payload["metadata_submission"]["studyForm"]["studyName"] = expected_val
880877
db.commit()

0 commit comments

Comments
 (0)