diff --git a/CHANGELOG.md b/CHANGELOG.md
index df308658..c8416b4b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
All notable changes to this project will be documented in this file.
+## [0.17.0 - 2024-0x-xx]
+
+### Changed
+
+- NextcloudApp: `TextProcessing`, `Speech2Text` and `Translation` AI Providers API was removed.
+
## [0.16.0 - 2024-08-12]
### Changed
diff --git a/README.md b/README.md
index 6193dc47..1ecc7ca6 100644
--- a/README.md
+++ b/README.md
@@ -24,23 +24,22 @@ Python library that provides a robust and well-documented API that allows develo
* **Sync + Async**: Provides both sync and async APIs.
### Capabilities
-| **_Capability_** | Nextcloud 27 | Nextcloud 28 | Nextcloud 29 | Nextcloud 30 |
-|-----------------------|:------------:|:------------:|:------------:|:------------:|
-| Calendar | ✅ | ✅ | ✅ | ✅ |
-| File System & Tags | ✅ | ✅ | ✅ | ✅ |
-| Nextcloud Talk | ✅ | ✅ | ✅ | ✅ |
-| Notifications | ✅ | ✅ | ✅ | ✅ |
-| Shares | ✅ | ✅ | ✅ | ✅ |
-| Users & Groups | ✅ | ✅ | ✅ | ✅ |
-| User & Weather status | ✅ | ✅ | ✅ | ✅ |
-| Other APIs*** | ✅ | ✅ | ✅ | ✅ |
-| Talk Bot API* | ✅ | ✅ | ✅ | ✅ |
-| Settings UI API* | N/A | N/A | ✅ | ✅ |
-| AI Providers API** | N/A | N/A | ✅ | ✅ |
+| **_Capability_** | Nextcloud 27 | Nextcloud 28 | Nextcloud 29 | Nextcloud 30 |
+|------------------------------|:------------:|:------------:|:------------:|:------------:|
+| Calendar | ✅ | ✅ | ✅ | ✅ |
+| File System & Tags | ✅ | ✅ | ✅ | ✅ |
+| Nextcloud Talk | ✅ | ✅ | ✅ | ✅ |
+| Notifications | ✅ | ✅ | ✅ | ✅ |
+| Shares | ✅ | ✅ | ✅ | ✅ |
+| Users & Groups | ✅ | ✅ | ✅ | ✅ |
+| User & Weather status | ✅ | ✅ | ✅ | ✅ |
+| Other APIs** | ✅ | ✅ | ✅ | ✅ |
+| Talk Bot API* | ✅ | ✅ | ✅ | ✅ |
+| Settings UI API* | N/A | N/A | ✅ | ✅ |
+| TaskProcessing Provider API* | N/A | N/A | N/A | ✅ |
*_available only for **NextcloudApp**_
-**_available only for **NextcloudApp**: SpeechToText, TextProcessing, Translation_
-***_Activity, Notes_
+**_Activity, Notes_
### Differences between the Nextcloud and NextcloudApp classes
diff --git a/docs/reference/ExApp.rst b/docs/reference/ExApp.rst
index 8d737f55..f3c08f2b 100644
--- a/docs/reference/ExApp.rst
+++ b/docs/reference/ExApp.rst
@@ -69,24 +69,6 @@ UI methods should be accessed with the help of :class:`~nc_py_api.nextcloud.Next
.. autoclass:: nc_py_api.ex_app.providers.providers.ProvidersApi
:members:
-.. autoclass:: nc_py_api.ex_app.providers.speech_to_text.SpeechToTextProvider
- :members:
-
-.. autoclass:: nc_py_api.ex_app.providers.speech_to_text._SpeechToTextProviderAPI
- :members:
-
-.. autoclass:: nc_py_api.ex_app.providers.text_processing.TextProcessingProvider
- :members:
-
-.. autoclass:: nc_py_api.ex_app.providers.text_processing._TextProcessingProviderAPI
- :members:
-
-.. autoclass:: nc_py_api.ex_app.providers.translations.TranslationsProvider
- :members:
-
-.. autoclass:: nc_py_api.ex_app.providers.translations._TranslationsProviderAPI
- :members:
-
.. autoclass:: nc_py_api.ex_app.providers.task_processing.ShapeType
:members:
diff --git a/nc_py_api/_version.py b/nc_py_api/_version.py
index bb25be8e..f262b71d 100644
--- a/nc_py_api/_version.py
+++ b/nc_py_api/_version.py
@@ -1,3 +1,3 @@
"""Version of nc_py_api."""
-__version__ = "0.16.0"
+__version__ = "0.17.0.dev0"
diff --git a/nc_py_api/ex_app/providers/providers.py b/nc_py_api/ex_app/providers/providers.py
index 6240af33..ce22976c 100644
--- a/nc_py_api/ex_app/providers/providers.py
+++ b/nc_py_api/ex_app/providers/providers.py
@@ -1,45 +1,24 @@
"""Nextcloud API for AI Providers."""
from ..._session import AsyncNcSessionApp, NcSessionApp
-from .speech_to_text import _AsyncSpeechToTextProviderAPI, _SpeechToTextProviderAPI
from .task_processing import _AsyncTaskProcessingProviderAPI, _TaskProcessingProviderAPI
-from .text_processing import _AsyncTextProcessingProviderAPI, _TextProcessingProviderAPI
-from .translations import _AsyncTranslationsProviderAPI, _TranslationsProviderAPI
class ProvidersApi:
"""Class that encapsulates all AI Providers functionality."""
- speech_to_text: _SpeechToTextProviderAPI
- """SpeechToText Provider API."""
- text_processing: _TextProcessingProviderAPI
- """TextProcessing Provider API."""
- translations: _TranslationsProviderAPI
- """Translations Provider API."""
task_processing: _TaskProcessingProviderAPI
"""TaskProcessing Provider API."""
def __init__(self, session: NcSessionApp):
- self.speech_to_text = _SpeechToTextProviderAPI(session)
- self.text_processing = _TextProcessingProviderAPI(session)
- self.translations = _TranslationsProviderAPI(session)
self.task_processing = _TaskProcessingProviderAPI(session)
class AsyncProvidersApi:
"""Class that encapsulates all AI Providers functionality."""
- speech_to_text: _AsyncSpeechToTextProviderAPI
- """SpeechToText Provider API."""
- text_processing: _AsyncTextProcessingProviderAPI
- """TextProcessing Provider API."""
- translations: _AsyncTranslationsProviderAPI
- """Translations Provider API."""
task_processing: _AsyncTaskProcessingProviderAPI
"""TaskProcessing Provider API."""
def __init__(self, session: AsyncNcSessionApp):
- self.speech_to_text = _AsyncSpeechToTextProviderAPI(session)
- self.text_processing = _AsyncTextProcessingProviderAPI(session)
- self.translations = _AsyncTranslationsProviderAPI(session)
self.task_processing = _AsyncTaskProcessingProviderAPI(session)
diff --git a/nc_py_api/ex_app/providers/speech_to_text.py b/nc_py_api/ex_app/providers/speech_to_text.py
deleted file mode 100644
index 30f297c6..00000000
--- a/nc_py_api/ex_app/providers/speech_to_text.py
+++ /dev/null
@@ -1,128 +0,0 @@
-"""Nextcloud API for declaring SpeechToText provider."""
-
-import contextlib
-import dataclasses
-
-from ..._exceptions import NextcloudException, NextcloudExceptionNotFound
-from ..._misc import require_capabilities
-from ..._session import AsyncNcSessionApp, NcSessionApp
-
-_EP_SUFFIX: str = "ai_provider/speech_to_text"
-
-
-@dataclasses.dataclass
-class SpeechToTextProvider:
- """Speech2Text provider description."""
-
- def __init__(self, raw_data: dict):
- self._raw_data = raw_data
-
- @property
- def name(self) -> str:
- """Unique ID for the provider."""
- return self._raw_data["name"]
-
- @property
- def display_name(self) -> str:
- """Providers display name."""
- return self._raw_data["display_name"]
-
- @property
- def action_handler(self) -> str:
- """Relative ExApp url which will be called by Nextcloud."""
- return self._raw_data["action_handler"]
-
- def __repr__(self):
- return f"<{self.__class__.__name__} name={self.name}, handler={self.action_handler}>"
-
-
-class _SpeechToTextProviderAPI:
- """API for Speech2Text providers, avalaible as **nc.providers.text_processing.**."""
-
- def __init__(self, session: NcSessionApp):
- self._session = session
-
- def register(self, name: str, display_name: str, callback_url: str) -> None:
- """Registers or edit the SpeechToText provider."""
- require_capabilities("app_api", self._session.capabilities)
- params = {
- "name": name,
- "displayName": display_name,
- "actionHandler": callback_url,
- }
- self._session.ocs("POST", f"{self._session.ae_url}/{_EP_SUFFIX}", json=params)
-
- def unregister(self, name: str, not_fail=True) -> None:
- """Removes SpeechToText provider."""
- require_capabilities("app_api", self._session.capabilities)
- try:
- self._session.ocs("DELETE", f"{self._session.ae_url}/{_EP_SUFFIX}", params={"name": name})
- except NextcloudExceptionNotFound as e:
- if not not_fail:
- raise e from None
-
- def get_entry(self, name: str) -> SpeechToTextProvider | None:
- """Get information of the SpeechToText."""
- require_capabilities("app_api", self._session.capabilities)
- try:
- return SpeechToTextProvider(
- self._session.ocs("GET", f"{self._session.ae_url}/{_EP_SUFFIX}", params={"name": name})
- )
- except NextcloudExceptionNotFound:
- return None
-
- def report_result(self, task_id: int, result: str = "", error: str = "") -> None:
- """Report results of speech to text task to Nextcloud."""
- require_capabilities("app_api", self._session.capabilities)
- with contextlib.suppress(NextcloudException):
- self._session.ocs(
- "PUT",
- f"{self._session.ae_url}/{_EP_SUFFIX}",
- json={"taskId": task_id, "result": result, "error": error},
- )
-
-
-class _AsyncSpeechToTextProviderAPI:
- """Async API for Speech2Text providers."""
-
- def __init__(self, session: AsyncNcSessionApp):
- self._session = session
-
- async def register(self, name: str, display_name: str, callback_url: str) -> None:
- """Registers or edit the SpeechToText provider."""
- require_capabilities("app_api", await self._session.capabilities)
- params = {
- "name": name,
- "displayName": display_name,
- "actionHandler": callback_url,
- }
- await self._session.ocs("POST", f"{self._session.ae_url}/{_EP_SUFFIX}", json=params)
-
- async def unregister(self, name: str, not_fail=True) -> None:
- """Removes SpeechToText provider."""
- require_capabilities("app_api", await self._session.capabilities)
- try:
- await self._session.ocs("DELETE", f"{self._session.ae_url}/{_EP_SUFFIX}", params={"name": name})
- except NextcloudExceptionNotFound as e:
- if not not_fail:
- raise e from None
-
- async def get_entry(self, name: str) -> SpeechToTextProvider | None:
- """Get information of the SpeechToText."""
- require_capabilities("app_api", await self._session.capabilities)
- try:
- return SpeechToTextProvider(
- await self._session.ocs("GET", f"{self._session.ae_url}/{_EP_SUFFIX}", params={"name": name})
- )
- except NextcloudExceptionNotFound:
- return None
-
- async def report_result(self, task_id: int, result: str = "", error: str = "") -> None:
- """Report results of speech to text task to Nextcloud."""
- require_capabilities("app_api", await self._session.capabilities)
- with contextlib.suppress(NextcloudException):
- await self._session.ocs(
- "PUT",
- f"{self._session.ae_url}/{_EP_SUFFIX}",
- json={"taskId": task_id, "result": result, "error": error},
- )
diff --git a/nc_py_api/ex_app/providers/text_processing.py b/nc_py_api/ex_app/providers/text_processing.py
deleted file mode 100644
index 095bf1fe..00000000
--- a/nc_py_api/ex_app/providers/text_processing.py
+++ /dev/null
@@ -1,135 +0,0 @@
-"""Nextcloud API for declaring TextProcessing provider."""
-
-import contextlib
-import dataclasses
-
-from ..._exceptions import NextcloudException, NextcloudExceptionNotFound
-from ..._misc import require_capabilities
-from ..._session import AsyncNcSessionApp, NcSessionApp
-
-_EP_SUFFIX: str = "ai_provider/text_processing"
-
-
-@dataclasses.dataclass
-class TextProcessingProvider:
- """TextProcessing provider description."""
-
- def __init__(self, raw_data: dict):
- self._raw_data = raw_data
-
- @property
- def name(self) -> str:
- """Unique ID for the provider."""
- return self._raw_data["name"]
-
- @property
- def display_name(self) -> str:
- """Providers display name."""
- return self._raw_data["display_name"]
-
- @property
- def action_handler(self) -> str:
- """Relative ExApp url which will be called by Nextcloud."""
- return self._raw_data["action_handler"]
-
- @property
- def task_type(self) -> str:
- """The TaskType provided by this provider."""
- return self._raw_data["task_type"]
-
- def __repr__(self):
- return f"<{self.__class__.__name__} name={self.name}, type={self.task_type}, handler={self.action_handler}>"
-
-
-class _TextProcessingProviderAPI:
- """API for TextProcessing providers, avalaible as **nc.providers.speech_to_text.**."""
-
- def __init__(self, session: NcSessionApp):
- self._session = session
-
- def register(self, name: str, display_name: str, callback_url: str, task_type: str) -> None:
- """Registers or edit the TextProcessing provider."""
- require_capabilities("app_api", self._session.capabilities)
- params = {
- "name": name,
- "displayName": display_name,
- "actionHandler": callback_url,
- "taskType": task_type,
- }
- self._session.ocs("POST", f"{self._session.ae_url}/{_EP_SUFFIX}", json=params)
-
- def unregister(self, name: str, not_fail=True) -> None:
- """Removes TextProcessing provider."""
- require_capabilities("app_api", self._session.capabilities)
- try:
- self._session.ocs("DELETE", f"{self._session.ae_url}/{_EP_SUFFIX}", params={"name": name})
- except NextcloudExceptionNotFound as e:
- if not not_fail:
- raise e from None
-
- def get_entry(self, name: str) -> TextProcessingProvider | None:
- """Get information of the TextProcessing."""
- require_capabilities("app_api", self._session.capabilities)
- try:
- return TextProcessingProvider(
- self._session.ocs("GET", f"{self._session.ae_url}/{_EP_SUFFIX}", params={"name": name})
- )
- except NextcloudExceptionNotFound:
- return None
-
- def report_result(self, task_id: int, result: str = "", error: str = "") -> None:
- """Report results of the text processing to Nextcloud."""
- require_capabilities("app_api", self._session.capabilities)
- with contextlib.suppress(NextcloudException):
- self._session.ocs(
- "PUT",
- f"{self._session.ae_url}/{_EP_SUFFIX}",
- json={"taskId": task_id, "result": result, "error": error},
- )
-
-
-class _AsyncTextProcessingProviderAPI:
- """Async API for TextProcessing providers."""
-
- def __init__(self, session: AsyncNcSessionApp):
- self._session = session
-
- async def register(self, name: str, display_name: str, callback_url: str, task_type: str) -> None:
- """Registers or edit the TextProcessing provider."""
- require_capabilities("app_api", await self._session.capabilities)
- params = {
- "name": name,
- "displayName": display_name,
- "actionHandler": callback_url,
- "taskType": task_type,
- }
- await self._session.ocs("POST", f"{self._session.ae_url}/{_EP_SUFFIX}", json=params)
-
- async def unregister(self, name: str, not_fail=True) -> None:
- """Removes TextProcessing provider."""
- require_capabilities("app_api", await self._session.capabilities)
- try:
- await self._session.ocs("DELETE", f"{self._session.ae_url}/{_EP_SUFFIX}", params={"name": name})
- except NextcloudExceptionNotFound as e:
- if not not_fail:
- raise e from None
-
- async def get_entry(self, name: str) -> TextProcessingProvider | None:
- """Get information of the TextProcessing."""
- require_capabilities("app_api", await self._session.capabilities)
- try:
- return TextProcessingProvider(
- await self._session.ocs("GET", f"{self._session.ae_url}/{_EP_SUFFIX}", params={"name": name})
- )
- except NextcloudExceptionNotFound:
- return None
-
- async def report_result(self, task_id: int, result: str = "", error: str = "") -> None:
- """Report results of the text processing to Nextcloud."""
- require_capabilities("app_api", await self._session.capabilities)
- with contextlib.suppress(NextcloudException):
- await self._session.ocs(
- "PUT",
- f"{self._session.ae_url}/{_EP_SUFFIX}",
- json={"taskId": task_id, "result": result, "error": error},
- )
diff --git a/nc_py_api/ex_app/providers/translations.py b/nc_py_api/ex_app/providers/translations.py
deleted file mode 100644
index 5b3b798f..00000000
--- a/nc_py_api/ex_app/providers/translations.py
+++ /dev/null
@@ -1,165 +0,0 @@
-"""Nextcloud API for declaring Translations provider."""
-
-import contextlib
-import dataclasses
-
-from ..._exceptions import NextcloudException, NextcloudExceptionNotFound
-from ..._misc import require_capabilities
-from ..._session import AsyncNcSessionApp, NcSessionApp
-
-_EP_SUFFIX: str = "ai_provider/translation"
-
-
-@dataclasses.dataclass
-class TranslationsProvider:
- """Translations provider description."""
-
- def __init__(self, raw_data: dict):
- self._raw_data = raw_data
-
- @property
- def name(self) -> str:
- """Unique ID for the provider."""
- return self._raw_data["name"]
-
- @property
- def display_name(self) -> str:
- """Providers display name."""
- return self._raw_data["display_name"]
-
- @property
- def from_languages(self) -> dict[str, str]:
- """Input languages supported by provider."""
- return self._raw_data["from_languages"]
-
- @property
- def to_languages(self) -> dict[str, str]:
- """Output languages supported by provider."""
- return self._raw_data["to_languages"]
-
- @property
- def action_handler(self) -> str:
- """Relative ExApp url which will be called by Nextcloud."""
- return self._raw_data["action_handler"]
-
- @property
- def action_handler_detect_lang(self) -> str:
- """Relative ExApp url which will be called by Nextcloud to detect language."""
- return self._raw_data.get("action_detect_lang", "")
-
- def __repr__(self):
- return f"<{self.__class__.__name__} name={self.name}, handler={self.action_handler}>"
-
-
-class _TranslationsProviderAPI:
- """API for Translations providers, avalaible as **nc.providers.translations.**."""
-
- def __init__(self, session: NcSessionApp):
- self._session = session
-
- def register(
- self,
- name: str,
- display_name: str,
- callback_url: str,
- from_languages: dict[str, str],
- to_languages: dict[str, str],
- detect_lang_callback_url: str = "",
- ) -> None:
- """Registers or edit the Translations provider."""
- require_capabilities("app_api", self._session.capabilities)
- params = {
- "name": name,
- "displayName": display_name,
- "fromLanguages": from_languages,
- "toLanguages": to_languages,
- "actionHandler": callback_url,
- "actionDetectLang": detect_lang_callback_url,
- }
- self._session.ocs("POST", f"{self._session.ae_url}/{_EP_SUFFIX}", json=params)
-
- def unregister(self, name: str, not_fail=True) -> None:
- """Removes Translations provider."""
- require_capabilities("app_api", self._session.capabilities)
- try:
- self._session.ocs("DELETE", f"{self._session.ae_url}/{_EP_SUFFIX}", params={"name": name})
- except NextcloudExceptionNotFound as e:
- if not not_fail:
- raise e from None
-
- def get_entry(self, name: str) -> TranslationsProvider | None:
- """Get information of the TranslationsProvider."""
- require_capabilities("app_api", self._session.capabilities)
- try:
- return TranslationsProvider(
- self._session.ocs("GET", f"{self._session.ae_url}/{_EP_SUFFIX}", params={"name": name})
- )
- except NextcloudExceptionNotFound:
- return None
-
- def report_result(self, task_id: int, result: str = "", error: str = "") -> None:
- """Report results of translation task to Nextcloud."""
- require_capabilities("app_api", self._session.capabilities)
- with contextlib.suppress(NextcloudException):
- self._session.ocs(
- "PUT",
- f"{self._session.ae_url}/{_EP_SUFFIX}",
- json={"taskId": task_id, "result": result, "error": error},
- )
-
-
-class _AsyncTranslationsProviderAPI:
- """Async API for Translations providers."""
-
- def __init__(self, session: AsyncNcSessionApp):
- self._session = session
-
- async def register(
- self,
- name: str,
- display_name: str,
- callback_url: str,
- from_languages: dict[str, str],
- to_languages: dict[str, str],
- detect_lang_callback_url: str = "",
- ) -> None:
- """Registers or edit the Translations provider."""
- require_capabilities("app_api", await self._session.capabilities)
- params = {
- "name": name,
- "displayName": display_name,
- "fromLanguages": from_languages,
- "toLanguages": to_languages,
- "actionHandler": callback_url,
- "actionDetectLang": detect_lang_callback_url,
- }
- await self._session.ocs("POST", f"{self._session.ae_url}/{_EP_SUFFIX}", json=params)
-
- async def unregister(self, name: str, not_fail=True) -> None:
- """Removes Translations provider."""
- require_capabilities("app_api", await self._session.capabilities)
- try:
- await self._session.ocs("DELETE", f"{self._session.ae_url}/{_EP_SUFFIX}", params={"name": name})
- except NextcloudExceptionNotFound as e:
- if not not_fail:
- raise e from None
-
- async def get_entry(self, name: str) -> TranslationsProvider | None:
- """Get information of the TranslationsProvider."""
- require_capabilities("app_api", await self._session.capabilities)
- try:
- return TranslationsProvider(
- await self._session.ocs("GET", f"{self._session.ae_url}/{_EP_SUFFIX}", params={"name": name})
- )
- except NextcloudExceptionNotFound:
- return None
-
- async def report_result(self, task_id: int, result: str = "", error: str = "") -> None:
- """Report results of translation task to Nextcloud."""
- require_capabilities("app_api", await self._session.capabilities)
- with contextlib.suppress(NextcloudException):
- await self._session.ocs(
- "PUT",
- f"{self._session.ae_url}/{_EP_SUFFIX}",
- json={"taskId": task_id, "result": result, "error": error},
- )
diff --git a/tests/actual_tests/speech2text_provider_test.py b/tests/actual_tests/speech2text_provider_test.py
deleted file mode 100644
index 46710d88..00000000
--- a/tests/actual_tests/speech2text_provider_test.py
+++ /dev/null
@@ -1,67 +0,0 @@
-import pytest
-
-from nc_py_api import NextcloudExceptionNotFound
-
-
-@pytest.mark.require_nc(major=29)
-def test_speech2text_provider(nc_app):
- nc_app.providers.speech_to_text.register("test_id", "Test #1 Prov", "/some_url")
- result = nc_app.providers.speech_to_text.get_entry("test_id")
- assert result.name == "test_id"
- assert result.display_name == "Test #1 Prov"
- assert result.action_handler == "some_url"
- nc_app.providers.speech_to_text.register("test_id2", "Test #2 Prov", "some_url2")
- result2 = nc_app.providers.speech_to_text.get_entry("test_id2")
- assert result2.name == "test_id2"
- assert result2.display_name == "Test #2 Prov"
- assert result2.action_handler == "some_url2"
- nc_app.providers.speech_to_text.register("test_id", "Renamed", "/new_url")
- result = nc_app.providers.speech_to_text.get_entry("test_id")
- assert result.name == "test_id"
- assert result.display_name == "Renamed"
- assert result.action_handler == "new_url"
- nc_app.providers.speech_to_text.unregister(result.name)
- nc_app.providers.speech_to_text.unregister(result.name)
- with pytest.raises(NextcloudExceptionNotFound):
- nc_app.providers.speech_to_text.unregister(result.name, not_fail=False)
- nc_app.providers.speech_to_text.unregister(result2.name, not_fail=False)
- assert nc_app.providers.speech_to_text.get_entry(result2.name) is None
- assert str(result).find("name=") != -1
-
-
-@pytest.mark.asyncio(scope="session")
-@pytest.mark.require_nc(major=29)
-async def test_speech2text_provider_async(anc_app):
- await anc_app.providers.speech_to_text.register("test_id", "Test #1 Prov", "/some_url")
- result = await anc_app.providers.speech_to_text.get_entry("test_id")
- assert result.name == "test_id"
- assert result.display_name == "Test #1 Prov"
- assert result.action_handler == "some_url"
- await anc_app.providers.speech_to_text.register("test_id2", "Test #2 Prov", "some_url2")
- result2 = await anc_app.providers.speech_to_text.get_entry("test_id2")
- assert result2.name == "test_id2"
- assert result2.display_name == "Test #2 Prov"
- assert result2.action_handler == "some_url2"
- await anc_app.providers.speech_to_text.register("test_id", "Renamed", "/new_url")
- result = await anc_app.providers.speech_to_text.get_entry("test_id")
- assert result.name == "test_id"
- assert result.display_name == "Renamed"
- assert result.action_handler == "new_url"
- await anc_app.providers.speech_to_text.unregister(result.name)
- await anc_app.providers.speech_to_text.unregister(result.name)
- with pytest.raises(NextcloudExceptionNotFound):
- await anc_app.providers.speech_to_text.unregister(result.name, not_fail=False)
- await anc_app.providers.speech_to_text.unregister(result2.name, not_fail=False)
- assert await anc_app.providers.speech_to_text.get_entry(result2.name) is None
- assert str(result).find("name=") != -1
-
-
-@pytest.mark.require_nc(major=29)
-def test_speech2text_provider_fail_report(nc_app):
- nc_app.providers.speech_to_text.report_result(999999)
-
-
-@pytest.mark.asyncio(scope="session")
-@pytest.mark.require_nc(major=29)
-async def test_speech2text_provider_fail_report_async(anc_app):
- await anc_app.providers.speech_to_text.report_result(999999)
diff --git a/tests/actual_tests/taskprocessing_provider_test.py b/tests/actual_tests/taskprocessing_provider_test.py
new file mode 100644
index 00000000..9bff5cb3
--- /dev/null
+++ b/tests/actual_tests/taskprocessing_provider_test.py
@@ -0,0 +1,54 @@
+import pytest
+
+from nc_py_api import NextcloudException, NextcloudExceptionNotFound
+from nc_py_api.ex_app.providers.task_processing import TaskProcessingProvider
+
+
+@pytest.mark.require_nc(major=30)
+def test_task_processing_provider(nc_app):
+ provider_info = TaskProcessingProvider(
+ id=f"test_id", name=f"Test Display Name", task_type="core:text2image" # noqa
+ )
+ nc_app.providers.task_processing.register(provider_info)
+ nc_app.providers.task_processing.unregister(provider_info.id)
+ with pytest.raises(NextcloudExceptionNotFound):
+ nc_app.providers.task_processing.unregister(provider_info.id, not_fail=False)
+ nc_app.providers.task_processing.unregister(provider_info.id)
+ nc_app.providers.task_processing.register(provider_info)
+ assert not nc_app.providers.task_processing.next_task(["test_id"], ["core:text2image"])
+ assert not nc_app.providers.task_processing.set_progress(9999, 0.5)
+ assert not nc_app.providers.task_processing.report_result(9999, error_message="no such task")
+ with pytest.raises(NextcloudException):
+ nc_app.providers.task_processing.upload_result_file(9999, b"00")
+ nc_app.providers.task_processing.unregister(provider_info.id, not_fail=False)
+
+
+@pytest.mark.asyncio(scope="session")
+@pytest.mark.require_nc(major=30)
+async def test_task_processing_async(anc_app):
+ provider_info = TaskProcessingProvider(
+ id=f"test_id", name=f"Test Display Name", task_type="core:text2image" # noqa
+ )
+ await anc_app.providers.task_processing.register(provider_info)
+ await anc_app.providers.task_processing.unregister(provider_info.id)
+ with pytest.raises(NextcloudExceptionNotFound):
+ await anc_app.providers.task_processing.unregister(provider_info.id, not_fail=False)
+ await anc_app.providers.task_processing.unregister(provider_info.id)
+ await anc_app.providers.task_processing.register(provider_info)
+ assert not await anc_app.providers.task_processing.next_task(["test_id"], ["core:text2image"])
+ assert not await anc_app.providers.task_processing.set_progress(9999, 0.5)
+ assert not await anc_app.providers.task_processing.report_result(9999, error_message="no such task")
+ with pytest.raises(NextcloudException):
+ await anc_app.providers.task_processing.upload_result_file(9999, b"00")
+ await anc_app.providers.task_processing.unregister(provider_info.id, not_fail=False)
+
+
+@pytest.mark.require_nc(major=30)
+def test_task_processing_provider_fail_report(nc_app):
+ nc_app.providers.task_processing.report_result(999999)
+
+
+@pytest.mark.asyncio(scope="session")
+@pytest.mark.require_nc(major=30)
+async def test_task_processing_provider_fail_report_async(anc_app):
+ await anc_app.providers.task_processing.report_result(999999)
diff --git a/tests/actual_tests/text_processing_provider_test.py b/tests/actual_tests/text_processing_provider_test.py
deleted file mode 100644
index bc0fea36..00000000
--- a/tests/actual_tests/text_processing_provider_test.py
+++ /dev/null
@@ -1,69 +0,0 @@
-import pytest
-
-from nc_py_api import NextcloudExceptionNotFound
-
-
-@pytest.mark.require_nc(major=29)
-def test_text_processing_provider(nc_app):
- nc_app.providers.text_processing.register("test_id", "Test #1 Prov", "/some_url", "free_prompt")
- result = nc_app.providers.text_processing.get_entry("test_id")
- assert result.name == "test_id"
- assert result.display_name == "Test #1 Prov"
- assert result.action_handler == "some_url"
- nc_app.providers.text_processing.register("test_id2", "Test #2 Prov", "some_url2", "free_prompt")
- result2 = nc_app.providers.text_processing.get_entry("test_id2")
- assert result2.name == "test_id2"
- assert result2.display_name == "Test #2 Prov"
- assert result2.action_handler == "some_url2"
- nc_app.providers.text_processing.register("test_id", "Renamed", "/new_url", "free_prompt")
- result = nc_app.providers.text_processing.get_entry("test_id")
- assert result.name == "test_id"
- assert result.display_name == "Renamed"
- assert result.action_handler == "new_url"
- assert result.task_type == "free_prompt"
- nc_app.providers.text_processing.unregister(result.name)
- nc_app.providers.text_processing.unregister(result.name)
- with pytest.raises(NextcloudExceptionNotFound):
- nc_app.providers.text_processing.unregister(result.name, not_fail=False)
- nc_app.providers.text_processing.unregister(result2.name, not_fail=False)
- assert nc_app.providers.text_processing.get_entry(result2.name) is None
- assert str(result).find("type=free_prompt") != -1
-
-
-@pytest.mark.asyncio(scope="session")
-@pytest.mark.require_nc(major=29)
-async def test_text_processing_provider_async(anc_app):
- await anc_app.providers.text_processing.register("test_id", "Test #1 Prov", "/some_url", "free_prompt")
- result = await anc_app.providers.text_processing.get_entry("test_id")
- assert result.name == "test_id"
- assert result.display_name == "Test #1 Prov"
- assert result.action_handler == "some_url"
- await anc_app.providers.text_processing.register("test_id2", "Test #2 Prov", "some_url2", "free_prompt")
- result2 = await anc_app.providers.text_processing.get_entry("test_id2")
- assert result2.name == "test_id2"
- assert result2.display_name == "Test #2 Prov"
- assert result2.action_handler == "some_url2"
- await anc_app.providers.text_processing.register("test_id", "Renamed", "/new_url", "free_prompt")
- result = await anc_app.providers.text_processing.get_entry("test_id")
- assert result.name == "test_id"
- assert result.display_name == "Renamed"
- assert result.action_handler == "new_url"
- assert result.task_type == "free_prompt"
- await anc_app.providers.text_processing.unregister(result.name)
- await anc_app.providers.text_processing.unregister(result.name)
- with pytest.raises(NextcloudExceptionNotFound):
- await anc_app.providers.text_processing.unregister(result.name, not_fail=False)
- await anc_app.providers.text_processing.unregister(result2.name, not_fail=False)
- assert await anc_app.providers.text_processing.get_entry(result2.name) is None
- assert str(result).find("type=free_prompt") != -1
-
-
-@pytest.mark.require_nc(major=29)
-def test_text_processing_provider_fail_report(nc_app):
- nc_app.providers.text_processing.report_result(999999)
-
-
-@pytest.mark.asyncio(scope="session")
-@pytest.mark.require_nc(major=29)
-async def test_text_processing_provider_fail_report_async(anc_app):
- await anc_app.providers.text_processing.report_result(999999)
diff --git a/tests/actual_tests/translation_provider_test.py b/tests/actual_tests/translation_provider_test.py
deleted file mode 100644
index 85cdba07..00000000
--- a/tests/actual_tests/translation_provider_test.py
+++ /dev/null
@@ -1,124 +0,0 @@
-import pytest
-
-from nc_py_api import NextcloudExceptionNotFound
-
-FROM_LANG1 = {"ar_AR": "Arabic", "de_DE": "German", "uk_UA": "Ukrainian"}
-TO_LANG1 = {"zh_CN": "Chinese", "en_US": "English", "es_ES": "Spanish"}
-
-
-@pytest.mark.require_nc(major=29)
-def test_translation_provider(nc_app):
- nc_app.providers.translations.register(
- "test_id",
- "Test #1 Prov",
- "/some_url",
- FROM_LANG1,
- TO_LANG1,
- )
- result = nc_app.providers.translations.get_entry("test_id")
- assert result.name == "test_id"
- assert result.display_name == "Test #1 Prov"
- assert result.action_handler == "some_url"
- assert result.from_languages == FROM_LANG1
- assert result.to_languages == TO_LANG1
- assert result.action_handler_detect_lang == ""
- nc_app.providers.translations.register(
- "test_id2",
- "Test #2 Prov",
- "some_url2",
- {"pl_PL": "Polish"},
- {"tr_TR": "Turkish"},
- "/detect_lang",
- )
- result2 = nc_app.providers.translations.get_entry("test_id2")
- assert result2.name == "test_id2"
- assert result2.display_name == "Test #2 Prov"
- assert result2.action_handler == "some_url2"
- assert result2.from_languages == {"pl_PL": "Polish"}
- assert result2.to_languages == {"tr_TR": "Turkish"}
- assert result2.action_handler_detect_lang == "detect_lang"
- nc_app.providers.translations.register(
- "test_id",
- "Renamed",
- "/new_url",
- {"kk_KZ": "Kazakh"},
- {"it_IT": "Italian"},
- )
- result = nc_app.providers.translations.get_entry("test_id")
- assert result.name == "test_id"
- assert result.display_name == "Renamed"
- assert result.action_handler == "new_url"
- assert result.from_languages == {"kk_KZ": "Kazakh"}
- assert result.to_languages == {"it_IT": "Italian"}
- nc_app.providers.translations.unregister(result.name)
- with pytest.raises(NextcloudExceptionNotFound):
- nc_app.providers.translations.unregister(result.name, not_fail=False)
- nc_app.providers.translations.unregister(result.name)
- nc_app.providers.translations.unregister(result2.name, not_fail=False)
- assert nc_app.providers.translations.get_entry(result2.name) is None
- assert str(result).find("name=") != -1
-
-
-@pytest.mark.asyncio(scope="session")
-@pytest.mark.require_nc(major=29)
-async def test_translation_async(anc_app):
- await anc_app.providers.translations.register(
- "test_id",
- "Test #1 Prov",
- "/some_url",
- FROM_LANG1,
- TO_LANG1,
- )
- result = await anc_app.providers.translations.get_entry("test_id")
- assert result.name == "test_id"
- assert result.display_name == "Test #1 Prov"
- assert result.action_handler == "some_url"
- assert result.from_languages == FROM_LANG1
- assert result.to_languages == TO_LANG1
- assert result.action_handler_detect_lang == ""
- await anc_app.providers.translations.register(
- "test_id2",
- "Test #2 Prov",
- "some_url2",
- {"pl_PL": "Polish"},
- {"tr_TR": "Turkish"},
- "/detect_lang",
- )
- result2 = await anc_app.providers.translations.get_entry("test_id2")
- assert result2.name == "test_id2"
- assert result2.display_name == "Test #2 Prov"
- assert result2.action_handler == "some_url2"
- assert result2.from_languages == {"pl_PL": "Polish"}
- assert result2.to_languages == {"tr_TR": "Turkish"}
- assert result2.action_handler_detect_lang == "detect_lang"
- await anc_app.providers.translations.register(
- "test_id",
- "Renamed",
- "/new_url",
- {"kk_KZ": "Kazakh"},
- {"it_IT": "Italian"},
- )
- result = await anc_app.providers.translations.get_entry("test_id")
- assert result.name == "test_id"
- assert result.display_name == "Renamed"
- assert result.action_handler == "new_url"
- assert result.from_languages == {"kk_KZ": "Kazakh"}
- assert result.to_languages == {"it_IT": "Italian"}
- await anc_app.providers.translations.unregister(result.name)
- with pytest.raises(NextcloudExceptionNotFound):
- await anc_app.providers.translations.unregister(result.name, not_fail=False)
- await anc_app.providers.translations.unregister(result.name)
- await anc_app.providers.translations.unregister(result2.name, not_fail=False)
- assert await anc_app.providers.translations.get_entry(result2.name) is None
- assert str(result).find("name=") != -1
-
-
-@pytest.mark.require_nc(major=29)
-def test_translations_provider_fail_report(nc_app):
- nc_app.providers.translations.report_result(999999)
-
-
-@pytest.mark.asyncio(scope="session")
-@pytest.mark.require_nc(major=29)
-async def test_translations_provider_fail_report_async(anc_app):
- await anc_app.providers.translations.report_result(999999)