from $MODEL_IMPORT_PATH$ import (
    Model,
)
from $MAPPER_IMPORT_PATH$ import (
    Data,
    Mapper,
)
from allotropy.named_file_contents import NamedFileContents
from allotropy.parsers.release_state import ReleaseState
from allotropy.parsers.$PARSER_NAME$.constants import DISPLAY_NAME
from allotropy.parsers.$PARSER_NAME$.$PARSER_NAME$_reader import (
    $CLASS_NAME_PREFIX$Reader,
)
from allotropy.parsers.$PARSER_NAME$.$PARSER_NAME$_structure import (
    create_measurement_groups,
    create_metadata,
)
from allotropy.parsers.utils.pandas import map_rows
from allotropy.parsers.vendor_parser import VendorParser


class $CLASS_NAME_PREFIX$Parser(VendorParser[Data, Model]):
    DISPLAY_NAME = DISPLAY_NAME
    RELEASE_STATE = ReleaseState.WORKING_DRAFT
    SUPPORTED_EXTENSIONS = $CLASS_NAME_PREFIX$Reader.SUPPORTED_EXTENSIONS
    SCHEMA_MAPPER = Mapper

    def create_data(self, named_file_contents: NamedFileContents) -> Data:
        reader = $CLASS_NAME_PREFIX$Reader.read(named_file_contents)
        return Data(
            create_metadata(reader.header, named_file_contents.original_file_path),
            map_rows(reader.data, create_measurement_groups)
        )
