#
# Autogenerated by Thrift
#
# DO NOT EDIT
#  @generated
#

from __future__ import annotations

import typing as _typing

import apache.thrift.metadata.thrift_types as _fbthrift_metadata
import folly.iobuf as _fbthrift_iobuf
from thrift.python.client import (
    AsyncClient as _fbthrift_python_AsyncClient,
    SyncClient as _fbthrift_python_SyncClient,
    Client as _fbthrift_python_Client,
)
from thrift.python.client.omni_client import InteractionMethodPosition as _fbthrift_InteractionMethodPosition, FunctionQualifier as _fbthrift_FunctionQualifier
from thrift.python.common import RpcOptions
import thrift.python.mutable_exceptions as _fbthrift_python_mutable_exceptions
import thrift.python.mutable_types as _fbthrift_python_mutable_types
import thrift.python.exceptions as _fbthrift_python_exceptions
import thrift.python.types as _fbthrift_python_types
import test.fixtures.interactions.module.thrift_mutable_types
import test.fixtures.interactions.module.thrift_metadata
import test.fixtures.another_interactions.shared.thrift_mutable_types
import test.fixtures.another_interactions.shared.thrift_clients

class MyService(_fbthrift_python_Client["MyService.Async", "MyService.Sync"]):
    @staticmethod
    def __get_thrift_name__() -> str:
        return "module.MyService"
    
    @staticmethod
    def __get_thrift_uri__() -> _typing.Optional[str]:
        return None
    
    @staticmethod
    def __get_thrift_unstructured_annotations_DEPRECATED__() -> _typing.Mapping[str, str]:
        return {
        }
    
    @staticmethod
    def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
        return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_MyService()
    
    class Async(_fbthrift_python_AsyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.MyService"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_MyService()
    
        async def foo(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> None:
            _fbthrift_resp = await self._send_request(
                "MyService",
                "foo",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyService_foo_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyService_foo_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                uri_or_name="MyService",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
    
        async def interact(
            self,
            arg: int,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> MyService_MyInteraction.Async:
            _fbthrift_interaction = self.createMyInteraction()
            _fbthrift_resp = await self._send_request(
                "MyService",
                "interact",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyService_interact_args(
                    arg=arg,),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyService_interact_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Factory,
                interaction_name="MyInteraction",
                created_interaction = _fbthrift_interaction,
                uri_or_name="MyService",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            return _fbthrift_interaction
    
        async def interactFast(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> _typing.Tuple[MyService_MyInteractionFast.Async, int]:
            _fbthrift_interaction = self.createMyInteractionFast()
            _fbthrift_resp = await self._send_request(
                "MyService",
                "interactFast",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyService_interactFast_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyService_interactFast_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Factory,
                interaction_name="MyInteractionFast",
                created_interaction = _fbthrift_interaction,
                uri_or_name="MyService",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            # shortcut to success path for non-void returns
            if _fbthrift_resp.success is not None:
                return _fbthrift_interaction, _fbthrift_resp.success
            raise _fbthrift_python_exceptions.ApplicationError(
                _fbthrift_python_exceptions.ApplicationErrorType.MISSING_RESULT,
                "Empty Response",
            )
    
        async def serialize(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> _typing.Tuple[MyService_SerialInteraction.Async, int, _typing.AsyncGenerator[int, None]]:
            _fbthrift_interaction = self.createSerialInteraction()
            _fbthrift_resp = await self._send_request(
                "MyService",
                "serialize",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyService_serialize_args(),
                (test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyService_serialize_result, test.fixtures.interactions.module.thrift_types._fbthrift_MyService_serialize_result_stream),
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Factory,
                interaction_name="SerialInteraction",
                created_interaction = _fbthrift_interaction,
                uri_or_name="MyService",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            _fbthrift_resp, _fbthrift_stream = _fbthrift_resp
            # shortcut to success path for non-void returns
            if _fbthrift_resp.success is not None:
                return _fbthrift_interaction, _fbthrift_resp.success, _fbthrift_stream
            raise _fbthrift_python_exceptions.ApplicationError(
                _fbthrift_python_exceptions.ApplicationErrorType.MISSING_RESULT,
                "Empty Response",
            )
    
        def createMyInteraction(
            self #MyService
        ) -> MyService_MyInteraction.Async:
            return self._create_interaction("MyInteraction", MyService_MyInteraction.Async)
        async def async_createMyInteraction(
            self #MyService
        ) -> MyService_MyInteraction.Async:
            return self.createMyInteraction()
        def createMyInteractionFast(
            self #MyService
        ) -> MyService_MyInteractionFast.Async:
            return self._create_interaction("MyInteractionFast", MyService_MyInteractionFast.Async)
        async def async_createMyInteractionFast(
            self #MyService
        ) -> MyService_MyInteractionFast.Async:
            return self.createMyInteractionFast()
        def createSerialInteraction(
            self #MyService
        ) -> MyService_SerialInteraction.Async:
            return self._create_interaction("SerialInteraction", MyService_SerialInteraction.Async)
        async def async_createSerialInteraction(
            self #MyService
        ) -> MyService_SerialInteraction.Async:
            return self.createSerialInteraction()
    class Sync(_fbthrift_python_SyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.MyService"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_MyService()
    
        def foo(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> None:
            _fbthrift_resp = self._send_request(
                "MyService",
                "foo",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyService_foo_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyService_foo_result,
                uri_or_name="MyService",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )

class MyService_MyInteraction(_fbthrift_python_Client["MyService_MyInteraction.Async", "MyService_MyInteraction.Sync"]):
    @staticmethod
    def __get_thrift_name__() -> str:
        return "module.MyInteraction"
    
    @staticmethod
    def __get_thrift_uri__() -> _typing.Optional[str]:
        return None
    
    @staticmethod
    def __get_thrift_unstructured_annotations_DEPRECATED__() -> _typing.Mapping[str, str]:
        return {
        }
    
    @staticmethod
    def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
        return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_MyService_MyInteraction()
    
    class Async(_fbthrift_python_AsyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.MyInteraction"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_MyService_MyInteraction()
    
        async def frobnicate(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> int:
            _fbthrift_resp = await self._send_request(
                "MyService",
                "MyInteraction.frobnicate",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_frobnicate_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_frobnicate_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteraction",
                uri_or_name="MyInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            # shortcut to success path for non-void returns
            if _fbthrift_resp.success is not None:
                return _fbthrift_resp.success
            if _fbthrift_resp.ex is not None:
                raise _fbthrift_resp.ex
            raise _fbthrift_python_exceptions.ApplicationError(
                _fbthrift_python_exceptions.ApplicationErrorType.MISSING_RESULT,
                "Empty Response",
            )
    
        async def ping(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> None:
            _fbthrift_resp = await self._send_request(
                "MyService",
                "MyInteraction.ping",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_ping_args(),
                None,
                qualifier = _fbthrift_FunctionQualifier.OneWay,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteraction",
                uri_or_name="MyInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
    
        async def truthify(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> _typing.AsyncGenerator[bool, None]:
            _fbthrift_resp = await self._send_request(
                "MyService",
                "MyInteraction.truthify",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_truthify_args(),
                (test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_truthify_result, test.fixtures.interactions.module.thrift_types._fbthrift_MyInteraction_truthify_result_stream),
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteraction",
                uri_or_name="MyInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            _fbthrift_resp, _fbthrift_stream = _fbthrift_resp
            return _fbthrift_stream
    
    class Sync(_fbthrift_python_SyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.MyInteraction"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_MyService_MyInteraction()

class MyService_MyInteractionFast(_fbthrift_python_Client["MyService_MyInteractionFast.Async", "MyService_MyInteractionFast.Sync"]):
    @staticmethod
    def __get_thrift_name__() -> str:
        return "module.MyInteractionFast"
    
    @staticmethod
    def __get_thrift_uri__() -> _typing.Optional[str]:
        return None
    
    @staticmethod
    def __get_thrift_unstructured_annotations_DEPRECATED__() -> _typing.Mapping[str, str]:
        return {
        }
    
    @staticmethod
    def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
        return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_MyService_MyInteractionFast()
    
    class Async(_fbthrift_python_AsyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.MyInteractionFast"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_MyService_MyInteractionFast()
    
        async def frobnicate(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> int:
            _fbthrift_resp = await self._send_request(
                "MyService",
                "MyInteractionFast.frobnicate",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteractionFast_frobnicate_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteractionFast_frobnicate_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteractionFast",
                uri_or_name="MyInteractionFast",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            # shortcut to success path for non-void returns
            if _fbthrift_resp.success is not None:
                return _fbthrift_resp.success
            raise _fbthrift_python_exceptions.ApplicationError(
                _fbthrift_python_exceptions.ApplicationErrorType.MISSING_RESULT,
                "Empty Response",
            )
    
        async def ping(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> None:
            _fbthrift_resp = await self._send_request(
                "MyService",
                "MyInteractionFast.ping",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteractionFast_ping_args(),
                None,
                qualifier = _fbthrift_FunctionQualifier.OneWay,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteractionFast",
                uri_or_name="MyInteractionFast",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
    
        async def truthify(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> _typing.AsyncGenerator[bool, None]:
            _fbthrift_resp = await self._send_request(
                "MyService",
                "MyInteractionFast.truthify",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteractionFast_truthify_args(),
                (test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteractionFast_truthify_result, test.fixtures.interactions.module.thrift_types._fbthrift_MyInteractionFast_truthify_result_stream),
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteractionFast",
                uri_or_name="MyInteractionFast",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            _fbthrift_resp, _fbthrift_stream = _fbthrift_resp
            return _fbthrift_stream
    
    class Sync(_fbthrift_python_SyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.MyInteractionFast"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_MyService_MyInteractionFast()

class MyService_SerialInteraction(_fbthrift_python_Client["MyService_SerialInteraction.Async", "MyService_SerialInteraction.Sync"]):
    @staticmethod
    def __get_thrift_name__() -> str:
        return "module.SerialInteraction"
    
    @staticmethod
    def __get_thrift_uri__() -> _typing.Optional[str]:
        return None
    
    @staticmethod
    def __get_thrift_unstructured_annotations_DEPRECATED__() -> _typing.Mapping[str, str]:
        return {
        }
    
    @staticmethod
    def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
        return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_MyService_SerialInteraction()
    
    class Async(_fbthrift_python_AsyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.SerialInteraction"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_MyService_SerialInteraction()
    
        async def frobnicate(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> None:
            _fbthrift_resp = await self._send_request(
                "MyService",
                "SerialInteraction.frobnicate",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_SerialInteraction_frobnicate_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_SerialInteraction_frobnicate_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="SerialInteraction",
                uri_or_name="SerialInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
    
    class Sync(_fbthrift_python_SyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.SerialInteraction"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_MyService_SerialInteraction()


class Factories(_fbthrift_python_Client["Factories.Async", "Factories.Sync"]):
    @staticmethod
    def __get_thrift_name__() -> str:
        return "module.Factories"
    
    @staticmethod
    def __get_thrift_uri__() -> _typing.Optional[str]:
        return None
    
    @staticmethod
    def __get_thrift_unstructured_annotations_DEPRECATED__() -> _typing.Mapping[str, str]:
        return {
        }
    
    @staticmethod
    def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
        return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Factories()
    
    class Async(_fbthrift_python_AsyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.Factories"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Factories()
    
        async def foo(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> None:
            _fbthrift_resp = await self._send_request(
                "Factories",
                "foo",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_Factories_foo_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_Factories_foo_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                uri_or_name="Factories",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
    
        async def interact(
            self,
            arg: int,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> Factories_MyInteraction.Async:
            _fbthrift_interaction = self.createMyInteraction()
            _fbthrift_resp = await self._send_request(
                "Factories",
                "interact",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_Factories_interact_args(
                    arg=arg,),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_Factories_interact_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Factory,
                interaction_name="MyInteraction",
                created_interaction = _fbthrift_interaction,
                uri_or_name="Factories",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            return _fbthrift_interaction
    
        async def interactFast(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> _typing.Tuple[Factories_MyInteractionFast.Async, int]:
            _fbthrift_interaction = self.createMyInteractionFast()
            _fbthrift_resp = await self._send_request(
                "Factories",
                "interactFast",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_Factories_interactFast_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_Factories_interactFast_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Factory,
                interaction_name="MyInteractionFast",
                created_interaction = _fbthrift_interaction,
                uri_or_name="Factories",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            # shortcut to success path for non-void returns
            if _fbthrift_resp.success is not None:
                return _fbthrift_interaction, _fbthrift_resp.success
            raise _fbthrift_python_exceptions.ApplicationError(
                _fbthrift_python_exceptions.ApplicationErrorType.MISSING_RESULT,
                "Empty Response",
            )
    
        async def serialize(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> _typing.Tuple[Factories_SerialInteraction.Async, int, _typing.AsyncGenerator[int, None]]:
            _fbthrift_interaction = self.createSerialInteraction()
            _fbthrift_resp = await self._send_request(
                "Factories",
                "serialize",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_Factories_serialize_args(),
                (test.fixtures.interactions.module.thrift_mutable_types._fbthrift_Factories_serialize_result, test.fixtures.interactions.module.thrift_types._fbthrift_Factories_serialize_result_stream),
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Factory,
                interaction_name="SerialInteraction",
                created_interaction = _fbthrift_interaction,
                uri_or_name="Factories",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            _fbthrift_resp, _fbthrift_stream = _fbthrift_resp
            # shortcut to success path for non-void returns
            if _fbthrift_resp.success is not None:
                return _fbthrift_interaction, _fbthrift_resp.success, _fbthrift_stream
            raise _fbthrift_python_exceptions.ApplicationError(
                _fbthrift_python_exceptions.ApplicationErrorType.MISSING_RESULT,
                "Empty Response",
            )
    
        def createMyInteraction(
            self #Factories
        ) -> Factories_MyInteraction.Async:
            return self._create_interaction("MyInteraction", Factories_MyInteraction.Async)
        async def async_createMyInteraction(
            self #Factories
        ) -> Factories_MyInteraction.Async:
            return self.createMyInteraction()
        def createMyInteractionFast(
            self #Factories
        ) -> Factories_MyInteractionFast.Async:
            return self._create_interaction("MyInteractionFast", Factories_MyInteractionFast.Async)
        async def async_createMyInteractionFast(
            self #Factories
        ) -> Factories_MyInteractionFast.Async:
            return self.createMyInteractionFast()
        def createSerialInteraction(
            self #Factories
        ) -> Factories_SerialInteraction.Async:
            return self._create_interaction("SerialInteraction", Factories_SerialInteraction.Async)
        async def async_createSerialInteraction(
            self #Factories
        ) -> Factories_SerialInteraction.Async:
            return self.createSerialInteraction()
    class Sync(_fbthrift_python_SyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.Factories"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Factories()
    
        def foo(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> None:
            _fbthrift_resp = self._send_request(
                "Factories",
                "foo",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_Factories_foo_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_Factories_foo_result,
                uri_or_name="Factories",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )

class Factories_MyInteraction(_fbthrift_python_Client["Factories_MyInteraction.Async", "Factories_MyInteraction.Sync"]):
    @staticmethod
    def __get_thrift_name__() -> str:
        return "module.MyInteraction"
    
    @staticmethod
    def __get_thrift_uri__() -> _typing.Optional[str]:
        return None
    
    @staticmethod
    def __get_thrift_unstructured_annotations_DEPRECATED__() -> _typing.Mapping[str, str]:
        return {
        }
    
    @staticmethod
    def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
        return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Factories_MyInteraction()
    
    class Async(_fbthrift_python_AsyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.MyInteraction"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Factories_MyInteraction()
    
        async def frobnicate(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> int:
            _fbthrift_resp = await self._send_request(
                "Factories",
                "MyInteraction.frobnicate",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_frobnicate_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_frobnicate_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteraction",
                uri_or_name="MyInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            # shortcut to success path for non-void returns
            if _fbthrift_resp.success is not None:
                return _fbthrift_resp.success
            if _fbthrift_resp.ex is not None:
                raise _fbthrift_resp.ex
            raise _fbthrift_python_exceptions.ApplicationError(
                _fbthrift_python_exceptions.ApplicationErrorType.MISSING_RESULT,
                "Empty Response",
            )
    
        async def ping(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> None:
            _fbthrift_resp = await self._send_request(
                "Factories",
                "MyInteraction.ping",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_ping_args(),
                None,
                qualifier = _fbthrift_FunctionQualifier.OneWay,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteraction",
                uri_or_name="MyInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
    
        async def truthify(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> _typing.AsyncGenerator[bool, None]:
            _fbthrift_resp = await self._send_request(
                "Factories",
                "MyInteraction.truthify",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_truthify_args(),
                (test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_truthify_result, test.fixtures.interactions.module.thrift_types._fbthrift_MyInteraction_truthify_result_stream),
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteraction",
                uri_or_name="MyInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            _fbthrift_resp, _fbthrift_stream = _fbthrift_resp
            return _fbthrift_stream
    
    class Sync(_fbthrift_python_SyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.MyInteraction"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Factories_MyInteraction()

class Factories_MyInteractionFast(_fbthrift_python_Client["Factories_MyInteractionFast.Async", "Factories_MyInteractionFast.Sync"]):
    @staticmethod
    def __get_thrift_name__() -> str:
        return "module.MyInteractionFast"
    
    @staticmethod
    def __get_thrift_uri__() -> _typing.Optional[str]:
        return None
    
    @staticmethod
    def __get_thrift_unstructured_annotations_DEPRECATED__() -> _typing.Mapping[str, str]:
        return {
        }
    
    @staticmethod
    def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
        return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Factories_MyInteractionFast()
    
    class Async(_fbthrift_python_AsyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.MyInteractionFast"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Factories_MyInteractionFast()
    
        async def frobnicate(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> int:
            _fbthrift_resp = await self._send_request(
                "Factories",
                "MyInteractionFast.frobnicate",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteractionFast_frobnicate_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteractionFast_frobnicate_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteractionFast",
                uri_or_name="MyInteractionFast",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            # shortcut to success path for non-void returns
            if _fbthrift_resp.success is not None:
                return _fbthrift_resp.success
            raise _fbthrift_python_exceptions.ApplicationError(
                _fbthrift_python_exceptions.ApplicationErrorType.MISSING_RESULT,
                "Empty Response",
            )
    
        async def ping(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> None:
            _fbthrift_resp = await self._send_request(
                "Factories",
                "MyInteractionFast.ping",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteractionFast_ping_args(),
                None,
                qualifier = _fbthrift_FunctionQualifier.OneWay,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteractionFast",
                uri_or_name="MyInteractionFast",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
    
        async def truthify(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> _typing.AsyncGenerator[bool, None]:
            _fbthrift_resp = await self._send_request(
                "Factories",
                "MyInteractionFast.truthify",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteractionFast_truthify_args(),
                (test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteractionFast_truthify_result, test.fixtures.interactions.module.thrift_types._fbthrift_MyInteractionFast_truthify_result_stream),
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteractionFast",
                uri_or_name="MyInteractionFast",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            _fbthrift_resp, _fbthrift_stream = _fbthrift_resp
            return _fbthrift_stream
    
    class Sync(_fbthrift_python_SyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.MyInteractionFast"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Factories_MyInteractionFast()

class Factories_SerialInteraction(_fbthrift_python_Client["Factories_SerialInteraction.Async", "Factories_SerialInteraction.Sync"]):
    @staticmethod
    def __get_thrift_name__() -> str:
        return "module.SerialInteraction"
    
    @staticmethod
    def __get_thrift_uri__() -> _typing.Optional[str]:
        return None
    
    @staticmethod
    def __get_thrift_unstructured_annotations_DEPRECATED__() -> _typing.Mapping[str, str]:
        return {
        }
    
    @staticmethod
    def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
        return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Factories_SerialInteraction()
    
    class Async(_fbthrift_python_AsyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.SerialInteraction"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Factories_SerialInteraction()
    
        async def frobnicate(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> None:
            _fbthrift_resp = await self._send_request(
                "Factories",
                "SerialInteraction.frobnicate",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_SerialInteraction_frobnicate_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_SerialInteraction_frobnicate_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="SerialInteraction",
                uri_or_name="SerialInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
    
    class Sync(_fbthrift_python_SyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.SerialInteraction"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Factories_SerialInteraction()


class Perform(_fbthrift_python_Client["Perform.Async", "Perform.Sync"]):
    @staticmethod
    def __get_thrift_name__() -> str:
        return "module.Perform"
    
    @staticmethod
    def __get_thrift_uri__() -> _typing.Optional[str]:
        return None
    
    @staticmethod
    def __get_thrift_unstructured_annotations_DEPRECATED__() -> _typing.Mapping[str, str]:
        return {
        }
    
    @staticmethod
    def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
        return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Perform()
    
    class Async(_fbthrift_python_AsyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.Perform"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Perform()
    
        async def foo(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> None:
            _fbthrift_resp = await self._send_request(
                "Perform",
                "foo",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_Perform_foo_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_Perform_foo_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                uri_or_name="Perform",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
    
        def createMyInteraction(
            self #Perform
        ) -> Perform_MyInteraction.Async:
            return self._create_interaction("MyInteraction", Perform_MyInteraction.Async)
        async def async_createMyInteraction(
            self #Perform
        ) -> Perform_MyInteraction.Async:
            return self.createMyInteraction()
        def createMyInteractionFast(
            self #Perform
        ) -> Perform_MyInteractionFast.Async:
            return self._create_interaction("MyInteractionFast", Perform_MyInteractionFast.Async)
        async def async_createMyInteractionFast(
            self #Perform
        ) -> Perform_MyInteractionFast.Async:
            return self.createMyInteractionFast()
        def createSerialInteraction(
            self #Perform
        ) -> Perform_SerialInteraction.Async:
            return self._create_interaction("SerialInteraction", Perform_SerialInteraction.Async)
        async def async_createSerialInteraction(
            self #Perform
        ) -> Perform_SerialInteraction.Async:
            return self.createSerialInteraction()
    class Sync(_fbthrift_python_SyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.Perform"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Perform()
    
        def foo(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> None:
            _fbthrift_resp = self._send_request(
                "Perform",
                "foo",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_Perform_foo_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_Perform_foo_result,
                uri_or_name="Perform",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )

class Perform_MyInteraction(_fbthrift_python_Client["Perform_MyInteraction.Async", "Perform_MyInteraction.Sync"]):
    @staticmethod
    def __get_thrift_name__() -> str:
        return "module.MyInteraction"
    
    @staticmethod
    def __get_thrift_uri__() -> _typing.Optional[str]:
        return None
    
    @staticmethod
    def __get_thrift_unstructured_annotations_DEPRECATED__() -> _typing.Mapping[str, str]:
        return {
        }
    
    @staticmethod
    def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
        return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Perform_MyInteraction()
    
    class Async(_fbthrift_python_AsyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.MyInteraction"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Perform_MyInteraction()
    
        async def frobnicate(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> int:
            _fbthrift_resp = await self._send_request(
                "Perform",
                "MyInteraction.frobnicate",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_frobnicate_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_frobnicate_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteraction",
                uri_or_name="MyInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            # shortcut to success path for non-void returns
            if _fbthrift_resp.success is not None:
                return _fbthrift_resp.success
            if _fbthrift_resp.ex is not None:
                raise _fbthrift_resp.ex
            raise _fbthrift_python_exceptions.ApplicationError(
                _fbthrift_python_exceptions.ApplicationErrorType.MISSING_RESULT,
                "Empty Response",
            )
    
        async def ping(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> None:
            _fbthrift_resp = await self._send_request(
                "Perform",
                "MyInteraction.ping",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_ping_args(),
                None,
                qualifier = _fbthrift_FunctionQualifier.OneWay,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteraction",
                uri_or_name="MyInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
    
        async def truthify(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> _typing.AsyncGenerator[bool, None]:
            _fbthrift_resp = await self._send_request(
                "Perform",
                "MyInteraction.truthify",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_truthify_args(),
                (test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_truthify_result, test.fixtures.interactions.module.thrift_types._fbthrift_MyInteraction_truthify_result_stream),
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteraction",
                uri_or_name="MyInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            _fbthrift_resp, _fbthrift_stream = _fbthrift_resp
            return _fbthrift_stream
    
    class Sync(_fbthrift_python_SyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.MyInteraction"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Perform_MyInteraction()

class Perform_MyInteractionFast(_fbthrift_python_Client["Perform_MyInteractionFast.Async", "Perform_MyInteractionFast.Sync"]):
    @staticmethod
    def __get_thrift_name__() -> str:
        return "module.MyInteractionFast"
    
    @staticmethod
    def __get_thrift_uri__() -> _typing.Optional[str]:
        return None
    
    @staticmethod
    def __get_thrift_unstructured_annotations_DEPRECATED__() -> _typing.Mapping[str, str]:
        return {
        }
    
    @staticmethod
    def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
        return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Perform_MyInteractionFast()
    
    class Async(_fbthrift_python_AsyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.MyInteractionFast"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Perform_MyInteractionFast()
    
        async def frobnicate(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> int:
            _fbthrift_resp = await self._send_request(
                "Perform",
                "MyInteractionFast.frobnicate",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteractionFast_frobnicate_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteractionFast_frobnicate_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteractionFast",
                uri_or_name="MyInteractionFast",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            # shortcut to success path for non-void returns
            if _fbthrift_resp.success is not None:
                return _fbthrift_resp.success
            raise _fbthrift_python_exceptions.ApplicationError(
                _fbthrift_python_exceptions.ApplicationErrorType.MISSING_RESULT,
                "Empty Response",
            )
    
        async def ping(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> None:
            _fbthrift_resp = await self._send_request(
                "Perform",
                "MyInteractionFast.ping",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteractionFast_ping_args(),
                None,
                qualifier = _fbthrift_FunctionQualifier.OneWay,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteractionFast",
                uri_or_name="MyInteractionFast",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
    
        async def truthify(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> _typing.AsyncGenerator[bool, None]:
            _fbthrift_resp = await self._send_request(
                "Perform",
                "MyInteractionFast.truthify",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteractionFast_truthify_args(),
                (test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteractionFast_truthify_result, test.fixtures.interactions.module.thrift_types._fbthrift_MyInteractionFast_truthify_result_stream),
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteractionFast",
                uri_or_name="MyInteractionFast",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            _fbthrift_resp, _fbthrift_stream = _fbthrift_resp
            return _fbthrift_stream
    
    class Sync(_fbthrift_python_SyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.MyInteractionFast"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Perform_MyInteractionFast()

class Perform_SerialInteraction(_fbthrift_python_Client["Perform_SerialInteraction.Async", "Perform_SerialInteraction.Sync"]):
    @staticmethod
    def __get_thrift_name__() -> str:
        return "module.SerialInteraction"
    
    @staticmethod
    def __get_thrift_uri__() -> _typing.Optional[str]:
        return None
    
    @staticmethod
    def __get_thrift_unstructured_annotations_DEPRECATED__() -> _typing.Mapping[str, str]:
        return {
        }
    
    @staticmethod
    def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
        return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Perform_SerialInteraction()
    
    class Async(_fbthrift_python_AsyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.SerialInteraction"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Perform_SerialInteraction()
    
        async def frobnicate(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> None:
            _fbthrift_resp = await self._send_request(
                "Perform",
                "SerialInteraction.frobnicate",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_SerialInteraction_frobnicate_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_SerialInteraction_frobnicate_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="SerialInteraction",
                uri_or_name="SerialInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
    
    class Sync(_fbthrift_python_SyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.SerialInteraction"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_Perform_SerialInteraction()


class InteractWithShared(_fbthrift_python_Client["InteractWithShared.Async", "InteractWithShared.Sync"]):
    @staticmethod
    def __get_thrift_name__() -> str:
        return "module.InteractWithShared"
    
    @staticmethod
    def __get_thrift_uri__() -> _typing.Optional[str]:
        return None
    
    @staticmethod
    def __get_thrift_unstructured_annotations_DEPRECATED__() -> _typing.Mapping[str, str]:
        return {
        }
    
    @staticmethod
    def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
        return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_InteractWithShared()
    
    class Async(_fbthrift_python_AsyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.InteractWithShared"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_InteractWithShared()
    
        async def do_some_similar_things(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> test.fixtures.another_interactions.shared.thrift_mutable_types.DoSomethingResult:
            _fbthrift_resp = await self._send_request(
                "InteractWithShared",
                "do_some_similar_things",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_InteractWithShared_do_some_similar_things_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_InteractWithShared_do_some_similar_things_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                uri_or_name="InteractWithShared",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            # shortcut to success path for non-void returns
            if _fbthrift_resp.success is not None:
                return _fbthrift_resp.success
            raise _fbthrift_python_exceptions.ApplicationError(
                _fbthrift_python_exceptions.ApplicationErrorType.MISSING_RESULT,
                "Empty Response",
            )
    
        def createMyInteraction(
            self #InteractWithShared
        ) -> InteractWithShared_MyInteraction.Async:
            return self._create_interaction("MyInteraction", InteractWithShared_MyInteraction.Async)
        async def async_createMyInteraction(
            self #InteractWithShared
        ) -> InteractWithShared_MyInteraction.Async:
            return self.createMyInteraction()
        def createSharedInteraction(
            self #InteractWithShared
        ) -> InteractWithShared_SharedInteraction.Async:
            return self._create_interaction("SharedInteraction", InteractWithShared_SharedInteraction.Async)
        async def async_createSharedInteraction(
            self #InteractWithShared
        ) -> InteractWithShared_SharedInteraction.Async:
            return self.createSharedInteraction()
    class Sync(_fbthrift_python_SyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.InteractWithShared"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_InteractWithShared()
    
        def do_some_similar_things(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> test.fixtures.another_interactions.shared.thrift_mutable_types.DoSomethingResult:
            _fbthrift_resp = self._send_request(
                "InteractWithShared",
                "do_some_similar_things",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_InteractWithShared_do_some_similar_things_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_InteractWithShared_do_some_similar_things_result,
                uri_or_name="InteractWithShared",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            # shortcut to success path for non-void returns
            if _fbthrift_resp.success is not None:
                return _fbthrift_resp.success
            raise _fbthrift_python_exceptions.ApplicationError(
                _fbthrift_python_exceptions.ApplicationErrorType.MISSING_RESULT,
                "Empty Response",
            )

class InteractWithShared_MyInteraction(_fbthrift_python_Client["InteractWithShared_MyInteraction.Async", "InteractWithShared_MyInteraction.Sync"]):
    @staticmethod
    def __get_thrift_name__() -> str:
        return "module.MyInteraction"
    
    @staticmethod
    def __get_thrift_uri__() -> _typing.Optional[str]:
        return None
    
    @staticmethod
    def __get_thrift_unstructured_annotations_DEPRECATED__() -> _typing.Mapping[str, str]:
        return {
        }
    
    @staticmethod
    def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
        return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_InteractWithShared_MyInteraction()
    
    class Async(_fbthrift_python_AsyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.MyInteraction"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_InteractWithShared_MyInteraction()
    
        async def frobnicate(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> int:
            _fbthrift_resp = await self._send_request(
                "InteractWithShared",
                "MyInteraction.frobnicate",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_frobnicate_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_frobnicate_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteraction",
                uri_or_name="MyInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            # shortcut to success path for non-void returns
            if _fbthrift_resp.success is not None:
                return _fbthrift_resp.success
            if _fbthrift_resp.ex is not None:
                raise _fbthrift_resp.ex
            raise _fbthrift_python_exceptions.ApplicationError(
                _fbthrift_python_exceptions.ApplicationErrorType.MISSING_RESULT,
                "Empty Response",
            )
    
        async def ping(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> None:
            _fbthrift_resp = await self._send_request(
                "InteractWithShared",
                "MyInteraction.ping",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_ping_args(),
                None,
                qualifier = _fbthrift_FunctionQualifier.OneWay,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteraction",
                uri_or_name="MyInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
    
        async def truthify(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> _typing.AsyncGenerator[bool, None]:
            _fbthrift_resp = await self._send_request(
                "InteractWithShared",
                "MyInteraction.truthify",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_truthify_args(),
                (test.fixtures.interactions.module.thrift_mutable_types._fbthrift_MyInteraction_truthify_result, test.fixtures.interactions.module.thrift_types._fbthrift_MyInteraction_truthify_result_stream),
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="MyInteraction",
                uri_or_name="MyInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            _fbthrift_resp, _fbthrift_stream = _fbthrift_resp
            return _fbthrift_stream
    
    class Sync(_fbthrift_python_SyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.MyInteraction"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_InteractWithShared_MyInteraction()

class InteractWithShared_SharedInteraction(_fbthrift_python_Client["InteractWithShared_SharedInteraction.Async", "InteractWithShared_SharedInteraction.Sync"]):
    @staticmethod
    def __get_thrift_name__() -> str:
        return "module.SharedInteraction"
    
    @staticmethod
    def __get_thrift_uri__() -> _typing.Optional[str]:
        return None
    
    @staticmethod
    def __get_thrift_unstructured_annotations_DEPRECATED__() -> _typing.Mapping[str, str]:
        return {
        }
    
    @staticmethod
    def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
        return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_InteractWithShared_SharedInteraction()
    
    class Async(_fbthrift_python_AsyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.SharedInteraction"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_InteractWithShared_SharedInteraction()
    
        async def init(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> int:
            _fbthrift_resp = await self._send_request(
                "InteractWithShared",
                "SharedInteraction.init",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_SharedInteraction_init_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_SharedInteraction_init_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="SharedInteraction",
                uri_or_name="SharedInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            # shortcut to success path for non-void returns
            if _fbthrift_resp.success is not None:
                return _fbthrift_resp.success
            raise _fbthrift_python_exceptions.ApplicationError(
                _fbthrift_python_exceptions.ApplicationErrorType.MISSING_RESULT,
                "Empty Response",
            )
    
        async def do_something(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> test.fixtures.another_interactions.shared.thrift_mutable_types.DoSomethingResult:
            _fbthrift_resp = await self._send_request(
                "InteractWithShared",
                "SharedInteraction.do_something",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_SharedInteraction_do_something_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_SharedInteraction_do_something_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="SharedInteraction",
                uri_or_name="SharedInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
            # shortcut to success path for non-void returns
            if _fbthrift_resp.success is not None:
                return _fbthrift_resp.success
            raise _fbthrift_python_exceptions.ApplicationError(
                _fbthrift_python_exceptions.ApplicationErrorType.MISSING_RESULT,
                "Empty Response",
            )
    
        async def tear_down(
            self,
            *,
            rpc_options: _typing.Optional[RpcOptions] = None,
        ) -> None:
            _fbthrift_resp = await self._send_request(
                "InteractWithShared",
                "SharedInteraction.tear_down",
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_SharedInteraction_tear_down_args(),
                test.fixtures.interactions.module.thrift_mutable_types._fbthrift_SharedInteraction_tear_down_result,
                qualifier = _fbthrift_FunctionQualifier.Unspecified,
                interaction_position=_fbthrift_InteractionMethodPosition.Member,
                interaction_name="SharedInteraction",
                uri_or_name="SharedInteraction",
                rpc_options=rpc_options,
                is_mutable_types=True,
            )
    
    class Sync(_fbthrift_python_SyncClient):
        @staticmethod
        def __get_thrift_name__() -> str:
            return "module.SharedInteraction"
    
        @staticmethod
        def __get_thrift_uri__() -> _typing.Optional[str]:
            return None
    
        @staticmethod
        def __get_metadata__() -> _fbthrift_metadata.ThriftMetadata:
            return test.fixtures.interactions.module.thrift_metadata.gen_metadata_service_InteractWithShared_SharedInteraction()

