def testSplitIfRelativeReference_withMalformedUri_raises(self): ref = datatypes_pb2.Reference(uri=datatypes_pb2.String(value='InvalidUri')) with self.assertRaises(ValueError) as e: references.split_if_relative_reference(ref) self.assertIsInstance(e.exception, ValueError)
def testSplitIfRelativeReference_withUrlScheme_succeeds(self): ref = datatypes_pb2.Reference(uri=datatypes_pb2.String( value='http://acme.com/ehr/fhir/Practitioner/2323-33-4')) references.split_if_relative_reference(ref) uri_field = ref.DESCRIPTOR.fields_by_name['uri'] self.assertEqual( proto_utils.get_value_at_field(ref, uri_field), datatypes_pb2.String( value='http://acme.com/ehr/fhir/Practitioner/2323-33-4'))
def testSplitIfRelativeReference_withFragmentReference_succeeds(self): ref = datatypes_pb2.Reference(uri=datatypes_pb2.String(value='#org-1')) uri_field = ref.DESCRIPTOR.fields_by_name['uri'] fragment_field = ref.DESCRIPTOR.fields_by_name['fragment'] self.assertTrue(proto_utils.field_is_set(ref, uri_field)) self.assertFalse(proto_utils.field_is_set(ref, fragment_field)) references.split_if_relative_reference(ref) self.assertFalse(proto_utils.field_is_set(ref, uri_field)) self.assertTrue(proto_utils.field_is_set(ref, fragment_field)) self.assertEqual(proto_utils.get_value_at_field(ref, fragment_field), datatypes_pb2.String(value='org-1'))
def merge_value(self, json_value: Any, target: message.Message): """Merges the provided json_value into the target Message. Args: json_value: A Python-native representation of JSON data. target: The target Message to merge the JSON data into. """ target_descriptor = target.DESCRIPTOR if annotation_utils.is_primitive_type(target_descriptor): if isinstance(json_value, dict): # This is a primitive type extension. Merge the extension fields into # the empty target proto, and tag it as having no value. self._merge_message(json_value, target) extension_field = target_descriptor.fields_by_name.get( 'extension') if extension_field is None: raise ValueError( "Invalid primitive. No 'extension' field exists on " f"{target_descriptor.full_name}.") primitive_has_no_value = extensions.create_primitive_has_no_value( extension_field.message_type) proto_utils.append_value_at_field(target, extension_field, primitive_has_no_value) else: wrapper = self.primitive_handler.primitive_wrapper_from_json_value( json_value, type(target), default_timezone=self.default_timezone) wrapper.merge_into(target) elif annotation_utils.is_reference(target_descriptor): self._merge_message(json_value, target) references.split_if_relative_reference(target) else: if isinstance(json_value, dict): # The provided value must be another FHIR element self._merge_message(json_value, target) elif isinstance(json_value, (tuple, list)) and len(json_value) == 1: # Check if the target field is non-repeated, and we're trying to # populate it with a single-element array. This is considered valid, and # occurs when a profiled resource reduces the size of a repeated FHIR # field to a maximum of 1. self._merge_message(json_value[0], target) else: raise ValueError( 'Expected a JSON object for field of type: {}.'.format( target_descriptor.full_name))
def testSplitIfRelativeReference_withRelativeReference_succeeds(self): ref = datatypes_pb2.Reference( uri=datatypes_pb2.String(value='Practitioner/example'), display=datatypes_pb2.String(value='Dr Adam Careful')) uri_field = ref.DESCRIPTOR.fields_by_name['uri'] practitioner_id_field = ref.DESCRIPTOR.fields_by_name['practitioner_id'] self.assertTrue(proto_utils.field_is_set(ref, uri_field)) self.assertFalse(proto_utils.field_is_set(ref, practitioner_id_field)) references.split_if_relative_reference(ref) self.assertFalse(proto_utils.field_is_set(ref, uri_field)) self.assertTrue(proto_utils.field_is_set(ref, practitioner_id_field)) self.assertEqual( proto_utils.get_value_at_field(ref, practitioner_id_field), datatypes_pb2.ReferenceId(value='example'))