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')
def renderer_info():
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):
try:
# Get all installed versions of the engine
installed_versions = EngineManager.all_versions_for_engine(engine.name())
if installed_versions:
# Use system-installed versions to avoid permission issues
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']
if not installed_versions:
return None
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']
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
return {
en.name(): {
'is_available': RenderQueue.is_available_for_job(en.name()),
'versions': installed_versions,
'supported_extensions': engine.supported_extensions(),
'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 {
en.name(): {
'is_available': RenderQueue.is_available_for_job(en.name()),
'versions': installed_versions,
}
}
else:
raise AttributeError(f"Invalid response_type: {response_type}")
for key, future in future_results.items():
result[engine_name][key] = future.result()
return result
except Exception as e:
logger.error(f'Error fetching details for {engine.name()} renderer: {e}')
return {}
raise e
renderer_data = {}
with concurrent.futures.ThreadPoolExecutor() as executor: