diff --git a/nomad/__init__.py b/nomad/__init__.py index 43437c5..55f0d0b 100644 --- a/nomad/__init__.py +++ b/nomad/__init__.py @@ -4,6 +4,8 @@ from typing import Optional, Union import requests +from urllib.parse import quote +from requests_unixsocket import Session from nomad import api @@ -67,6 +69,8 @@ def __init__( # pylint: disable=too-many-arguments self.secure = secure self.port = port self.address = address or os.getenv("NOMAD_ADDR", None) + if self.address and self.address.startswith("unix://"): + self.address = "http+unix://" + quote(self.address[7:], safe = "") self.user_agent = user_agent self.region = region or os.getenv("NOMAD_REGION", None) self.timeout = timeout @@ -75,6 +79,8 @@ def __init__( # pylint: disable=too-many-arguments self.verify = verify self.cert = cert if all(cert) else () self.session = session + if not self.session and self.address and self.address.startswith("http+unix://"): + self.session = Session() self.__namespace = namespace or os.getenv("NOMAD_NAMESPACE", None) self.requester_settings = { diff --git a/nomad/api/job.py b/nomad/api/job.py index 5ba2502..4f7fc56 100644 --- a/nomad/api/job.py +++ b/nomad/api/job.py @@ -192,7 +192,7 @@ def register_job(self, id_, job): """ return self.request(id_, json=job, method="post").json() - def evaluate_job(self, id_): + def evaluate_job(self, id_, force_reschedule=False, namespace=None): """Creates a new evaluation for the given job. This can be used to force run the scheduling logic if necessary. @@ -200,12 +200,20 @@ def evaluate_job(self, id_): arguments: - id_ + - force_reschedule + - namespace returns: dict raises: - nomad.api.exceptions.BaseNomadException - nomad.api.exceptions.URLNotFoundNomadException """ - return self.request(id_, "evaluate", method="post").json() + json_dict = {"JobID": id_} + if force_reschedule: + json_dict["EvalOptions"] = {"ForceReschedule": force_reschedule} + params = {} + if namespace: + params["namespace"] = namespace + return self.request(id_, "evaluate", json=json_dict, params=params, method="post").json() def plan_job(self, id_, job, diff=False, policy_override=False): """Invoke a dry-run of the scheduler for the job. diff --git a/requirements.txt b/requirements.txt index bd6f234..aa9e4df 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ requests==2.32.4 +requests-unixsocket==0.4.1 diff --git a/setup.py b/setup.py index c44d07b..d94f5d0 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setuptools.setup( name='python-nomad', version='2.1.0', - install_requires=['requests'], + install_requires=['requests', 'requests-unixsocket'], packages=['nomad', 'nomad.api'], url='http://github.com/jrxfive/python-nomad', license='MIT',