Skip to content

Commit

Permalink
minor changes to crf, requisition; add dummy panel for tests
Browse files Browse the repository at this point in the history
  • Loading branch information
erikvw committed Jun 25, 2018
1 parent a72c329 commit db698c4
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 24 deletions.
2 changes: 1 addition & 1 deletion edc_visit_schedule/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from .subject_schedule import SubjectSchedule, SubjectScheduleError
from .schedule import Schedule
from .site_visit_schedules import site_visit_schedules
from .visit import Visit, Crf, Requisition, FormsCollection, Panel
from .visit import Visit, Crf, Requisition, FormsCollection
from .visit_schedule import VisitSchedule
1 change: 1 addition & 0 deletions edc_visit_schedule/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
'edc_identifier.apps.AppConfig',
'edc_timepoint.apps.AppConfig',
'edc_protocol.apps.AppConfig',
'edc_metadata.apps.AppConfig',
'edc_visit_schedule.apps.EdcAppointmentAppConfig',
'edc_visit_schedule.apps.EdcVisitTrackingAppConfig',
'edc_visit_schedule.apps.EdcFacilityAppConfig',
Expand Down
1 change: 1 addition & 0 deletions edc_visit_schedule/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from .dummy_panel import DummyPanel
16 changes: 16 additions & 0 deletions edc_visit_schedule/tests/dummy_panel.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@

class DummyPanel:

"""A dummy lab panel object.
"""

def __init__(self, name=None, verbose_name=None, requisition_model=None):
self.name = name
self.verbose_name = verbose_name or name
self.requisition_model = requisition_model

def __str__(self):
return self.verbose_name

def __repr__(self):
return f'{self.__class__.__name__}(name=\'{self.name}\')'
2 changes: 1 addition & 1 deletion edc_visit_schedule/visit/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from .crf import Crf
from .forms_collection import FormsCollection, FormsCollectionError
from .requisition import Requisition, Panel
from .requisition import Requisition
from .visit import Visit, VisitCodeError, VisitDateError
from .window_period import WindowPeriod
6 changes: 3 additions & 3 deletions edc_visit_schedule/visit/crf.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class CrfLookupError(Exception):
class Crf:

def __init__(self, show_order=None, model=None, required=None,
additional=None, **kwargs):
additional=None):
self.additional = additional
self.model = model
self.required = True if required is None else required
Expand All @@ -23,10 +23,10 @@ def __str__(self):
return f'{self.model} {required}'

def validate(self):
"""Raises an exception if a CRF model lookup fails.
"""Raises an exception if the model class lookup fails.
"""
try:
django_apps.get_model(*self.model.split('.'))
self.model_cls
except LookupError as e:
raise CrfLookupError(e) from e

Expand Down
33 changes: 14 additions & 19 deletions edc_visit_schedule/visit/requisition.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,36 +5,26 @@ class RequisitionError(Exception):
pass


class ScheduledRequisitionError(Exception):
class RequisitionLookupError(Exception):
pass


class Panel:

def __init__(self, name=None, verbose_name=None, requisition_model=None):
self.name = name
self.verbose_name = verbose_name or name
self.requisition_model = requisition_model

def __str__(self):
return self.verbose_name

def __repr__(self):
return f'{self.__class__.__name__}(name=\'{self.name}\')'
class ScheduledRequisitionError(Exception):
pass


class Requisition(Crf):

def __init__(self, panel=None, required=None, **kwargs):
required = False if required is None else required
self.panel = panel
model = panel.requisition_model
if not model:
if not self.panel.requisition_model:
raise RequisitionError(
f'Invalid requisition model. Got model=\'{model}\'. See {repr(panel)}. '
f'Invalid requisition model. Got None. '
f'See {repr(panel)}. '
f'Was the panel referred to by this schedule\'s requisition '
f'registered with site_labs?')
super().__init__(required=required, model=model, **kwargs)
f'added to a lab profile and registered with site_labs?')
super().__init__(required=required, model=self.panel.requisition_model, **kwargs)

def __repr__(self):
return f'{self.__class__.__name__}({self.show_order}, {self.panel.name})'
Expand All @@ -54,8 +44,13 @@ def validate(self):
See also: edc_lab.
"""
super().validate()
from edc_lab.site_labs import site_labs

try:
self.panel.requisition_model_cls
except LookupError as e:
raise RequisitionLookupError(e) from e

for lab_profile in site_labs.registry.values():
if self.panel.name not in lab_profile.panels:
raise ScheduledRequisitionError(
Expand Down

0 comments on commit db698c4

Please sign in to comment.