Skip to content
Snippets Groups Projects
Commit 5b1c773e authored by Daniel Lyons's avatar Daniel Lyons
Browse files

Add hide_files parameter to CapabilityRequest.__json__

This greatly improves the performance of the active requests page, since
it doesn't need to actually fetch all the files under each version to
render.
parent 2a309443
No related branches found
No related tags found
2 merge requests!1431pick up recent patches to 2.8.2,!1410Add hide_files parameter to CapabilityRequest.__json__
Pipeline #10648 passed
......@@ -1329,10 +1329,13 @@ class CapabilityRequest(JSONSerializable):
)
# Pyramid support method: must accept a "request" argument that is unused by us
def __json__(self, request=None) -> dict:
def __json__(self, request=None, **kwargs) -> dict:
# Calculate state to ensure it's up-to-date
self.determine_state()
# are we loading files?
hide_files = 'hide_files' in kwargs and kwargs['hide_files']
return {
"type": self.__class__.__name__,
"id": self.id,
......@@ -1344,7 +1347,7 @@ class CapabilityRequest(JSONSerializable):
"ingested": self.ingested,
"created_at": self.created_at.isoformat(),
"updated_at": self.updated_at.isoformat(),
"versions": [v.__json__() for v in self.versions],
"versions": [v.__json__(hide_files=hide_files) for v in self.versions],
"status_url": self.status_url,
"system_messages": self.system_messages,
}
......@@ -1400,7 +1403,8 @@ class CapabilityVersion(JSONSerializable):
return self.executions[-1] if len(self.executions) else None
# Pyramid support method: must accept a "request" argument that is unused by us
def __json__(self, request=None) -> dict:
def __json__(self, request=None, **kwargs) -> dict:
hide_files = 'hide_files' in kwargs and kwargs['hide_files']
return {
"type": self.__class__.__name__,
"capability_request_id": self.capability_request_id,
......@@ -1410,7 +1414,7 @@ class CapabilityVersion(JSONSerializable):
"parameters": self.parameters,
"workflow_metadata": self.workflow_metadata,
"sealed": self.sealed,
"files": [file.__json__() for file in self.files],
"files": [file.__json__() for file in self.files] if not hide_files else [],
"capability_name": self.capability.name if self.capability else None,
"status_url": self.request.status_url,
"internal_notes": self.internal_notes,
......
......@@ -28,7 +28,7 @@ from typing import Dict, List, Optional
import transaction
from sqlalchemy import desc, text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import Session
from sqlalchemy.orm import Session, selectinload, defer
from workspaces.capability.enums import CapabilityRequestState, QueueState
from workspaces.capability.helpers_interfaces import ParameterIF
......@@ -378,6 +378,7 @@ class CapabilityInfo:
"""
default_query = (
self.session.query(CapabilityRequest)
.options(selectinload(CapabilityRequest.versions))
.filter_by(capability_name=capability_name)
.filter(CapabilityRequest.state != "Complete")
.filter(CapabilityRequest.sealed == False)
......@@ -400,7 +401,7 @@ class CapabilityInfo:
json_list = []
for request in active_list:
json_list.append(request.__json__())
json_list.append(request.__json__(hide_files=True))
return {"active_requests": json_list}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment