Skip to content

Commit

Permalink
feat: Support retrieval of Queues associated with the given Engine
Browse files Browse the repository at this point in the history
  • Loading branch information
Milan Ondrašovič committed Jan 16, 2025
1 parent da698b0 commit 3060dd5
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 65 deletions.
5 changes: 5 additions & 0 deletions rossum_api/elis_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -553,6 +553,11 @@ async def retrieve_engine_fields(
):
yield self._deserializer(Resource.EngineField, engine_field)

async def retrieve_engine_queue_stats(self, engine_id: int) -> AsyncIterator[Queue]:
"""https://elis.rossum.ai/api/docs/internal/#get-queue-statistics-for-an-engine."""
async for queue in self._http_client.fetch_all(Resource.Queue, engine=engine_id):
yield self._deserializer(Resource.Queue, queue)

# ##### INBOX #####
async def create_new_inbox(self, data: Dict[str, Any]) -> Inbox:
"""https://elis.rossum.ai/api/docs/#create-a-new-inbox."""
Expand Down
19 changes: 10 additions & 9 deletions rossum_api/elis_api_client_sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -267,20 +267,21 @@ def retrieve_engine(self, engine_id: int) -> Engine:
"""https://elis.rossum.ai/api/docs/#retrieve-a-schema."""
return self._run_coroutine(self.elis_api_client.retrieve_engine(engine_id))

async def list_all_engines(
self,
ordering: Sequence[str] = (),
sideloads: Sequence[str] = (),
**filters: Any,
) -> AsyncIterator[Engine]:
def list_all_engines(
self, ordering: Sequence[str] = (), sideloads: Sequence[str] = (), **filters: Any
) -> Iterator[Engine]:
"""https://elis.rossum.ai/api/docs/internal/#list-all-engines."""
return self._run_coroutine(
return self._iter_over_async(
self.elis_api_client.list_all_engines(ordering, sideloads, **filters)
)

def retrieve_engine_fields(self, engine_id: int | None = None) -> list[EngineField]:
def retrieve_engine_fields(self, engine_id: int | None = None) -> Iterator[EngineField]:
"""https://elis.rossum.ai/api/docs/internal/#engine-field."""
return self._run_coroutine(self.elis_api_client.retrieve_engine_fields(engine_id))
return self._iter_over_async(self.elis_api_client.retrieve_engine_fields(engine_id))

def retrieve_engine_queue_stats(self, engine_id: int) -> Iterator[Queue]:
"""https://elis.rossum.ai/api/docs/internal/#get-queue-statistics-for-an-engine."""
return self._iter_over_async(self.elis_api_client.retrieve_engine_queue_stats(engine_id))

# ##### USERS #####
def list_all_users(self, ordering: Sequence[str] = (), **filters: Any) -> Iterator[User]:
Expand Down
56 changes: 56 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,3 +127,59 @@ def dummy_user():
"metadata": {},
"oidc_id": None,
}


@pytest.fixture
def dummy_queue():
return {
"id": 8198,
"name": "Received invoices",
"url": "https://elis.rossum.ai/api/v1/queues/8198",
"workspace": "https://elis.rossum.ai/api/v1/workspaces/7540",
"connector": None,
"webhooks": [],
"hooks": [],
"schema": "https://elis.rossum.ai/api/v1/schemas/31336",
"inbox": "https://elis.rossum.ai/api/v1/inboxes/1229",
"users": ["https://elis.rossum.ai/api/v1/users/10775"],
"session_timeout": "01:00:00",
"rir_url": "https://all.rir.rossum.ai",
"rir_params": None,
"dedicated_engine": None,
"generic_engine": "https://api.elis.develop.r8.lol/v1/generic_engines/1",
"counts": {
"importing": 0,
"split": 0,
"failed_import": 0,
"to_review": 2,
"reviewing": 0,
"confirmed": 0,
"exporting": 0,
"postponed": 0,
"failed_export": 0,
"exported": 0,
"deleted": 0,
"purged": 0,
"rejected": 0,
},
"default_score_threshold": 0.8,
"automation_enabled": False,
"automation_level": "never",
"locale": "en_US",
"metadata": {},
"use_confirmed_state": False,
"document_lifetime": "01:00:00",
"settings": {
"columns": [{"schema_id": "tags"}],
"hide_export_button": True,
"automation": {"automate_duplicates": True, "automate_suggested_edit": False},
"rejection_config": {"enabled": True},
"email_notifications": {
"recipient": {"email": "[email protected]", "name": "John Doe"},
"unprocessable_attachments": False,
"email_with_no_attachments": True,
"postponed_annotations": False,
"deleted_annotations": False,
},
},
}
12 changes: 12 additions & 0 deletions tests/elis_api_client/test_engines.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

from rossum_api.domain_logic.resources import Resource
from rossum_api.models.engine import Engine, EngineField
from rossum_api.models.queue import Queue

TEST_ENGINE_ID = 123

Expand Down Expand Up @@ -43,6 +44,17 @@ async def test_list_all_engines(self, elis_client, dummy_engine, mock_generator)

http_client.fetch_all.assert_called_with(Resource.Engine, (), ())

async def test_retrieve_engine_queue_stats(self, elis_client, dummy_queue, mock_generator):
client, http_client = elis_client
http_client.fetch_all.return_value = mock_generator(dummy_queue)

queues = client.retrieve_engine_queue_stats(TEST_ENGINE_ID)

async for queue in queues:
assert queue == Queue(**dummy_queue)

http_client.fetch_all.assert_called_with(Resource.Queue, engine=TEST_ENGINE_ID)


@pytest.mark.asyncio
class TestEngineFields:
Expand Down
56 changes: 0 additions & 56 deletions tests/elis_api_client/test_queues.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,62 +10,6 @@
from rossum_api.models.task import Task, TaskStatus, TaskType


@pytest.fixture
def dummy_queue():
return {
"id": 8198,
"name": "Received invoices",
"url": "https://elis.rossum.ai/api/v1/queues/8198",
"workspace": "https://elis.rossum.ai/api/v1/workspaces/7540",
"connector": None,
"webhooks": [],
"hooks": [],
"schema": "https://elis.rossum.ai/api/v1/schemas/31336",
"inbox": "https://elis.rossum.ai/api/v1/inboxes/1229",
"users": ["https://elis.rossum.ai/api/v1/users/10775"],
"session_timeout": "01:00:00",
"rir_url": "https://all.rir.rossum.ai",
"rir_params": None,
"dedicated_engine": None,
"generic_engine": "https://api.elis.develop.r8.lol/v1/generic_engines/1",
"counts": {
"importing": 0,
"split": 0,
"failed_import": 0,
"to_review": 2,
"reviewing": 0,
"confirmed": 0,
"exporting": 0,
"postponed": 0,
"failed_export": 0,
"exported": 0,
"deleted": 0,
"purged": 0,
"rejected": 0,
},
"default_score_threshold": 0.8,
"automation_enabled": False,
"automation_level": "never",
"locale": "en_US",
"metadata": {},
"use_confirmed_state": False,
"document_lifetime": "01:00:00",
"settings": {
"columns": [{"schema_id": "tags"}],
"hide_export_button": True,
"automation": {"automate_duplicates": True, "automate_suggested_edit": False},
"rejection_config": {"enabled": True},
"email_notifications": {
"recipient": {"email": "[email protected]", "name": "John Doe"},
"unprocessable_attachments": False,
"email_with_no_attachments": True,
"postponed_annotations": False,
"deleted_annotations": False,
},
},
}


@pytest.fixture
def dummy_annotation():
return {
Expand Down

0 comments on commit 3060dd5

Please sign in to comment.