Skip to content

Commit 6a99e03

Browse files
V0.5routes update
* fix: tag name * feat: support non status response of submit job and delay on get results * fix: add some waiting for job to be ready * fix: change test model * fix: helper methods
1 parent deec0c2 commit 6a99e03

File tree

5 files changed

+36
-14
lines changed

5 files changed

+36
-14
lines changed

modzy/jobs.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,15 +172,15 @@ def block_until_complete(self, job, timeout=60, poll_interval=5):
172172
"""
173173
identifier = Job._coerce_identifier(job)
174174
endby = time.time() + timeout if (timeout is not None) else None
175-
while True: # poll at least once
175+
while True: # wait one poll at least once
176+
self.logger.debug("waiting... %g", poll_interval)
177+
time.sleep(poll_interval)
176178
job = self.get(identifier)
177179
self.logger.debug("job %s", job)
178180
if job.status not in (Jobs.status.SUBMITTED, Jobs.status.IN_PROGRESS):
179181
return job
180182
if (endby is not None) and (time.time() > endby - poll_interval):
181183
raise Timeout('timed out before completion')
182-
self.logger.debug("waiting... %g", poll_interval)
183-
time.sleep(poll_interval)
184184
# TODO: should probably ramp up poll_interval as wait time increases
185185

186186
def submit_text(self, model, version, source, source_name='job'):
@@ -608,6 +608,10 @@ class Job(ApiObject):
608608
key name (``job.job_identifier`` or ``job.jobIdentifier``). Alternatively, the original
609609
"camelCase" JSON key can be used with bracketed key access notation (``job['jobIdentifier']``).
610610
"""
611+
def __init__(self, json_obj, api_client=None):
612+
if 'status' not in json_obj:
613+
json_obj['status'] = Jobs.status.SUBMITTED
614+
super().__init__(json_obj, api_client)
611615

612616
@classmethod
613617
def _coerce_identifier(cls, maybe_job):

tests/test_jobs.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
import os
66
import dotenv
77
import pytest
8+
import time
89
from datetime import datetime, timedelta
910
from modzy import ApiClient, error
11+
from modzy.jobs import Jobs
1012

1113
dotenv.load_dotenv()
1214

@@ -83,7 +85,7 @@ def test_get_job_history_by_date(client, logger):
8385
try:
8486
client.jobs.get_history(**params)
8587
except error.ApiError as ae:
86-
logger.debug("jobs history: by %s %d", params, ae)
88+
logger.debug("jobs history: by %s %s", params, ae)
8789
api_error = ae
8890
assert api_error
8991
# by start and end date
@@ -97,7 +99,7 @@ def test_get_job_history_by_date(client, logger):
9799
try:
98100
client.jobs.get_history(**params)
99101
except error.ApiError as ae:
100-
logger.debug("jobs history: by %s %d", params, ae)
102+
logger.debug("jobs history: by %s %s", params, ae)
101103
api_error = ae
102104
assert api_error
103105

@@ -119,6 +121,7 @@ def test_get_job_history_by_status(client, logger):
119121
# by pending
120122
params = {'status': "pending"}
121123
client.jobs.submit_text(MODEL_ID, '0.0.27', {'input.txt': 'Modzy is great!'})
124+
time.sleep(5)
122125
jobs = client.jobs.get_history(**params)
123126
logger.debug("jobs history: by %s %d", params, len(jobs))
124127
assert len(jobs)
@@ -157,18 +160,25 @@ def test_submit_job(client, logger):
157160
def test_get_job(client, logger):
158161
job = client.jobs.submit_text(MODEL_ID, '0.0.27', {'input.txt': 'Modzy is great!'})
159162
logger.debug("job %s", job)
163+
time.sleep(5)
160164
job = client.jobs.get(job.job_identifier) # by id
161165
logger.debug("job copy by id %s", job)
162166
assert job.job_identifier
163-
assert job.status == client.jobs.status.SUBMITTED
164-
167+
assert job.status
168+
165169

166170
def test_cancel_job(client, logger):
167171
job = client.jobs.submit_text_bulk(MODEL_ID, '0.0.27', {
168172
str(i): {'input.txt': 'Modzy is great!'}
169173
for i in range(2)
170-
})
171-
logger.debug("job before cancel %s", job)
172-
job = client.jobs.cancel(job.job_identifier)
173-
logger.debug("job after cancel %s", job)
174-
assert job.status == client.jobs.status.CANCELED
174+
})
175+
time.sleep(5)
176+
job = client.jobs.get(job.job_identifier) # by id
177+
logger.debug("job %s", job)
178+
if job.status != Jobs.status.COMPLETED:
179+
logger.debug("job before cancel %s", job)
180+
job = client.jobs.cancel(job.job_identifier)
181+
logger.debug("job after cancel %s", job)
182+
183+
assert job.status == client.jobs.status.CANCELED or job.status == client.jobs.status.COMPLETED
184+

tests/test_models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def test_get_single_model(client, logger):
5656
assert model.modelId == model_copy.modelId
5757

5858
def test_get_model_by_name(client, logger):
59-
model = client.models.get_by_name("Sentiment Analysis") # by name
59+
model = client.models.get_by_name("Military Equipment Classification") # by name
6060
logger.debug("model_modelId: %s", model.modelId)
6161
assert model.modelId
6262
logger.debug("model_latestVersion: %s", model.latestVersion)

tests/test_results.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@
1616
MODEL_ID = 'ed542963de' # sentiment-analysis
1717
BLOCK_TIMEOUT = 600 # how long to wait until giving up on real api
1818

19+
@pytest.fixture()
20+
def client():
21+
return ApiClient(base_url=BASE_URL, api_key=API_KEY)
22+
23+
@pytest.fixture()
24+
def logger():
25+
return logging.getLogger(__name__)
26+
1927
def test_get_results(client, logger):
2028
job = client.jobs.submit_text(MODEL_ID, '0.0.27', {'input.txt': 'Modzy is great!'})
2129
logger.debug("job %s", job)

tests/test_tags.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def test_get_all_tags(client, logger):
3636

3737

3838
def test_get_tags_and_models(client, logger):
39-
tags, models = client.tags.get_tags_and_models('computer-vision') # by identifier
39+
tags, models = client.tags.get_tags_and_models('computer_vision') # by identifier
4040
logger.debug("tags by computer_vision: %d", len(models))
4141
for tag in tags:
4242
logger.debug("tag: %s", tag)

0 commit comments

Comments
 (0)