mirror of
https://github.com/blw1138/Zordon.git
synced 2026-06-09 13:39:24 -05:00
More jobs API cleanup
This commit is contained in:
+3
-3
@@ -95,7 +95,7 @@ def main():
|
||||
|
||||
new_job = {"name": job_name, "engine_name": args.engine}
|
||||
try:
|
||||
response = found_proxy.post_job_to_server(file_path, new_job)
|
||||
response = found_proxy.create_job(file_path, new_job)
|
||||
except Exception as e:
|
||||
print(f"Error creating job: {e}")
|
||||
exit(1)
|
||||
@@ -113,7 +113,7 @@ def main():
|
||||
while percent_complete < 1.0:
|
||||
# add checks for errors
|
||||
time.sleep(1)
|
||||
running_job_data = found_proxy.get_job_info(job_id)
|
||||
running_job_data = found_proxy.get_job(job_id)
|
||||
percent_complete = running_job_data['percent_complete']
|
||||
sys.stdout.write("\x1b[1A") # Move up 1
|
||||
sys.stdout.write("\x1b[0J") # Clear from cursor to end of screen (optional)
|
||||
@@ -128,4 +128,4 @@ def main():
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
main()
|
||||
|
||||
+6
-6
@@ -45,7 +45,7 @@ Response:
|
||||
|
||||
Known callers:
|
||||
|
||||
- `RenderServerProxy.get_all_jobs()`
|
||||
- `RenderServerProxy.get_jobs()`
|
||||
- `src/ui/main_window.py`
|
||||
|
||||
### `GET /api/jobs/long_poll`
|
||||
@@ -66,7 +66,7 @@ Responses:
|
||||
|
||||
Known callers:
|
||||
|
||||
- `RenderServerProxy.get_all_jobs()` through the background cache updater.
|
||||
- `RenderServerProxy.get_jobs()` through the background cache updater.
|
||||
|
||||
### `GET /api/jobs/status/<status_val>`
|
||||
|
||||
@@ -92,7 +92,7 @@ Returns one job as JSON.
|
||||
|
||||
Known callers:
|
||||
|
||||
- `RenderServerProxy.get_job_info()`
|
||||
- `RenderServerProxy.get_job()`
|
||||
- `add_job.py`
|
||||
- `src/ui/main_window.py`
|
||||
- `src/distributed_job_manager.py`
|
||||
@@ -112,7 +112,7 @@ Returns a list of output filenames for the job.
|
||||
|
||||
Known callers:
|
||||
|
||||
- `RenderServerProxy.get_job_files_list()`
|
||||
- `RenderServerProxy.get_job_files()`
|
||||
- `src/utilities/server_helper.py`
|
||||
|
||||
### `GET /api/jobs/<job_id>/download`
|
||||
@@ -201,7 +201,7 @@ Responses:
|
||||
|
||||
Known callers:
|
||||
|
||||
- `RenderServerProxy.post_job_to_server()`
|
||||
- `RenderServerProxy.create_job()`
|
||||
- `add_job.py`
|
||||
- `src/ui/add_job_window.py`
|
||||
- `src/distributed_job_manager.py`
|
||||
@@ -298,7 +298,7 @@ Returns a multi-server shaped status payload with the local server populated.
|
||||
|
||||
Known callers:
|
||||
|
||||
- `RenderServerProxy.get_data()`
|
||||
- `RenderServerProxy.get_full_status()`
|
||||
- `dashboard.py`
|
||||
|
||||
Review note: this currently reports only the local server. The response shape
|
||||
|
||||
+5
-5
@@ -282,7 +282,7 @@
|
||||
}</code></pre>
|
||||
<p>Known callers:</p>
|
||||
<ul class="callers">
|
||||
<li><code>RenderServerProxy.get_all_jobs()</code></li>
|
||||
<li><code>RenderServerProxy.get_jobs()</code></li>
|
||||
<li><code>src/ui/main_window.py</code></li>
|
||||
</ul>
|
||||
</article>
|
||||
@@ -306,7 +306,7 @@
|
||||
<article class="endpoint">
|
||||
<div class="endpoint-header"><span class="method get">GET</span><span class="path">/api/jobs/<job_id></span></div>
|
||||
<p>Returns one job as JSON.</p>
|
||||
<p>Known callers include <code>RenderServerProxy.get_job_info()</code>, <code>add_job.py</code>, <code>src/ui/main_window.py</code>, <code>src/distributed_job_manager.py</code>, and <code>tests/job_creation_tests.py</code>.</p>
|
||||
<p>Known callers include <code>RenderServerProxy.get_job()</code>, <code>add_job.py</code>, <code>src/ui/main_window.py</code>, <code>src/distributed_job_manager.py</code>, and <code>tests/job_creation_tests.py</code>.</p>
|
||||
</article>
|
||||
|
||||
<article class="endpoint">
|
||||
@@ -317,7 +317,7 @@
|
||||
<article class="endpoint">
|
||||
<div class="endpoint-header"><span class="method get">GET</span><span class="path">/api/jobs/<job_id>/files</span></div>
|
||||
<p>Returns a list of output filenames for the job.</p>
|
||||
<p>Known callers: <code>RenderServerProxy.get_job_files_list()</code> and <code>src/utilities/server_helper.py</code>.</p>
|
||||
<p>Known callers: <code>RenderServerProxy.get_job_files()</code> and <code>src/utilities/server_helper.py</code>.</p>
|
||||
</article>
|
||||
|
||||
<article class="endpoint">
|
||||
@@ -365,7 +365,7 @@
|
||||
<tr><td><code>child_jobs</code></td><td>Optional subjob definitions.</td></tr>
|
||||
<tr><td><code>local_path</code></td><td>Local file path used when posting to localhost.</td></tr>
|
||||
</table>
|
||||
<p>Known callers include <code>RenderServerProxy.post_job_to_server()</code>, <code>add_job.py</code>, <code>src/ui/add_job_window.py</code>, <code>src/distributed_job_manager.py</code>, and integration tests.</p>
|
||||
<p>Known callers include <code>RenderServerProxy.create_job()</code>, <code>add_job.py</code>, <code>src/ui/add_job_window.py</code>, <code>src/distributed_job_manager.py</code>, and integration tests.</p>
|
||||
</article>
|
||||
|
||||
<article class="endpoint">
|
||||
@@ -414,7 +414,7 @@
|
||||
|
||||
<article class="endpoint">
|
||||
<div class="endpoint-header"><span class="method get">GET</span><span class="path">/api/full_status</span></div>
|
||||
<p>Returns a multi-server shaped status payload with the local server populated. Used by <code>RenderServerProxy.get_data()</code> and <code>dashboard.py</code>.</p>
|
||||
<p>Returns a multi-server shaped status payload with the local server populated. Used by <code>RenderServerProxy.get_full_status()</code> and <code>dashboard.py</code>.</p>
|
||||
<div class="note">The response shape suggests an intended future aggregation point, but it currently reports only the local server.</div>
|
||||
</article>
|
||||
|
||||
|
||||
@@ -158,12 +158,12 @@ class RenderServerProxy:
|
||||
# Get System Info:
|
||||
# --------------------------------------------
|
||||
|
||||
def get_all_jobs(self, timeout=5, ignore_token=False):
|
||||
def get_jobs(self, timeout=5, ignore_token=False):
|
||||
if not self.__update_in_background or ignore_token:
|
||||
self.__update_job_cache(timeout, ignore_token)
|
||||
return self.__jobs_cache.copy() if self.__jobs_cache else None
|
||||
|
||||
def get_data(self, timeout=5):
|
||||
def get_full_status(self, timeout=5):
|
||||
return self.request_data('full_status', timeout=timeout)
|
||||
|
||||
def get_status(self):
|
||||
@@ -180,17 +180,17 @@ class RenderServerProxy:
|
||||
# Get Job Info:
|
||||
# --------------------------------------------
|
||||
|
||||
def get_job_info(self, job_id, timeout=5):
|
||||
def get_job(self, job_id, timeout=5):
|
||||
return self.request_data(f'jobs/{job_id}', timeout=timeout)
|
||||
|
||||
def get_job_files_list(self, job_id):
|
||||
def get_job_files(self, job_id):
|
||||
return self.request_data(f'jobs/{job_id}/files')
|
||||
|
||||
# --------------------------------------------
|
||||
# Job Lifecycle:
|
||||
# --------------------------------------------
|
||||
|
||||
def post_job_to_server(self, file_path: Path, job_data, callback=None):
|
||||
def create_job(self, file_path: Path, job_data, callback=None):
|
||||
"""
|
||||
Posts a job to the server.
|
||||
|
||||
|
||||
@@ -172,7 +172,7 @@ class DistributedJobManager:
|
||||
subjob_id = child_key.split('@')[0]
|
||||
subjob_hostname = child_key.split('@')[-1]
|
||||
|
||||
subjob_data = RenderServerProxy(subjob_hostname).get_job_info(subjob_id)
|
||||
subjob_data = RenderServerProxy(subjob_hostname).get_job(subjob_id)
|
||||
if not subjob_data:
|
||||
logger.warning(f"No response from {subjob_hostname}")
|
||||
parent_job.children[child_key]['download_status'] = f'error: No response from {subjob_hostname}'
|
||||
@@ -260,7 +260,7 @@ class DistributedJobManager:
|
||||
subjob['engine_version'] = parent_worker.engine_version
|
||||
logger.debug(f"Posting subjob with frames {subjob['start_frame']}-"
|
||||
f"{subjob['end_frame']} to {server_hostname}")
|
||||
post_results = RenderServerProxy(server_hostname).post_job_to_server(
|
||||
post_results = RenderServerProxy(server_hostname).create_job(
|
||||
file_path=project_path, job_data=subjob)
|
||||
return post_results
|
||||
|
||||
|
||||
@@ -608,8 +608,8 @@ class SubmitWorker(QThread):
|
||||
input_path = Path(latest_engine.perform_presubmission_tasks(input_path))
|
||||
# submit
|
||||
err_msg = ""
|
||||
result = self.window.server_proxy.post_job_to_server(file_path=input_path, job_data=job_json,
|
||||
callback=create_callback)
|
||||
result = self.window.server_proxy.create_job(file_path=input_path, job_data=job_json,
|
||||
callback=create_callback)
|
||||
if not (result and result.ok):
|
||||
err_msg = f"Error posting job to server: {result.text}"
|
||||
|
||||
|
||||
@@ -563,7 +563,7 @@ class MainWindow(QMainWindow):
|
||||
return
|
||||
|
||||
if len(job_ids) == 1:
|
||||
job = next((job for job in self.current_server_proxy.get_all_jobs() if job.get('id') == job_ids[0]), None)
|
||||
job = next((job for job in self.current_server_proxy.get_jobs() if job.get('id') == job_ids[0]), None)
|
||||
if job:
|
||||
display_name = job.get('name', os.path.basename(job.get('input_path', '')))
|
||||
message = f"Are you sure you want to stop job: {display_name}?"
|
||||
@@ -592,7 +592,7 @@ class MainWindow(QMainWindow):
|
||||
return
|
||||
|
||||
if len(job_ids) == 1:
|
||||
job = next((job for job in self.current_server_proxy.get_all_jobs() if job.get('id') == job_ids[0]), None)
|
||||
job = next((job for job in self.current_server_proxy.get_jobs() if job.get('id') == job_ids[0]), None)
|
||||
if job:
|
||||
display_name = job.get('name', os.path.basename(job.get('input_path', '')))
|
||||
message = f"Are you sure you want to delete the job:\n{display_name}?"
|
||||
@@ -627,7 +627,7 @@ class MainWindow(QMainWindow):
|
||||
return
|
||||
|
||||
for job_id in job_ids:
|
||||
job_info = self.current_server_proxy.get_job_info(job_id)
|
||||
job_info = self.current_server_proxy.get_job(job_id)
|
||||
path = os.path.dirname(job_info['output_path'])
|
||||
launch_url(path)
|
||||
|
||||
@@ -666,7 +666,7 @@ class BackgroundUpdater(QThread):
|
||||
ZeroconfServer.get_hostname_properties(x)['api_version'] == API_VERSION]
|
||||
if self.window.current_server_proxy:
|
||||
self.window.job_data[self.window.current_server_proxy.hostname] = \
|
||||
self.window.current_server_proxy.get_all_jobs(ignore_token=False)
|
||||
self.window.current_server_proxy.get_jobs(ignore_token=False)
|
||||
self.needs_update = False
|
||||
self.updated_signal.emit()
|
||||
time.sleep(0.05)
|
||||
|
||||
@@ -17,7 +17,7 @@ def download_missing_frames_from_subjob(local_job, subjob_id, subjob_hostname):
|
||||
try:
|
||||
local_files = [os.path.basename(x) for x in local_job.file_list()]
|
||||
subjob_proxy = RenderServerProxy(subjob_hostname)
|
||||
subjob_files = subjob_proxy.get_job_files_list(job_id=subjob_id) or []
|
||||
subjob_files = subjob_proxy.get_job_files(job_id=subjob_id) or []
|
||||
|
||||
for subjob_filename in subjob_files:
|
||||
if subjob_filename not in local_files:
|
||||
|
||||
@@ -52,8 +52,8 @@ class SubmissionTestCase(unittest.TestCase):
|
||||
'enable_split_jobs': False,
|
||||
}
|
||||
|
||||
response = self.render_server.post_job_to_server(
|
||||
file_path=sample_file_path, job_list=[sample_job])
|
||||
response = self.render_server.create_job(
|
||||
file_path=sample_file_path, job_data=sample_job)
|
||||
self.assertIsNotNone(response, msg='No response from server')
|
||||
self.assertTrue(response.ok, msg=f'Server returned {response.status_code}')
|
||||
|
||||
@@ -68,7 +68,7 @@ class SubmissionTestCase(unittest.TestCase):
|
||||
file_count = 0
|
||||
|
||||
while True:
|
||||
update_response = self.render_server.get_job_info(self.__class__.test_job_id)
|
||||
update_response = self.render_server.get_job(self.__class__.test_job_id)
|
||||
if update_response:
|
||||
print(f"Status: {update_response['status']}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user