diff --git a/shared/workspaces/workspaces/capability/schema.py b/shared/workspaces/workspaces/capability/schema.py index dd466cc8513b9dcc1e7f44f9ecb2efbf6698b438..f11ed424c112af2e15f2daeab3c7b33289f420c7 100644 --- a/shared/workspaces/workspaces/capability/schema.py +++ b/shared/workspaces/workspaces/capability/schema.py @@ -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, diff --git a/shared/workspaces/workspaces/capability/services/capability_info.py b/shared/workspaces/workspaces/capability/services/capability_info.py index 04290e4648b4789c47479bc89bf67a35ed7e420d..ada1ac9833da65bb5f6ccfa9d96d4eee9a510e4f 100644 --- a/shared/workspaces/workspaces/capability/services/capability_info.py +++ b/shared/workspaces/workspaces/capability/services/capability_info.py @@ -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}