Spaces:
Sleeping
Sleeping
| from typing import List | |
| import requests | |
| import os | |
| query_templates = { | |
| "SMILES": """query BySMILES($smiles: String!, $limit: Int = {}) {{ | |
| molecules(SMILES: $smiles, limit: $limit) {{ | |
| {} | |
| }} | |
| }}""", | |
| "IUPAC": """query ByIUPAC($iupac: String!, $limit: Int = {}) {{ | |
| molecules(IUPAC: $iupac, limit: $limit) {{ | |
| {} | |
| }} | |
| }}""", | |
| "NAME": """query ByName($name: String!, $limit: Int = {}) {{ | |
| molecules(name: $name, limit: $limit) {{ | |
| {} | |
| }} | |
| }}""", | |
| "InChI": """query ByInChI($inchi: String!, $limit: Int = {}) {{ | |
| molecules(InChI: $inchi, limit: $limit) {{ | |
| {} | |
| }} | |
| }}""", | |
| "InChIKey": """query ByInChIKey($inchikey: String!, $limit: Int = {}) {{ | |
| molecules(InChIKey: $inchikey, limit: $limit) {{ | |
| {} | |
| }} | |
| }}""", | |
| "CID": """query ByCID($cid: Int!) {{ | |
| molecules(CID: $cid) {{ | |
| {} | |
| }} | |
| }}""" | |
| } | |
| SUPPORTED_RETURN_FIELDS = ["CID", "IUPAC", "SMILES", "InChI", "InChIKey", "synonyms"] | |
| API_URL = os.getenv('API_URL') | |
| class DbProcessor: | |
| def __init__(self, url: str = API_URL) -> None: | |
| self.url = url | |
| def request_data(self, text_input: str, query_type: str, return_fields: List[str], limit: int = 1): | |
| if query_type not in query_templates: | |
| raise ValueError(f"Query type '{query_type}' is not supported.") | |
| for field in return_fields: | |
| if field not in SUPPORTED_RETURN_FIELDS: | |
| raise RuntimeError(f"Field '{field}' is not supported, try to use one from {SUPPORTED_RETURN_FIELDS}") | |
| return_fields_str = "\n".join(return_fields) | |
| query = query_templates[query_type].format(limit, return_fields_str) | |
| variables = {query_type.lower(): text_input} | |
| payload = { | |
| "query": query, | |
| "variables": variables | |
| } | |
| response = requests.post( | |
| url=f"{self.url}/{query_type.lower()}", | |
| json=payload | |
| ) | |
| response.raise_for_status() | |
| return response.json()['molecules'][0] |