def parse_field(text, name=None, version=None, encoding_chars=None, validation_level=None, reference=None, force_varies=False): """ Parse the given ER7-encoded field and return an instance of :class:`hl7apy.core.Field`. :type text: ``basestring`` :param text: the ER7-encoded string containing the fields to be parsed :type name: ``basestring`` :param name: the field name (e.g. MSH_7) :type version: ``basestring`` :param version: the HL7 version (e.g. "2.5"), or ``None`` to use the default (see :func:`hl7apy.set_default_version`) :type encoding_chars: ``dict`` :param encoding_chars: a dictionary containing the encoding chars or None to use the default (see :func:`hl7apy.set_default_encoding_chars`) :param validation_level: the validation level. Possible values are those defined in :class:`hl7apy.consts.VALIDATION_LEVEL` class or ``None`` to use the default validation level (see :func:`hl7apy.set_default_validation_level`) :type reference: ``dict`` :param reference: a dictionary containing the element structure returned by :func:`hl7apy.load_reference` or :func:`hl7apy.find_reference` :return: an instance of :class:`hl7apy.core.Field` >>> field = "NUCLEAR^NELDA^W" >>> nk1_2 = parse_field(field, name="NK1_2") >>> print nk1_2 <Field NK1_2 (NAME) of type XPN> >>> print nk1_2.to_er7() NUCLEAR^NELDA^W >>> unknown = parse_field(field) >>> print unknown <Field of type None> >>> print unknown.to_er7() NUCLEAR^NELDA^W """ version = _get_version(version) encoding_chars = _get_encoding_chars(encoding_chars) if force_varies: reference = ('leaf', 'varies', None, None) try: field = Field(name, version=version, validation_level=validation_level, reference=reference) except InvalidName: field = Field(version=version, validation_level=validation_level, reference=reference) if name in ('MSH_1', 'MSH_2'): s = SubComponent(datatype='ST', value=text) c = Component(datatype='ST') c.add(s) field.add(c) else: children = parse_components(text, field.datatype, version, encoding_chars, validation_level) if Validator.is_quiet(validation_level) and is_base_datatype(field.datatype, version) and \ len(children) > 1: field.datatype = None field.children = children return field
def parse_component(text, name=None, datatype='ST', version=None, encoding_chars=None, validation_level=None, reference=None): """ Parse the given ER7-encoded component and return an instance of :class:`hl7apy.core.Component`. :type text: ``basestring`` :param text: the ER7-encoded string containing the components to be parsed :type name: ``basestring`` :param name: the component's name (e.g. XPN_2) :type datatype: ``basestring`` :param datatype: the datatype of the component (e.g. ST) :type version: ``basestring`` :param version: the HL7 version (e.g. "2.5"), or ``None`` to use the default (see :func:`hl7apy.set_default_version`) :type encoding_chars: ``dict`` :param encoding_chars: a dictionary containing the encoding chars or None to use the default (see :func:`hl7apy.set_default_encoding_chars`) :param validation_level: the validation level. Possible values are those defined in :class:`hl7apy.consts.VALIDATION_LEVEL` class or ``None`` to use the default validation level (see :func:`hl7apy.set_default_validation_level`) :type reference: ``dict`` :param reference: a dictionary containing the element structure returned by :func:`hl7apy.load_reference` or :func:`hl7apy.find_reference` :return: an instance of :class:`hl7apy.core.Component` >>> component = "GATEWAY&1.3.6.1.4.1.21367.2011.2.5.17" >>> cx_4 = parse_component(component, name="CX_4") >>> print cx_4 <Component CX_4 (ASSIGNING_AUTHORITY) of type None> >>> print cx_4.to_er7() GATEWAY&1.3.6.1.4.1.21367.2011.2.5.17 >>> print parse_component(component) <Component ST (None) of type None> """ version = _get_version(version) encoding_chars = _get_encoding_chars(encoding_chars) try: component = Component(name, datatype, version=version, validation_level=validation_level, reference=reference) except InvalidName as e: if Validator.is_strict(validation_level): raise e component = Component(datatype, version=version, validation_level=validation_level, reference=reference) children = parse_subcomponents(text, component.datatype, version, encoding_chars, validation_level) if Validator.is_quiet(component.validation_level) and is_base_datatype(component.datatype, version) and \ len(children) > 1: component.datatype = None component.children = children return component