diff --git a/backend/metagenedb/common/utils/api/__init__.py b/backend/metagenedb/common/utils/api/__init__.py index 17aa35c5b8620f051849cad19b9e4472bb53632a..fef0d405eae431f9e3e7634e765cddf7c75f1ec8 100644 --- a/backend/metagenedb/common/utils/api/__init__.py +++ b/backend/metagenedb/common/utils/api/__init__.py @@ -1 +1,2 @@ from .togows import TogoWSEntry # noqa +from .metagenedb import MetageneDBCatalogGene # noqa diff --git a/backend/metagenedb/common/utils/api/baseapi.py b/backend/metagenedb/common/utils/api/baseapi.py new file mode 100644 index 0000000000000000000000000000000000000000..2aa39aae4b79d0b146cd81ea466ac9c4ea1fec57 --- /dev/null +++ b/backend/metagenedb/common/utils/api/baseapi.py @@ -0,0 +1,40 @@ +import requests +from urllib.parse import urljoin + + +class BaseAPI(object): + BASE_URL = '' + ROUTE = '' + HEADERS = { + 'Content-type': 'application/json', + 'Accept': '*/*' + } + + def __init__(self): + if not getattr(self, 'base_url', None): + self.base_url = self.BASE_URL + if not getattr(self, 'route', None): + self.route = self.ROUTE + self.url = urljoin(self.base_url, self.route) + + def get_all(self): + response = requests.get(self.url) + response.raise_for_status() + return response.json() + + def get(self, entry_id): + full_url = urljoin(self.url, entry_id) + response = requests.get(full_url) + response.raise_for_status() + return response.json() + + def post(self, data): + response = requests.post(f"{self.url}", json=data, headers=self.HEADERS) + response.raise_for_status() + return response.json() + + def put(self, entry_id, data): + full_url = urljoin(self.url, entry_id) + response = requests.put(f"{full_url}/", json=data, headers=self.HEADERS) + response.raise_for_status() + return response.json() diff --git a/backend/metagenedb/common/utils/api/metagenedb.py b/backend/metagenedb/common/utils/api/metagenedb.py index 5db3dd071e90095df35d235446d38f10c29079f6..84ab221f3677bb956a14e04ba02fc344c036adcf 100644 --- a/backend/metagenedb/common/utils/api/metagenedb.py +++ b/backend/metagenedb/common/utils/api/metagenedb.py @@ -1,45 +1,13 @@ -import logging -import requests -from abc import ABC -from urllib.parse import urljoin +from .baseapi import BaseAPI -logging.basicConfig(level=logging.INFO) -_LOGGER = logging.getLogger(__name__) - -class MetageneDB(ABC): +class MetageneDB(BaseAPI): BASE_URL = 'http://localhost/' - ROUTE = '' - HEADERS = { - 'Content-type': 'application/json', - 'Accept': '*/*' - } def __init__(self, base_url=BASE_URL): - self.url = urljoin(base_url, self.ROUTE) + self.base_url = base_url + super().__init__() class MetageneDBCatalogGene(MetageneDB): ROUTE = 'api/catalog/v1/genes/' - - def get_genes(self): - response = requests.get(self.url) - response.raise_for_status() - return response.json() - - def get(self, gene_id): - full_url = urljoin(self.url, gene_id) - response = requests.get(full_url) - response.raise_for_status() - return response.json() - - def post(self, data): - response = requests.post(f"{self.url}", json=data, headers=self.HEADERS) - response.raise_for_status() - return response.json() - - def put(self, gene_id, data): - full_url = urljoin(self.url, gene_id) - response = requests.put(f"{full_url}/", json=data, headers=self.HEADERS) - response.raise_for_status() - return response.json() diff --git a/backend/metagenedb/common/utils/api/togows.py b/backend/metagenedb/common/utils/api/togows.py index f198d23ec35af54debbd10a86f5a0ef92d7d026d..547703dc4aa091eb918694a570a9728a1ee006e7 100644 --- a/backend/metagenedb/common/utils/api/togows.py +++ b/backend/metagenedb/common/utils/api/togows.py @@ -1,30 +1,23 @@ -from abc import abstractmethod, ABC -import requests +from urllib.parse import urljoin +from .baseapi import BaseAPI -class TogoWS(ABC): - BASE_URL = 'http://togows.org' - @abstractmethod - def get(self, entry_id): - pass +class TogoWS(BaseAPI): + BASE_URL = 'http://togows.org' class TogoWSEntry(TogoWS): TYPE = 'entry' - def __init__(self, database, format='json'): + def __init__(self, database, entry_format='json'): self.database = database - self.format = format + self.format = entry_format + self.route = f"{self.TYPE}/{self.database}/" + self.url = urljoin(self.BASE_URL, self.route) def get(self, entry_id): - full_url = f"{self.BASE_URL}/{self.TYPE}/{self.database}/{entry_id}.{self.format}" - response = requests.get(full_url) - response.raise_for_status() - return response.json() + return super().get(f"{entry_id}.{self.format}") def get_field(self, entry_id, field): - full_url = f"{self.BASE_URL}/{self.TYPE}/{self.database}/{entry_id}.{field}.{self.format}" - response = requests.get(full_url) - response.raise_for_status() - return response.json() + return super().get(f"{entry_id}/{field}.{self.format}")