Example #1
0
 def test_get_field_names_to_extract(self):
     # field names to extract should be the same
     # as the field names to serialise
     self.assertEqual(
         Episode._get_fieldnames_to_serialize(),
         Episode._get_fieldnames_to_extract()
     )
Example #2
0
    def create(self, request):
        """
        Create a new episode, optionally implicitly creating a patient.

        * Extract the data from the request
        * Create or locate the patient
        * Create a new episode
        * Update the patient with any extra data passed in
        * return the patient
        """
        demographics_data = request.data.pop('demographics', None)
        location_data     = request.data.pop('location', {})
        tagging           = request.data.pop('tagging', {})

        hospital_number = demographics_data.get('hospital_number', None)
        if hospital_number:
            patient, created = Patient.objects.get_or_create(
                demographics__hospital_number=hospital_number)
            if created:
                demographics = patient.demographics_set.get()
                demographics.hospital_number = hospital_number
                demographics.save()
        else:
            patient = Patient.objects.create()

        patient.update_from_demographics_dict(demographics_data, request.user)

        episode = Episode(patient=patient)
        episode.update_from_dict(request.data, request.user)
        location = episode.location_set.get()
        location.update_from_dict(location_data, request.user)
        episode.set_tag_names([n for n, v in tagging[0].items() if v], request.user)
        serialised = episode.to_dict(request.user)

        return _build_json_response(serialised, status_code=status.HTTP_201_CREATED)
Example #3
0
def get_data_dictionary():
    schema = {}
    for subrecord in subrecords():
        if getattr(subrecord, '_exclude_from_extract', False):
            continue

        field_names = subrecord._get_fieldnames_to_extract()
        record_schema = [field_to_dict(subrecord, i) for i in field_names]
        schema[subrecord.get_display_name()] = record_schema
    field_names = Episode._get_fieldnames_to_extract()
    schema["Episode"] = [field_to_dict(Episode, i) for i in field_names]
    return OrderedDict(sorted(schema.items(), key=lambda t: t[0]))
Example #4
0
def episode_csv(episodes, user, file_name):
    """
    Given an iterable of EPISODES, create a CSV file containing Episode details.
    """
    with open(file_name, "w") as csv_file:
        fieldnames = Episode._get_fieldnames_to_serialize()
        fieldnames.remove('consistency_token')
        headers = list(fieldnames)
        headers.append("tagging")
        writer = csv.DictWriter(csv_file, fieldnames=headers)
        writer.writeheader()

        for episode in episodes:
            row = {h: unicode(getattr(episode, h)).encode('UTF-8') for h in fieldnames}
            row["tagging"] = ';'.join(episode.get_tag_names(user, historic=True))
            writer.writerow(row)
Example #5
0
def get_data_dictionary():
    schema = {}
    for subrecord in subrecords():
        field_names = subrecord._get_fieldnames_to_extract()
        record_schema = [field_to_dict(subrecord, i) for i in field_names]
        schema[subrecord.get_display_name()] = record_schema
    field_names = Episode._get_fieldnames_to_extract()
    field_names.remove("start")
    field_names.remove("end")
    schema["Episode"] = [field_to_dict(Episode, i) for i in field_names]
    schema["Episode"].append(dict(
        display_name="Start",
        type_display_name="Date & Time"
    ))
    schema["Episode"].append(dict(
        display_name="End",
        type_display_name="Date & Time"
    ))
    return OrderedDict(sorted(schema.items(), key=lambda t: t[0]))
Example #6
0
def episode_csv(episodes, user, file_name):
    """
    Given an iterable of EPISODES, create a CSV file containing Episode details.
    """
    with open(file_name, "w") as csv_file:
        fieldnames = Episode._get_fieldnames_to_serialize()
        fieldnames.remove('consistency_token')
        headers = list(fieldnames)
        headers.append("tagging")
        writer = csv.DictWriter(csv_file, fieldnames=headers)
        writer.writeheader()

        for episode in episodes:
            row = {
                h: unicode(getattr(episode, h)).encode('UTF-8')
                for h in fieldnames
            }
            row["tagging"] = ';'.join(
                episode.get_tag_names(user, historic=True))
            writer.writerow(row)
Example #7
0
File: api.py Project: wjt/opal
    def create(self, request):
        from opal.models import Patient

        hospital_number = request.data.pop('patient_hospital_number', None)
        tagging = request.data.pop('tagging', {})
        if hospital_number:
            patient, created = Patient.objects.get_or_create(
                demographics__hospital_number=hospital_number)
            if created:
                demographics = patient.demographics_set.get()
                demographics.hospital_number = hospital_number
                demographics.save()
        else:
            patient = Patient.objects.create()

        episode = Episode(patient=patient)
        episode.update_from_dict(request.data, request.user)
        episode.set_tag_names([n for n, v in tagging[0].items() if v],
                              request.user)
        serialised = episode.to_dict(request.user)
        return Response(serialised, status=status.HTTP_201_CREATED)
Example #8
0
    def create(self, request):
        from opal.models import Patient

        hospital_number = request.data.pop('patient_hospital_number', None)
        tagging = request.data.pop('tagging', {})
        if hospital_number:
            patient, created = Patient.objects.get_or_create(
                demographics__hospital_number=hospital_number)
            if created:
                demographics = patient.demographics_set.get()
                demographics.hospital_number = hospital_number
                demographics.save()
        else:
            patient = Patient.objects.create()

        episode = Episode(patient=patient)
        episode.update_from_dict(request.data, request.user)
        episode.set_tag_names([n for n, v in tagging[0].items() if v], request.user)
        serialised = episode.to_dict(request.user)
        return Response(serialised, status=status.HTTP_201_CREATED)
Example #9
0
    def create(self, request):
        """
        Create a new episode, optionally implicitly creating a patient.

        * Extract the data from the request
        * Create or locate the patient
        * Create a new episode
        * Update the patient with any extra data passed in
        * return the patient
        """
        demographics_data = request.data.pop('demographics', None)
        location_data     = request.data.pop('location', {})
        tagging           = request.data.pop('tagging', {})

        hospital_number = demographics_data.get('hospital_number', None)
        if hospital_number:
            patient, created = Patient.objects.get_or_create(
                demographics__hospital_number=hospital_number)
            if created:
                demographics = patient.demographics_set.get()
                demographics.hospital_number = hospital_number
                demographics.save()
        else:
            patient = Patient.objects.create()

        patient.update_from_demographics_dict(demographics_data, request.user)

        episode = Episode(patient=patient)
        episode.update_from_dict(request.data, request.user)
        location = episode.location_set.get()
        location.update_from_dict(location_data, request.user)
        episode.set_tag_names(list(tagging.keys()), request.user)
        serialised = episode.to_dict(request.user)

        return json_response(
            serialised, status_code=status.HTTP_201_CREATED
        )
Example #10
0
 def test_get_field_names_to_extract(self):
     # field names to extract should be the same
     # as the field names to serialise
     self.assertEqual(Episode._get_fieldnames_to_serialize(),
                      Episode._get_fieldnames_to_extract())