# This file was auto-generated by Fern from our API Definition.

import typing

from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from ...core.request_options import RequestOptions
from ...types.redis_import_storage import RedisImportStorage
from .raw_client import AsyncRawRedisClient, RawRedisClient

# this is used as the default value for optional parameters
OMIT = typing.cast(typing.Any, ...)


class RedisClient:
    def __init__(self, *, client_wrapper: SyncClientWrapper):
        self._raw_client = RawRedisClient(client_wrapper=client_wrapper)

    @property
    def with_raw_response(self) -> RawRedisClient:
        """
        Retrieves a raw implementation of this client that returns raw responses.

        Returns
        -------
        RawRedisClient
        """
        return self._raw_client

    def list(
        self,
        *,
        project: int,
        ordering: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> typing.List[RedisImportStorage]:
        """
        Get a list of all Redis import storage connections.

        Parameters
        ----------
        project : int
            Project ID

        ordering : typing.Optional[str]
            Which field to use when ordering the results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        typing.List[RedisImportStorage]


        Examples
        --------
        from label_studio_sdk import LabelStudio

        client = LabelStudio(
            api_key="YOUR_API_KEY",
        )
        client.import_storage.redis.list(
            project=1,
        )
        """
        _response = self._raw_client.list(project=project, ordering=ordering, request_options=request_options)
        return _response.data

    def create(
        self,
        *,
        description: typing.Optional[str] = OMIT,
        host: typing.Optional[str] = OMIT,
        password: typing.Optional[str] = OMIT,
        path: typing.Optional[str] = OMIT,
        port: typing.Optional[str] = OMIT,
        project: typing.Optional[int] = OMIT,
        regex_filter: typing.Optional[str] = OMIT,
        title: typing.Optional[str] = OMIT,
        use_blob_urls: typing.Optional[bool] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RedisImportStorage:
        """
        Create a new Redis import storage connection.

        Parameters
        ----------
        description : typing.Optional[str]
            Storage description

        host : typing.Optional[str]
            Server Host IP (optional)

        password : typing.Optional[str]
            Server Password (optional)

        path : typing.Optional[str]
            Storage prefix (optional)

        port : typing.Optional[str]
            Server Port (optional)

        project : typing.Optional[int]
            Project ID

        regex_filter : typing.Optional[str]
            Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported.

        title : typing.Optional[str]
            Storage title

        use_blob_urls : typing.Optional[bool]
            Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RedisImportStorage


        Examples
        --------
        from label_studio_sdk import LabelStudio

        client = LabelStudio(
            api_key="YOUR_API_KEY",
        )
        client.import_storage.redis.create()
        """
        _response = self._raw_client.create(
            description=description,
            host=host,
            password=password,
            path=path,
            port=port,
            project=project,
            regex_filter=regex_filter,
            title=title,
            use_blob_urls=use_blob_urls,
            request_options=request_options,
        )
        return _response.data

    def validate(
        self,
        *,
        description: typing.Optional[str] = OMIT,
        host: typing.Optional[str] = OMIT,
        id: typing.Optional[int] = OMIT,
        password: typing.Optional[str] = OMIT,
        path: typing.Optional[str] = OMIT,
        port: typing.Optional[str] = OMIT,
        project: typing.Optional[int] = OMIT,
        regex_filter: typing.Optional[str] = OMIT,
        title: typing.Optional[str] = OMIT,
        use_blob_urls: typing.Optional[bool] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> None:
        """
        Validate a specific Redis import storage connection.

        Parameters
        ----------
        description : typing.Optional[str]
            Storage description

        host : typing.Optional[str]
            Server Host IP (optional)

        id : typing.Optional[int]
            Storage ID. If set, storage with specified ID will be updated

        password : typing.Optional[str]
            Server Password (optional)

        path : typing.Optional[str]
            Storage prefix (optional)

        port : typing.Optional[str]
            Server Port (optional)

        project : typing.Optional[int]
            Project ID

        regex_filter : typing.Optional[str]
            Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported.

        title : typing.Optional[str]
            Storage title

        use_blob_urls : typing.Optional[bool]
            Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from label_studio_sdk import LabelStudio

        client = LabelStudio(
            api_key="YOUR_API_KEY",
        )
        client.import_storage.redis.validate()
        """
        _response = self._raw_client.validate(
            description=description,
            host=host,
            id=id,
            password=password,
            path=path,
            port=port,
            project=project,
            regex_filter=regex_filter,
            title=title,
            use_blob_urls=use_blob_urls,
            request_options=request_options,
        )
        return _response.data

    def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> RedisImportStorage:
        """
        Get a specific Redis import storage connection.

        Parameters
        ----------
        id : int

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RedisImportStorage


        Examples
        --------
        from label_studio_sdk import LabelStudio

        client = LabelStudio(
            api_key="YOUR_API_KEY",
        )
        client.import_storage.redis.get(
            id=1,
        )
        """
        _response = self._raw_client.get(id, request_options=request_options)
        return _response.data

    def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None:
        """
        Delete a specific Redis import storage connection.

        Parameters
        ----------
        id : int

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from label_studio_sdk import LabelStudio

        client = LabelStudio(
            api_key="YOUR_API_KEY",
        )
        client.import_storage.redis.delete(
            id=1,
        )
        """
        _response = self._raw_client.delete(id, request_options=request_options)
        return _response.data

    def update(
        self,
        id: int,
        *,
        description: typing.Optional[str] = OMIT,
        host: typing.Optional[str] = OMIT,
        password: typing.Optional[str] = OMIT,
        path: typing.Optional[str] = OMIT,
        port: typing.Optional[str] = OMIT,
        project: typing.Optional[int] = OMIT,
        regex_filter: typing.Optional[str] = OMIT,
        title: typing.Optional[str] = OMIT,
        use_blob_urls: typing.Optional[bool] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RedisImportStorage:
        """
        Update a specific Redis import storage connection.

        Parameters
        ----------
        id : int

        description : typing.Optional[str]
            Storage description

        host : typing.Optional[str]
            Server Host IP (optional)

        password : typing.Optional[str]
            Server Password (optional)

        path : typing.Optional[str]
            Storage prefix (optional)

        port : typing.Optional[str]
            Server Port (optional)

        project : typing.Optional[int]
            Project ID

        regex_filter : typing.Optional[str]
            Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported.

        title : typing.Optional[str]
            Storage title

        use_blob_urls : typing.Optional[bool]
            Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RedisImportStorage


        Examples
        --------
        from label_studio_sdk import LabelStudio

        client = LabelStudio(
            api_key="YOUR_API_KEY",
        )
        client.import_storage.redis.update(
            id=1,
        )
        """
        _response = self._raw_client.update(
            id,
            description=description,
            host=host,
            password=password,
            path=path,
            port=port,
            project=project,
            regex_filter=regex_filter,
            title=title,
            use_blob_urls=use_blob_urls,
            request_options=request_options,
        )
        return _response.data

    def sync(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> RedisImportStorage:
        """
        Sync tasks from a Redis import storage connection.

        Parameters
        ----------
        id : int
            Storage ID

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RedisImportStorage


        Examples
        --------
        from label_studio_sdk import LabelStudio

        client = LabelStudio(
            api_key="YOUR_API_KEY",
        )
        client.import_storage.redis.sync(
            id=1,
        )
        """
        _response = self._raw_client.sync(id, request_options=request_options)
        return _response.data


class AsyncRedisClient:
    def __init__(self, *, client_wrapper: AsyncClientWrapper):
        self._raw_client = AsyncRawRedisClient(client_wrapper=client_wrapper)

    @property
    def with_raw_response(self) -> AsyncRawRedisClient:
        """
        Retrieves a raw implementation of this client that returns raw responses.

        Returns
        -------
        AsyncRawRedisClient
        """
        return self._raw_client

    async def list(
        self,
        *,
        project: int,
        ordering: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> typing.List[RedisImportStorage]:
        """
        Get a list of all Redis import storage connections.

        Parameters
        ----------
        project : int
            Project ID

        ordering : typing.Optional[str]
            Which field to use when ordering the results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        typing.List[RedisImportStorage]


        Examples
        --------
        import asyncio

        from label_studio_sdk import AsyncLabelStudio

        client = AsyncLabelStudio(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.import_storage.redis.list(
                project=1,
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.list(project=project, ordering=ordering, request_options=request_options)
        return _response.data

    async def create(
        self,
        *,
        description: typing.Optional[str] = OMIT,
        host: typing.Optional[str] = OMIT,
        password: typing.Optional[str] = OMIT,
        path: typing.Optional[str] = OMIT,
        port: typing.Optional[str] = OMIT,
        project: typing.Optional[int] = OMIT,
        regex_filter: typing.Optional[str] = OMIT,
        title: typing.Optional[str] = OMIT,
        use_blob_urls: typing.Optional[bool] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RedisImportStorage:
        """
        Create a new Redis import storage connection.

        Parameters
        ----------
        description : typing.Optional[str]
            Storage description

        host : typing.Optional[str]
            Server Host IP (optional)

        password : typing.Optional[str]
            Server Password (optional)

        path : typing.Optional[str]
            Storage prefix (optional)

        port : typing.Optional[str]
            Server Port (optional)

        project : typing.Optional[int]
            Project ID

        regex_filter : typing.Optional[str]
            Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported.

        title : typing.Optional[str]
            Storage title

        use_blob_urls : typing.Optional[bool]
            Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RedisImportStorage


        Examples
        --------
        import asyncio

        from label_studio_sdk import AsyncLabelStudio

        client = AsyncLabelStudio(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.import_storage.redis.create()


        asyncio.run(main())
        """
        _response = await self._raw_client.create(
            description=description,
            host=host,
            password=password,
            path=path,
            port=port,
            project=project,
            regex_filter=regex_filter,
            title=title,
            use_blob_urls=use_blob_urls,
            request_options=request_options,
        )
        return _response.data

    async def validate(
        self,
        *,
        description: typing.Optional[str] = OMIT,
        host: typing.Optional[str] = OMIT,
        id: typing.Optional[int] = OMIT,
        password: typing.Optional[str] = OMIT,
        path: typing.Optional[str] = OMIT,
        port: typing.Optional[str] = OMIT,
        project: typing.Optional[int] = OMIT,
        regex_filter: typing.Optional[str] = OMIT,
        title: typing.Optional[str] = OMIT,
        use_blob_urls: typing.Optional[bool] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> None:
        """
        Validate a specific Redis import storage connection.

        Parameters
        ----------
        description : typing.Optional[str]
            Storage description

        host : typing.Optional[str]
            Server Host IP (optional)

        id : typing.Optional[int]
            Storage ID. If set, storage with specified ID will be updated

        password : typing.Optional[str]
            Server Password (optional)

        path : typing.Optional[str]
            Storage prefix (optional)

        port : typing.Optional[str]
            Server Port (optional)

        project : typing.Optional[int]
            Project ID

        regex_filter : typing.Optional[str]
            Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported.

        title : typing.Optional[str]
            Storage title

        use_blob_urls : typing.Optional[bool]
            Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        import asyncio

        from label_studio_sdk import AsyncLabelStudio

        client = AsyncLabelStudio(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.import_storage.redis.validate()


        asyncio.run(main())
        """
        _response = await self._raw_client.validate(
            description=description,
            host=host,
            id=id,
            password=password,
            path=path,
            port=port,
            project=project,
            regex_filter=regex_filter,
            title=title,
            use_blob_urls=use_blob_urls,
            request_options=request_options,
        )
        return _response.data

    async def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> RedisImportStorage:
        """
        Get a specific Redis import storage connection.

        Parameters
        ----------
        id : int

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RedisImportStorage


        Examples
        --------
        import asyncio

        from label_studio_sdk import AsyncLabelStudio

        client = AsyncLabelStudio(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.import_storage.redis.get(
                id=1,
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get(id, request_options=request_options)
        return _response.data

    async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None:
        """
        Delete a specific Redis import storage connection.

        Parameters
        ----------
        id : int

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        import asyncio

        from label_studio_sdk import AsyncLabelStudio

        client = AsyncLabelStudio(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.import_storage.redis.delete(
                id=1,
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.delete(id, request_options=request_options)
        return _response.data

    async def update(
        self,
        id: int,
        *,
        description: typing.Optional[str] = OMIT,
        host: typing.Optional[str] = OMIT,
        password: typing.Optional[str] = OMIT,
        path: typing.Optional[str] = OMIT,
        port: typing.Optional[str] = OMIT,
        project: typing.Optional[int] = OMIT,
        regex_filter: typing.Optional[str] = OMIT,
        title: typing.Optional[str] = OMIT,
        use_blob_urls: typing.Optional[bool] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RedisImportStorage:
        """
        Update a specific Redis import storage connection.

        Parameters
        ----------
        id : int

        description : typing.Optional[str]
            Storage description

        host : typing.Optional[str]
            Server Host IP (optional)

        password : typing.Optional[str]
            Server Password (optional)

        path : typing.Optional[str]
            Storage prefix (optional)

        port : typing.Optional[str]
            Server Port (optional)

        project : typing.Optional[int]
            Project ID

        regex_filter : typing.Optional[str]
            Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported.

        title : typing.Optional[str]
            Storage title

        use_blob_urls : typing.Optional[bool]
            Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RedisImportStorage


        Examples
        --------
        import asyncio

        from label_studio_sdk import AsyncLabelStudio

        client = AsyncLabelStudio(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.import_storage.redis.update(
                id=1,
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.update(
            id,
            description=description,
            host=host,
            password=password,
            path=path,
            port=port,
            project=project,
            regex_filter=regex_filter,
            title=title,
            use_blob_urls=use_blob_urls,
            request_options=request_options,
        )
        return _response.data

    async def sync(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> RedisImportStorage:
        """
        Sync tasks from a Redis import storage connection.

        Parameters
        ----------
        id : int
            Storage ID

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RedisImportStorage


        Examples
        --------
        import asyncio

        from label_studio_sdk import AsyncLabelStudio

        client = AsyncLabelStudio(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.import_storage.redis.sync(
                id=1,
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.sync(id, request_options=request_options)
        return _response.data
