# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
"""Client and server classes corresponding to protobuf-defined services."""
import grpc
import warnings

from pacsys._proto.controls.service.DAQ.v1 import DAQ_pb2 as proto_dot_controls_dot_service_dot_DAQ_dot_v1_dot_DAQ__pb2

GRPC_GENERATED_VERSION = '1.66.0'
GRPC_VERSION = grpc.__version__
_version_not_supported = False

try:
    from grpc._utilities import first_version_is_lower
    _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
except ImportError:
    _version_not_supported = True

if _version_not_supported:
    raise RuntimeError(
        f'The grpc package installed is at version {GRPC_VERSION},'
        + ' but the generated code in proto/controls/service/DAQ/v1/DAQ_pb2_grpc.py depends on'
        + f' grpcio>={GRPC_GENERATED_VERSION}.'
        + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
        + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
    )


class DAQStub(object):
    """The DAQ API.

    gRPC clients use these to gain access to accelerator devices.

    """

    def __init__(self, channel):
        """Constructor.

        Args:
            channel: A grpc.Channel.
        """
        self.Read = channel.unary_stream(
                '/services.daq.DAQ/Read',
                request_serializer=proto_dot_controls_dot_service_dot_DAQ_dot_v1_dot_DAQ__pb2.ReadingList.SerializeToString,
                response_deserializer=proto_dot_controls_dot_service_dot_DAQ_dot_v1_dot_DAQ__pb2.ReadingReply.FromString,
                _registered_method=True)
        self.Set = channel.unary_unary(
                '/services.daq.DAQ/Set',
                request_serializer=proto_dot_controls_dot_service_dot_DAQ_dot_v1_dot_DAQ__pb2.SettingList.SerializeToString,
                response_deserializer=proto_dot_controls_dot_service_dot_DAQ_dot_v1_dot_DAQ__pb2.SettingReply.FromString,
                _registered_method=True)


class DAQServicer(object):
    """The DAQ API.

    gRPC clients use these to gain access to accelerator devices.

    """

    def Read(self, request, context):
        """Requests device readings from DPM.

        The parameter contains an array of specifications. Each entry
        uses DRF to indicate which device is to be read and at what
        rate. DPM will return a stream of readings.

        NOTE: DPM will close the stream when no more data will be
        received. For instance, if a request asks for multiple devices
        to be read once, DPM will close the stream when every device
        has returned one value.

        """
        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
        context.set_details('Method not implemented!')
        raise NotImplementedError('Method not implemented!')

    def Set(self, request, context):
        """In order to set devices, a client needs to provide a JWT along
        with the `Set` request. The JWT is passed in the http headers
        and will be used by DPM to determine whether the client is
        authorized to set the device.

        """
        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
        context.set_details('Method not implemented!')
        raise NotImplementedError('Method not implemented!')


def add_DAQServicer_to_server(servicer, server):
    rpc_method_handlers = {
            'Read': grpc.unary_stream_rpc_method_handler(
                    servicer.Read,
                    request_deserializer=proto_dot_controls_dot_service_dot_DAQ_dot_v1_dot_DAQ__pb2.ReadingList.FromString,
                    response_serializer=proto_dot_controls_dot_service_dot_DAQ_dot_v1_dot_DAQ__pb2.ReadingReply.SerializeToString,
            ),
            'Set': grpc.unary_unary_rpc_method_handler(
                    servicer.Set,
                    request_deserializer=proto_dot_controls_dot_service_dot_DAQ_dot_v1_dot_DAQ__pb2.SettingList.FromString,
                    response_serializer=proto_dot_controls_dot_service_dot_DAQ_dot_v1_dot_DAQ__pb2.SettingReply.SerializeToString,
            ),
    }
    generic_handler = grpc.method_handlers_generic_handler(
            'services.daq.DAQ', rpc_method_handlers)
    server.add_generic_rpc_handlers((generic_handler,))
    server.add_registered_method_handlers('services.daq.DAQ', rpc_method_handlers)


 # This class is part of an EXPERIMENTAL API.
class DAQ(object):
    """The DAQ API.

    gRPC clients use these to gain access to accelerator devices.

    """

    @staticmethod
    def Read(request,
            target,
            options=(),
            channel_credentials=None,
            call_credentials=None,
            insecure=False,
            compression=None,
            wait_for_ready=None,
            timeout=None,
            metadata=None):
        return grpc.experimental.unary_stream(
            request,
            target,
            '/services.daq.DAQ/Read',
            proto_dot_controls_dot_service_dot_DAQ_dot_v1_dot_DAQ__pb2.ReadingList.SerializeToString,
            proto_dot_controls_dot_service_dot_DAQ_dot_v1_dot_DAQ__pb2.ReadingReply.FromString,
            options,
            channel_credentials,
            insecure,
            call_credentials,
            compression,
            wait_for_ready,
            timeout,
            metadata,
            _registered_method=True)

    @staticmethod
    def Set(request,
            target,
            options=(),
            channel_credentials=None,
            call_credentials=None,
            insecure=False,
            compression=None,
            wait_for_ready=None,
            timeout=None,
            metadata=None):
        return grpc.experimental.unary_unary(
            request,
            target,
            '/services.daq.DAQ/Set',
            proto_dot_controls_dot_service_dot_DAQ_dot_v1_dot_DAQ__pb2.SettingList.SerializeToString,
            proto_dot_controls_dot_service_dot_DAQ_dot_v1_dot_DAQ__pb2.SettingReply.FromString,
            options,
            channel_credentials,
            insecure,
            call_credentials,
            compression,
            wait_for_ready,
            timeout,
            metadata,
            _registered_method=True)
