From 68049d10bce99c0cad8f76f0f79ce056311c0f5f Mon Sep 17 00:00:00 2001 From: Victor Date: Wed, 21 Feb 2018 16:13:30 -0500 Subject: [PATCH] preg_term and ga_at_delivery support. --- CHANGES | 6 +++ cutlass/DiseaseMeta.py | 2 +- cutlass/HostAssayPrep.py | 4 +- cutlass/SubjectAttribute.py | 97 +++++++++++++++++++++++++++++++------ tests/test_subject_attr.py | 24 +++++++++ 5 files changed, 116 insertions(+), 17 deletions(-) diff --git a/CHANGES b/CHANGES index 9c9fc78..6484044 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,9 @@ +cutlass 1.0.3 + + * Support for preg_term and ga_at_delivery fields in SubjectAttribute. + + - Victor Wed, 21 Feb 2018 16:00:00 -0400 + cutlass 1.0.2 * Support for subproject in VisitAttribute, SubjectAttribute and diff --git a/cutlass/DiseaseMeta.py b/cutlass/DiseaseMeta.py index 5f3c43c..5bba4a9 100644 --- a/cutlass/DiseaseMeta.py +++ b/cutlass/DiseaseMeta.py @@ -1,6 +1,6 @@ import json import logging -from Util import * +from Util import enforce_string class DiseaseMeta(object): def __init__(self): diff --git a/cutlass/HostAssayPrep.py b/cutlass/HostAssayPrep.py index 4a35094..e01eec2 100644 --- a/cutlass/HostAssayPrep.py +++ b/cutlass/HostAssayPrep.py @@ -7,9 +7,9 @@ from itertools import count from cutlass.iHMPSession import iHMPSession from cutlass.Base import Base -from cutlass.Util import * +from cutlass.Util import enforce_int, enforce_string -# pylint: disable=C0302, W0703, R0192 +# pylint: disable=C0302, W0703 # Create a module logger named after the module module_logger = logging.getLogger(__name__) diff --git a/cutlass/SubjectAttribute.py b/cutlass/SubjectAttribute.py index 31f454d..356b500 100644 --- a/cutlass/SubjectAttribute.py +++ b/cutlass/SubjectAttribute.py @@ -56,6 +56,7 @@ def __init__(self, *args, **kwargs): self._education = None self._family_history = None self._father = None + self._ga_at_delivery = None self._gallbladder = None self._hyperlipidemia = None self._hypertension = None @@ -68,6 +69,7 @@ def __init__(self, *args, **kwargs): self._osa = None self._pancreatitis = None self._postmenopausal = None + self._preg_term = None self._pvd = None self._rx = None self._siblings = None @@ -399,6 +401,33 @@ def father(self, father): self._father = father + @property + def ga_at_delivery(self): + """ + str: Gestational age at delivery, in weeks. There are three + possible values: "<37wk", ">37wk" and "unknown". + """ + self.logger.debug("In 'ga_at_delivery' getter.") + + return self._ga_at_delivery + + @ga_at_delivery.setter + @enforce_string + def ga_at_delivery(self, ga_at_delivery): + """ + The setter for the gestational age at delivery. + + Args: + ga_at_delivery (str): "<37wk", ">37wk", or "unknown". + + Returns: + None + """ + + self.logger.debug("In 'ga_at_delivery' setter.") + + self._ga_at_delivery = ga_at_delivery + @property def gallbladder(self): """ @@ -412,7 +441,7 @@ def gallbladder(self): @enforce_string def gallbladder(self, gallbladder): """ - The setter for the gallbladder disaese data. + The setter for the gallbladder disease data. Args: gallbladder (str): Yes/No, duration, clarification. @@ -713,6 +742,32 @@ def postmenopausal(self, postmenopausal): self._postmenopausal = postmenopausal + @property + def preg_term(self): + """ + str: Status of pregnancy ("preterm": <37wk, "full term": >= 37wk, or "NA"). + """ + self.logger.debug("In 'preg_term' getter.") + + return self._preg_term + + @preg_term.setter + @enforce_string + def preg_term(self, preg_term): + """ + The setter for the status of pregnancy. + + Args: + preg_term (str): The status of pregnancy. + + Returns: + None + """ + + self.logger.debug("In 'preg_term' setter.") + + self._preg_term = preg_term + @property def pvd(self): """ @@ -1030,55 +1085,59 @@ def _get_raw_doc(self): doc['meta']['chf'] = self._chf if self._comment is not None: - self.logger.debug(__name__ + " object has comment set.") + self.logger.debug("%s object has comment set.", __name__) doc['meta']['comment'] = self._comment if self._contact is not None: - self.logger.debug(__name__ + " object has contact set.") + self.logger.debug("%s object has contact set.", __name__) doc['meta']['contact'] = self._contact if self._diabetes is not None: - self.logger.debug(__name__ + " object has diabetes set.") + self.logger.debug("%s object has diabetes set.", __name__) doc['meta']['diabetes'] = self._diabetes if self._education is not None: - self.logger.debug(__name__ + " object has education set.") + self.logger.debug("%s object has education set.", __name__) doc['meta']['education'] = self._education if self._family_history is not None: - self.logger.debug(__name__ + " object has family_history set.") + self.logger.debug("%s object has family_history set.", __name__) doc['meta']['family_history'] = self._family_history if self._father is not None: - self.logger.debug(__name__ + " object has father set.") + self.logger.debug("%s object has father set.", __name__) doc['meta']['father'] = self._father + if self._ga_at_delivery is not None: + self.logger.debug("%s object has ga_at_delivery set.", __name__) + doc['meta']['ga_at_delivery'] = self._ga_at_delivery + if self._gallbladder is not None: - self.logger.debug(__name__ + " object has gallbladder set.") + self.logger.debug("%s object has gallbladder set.", __name__) doc['meta']['gallbladder'] = self._gallbladder if self._hyperlipidemia is not None: - self.logger.debug(__name__ + " object has hyperlipidemia set.") + self.logger.debug("%s object has hyperlipidemia set.", __name__) doc['meta']['hyperlipidemia'] = self._hyperlipidemia if self._hypertension is not None: - self.logger.debug(__name__ + " object has hypertension set.") + self.logger.debug("%s object has hypertension set.", __name__) doc['meta']['hypertension'] = self._hypertension if self._illicit_drug is not None: - self.logger.debug(__name__ + " object has illicit_drug set.") + self.logger.debug("%s object has illicit_drug set.", __name__) doc['meta']['illicit_drug'] = self._illicit_drug if self._kidney is not None: - self.logger.debug(__name__ + " object has kidney set.") + self.logger.debug("%s object has kidney set.", __name__) doc['meta']['kidney'] = self._kidney if self._liver is not None: - self.logger.debug(__name__ + " object has liver set.") + self.logger.debug("%s object has liver set.", __name__) doc['meta']['liver'] = self._liver if self._lmp is not None: - self.logger.debug(__name__ + " object has lmp set.") + self.logger.debug("%s object has lmp set.", __name__) doc['meta']['lmp'] = self._lmp if self._mother is not None: @@ -1101,6 +1160,10 @@ def _get_raw_doc(self): self.logger.debug("%s object has postmenopausal set.", __name__) doc['meta']['postmenopausal'] = self._postmenopausal + if self._preg_term is not None: + self.logger.debug("%s object has preg_term set.", __name__) + doc['meta']['preg_term'] = self._preg_term + if self._pvd is not None: self.logger.debug("%s object has pvd set.", __name__) doc['meta']['pvd'] = self._pvd @@ -1286,6 +1349,9 @@ def load_subject_attr(attrib_data): if 'father' in attrib_data['meta']: attrib.father = attrib_data['meta']['father'] + if 'ga_at_delivery' in attrib_data['meta']: + attrib.ga_at_delivery = attrib_data['meta']['ga_at_delivery'] + if 'gallbladder' in attrib_data['meta']: attrib.gallbladder = attrib_data['meta']['gallbladder'] @@ -1322,6 +1388,9 @@ def load_subject_attr(attrib_data): if 'postmenopausal' in attrib_data['meta']: attrib.postmenopausal = attrib_data['meta']['postmenopausal'] + if 'preg_term' in attrib_data['meta']: + attrib.preg_term = attrib_data['meta']['preg_term'] + if 'pvd' in attrib_data['meta']: attrib.pvd = attrib_data['meta']['pvd'] diff --git a/tests/test_subject_attr.py b/tests/test_subject_attr.py index 0971579..af38d24 100644 --- a/tests/test_subject_attr.py +++ b/tests/test_subject_attr.py @@ -270,6 +270,15 @@ def testFather(self): self.util.stringPropertyTest(self, subj_attr, "father") + # ga_at_delivery + def testGaAtDelivery(self): + """ Test the ga_at_delivery property. """ + subj_attr = self.session.create_subject_attr() + + self.util.stringTypeTest(self, subj_attr, "ga_at_delivery") + + self.util.stringPropertyTest(self, subj_attr, "ga_at_delivery") + # gallbladder def testGallbladder(self): """ Test the gallbladder property. """ @@ -376,6 +385,15 @@ def testPostmenopausal(self): self.util.stringPropertyTest(self, subj_attr, "postmenopausal") + # preg_term + def testPregTerm(self): + """ Test the preg_term property. """ + subj_attr = self.session.create_subject_attr() + + self.util.stringTypeTest(self, subj_attr, "preg_term") + + self.util.stringPropertyTest(self, subj_attr, "preg_term") + # pvd (peripheral vascular disease) def testPVD(self): """ Test the pvd (peripheral vascular disease) property. """ @@ -455,6 +473,7 @@ def testLoadSaveDeleteSubjectAttribute(self): subj_attr.education = "Yes, high school" subj_attr.family_history = "Yes, cancer" subj_attr.father = "Dad" + subj_attr.ga_at_delivery = "<37wk" subj_attr.gallbladder = "Yes, 2 years" subj_attr.hyperlipidemia = "Yes, 3 years" subj_attr.hypertension = "Yes, 4 years" @@ -467,6 +486,7 @@ def testLoadSaveDeleteSubjectAttribute(self): subj_attr.osa = "Yes, 6 years" subj_attr.pancreatitis = "Yes, 7 years" subj_attr.postmenopausal = "N/A" + subj_attr.preg_term = "preterm" subj_attr.pvd = "Yes, 8 years" subj_attr.rx = "None" subj_attr.siblings = "Brother and sister" @@ -505,6 +525,10 @@ def testLoadSaveDeleteSubjectAttribute(self): "SubjectAttribute comment not saved & loaded successfully") self.assertEqual(subj_attr.contact, subj_attr_loaded.contact, "SubjectAttribute contact not saved & loaded successfully") + self.assertEqual(subj_attr.ga_at_delivery, subj_attr_loaded.ga_at_delivery, + "SubjectAttribute ga_at_delivery not saved & loaded successfully") + self.assertEqual(subj_attr.preg_term, subj_attr_loaded.preg_term, + "SubjectAttribute preg_term not saved & loaded successfully") self.assertEqual(subj_attr.subproject, subj_attr_loaded.subproject, "SubjectAttribute subproject not saved & loaded successfully") self.assertEqual(subj_attr.tags[0], subj_attr_loaded.tags[0],