From f1989bcfea8225d38749241709b9c98a9e47bae0 Mon Sep 17 00:00:00 2001 From: Kevin Barnard Date: Thu, 29 Feb 2024 15:04:20 -0800 Subject: [PATCH] feat: support worms-server 0.5.1 Add support for worms-server 0.5.1. This adds the `acceptedAphiaId` field to the `WormsNode` DTOs as well as a new endpoint for getting a `WormsNames` DTO by Aphia ID. --- fathomnet/api/worms.py | 8 +++++++- fathomnet/dto.py | 10 ++++++++++ test/test_worms.py | 5 +++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/fathomnet/api/worms.py b/fathomnet/api/worms.py index dca632a..7bd21eb 100644 --- a/fathomnet/api/worms.py +++ b/fathomnet/api/worms.py @@ -1,7 +1,7 @@ from typing import List from fathomnet.api import EndpointManager -from fathomnet.dto import WormsNode +from fathomnet.dto import WormsNames, WormsNode class Worms(EndpointManager): @@ -20,6 +20,12 @@ def get_all_names(limit: int = 100, offset: int = 0) -> List[str]: return res_json['items'] +def get_names_by_aphia_id(aphia_id: int) -> WormsNames: + """Get the names data for a given Aphia ID.""" + res_json = Worms.get(f'names/aphiaid/{aphia_id}') + return WormsNames.from_dict(res_json) + + def get_ancestors_names(name: str) -> List[str]: """Get all ancestors' names of a given name.""" return Worms.get(f'ancestors/{name}') diff --git a/fathomnet/dto.py b/fathomnet/dto.py index dbefff5..4502ad7 100644 --- a/fathomnet/dto.py +++ b/fathomnet/dto.py @@ -608,5 +608,15 @@ class WormsNode: name: Optional[str] = None rank: Optional[str] = None aphiaId: Optional[int] = None + acceptedAphiaId: Optional[int] = None alternateNames: Optional[List[str]] = None children: Optional[List['WormsNode']] = None + + +@dataclass_json +@dataclass +class WormsNames: + aphiaId: Optional[int] = None + name: Optional[str] = None + acceptedName: Optional[str] = None + alternateNames: Optional[List[str]] = None diff --git a/test/test_worms.py b/test/test_worms.py index 49291af..2ccc27e 100644 --- a/test/test_worms.py +++ b/test/test_worms.py @@ -27,6 +27,11 @@ def test_get_all_names(self): names = worms.get_all_names() self.assertIsNotNone(names) + def test_get_names_by_aphia_id(self): + names_obj = worms.get_names_by_aphia_id(2) + self.assertIsNotNone(names_obj) + self.assertEqual(2, names_obj.aphiaId) + def test_get_ancestors_names(self): ancestors = worms.get_ancestors_names('Animalia') self.assertIsNotNone(ancestors)