Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ install_requires =
pytz
requests
simplejson
tapipy ==1.0.7
tapipy>=1.6
Jinja2
jsonschema ==3.2.0
jsonschema

[options.packages.find]
where = src
Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/vbr/api/logistics.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ def relocate_measurement(
"""Move a Measurement to a Container."""
orig_measurement_container = measurement.container
measurement.container = container.container_id
container = self.vbr_client.update_row(measurement)
measurement = self.vbr_client.update_row(measurement)
DataEventApi.create_and_link(
self,
comment="Relocated to container {0}".format(container.local_id),
Expand Down
16 changes: 14 additions & 2 deletions src/vbr/api/measurement.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ def create_measurement(
status_id: int,
volume: float = DEFAULT_VOLUME_ML,
creation_timestr: str = None,
redcap_repeat_instance: int = None,
) -> Measurement:
"""Create a new Measurement."""
# TODO - data_event
Expand All @@ -49,6 +50,7 @@ def create_measurement(
status=status_id,
volume=volume,
creation_time=creation_timestr,
redcap_repeat_instance=redcap_repeat_instance,
)
try:
return self.vbr_client.create_row(bs)[0]
Expand All @@ -66,6 +68,7 @@ def create_or_get_measurement_by_tracking_id(
status_id: int,
volume: float,
creation_timestr: str = None,
redcap_repeat_instance: int = None,
) -> Measurement:
"""Create a Measurement or return existing with specified tracking_id."""
try:
Expand All @@ -79,6 +82,7 @@ def create_or_get_measurement_by_tracking_id(
status_id,
volume,
creation_timestr,
redcap_repeat_instance
)
except Exception:
return self.get_measurement_by_tracking_id(tracking_id)
Expand Down Expand Up @@ -154,9 +158,17 @@ def get_measurements_in_container(self, container: Container) -> List[Measuremen
root_url="measurement", query=query, limit=1000000
)

def get_measurements_in_biosample(self, biosample: Biosample) -> List[Measurement]:
def get_measurements_in_biosample(self, biosample: Biosample, redcap_repeat_instance) -> List[Measurement]:
"""Retrieve Measurements in a Biosample."""
query = {"biosample": {"operator": "=", "value": biosample.biosample_id}}
# PgREST doesn't handle =None queries well, patch:
if redcap_repeat_instance is not None:
query = {
"biosample": {"operator": "=", "value": biosample.biosample_id},
"redcap_repeat_instance": {"operator": "=", "value": redcap_repeat_instance}
}
else:
query = {
"biosample": {"operator": "=", "value": biosample.biosample_id}}
return self.vbr_client.query_rows(
root_url="measurement", query=query, limit=1000000
)
11 changes: 11 additions & 0 deletions src/vbr/api/redcap.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,17 @@ def get_redcap_record_by_biosample_and_instance(

return self._get_row_from_table_with_query(redcap_form_name, query=query)

def get_redcap_record_by_subject_and_protocol(
self, redcap_form_name: str, subject_id: str, protocol_id: str
) -> RcapTable:
"""Retrieve a Biosample by subject and protocol IDs."""
redcap_form_name = 'rcap_'+redcap_form_name
query = {
"subject_id": {"operator": "=", "value": subject_id},
"protocol_id": {"operator": "=", "value": protocol_id}
}
return self._get_row_from_table_with_query(redcap_form_name, query=query)

def update_redcap_record(
self, redcap_form_name: str, redcap_record: RcapTable, rcap_row: RcapTable
) -> RcapTable:
Expand Down
6 changes: 6 additions & 0 deletions src/vbr/tableclasses/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@
RcapConsentedParticipantInformation,
RcapPatientDemographicsBaselineV03DemographicsI,
RcapPatientDemographicsFullPart2V03Demographics,
RcapImagingItemsV01,
RcapImagingItemsV11,
RcapImagingMcc1V09,
RcapImagingMcc2V01,
RcapQstMcc1V03,
RcapPostconsentStudyPlanCrfV06
)
except ImportError:
from .redcap.autogenerated import *
Expand Down
119 changes: 36 additions & 83 deletions src/vbr/tableclasses/redcap/autogenerated/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,107 +2,60 @@
"""
from .consented_participant_information import RcapConsentedParticipantInformation
from .postconsent_study_plan_crf_v06 import RcapPostconsentStudyPlanCrfV06
from .patient_demographics_baseline_v03_demographics_i import (
RcapPatientDemographicsBaselineV03DemographicsI,
)
from .other_pain_treatments_v3_other_treatments import (
RcapOtherPainTreatmentsV3OtherTreatments,
)
from .patient_demographics_baseline_v03_demographics_i import RcapPatientDemographicsBaselineV03DemographicsI
from .other_pain_treatments_v3_other_treatments import RcapOtherPainTreatmentsV3OtherTreatments
from .other_medical_surgical_treatments_ii import RcapOtherMedicalSurgicalTreatmentsIi
from .patient_global_impression_of_change_pgic import (
RcapPatientGlobalImpressionOfChangePgic,
)
from .bpisf_the_brief_pain_inventory_v23_short_form_bpi import (
RcapBpisfTheBriefPainInventoryV23ShortFormBpi,
)
from .patient_global_impression_of_change_pgic import RcapPatientGlobalImpressionOfChangePgic
from .bpisf_the_brief_pain_inventory_v23_short_form_bpi import RcapBpisfTheBriefPainInventoryV23ShortFormBpi
from .symptom_severity_index_v10_ssi import RcapSymptomSeverityIndexV10Ssi
from .pain_detect_questionnaire_pdq import RcapPainDetectQuestionnairePdq
from .knee_injury_osteoarthritis_outcome_score_koos12 import (
RcapKneeInjuryOsteoarthritisOutcomeScoreKoos12,
)
from .danish_thoracic_surgery_questionnaire_v02 import RcapDanishThoracicSurgeryQuestionnaireV02
from .deep_breathing_and_coughing_v02 import RcapDeepBreathingAndCoughingV02
from .promis_sf_v12_physical_function_8b import RcapPromisSfV12PhysicalFunction8B
from .promis_sf_v10_sleep_disturbance_6a_sleep_i import (
RcapPromisSfV10SleepDisturbance6ASleepI,
)
from .promis_sf_v10_sleep_disturbance_6a_sleep_i import RcapPromisSfV10SleepDisturbance6ASleepI
from .painsleep_duration_sleep_ii import RcapPainsleepDurationSleepIi
from .promis_sf_v10_fatigue_7a import RcapPromisSfV10Fatigue7A
from .generalized_anxiety_disorder_7_item_gad7_scale_sco import (
RcapGeneralizedAnxietyDisorder7ItemGad7ScaleSco,
)
from .patient_health_questionnaire_depression_scale_phq import (
RcapPatientHealthQuestionnaireDepressionScalePhq,
)
from .pain_catastrophizing_questionnaire_pcs6 import (
RcapPainCatastrophizingQuestionnairePcs6,
)
from .fearavoidance_beliefs_questionnaire_v03_fabq import (
RcapFearavoidanceBeliefsQuestionnaireV03Fabq,
)
from .generalized_anxiety_disorder_7_item_gad7_scale_sco import RcapGeneralizedAnxietyDisorder7ItemGad7ScaleSco
from .patient_health_questionnaire_depression_scale_phq import RcapPatientHealthQuestionnaireDepressionScalePhq
from .pain_catastrophizing_questionnaire_pcs6 import RcapPainCatastrophizingQuestionnairePcs6
from .fearavoidance_beliefs_questionnaire_v03_fabq import RcapFearavoidanceBeliefsQuestionnaireV03Fabq
from .pain_resilience_scale_prs import RcapPainResilienceScalePrs
from .promis_sf_v20_emotional_support_6a import RcapPromisSfV20EmotionalSupport6A
from .promis_sf_v20_informational_support_6a import (
RcapPromisSfV20InformationalSupport6A,
)
from .multidimensional_inventory_of_subjective_cognitive import (
RcapMultidimensionalInventoryOfSubjectiveCognitive,
)
from .adverse_childhood_experience_questionnaire_ace import (
RcapAdverseChildhoodExperienceQuestionnaireAce,
)
from .promis_sf_v20_informational_support_6a import RcapPromisSfV20InformationalSupport6A
from .multidimensional_inventory_of_subjective_cognitive import RcapMultidimensionalInventoryOfSubjectiveCognitive
from .adverse_childhood_experience_questionnaire_ace import RcapAdverseChildhoodExperienceQuestionnaireAce
from .taps1 import RcapTaps1
from .taps2 import RcapTaps2
from .opioid_use_baseline_v10_opioid_use_i import RcapOpioidUseBaselineV10OpioidUseI
from .opioid_use_acute_followup_v10_opioid_use_ii import (
RcapOpioidUseAcuteFollowupV10OpioidUseIi,
)
from .opioid_use_longterm_followup_v10_opioid_use_iii import (
RcapOpioidUseLongtermFollowupV10OpioidUseIii,
)
from .opioid_side_effects_and_likeability_v03_side_effec import (
RcapOpioidSideEffectsAndLikeabilityV03SideEffec,
)
from .opioid_and_pain_control_satisfaction_v02_satisfact import (
RcapOpioidAndPainControlSatisfactionV02Satisfact,
)
from .opioid_use_acute_followup_v10_opioid_use_ii import RcapOpioidUseAcuteFollowupV10OpioidUseIi
from .opioid_use_longterm_followup_v10_opioid_use_iii import RcapOpioidUseLongtermFollowupV10OpioidUseIii
from .opioid_side_effects_and_likeability_v03_side_effec import RcapOpioidSideEffectsAndLikeabilityV03SideEffec
from .opioid_and_pain_control_satisfaction_v02_satisfact import RcapOpioidAndPainControlSatisfactionV02Satisfact
from .current_opioid_misuse_v02_comm import RcapCurrentOpioidMisuseV02Comm
from .rapid_assessment_of_physical_activity_v10_rapa import (
RcapRapidAssessmentOfPhysicalActivityV10Rapa,
)
from .rapid_assessment_of_physical_activity_v10_rapa import RcapRapidAssessmentOfPhysicalActivityV10Rapa
from .general_sensory_sensitivity_v02_gss8 import RcapGeneralSensorySensitivityV02Gss8
from .the_big_five_inventory_bfi2s import RcapTheBigFiveInventoryBfi2S
from .patient_demographics_full_part_2_v03_demographics import (
RcapPatientDemographicsFullPart2V03Demographics,
)
from .selfadministered_comorbidity_questionnaire_v4_scq import (
RcapSelfadministeredComorbidityQuestionnaireV4Scq,
)
from .patient_demographics_full_part_2_v03_demographics import RcapPatientDemographicsFullPart2V03Demographics
from .selfadministered_comorbidity_questionnaire_v4_scq import RcapSelfadministeredComorbidityQuestionnaireV4Scq
from .expectation_items_v12 import RcapExpectationItemsV12
from .acute_phase_trajectory_items_v05_acute_daily import (
RcapAcutePhaseTrajectoryItemsV05AcuteDaily,
)
from .daily_items_6_mo_v03_6month_daily import RcapDailyItems6MoV036MonthDaily
from .month_remote_followup_v20_12month_followup import (
RcapMonthRemoteFollowupV2012MonthFollowup,
)
from .functional_testing import RcapFunctionalTesting
from .acute_phase_trajectory_items_v05_acute_daily import RcapAcutePhaseTrajectoryItemsV05AcuteDaily
from .acute_phase_trajectory_items_v01_6month_daily import RcapAcutePhaseTrajectoryItemsV016MonthDaily
from .month_remote_followup_v20_12month_followup import RcapMonthRemoteFollowupV2012MonthFollowup
from .functional_testing_mcc2_v01 import RcapFunctionalTestingMcc2V01
from .qst_mcc1_v03 import RcapQstMcc1V03
from .current_medications_v02 import RcapCurrentMedicationsV02
from .blood_sample_collection_and_processing_crf import (
RcapBloodSampleCollectionAndProcessingCrf,
)
from .imaging_items_v11 import RcapImagingItemsV11
from .imaging_mcc1_v09 import RcapImagingMcc1V09
from .blood_sample_collection_and_processing_crf import RcapBloodSampleCollectionAndProcessingCrf
from .imaging_items_v01 import RcapImagingItemsV01
from .imaging_mcc2_v01 import RcapImagingMcc2V01
from .baseline_visit_reset import RcapBaselineVisitReset
from .study_visit_feedback_v03 import RcapStudyVisitFeedbackV03
from .form_uploads import RcapFormUploads
from .patient_encounters import RcapPatientEncounters
from .reportable_eventdeviation_v03 import RcapReportableEventdeviationV03
from .early_withdrawal_v04 import RcapEarlyWithdrawalV04
from .danish_thoracic_surgery_questionnaire_v02 import (
RcapDanishThoracicSurgeryQuestionnaireV02,
)
from .deep_breathing_and_coughing_v02 import RcapDeepBreathingAndCoughingV02
from .acute_phase_trajectory_items_v01_6month_daily import (
RcapAcutePhaseTrajectoryItemsV016MonthDaily,
)
from .functional_testing_mcc2_v01 import RcapFunctionalTestingMcc2V01
from .imaging_items_v01 import RcapImagingItemsV01
from .imaging_mcc2_v01 import RcapImagingMcc2V01
from .knee_injury_osteoarthritis_outcome_score_koos12 import RcapKneeInjuryOsteoarthritisOutcomeScoreKoos12
from .daily_items_6_mo_v03_6month_daily import RcapDailyItems6MoV036MonthDaily
from .functional_testing import RcapFunctionalTesting
from .imaging_items_v11 import RcapImagingItemsV11
from .imaging_mcc1_v09 import RcapImagingMcc1V09
from .visit_reset_archive import RcapVisitResetArchive
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
"""Autogenerated 2021-11-16T11:37:36.593350 by redcap_classfiles.py
"""Autogenerated 2024-09-18T10:32:28.909725 by redcap_classfiles.py
"""

from ....pgrest import *
Expand All @@ -7,19 +7,16 @@

from ..rcaptable import RcapTable

__all__ = ["RcapAcutePhaseTrajectoryItemsV016MonthDaily"]
__all__ = ['RcapAcutePhaseTrajectoryItemsV016MonthDaily']


class RcapAcutePhaseTrajectoryItemsV016MonthDaily(RcapTable):
"""Acute Phase Trajectory Items V01 6Month Daily"""

__redcap_form_name = "acute_phase_trajectory_items_v01_6month_daily"
acute_phase_trajectory_items_v01_6month_daily_id = (
Constants.SERIAL_PRIMARY_KEY_COLUMN
)
"""Acute Phase Trajectory Items V01 6Month Daily
"""
__redcap_form_name = 'acute_phase_trajectory_items_v01_6month_daily'
acute_phase_trajectory_items_v01_6month_daily_id = Constants.SERIAL_PRIMARY_KEY_COLUMN
acute_phase_trajectory_items_v01_6month_daily_complete = Column(
Integer, ForeignKey("status.status_id")
)
Integer, ForeignKey('status.status_id'))
# Date entered
# Field Type: text
# Choices: N/A
Expand Down Expand Up @@ -48,11 +45,15 @@ class RcapAcutePhaseTrajectoryItemsV016MonthDaily(RcapTable):
# Field Type: radio
# Choices: Y, Yes | N, No
traj24medyn = Column(Boolean, nullable=True, comments=None)
# 1. Over-the-counter pain relievers (e.g., acetaminophen Tylen...
# 1. Acetaminophen (Tylenol)
# Field Type: radio
# Choices: Y, Yes | N, No
traj24medlist1tylenol = Column(Boolean, nullable=True, comments=None)
# 2. Over-the-counter or prescription non‐steroidal pain reliev...
# Field Type: radio
# Choices: Y, Yes | N, No
traj24medlist1otc = Column(Boolean, nullable=True, comments=None)
# 2. Opioid pain relievers (e.g., oxycodone, Percocet, Nucynta,...
# 3. Opioid pain relievers (e.g., oxycodone, Percocet, Nucynta,...
# Field Type: radio
# Choices: Y, Yes | N, No
traj24medlist2opioid = Column(Boolean, nullable=True, comments=None)
Expand All @@ -64,7 +65,7 @@ class RcapAcutePhaseTrajectoryItemsV016MonthDaily(RcapTable):
# Field Type: radio
# Choices: Y, Yes | N, No
traj24medlist4gaba = Column(Boolean, nullable=True, comments=None)
# Duloxetine (Cymbalta) or venlafaxine (Wellbutrin)
# Duloxetine (Cymbalta) or venlafaxine (Effexor)
# Field Type: radio
# Choices: Y, Yes | N, No
traj24medlist5dulox = Column(Boolean, nullable=True, comments=None)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
"""Autogenerated 2021-11-16T11:37:36.538059 by redcap_classfiles.py
"""Autogenerated 2024-09-18T10:32:28.908211 by redcap_classfiles.py
"""

from ....pgrest import *
Expand All @@ -7,32 +7,29 @@

from ..rcaptable import RcapTable

__all__ = ["RcapAcutePhaseTrajectoryItemsV05AcuteDaily"]
__all__ = ['RcapAcutePhaseTrajectoryItemsV05AcuteDaily']


class RcapAcutePhaseTrajectoryItemsV05AcuteDaily(RcapTable):
"""Acute Phase Trajectory Items V05 Acute Daily"""

__redcap_form_name = "acute_phase_trajectory_items_v05_acute_daily"
acute_phase_trajectory_items_v05_acute_daily_id = (
Constants.SERIAL_PRIMARY_KEY_COLUMN
)
"""Acute Phase Trajectory Items V05 Acute Daily
"""
__redcap_form_name = 'acute_phase_trajectory_items_v05_acute_daily'
acute_phase_trajectory_items_v05_acute_daily_id = Constants.SERIAL_PRIMARY_KEY_COLUMN
acute_phase_trajectory_items_v05_acute_daily_complete = Column(
Integer, ForeignKey("status.status_id")
)
# Ignored multiline Field Name in Data Dictionary
Integer, ForeignKey('status.status_id'))
# Date entered
# Field Type: text
# Choices: N/A
traj04wkenterdate = Column(String, nullable=True, comments=None)
# 1. Please rate your chest pain by choosing the number that be...
# 1. Please rate your knee pain by choosing the number that bes...
# Field Type: radio
# Choices: 0, 0 No pain | 1, 1 | 2, 2 | 3, 3 | 4, 4 | 5, 5 | 6, 6 | 7, 7 | 8, 8 | 9, 9 | 10, 10 Pain as bad as you can imagine
traj04worstpainscl = Column(Integer, nullable=True, comments=None)
# 2. Please rate your chest pain by choosing the number that be...
# 2. Please rate your knee pain by choosing the number that bes...
# Field Type: radio
# Choices: 0, 0 No pain | 1, 1 | 2, 2 | 3, 3 | 4, 4 | 5, 5 | 6, 6 | 7, 7 | 8, 8 | 9, 9 | 10, 10 Pain as bad as you can imagine
traj04avgpainscl = Column(Integer, nullable=True, comments=None)
# 3. Please rate how much your chest pain has interfered with y...
# 3. Please rate how much your knee pain has interfered with yo...
# Field Type: radio
# Choices: 0, 0 Did not interfere | 1, 1 | 2, 2 | 3, 3 | 4, 4 | 5, 5 | 6, 6 | 7, 7 | 8, 8 | 9, 9 | 10, 10 Completely interfered
traj04painintfactivscl = Column(Integer, nullable=True, comments=None)
Expand Down Expand Up @@ -60,7 +57,11 @@ class RcapAcutePhaseTrajectoryItemsV05AcuteDaily(RcapTable):
# Field Type: radio
# Choices: Y, Yes | N, No
traj04medyn = Column(Boolean, nullable=True, comments=None)
# Over-the-counter pain relievers (e.g., acetaminophen Tylenol,...
# Acetaminophen (Tylenol)
# Field Type: radio
# Choices: Y, Yes | N, No
traj04medlisttylenol = Column(Boolean, nullable=True, comments=None)
# Over-the-counter or prescription non‐steroidal pain relievers...
# Field Type: radio
# Choices: Y, Yes | N, No
traj04medlist1otc = Column(Boolean, nullable=True, comments=None)
Expand All @@ -76,7 +77,7 @@ class RcapAcutePhaseTrajectoryItemsV05AcuteDaily(RcapTable):
# Field Type: radio
# Choices: Y, Yes | N, No
traj04medlist4gaba = Column(Boolean, nullable=True, comments=None)
# Duloxetine (Cymbalta) or venlafaxine (Wellbutrin)
# Duloxetine (Cymbalta) or venlafaxine (Effexor)
# Field Type: radio
# Choices: Y, Yes | N, No
traj04medlist5dulox = Column(Boolean, nullable=True, comments=None)
Expand Down
Loading