forked from enviPath/enviPy
Current Dev State
This commit is contained in:
83
utilities/clients.py
Normal file
83
utilities/clients.py
Normal file
@ -0,0 +1,83 @@
|
||||
import json
|
||||
|
||||
import requests
|
||||
|
||||
|
||||
class AMBITResult:
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.smiles = kwargs['smiles']
|
||||
self.tps = []
|
||||
for bt in kwargs['products']:
|
||||
if len(bt['products']):
|
||||
self.tps.append(bt)
|
||||
|
||||
self.probs = None
|
||||
|
||||
def __str__(self):
|
||||
x = self.smiles + "\n"
|
||||
total_bts = len(self.tps)
|
||||
|
||||
for i, tp in enumerate(self.tps):
|
||||
prob = ""
|
||||
if self.probs:
|
||||
prob = f" (p={self.probs[tp['id']]})"
|
||||
|
||||
if i == total_bts - 1:
|
||||
x += f"\t└── {tp['name']}{prob}\n"
|
||||
else:
|
||||
x += f"\t├── {tp['name']}{prob}\n"
|
||||
|
||||
total_products = len(tp['products'])
|
||||
for j, p in enumerate(tp['products']):
|
||||
if j == total_products - 1:
|
||||
if i == total_bts - 1:
|
||||
x += f"\t\t└── {p}"
|
||||
else:
|
||||
x += f"\t│\t└── {p}\n"
|
||||
else:
|
||||
if i == total_bts - 1:
|
||||
x += f"\t\t├── {p}\n"
|
||||
else:
|
||||
x += f"\t│\t├── {p}\n"
|
||||
return x
|
||||
|
||||
def set_probs(self, probs):
|
||||
self.probs = probs
|
||||
|
||||
|
||||
class AMBIT:
|
||||
|
||||
def __init__(self, host, rules=None):
|
||||
self.host = host
|
||||
self.rules = rules
|
||||
self.ambit_params = {
|
||||
'singlePos': True,
|
||||
'split': False,
|
||||
}
|
||||
|
||||
def batch_apply(self, smiles: list):
|
||||
payload = {
|
||||
'smiles': smiles,
|
||||
'rules': self.rules,
|
||||
}
|
||||
payload.update(**self.ambit_params)
|
||||
|
||||
res = self._execute(payload)
|
||||
|
||||
tps = list()
|
||||
for r in res['result']:
|
||||
ar = AMBITResult(**r)
|
||||
if len(ar.tps):
|
||||
tps.append(ar)
|
||||
else:
|
||||
tps.append(None)
|
||||
return tps
|
||||
|
||||
def apply(self, smiles: str):
|
||||
return self.batch_apply([smiles])[0]
|
||||
|
||||
def _execute(self, payload):
|
||||
res = requests.post(self.host + '/ambit', data=json.dumps(payload))
|
||||
res.raise_for_status()
|
||||
return res.json()
|
||||
Reference in New Issue
Block a user