From d6f55ffb1e7572fd2bf61cb757cb831463463a72 Mon Sep 17 00:00:00 2001 From: Ubbo Veentjer <veentjer@sub.uni-goettingen.de> Date: Wed, 31 Jul 2024 19:26:33 +0200 Subject: [PATCH 1/2] feat: add get-uri API call to crud client --- src/tgclients/crud.py | 43 +++++++++++++++++++ tests/integration/test_crud_integration.py | 8 ++++ .../test_crud_request_integration.py | 7 +++ tests/unit/test_textgrid_crud.py | 13 ++++++ 4 files changed, 71 insertions(+) diff --git a/src/tgclients/crud.py b/src/tgclients/crud.py index 954919c..0292d1f 100644 --- a/src/tgclients/crud.py +++ b/src/tgclients/crud.py @@ -157,6 +157,30 @@ class TextgridCrudRequest: ) return self._handle_response(response) + def get_uri(self, sid: str, how_many: int) -> Response: + """Get TextGrid URIs. + + Generate a number of uris to use for creating new TextGrid objects. + Useful e.g. for bulk imports. + + Args: + sid (str): Session ID + how_many (int): number of URIs to generate + + Raises: + TextgridCrudException: if HTTP status code >= 400 + + Returns: + Response: HTTP response from service with TextGrid URIs in body + """ + params = {'sessionId': sid, 'howMany': how_many} + response = self._requests.get( + self._url + '/getUri', + params=params, + timeout=self._config.http_timeout, + ) + return self._handle_response(response) + def update_resource( # noqa: PLR0913 self, sid: str, @@ -383,6 +407,25 @@ class TextgridCrud(TextgridCrudRequest): response = super().create_revision(sid, project_id, textgrid_uri, data, metadata_string) return self._parser.parse(BytesIO(response.content), MetadataContainerType) + def get_uri(self, sid: str, how_many: int) -> list: + """Get TextGrid URIs. + + Generate a number of uris to use for creating new TextGrid objects. + Useful e.g. for bulk imports. + + Args: + sid (str): Session ID + how_many (int): number of URIs to generate + + Raises: + TextgridCrudException: if HTTP status code >= 400 + + Returns: + list: List with TextGrid URIs + """ + response = super().get_uri(sid=sid, how_many=how_many) + return response.text.splitlines() + def read_metadata(self, textgrid_uri: str, sid: Optional[str] = None) -> MetadataContainerType: """Read Metadata. diff --git a/tests/integration/test_crud_integration.py b/tests/integration/test_crud_integration.py index 0e1b39a..da429ed 100644 --- a/tests/integration/test_crud_integration.py +++ b/tests/integration/test_crud_integration.py @@ -201,3 +201,11 @@ class TestTextgridCrudIntegration: os.remove(dl2_png_loc) res = crud.delete_resource(sid, textgrid_uri) assert res.status_code == 204 + + @staticmethod + def test_get_uri(crud): + sid = os.getenv('SESSION_ID') + uris = crud.get_uri(sid, 2) + assert len(uris) == 2 + for uri in uris: + assert uri.startswith('textgrid:') diff --git a/tests/integration/test_crud_request_integration.py b/tests/integration/test_crud_request_integration.py index 4ca96db..3e4fe09 100644 --- a/tests/integration/test_crud_request_integration.py +++ b/tests/integration/test_crud_request_integration.py @@ -176,3 +176,10 @@ class TestTextgridCrudIntegration: os.remove(dl2_png_loc) res = crud_request.delete_resource(sid, textgrid_uri) assert res.status_code == 204 + + @staticmethod + def test_get_uri(crud_request): + sid = os.getenv('SESSION_ID') + res = crud_request.get_uri(sid, 2) + assert res.status_code == 200 + assert len(res.text.splitlines()) == 2 diff --git a/tests/unit/test_textgrid_crud.py b/tests/unit/test_textgrid_crud.py index 7192bd7..e2690e3 100644 --- a/tests/unit/test_textgrid_crud.py +++ b/tests/unit/test_textgrid_crud.py @@ -248,3 +248,16 @@ class TestTextgridCrud: res = crud.delete_resource(sid, textgrid_uri) assert res.status_code == 204 + + @staticmethod + def test_get_uri(requests_mock, crud, tgconfig): + requests_mock.get( + tgconfig.host + '/1.0/tgcrud/rest/getUri?sessionId=SESSION_ID&howMany=2', + status_code=200, + text='textgrid:1234\ntextgrid:2345\n', + ) + sid = 'SESSION_ID' # does not matter for mocked requests + uris = crud.get_uri(sid, 2) + assert len(uris) == 2 + for uri in uris: + assert uri.startswith('textgrid:') -- GitLab From 893964a900c6e090595fe19de08c0c4198084aa5 Mon Sep 17 00:00:00 2001 From: Ubbo Veentjer <veentjer@sub.uni-goettingen.de> Date: Wed, 31 Jul 2024 19:30:39 +0200 Subject: [PATCH 2/2] doc: get_uri API doc --- src/tgclients/crud.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tgclients/crud.py b/src/tgclients/crud.py index 0292d1f..4e94d73 100644 --- a/src/tgclients/crud.py +++ b/src/tgclients/crud.py @@ -160,7 +160,7 @@ class TextgridCrudRequest: def get_uri(self, sid: str, how_many: int) -> Response: """Get TextGrid URIs. - Generate a number of uris to use for creating new TextGrid objects. + Get an specified amount of TextGrid URIs for assigning to new TextGrid objects. Useful e.g. for bulk imports. Args: @@ -410,7 +410,7 @@ class TextgridCrud(TextgridCrudRequest): def get_uri(self, sid: str, how_many: int) -> list: """Get TextGrid URIs. - Generate a number of uris to use for creating new TextGrid objects. + Get an specified amount of TextGrid URIs for assigning to new TextGrid objects. Useful e.g. for bulk imports. Args: -- GitLab