Make renderer_info threaded again

This commit is contained in:
Brett Williams
2024-08-10 21:20:47 -05:00
parent e757506787
commit 19b01446ea

View File

@@ -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 \ system_installed_versions = [v for v in installed_versions if v['type'] == 'system']
installed_versions[0]['path'] install_path = system_installed_versions[0]['path'] if system_installed_versions else installed_versions[0]['path']
en = engine(install_path) en = engine(install_path)
engine_name = en.name()
result = {
engine_name: {
'is_available': RenderQueue.is_available_for_job(engine_name),
'versions': installed_versions
}
}
if response_type == 'full': # Full dataset - Can be slow if response_type == 'full':
return { with concurrent.futures.ThreadPoolExecutor() as executor:
en.name(): { future_results = {
'is_available': RenderQueue.is_available_for_job(en.name()), 'supported_extensions': executor.submit(en.supported_extensions),
'versions': installed_versions, 'supported_export_formats': executor.submit(en.get_output_formats),
'supported_extensions': engine.supported_extensions(), 'system_info': executor.submit(en.system_info)
'supported_export_formats': en.get_output_formats(),
'system_info': en.system_info()
} }
}
elif response_type == 'standard': # Simpler dataset to reduce response times for key, future in future_results.items():
return { result[engine_name][key] = future.result()
en.name(): {
'is_available': RenderQueue.is_available_for_job(en.name()), return result
'versions': installed_versions,
}
}
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: