@classmethod
def _get_schema(cls, translator, schema, parent_key_type=None):
    """Returns named tuple with values:

        schema: the schema of a translator,
        id_type: the data type of the id-col, or None of absent

        Note: this method uses the argument schema to store
        data in since this method words recursively. It might
        be worthwhile in the future to refactor this code so this
        is not required.

        :param parent_key_type: passes down the column data type which the
                translator refers to as parent-key
        """
    cls.check_translation_type(translator.keys())
    translation_type = translator[cls.TRANSLATION_TYPE]
    if translation_type == cls.HDICT:
        return cls._get_schema_hdict(translator, schema, parent_key_type)
    elif translation_type == cls.VDICT:
        return cls._get_schema_vdict(translator, schema, parent_key_type)
    elif translation_type == cls.LIST:
        return cls._get_schema_list(translator, schema, parent_key_type)
    elif translation_type == cls.VALUE:
        return cls.SCHEMA_RETURN_TUPLE(schema, None)
    else:
        raise AssertionError('Unexpected translator type %s' % translation_type
            )
