Skip to content

Commit 5f80a86

Browse files
authored
refactor: deprecate breeding_group and clear field (#1640)
* refactor: deprecate breeding_group and clear field * docs: update docs to show deprecation * fix: change how breeding_group gets cleared * chore: typo * chore: lint * tests: assert that breeding group was cleared
1 parent c3c3f3f commit 5f80a86

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

docs/source/components/subjects.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Description of breeding info for subject
88

99
| Field | Type | Title (Description) |
1010
|-------|------|-------------|
11-
| `breeding_group` | `str` | Breeding Group |
11+
| <del>`breeding_group`</del> | `str` | **[DEPRECATED]** Field will be removed in future releases. Breeding Group |
1212
| `maternal_id` | `str` | Maternal specimen ID |
1313
| `maternal_genotype` | `str` | Maternal genotype |
1414
| `paternal_id` | `str` | Paternal specimen ID |

src/aind_data_schema/components/subjects.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,26 @@ class Housing(DataModel):
7272
class BreedingInfo(DataModel):
7373
"""Description of breeding info for subject"""
7474

75-
breeding_group: str = Field(..., title="Breeding Group")
75+
breeding_group: Optional[str] = Field(
76+
default=None, title="Breeding Group", deprecated="Field will be removed in future releases"
77+
)
7678
maternal_id: str = Field(..., title="Maternal specimen ID")
7779
maternal_genotype: str = Field(..., title="Maternal genotype")
7880
paternal_id: str = Field(..., title="Paternal specimen ID")
7981
paternal_genotype: str = Field(..., title="Paternal genotype")
8082

83+
@field_validator("breeding_group", mode="before")
84+
def warn_breeding_group_deprecated(cls, v: Optional[str]) -> Optional[str]:
85+
"""Validator to warn about deprecated breeding_group field"""
86+
if v:
87+
import warnings
88+
89+
warnings.warn(
90+
"The 'breeding_group' field is deprecated and will be removed. The field's value has been cleared.",
91+
DeprecationWarning,
92+
)
93+
return None
94+
8195

8296
class MouseSubject(DataModel):
8397
"""Description of a mouse subject"""

tests/test_subject.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,19 @@ def test_constructors(self):
5454
Subject.model_validate_json(s.model_dump_json())
5555

5656
self.assertIsNotNone(s)
57+
self.assertIsNone(s.subject_details.breeding_info.breeding_group)
58+
59+
def test_breeding_info_deprecated_field(self):
60+
"""test that using deprecated field raises warning"""
61+
62+
with self.assertWarns(DeprecationWarning):
63+
BreedingInfo(
64+
breeding_group="Emx1-IRES-Cre(ND)",
65+
maternal_id="546543",
66+
maternal_genotype="Emx1-IRES-Cre/wt; Camk2a-tTa/Camk2a-tTA",
67+
paternal_id="232323",
68+
paternal_genotype="Ai93(TITL-GCaMP6f)/wt",
69+
)
5770

5871

5972
if __name__ == "__main__":

0 commit comments

Comments
 (0)