Commit a3bde1fd authored by Duggan, John's avatar Duggan, John
Browse files

Fix NERSC run

parent ebb2545e
Loading
Loading
Loading
Loading
Loading
+431 −469

File changed.

Preview size limit exceeded, changes collapsed.

+1 −1
Original line number Diff line number Diff line
[project]
name = "ips-fastran-gui"
version = "0.3.2"
version = "0.4.0"
description = "IPS Fastran GUI Project"
authors = []
readme = "README.md"
+14 −4
Original line number Diff line number Diff line
@@ -3,9 +3,9 @@
import logging
import os
import zipfile
from typing import List, Tuple
from typing import Callable, List, Tuple

from nova.galaxy import Dataset, Parameters, Tool
from nova.galaxy import Connection, Dataset, Parameters, Tool
from nova.galaxy.interfaces import BasicTool

from ips_fastran_gui.app.models.main_model import MainModel
@@ -17,26 +17,36 @@ logger.setLevel(logging.INFO)
class IPSFastranTool(BasicTool):
    """Class that prepares IPS Fastran tool."""

    def __init__(self, model: MainModel) -> None:
    def __init__(self, model: MainModel, store_factory: Callable, galaxy_url: str, galaxy_api_key: str) -> None:
        super().__init__()
        self.model = model

        connection = Connection(galaxy_url, galaxy_api_key).connect()
        self.store = connection.get_data_store("ips_fastran")

    def prepare_tool(self) -> Tuple[Tool, Parameters]:
        # Prepare file ingestion into Galaxy
        self.inputs_dataset = Dataset(name="inputs.zip")
        with zipfile.ZipFile("input.zip", "w") as zip_obj:
            for file in self.model.config.input_files:
                zip_obj.writestr(file["name"], file["content"].encode("latin1"))
        self.inputs_dataset.path = "input.zip"
        self.config_dataset = Dataset(name="config.txt")
        self.config_dataset.set_content(self.model.config.file_contents)

        # Create the tool instance
        tool_params = Parameters()
        tool_params.add_input(name="inputs", value=self.inputs_dataset)
        tool_params.add_input(name="config", value=self.config_dataset)
        tool_params.add_input(name="shot_number", value=self.model.config.shot_number)
        tool_params.add_input(name="time_id", value=self.model.config.time_id)
        tool_params.add_input(name="__job_resource|__job_resource__select", value="yes")
        tool_params.add_input(name="__job_resource|nodes", value=self.model.resource_params.number_of_nodes)
        tool_params.add_input(name="__job_resource|ntasks_per_node", value=self.model.resource_params.tasks_per_node)
        tool_params.add_input(name="__job_resource|qos", value=self.model.resource_params.partition)
        tool_params.add_input(name="__job_resource|time", value=self.model.resource_params.time_limit)
        tool_params.add_input(name="__job_resource|remote_resource_cloud_nersc", value="nersc")
        self.tool = Tool(id="fusion_ips_fastran")
        self.tool = Tool(id="fusion-ips-fastran")

        return self.tool, tool_params

+11 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ class Config(BaseModel):
    other interfaces for improved clarity and usability.
    """

    input_files: List[Dict[str, Any]] = Field(default=[], title="Input Files")
    shot_number: str = Field(default="000001", title="Shot Number")
    time_id: str = Field(default="00001", title="Time ID")
    file_contents: str = Field(default="")
@@ -33,6 +34,7 @@ class ResourceParameters(BaseModel):
    partition: str = Field(default="debug", title="Partition")
    number_of_nodes: int = Field(default=1, ge=1, le=2, title="Number of Nodes")
    time_limit: int = Field(default=10, ge=1, le=10080, title="Time Limit (minutes)")
    tasks_per_node: int = Field(default=1, ge=0, le=128, title="Number of Tasks Per Node (0 to disable)")


class PlotJSON(BaseModel):
@@ -55,6 +57,15 @@ class MainModel:
    def set_config(self, json_data: str) -> None:
        self.config.file_contents = json_data

    def set_files(self, files: List[Dict[str, Any]]) -> None:
        if not files:
            self.config.input_files = []

        for file in files:
            decoded_file = file.copy()
            decoded_file["content"] = decoded_file["content"].decode("latin1")
            self.config.input_files.append(decoded_file)

    def set_plot(self, json_data: str) -> None:
        self.plot_json = PlotJSON.model_validate_json(json_data)

+1 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ class ExecutionViewModel:
    def __init__(self, model: MainModel, _binding: BindingInterface):
        self.model = model
        galaxy_url, galaxy_api_key = parse_args()
        self.tool = IPSFastranTool(model)
        self.tool = IPSFastranTool(model, self.store_factory, galaxy_url, galaxy_api_key)
        self.tool_runner = ToolRunner("ips_fastran", self.tool, self.store_factory, galaxy_url, galaxy_api_key)
        self.tool_runner.progress_signal.connect(self.on_progress)
        self.completion_signal = signal("ips_fastran_complete")
Loading