mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 08:48:13 +00:00
Make renderer_info threaded again
This commit is contained in:
@@ -377,43 +377,45 @@ def status():
|
|||||||
|
|
||||||
@server.get('/api/renderer_info')
|
@server.get('/api/renderer_info')
|
||||||
def renderer_info():
|
def renderer_info():
|
||||||
|
|
||||||
response_type = request.args.get('response_type', 'standard')
|
response_type = request.args.get('response_type', 'standard')
|
||||||
|
if response_type not in ['full', 'standard']:
|
||||||
|
raise ValueError(f"Invalid response_type: {response_type}")
|
||||||
|
|
||||||
def process_engine(engine):
|
def process_engine(engine):
|
||||||
try:
|
try:
|
||||||
# Get all installed versions of the engine
|
# Get all installed versions of the engine
|
||||||
installed_versions = EngineManager.all_versions_for_engine(engine.name())
|
installed_versions = EngineManager.all_versions_for_engine(engine.name())
|
||||||
if installed_versions:
|
if not installed_versions:
|
||||||
# Use system-installed versions to avoid permission issues
|
return None
|
||||||
system_installed_versions = [x for x in installed_versions if x['type'] == 'system']
|
|
||||||
install_path = system_installed_versions[0]['path'] if system_installed_versions else \
|
|
||||||
installed_versions[0]['path']
|
|
||||||
|
|
||||||
en = engine(install_path)
|
system_installed_versions = [v for v in installed_versions if v['type'] == 'system']
|
||||||
|
install_path = system_installed_versions[0]['path'] if system_installed_versions else installed_versions[0]['path']
|
||||||
|
|
||||||
if response_type == 'full': # Full dataset - Can be slow
|
en = engine(install_path)
|
||||||
return {
|
engine_name = en.name()
|
||||||
en.name(): {
|
result = {
|
||||||
'is_available': RenderQueue.is_available_for_job(en.name()),
|
engine_name: {
|
||||||
'versions': installed_versions,
|
'is_available': RenderQueue.is_available_for_job(engine_name),
|
||||||
'supported_extensions': engine.supported_extensions(),
|
'versions': installed_versions
|
||||||
'supported_export_formats': en.get_output_formats(),
|
}
|
||||||
'system_info': en.system_info()
|
}
|
||||||
}
|
|
||||||
|
if response_type == 'full':
|
||||||
|
with concurrent.futures.ThreadPoolExecutor() as executor:
|
||||||
|
future_results = {
|
||||||
|
'supported_extensions': executor.submit(en.supported_extensions),
|
||||||
|
'supported_export_formats': executor.submit(en.get_output_formats),
|
||||||
|
'system_info': executor.submit(en.system_info)
|
||||||
}
|
}
|
||||||
elif response_type == 'standard': # Simpler dataset to reduce response times
|
|
||||||
return {
|
for key, future in future_results.items():
|
||||||
en.name(): {
|
result[engine_name][key] = future.result()
|
||||||
'is_available': RenderQueue.is_available_for_job(en.name()),
|
|
||||||
'versions': installed_versions,
|
return result
|
||||||
}
|
|
||||||
}
|
|
||||||
else:
|
|
||||||
raise AttributeError(f"Invalid response_type: {response_type}")
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f'Error fetching details for {engine.name()} renderer: {e}')
|
logger.error(f'Error fetching details for {engine.name()} renderer: {e}')
|
||||||
return {}
|
raise e
|
||||||
|
|
||||||
renderer_data = {}
|
renderer_data = {}
|
||||||
with concurrent.futures.ThreadPoolExecutor() as executor:
|
with concurrent.futures.ThreadPoolExecutor() as executor:
|
||||||
|
|||||||
Reference in New Issue
Block a user