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')
|
||||
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
|
||||
|
||||
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
|
||||
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()
|
||||
}
|
||||
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':
|
||||
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:
|
||||
|
||||
Reference in New Issue
Block a user