# Generated by sila2.code_generator; sila2.__version__: 0.12.2
from __future__ import annotations

from abc import ABC
from sila2.server import FeatureImplementationBase

from abc import abstractmethod



from sila2.server import MetadataDict








from .labware_types import RegisterLabware_Responses

from .labware_types import DeleteLabware_Responses

from .labware_types import MoveLabware_Responses



from typing import TYPE_CHECKING
if TYPE_CHECKING:

    from ...server import Server


class LabwareBase(FeatureImplementationBase, ABC):
    parent_server: Server





    def __init__(self, parent_server: Server):
        """
        This feature allows you to manipulate the labware in the OT-2 and
        OT-Flex
        """
        super().__init__(parent_server=parent_server)

    

    




    @abstractmethod
    def RegisterLabware(
        self,
        SessionIdentifier: str,LoadName: str,Location: str,
        *,
        metadata: MetadataDict
    ) -> RegisterLabware_Responses:
        """
        This method registers labware to a specified position for
            the current session

    
        :param SessionIdentifier: UUID identifier for the current session
    
        :param LoadName: The name of the standard type of labware to register
                (https://labware.opentrons.com)
    
        :param Location: Location for labware, modules, adapters, etc.
    
        :param metadata: The SiLA Client Metadata attached to the call
    
        :return:
        
            - ItemIdentifier: UUID identifier for referenceable labware, modules,
                adapters, etc.
        
    
        """

    @abstractmethod
    def DeleteLabware(
        self,
        SessionIdentifier: str,Identifier: str,
        *,
        metadata: MetadataDict
    ) -> DeleteLabware_Responses:
        """
        This method deletes labware without removing it, Only use this
            method if you are removing it yourself and make sure to not execute
            any commands while moving it.

    
        :param SessionIdentifier: UUID identifier for the current session
    
        :param Identifier: Used to determine what labware to remove. This has to
                be an Item Identifier or a Location in the format used in other
                commands
    
        :param metadata: The SiLA Client Metadata attached to the call
    
        """

    @abstractmethod
    def MoveLabware(
        self,
        SessionIdentifier: str,ItemIdentifier: str,Location: str,
        *,
        metadata: MetadataDict
    ) -> MoveLabware_Responses:
        """
        This method deletes labware without removing it, Only use this
            method if you are removing it yourself and make sure to not execute
            any commands while moving it.

    
        :param SessionIdentifier: UUID identifier for the current session
    
        :param ItemIdentifier: UUID identifier for referencable labware, modules,
                adapters, etc.
    
        :param Location: Location for labware, modules, adapters, etc.
    
        :param metadata: The SiLA Client Metadata attached to the call
    
        """





