Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ optionally the following CLI flags exist for custom paths:
-s, --shifter-interface-config Set default yaml config for this interface

-d, --daq-config-directory Where do you want to download configs
from/where are they located
to

--session-name Name of daq session

--base-url Base URL for the interface, not used for
Expand All @@ -38,8 +38,7 @@ optionally the following CLI flags exist for custom paths:
--debug Set the debug log level

-l, --local-config Use local config files instead of
downloading from the github, expert use
only! [flag option]
downloading. Should be a path to wherever your local configs are kept

--help Show help
```
Expand Down
1 change: 0 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ where = ["src"]

[project.scripts]
runconf-shifter-ui = "runconf_ui.apps.__main__shifter_view__:main"
py_oks_dump = "runconf_ui.apps.__main__oks_dump__:main"

[project.optional-dependencies]
dev = [
Expand Down
31 changes: 0 additions & 31 deletions src/runconf_ui/apps/__main__oks_dump__.py

This file was deleted.

87 changes: 41 additions & 46 deletions src/runconf_ui/apps/__main__shifter_view__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,27 @@
Main application for the shifter view interface.
"""

from runconf_ui.screens.shifter_view_screen import ShifterViewScreen
from runconf_ui.utils.file_cleaner import clean_old_files
import logging
import os
from dataclasses import dataclass
from datetime import datetime
from pathlib import Path
from typing import ClassVar

import click
import pkg_resources
from rich import print
from textual.app import App

from runconf_ui.runconf_ui_configuration.shifter_config_reader import (
ShifterConfigReader,
)
from runconf_ui.runconf_ui_controllers.runconf_ui_state import (
ShifterInterfaceState,
)
from runconf_ui.screens.quit_screen import QuitScreen

from textual.app import App
import click
from rich import print

import os
from pathlib import Path
import logging
from datetime import datetime
import pkg_resources
from runconf_ui.screens.shifter_view_screen import ShifterViewScreen
from runconf_ui.utils.file_cleaner import clean_old_files


class ShifterView(App):
Expand All @@ -29,7 +31,7 @@ class ShifterView(App):
"""

CSS_PATH = "shifter_view.tcss"
BINDINGS = [("ctrl+q", "quit", "Quit")]
BINDINGS: ClassVar = [("ctrl+q", "quit", "Quit")]

def __init__(self, *args, **kwargs):
"""Constructor for the ShifterView class.
Expand All @@ -49,10 +51,11 @@ def __init__(self, *args, **kwargs):
self._exit_message = ""

# Read kwargs
use_local = kwargs.get("use_local", False)
local_config = kwargs.get("local_config", None)

if use_local:
if local_config is not None:
interface_config = f"{Path(__file__).parent.absolute()}/../config_files/local_configuration.yml"
kwargs["daq_config_directory"] = local_config
else:
interface_config = f"{Path(__file__).parent.absolute()}/../config_files/ehn1_configuration.yml"

Expand All @@ -75,7 +78,7 @@ def __init__(self, *args, **kwargs):
self.application_controller = ShifterInterfaceState(
apparatus=apparatus,
shifter_interface_config=interface_config,
use_local=use_local,
use_local=local_config is not None,
)

self._init_logger(kwargs.get("log_level", "INFO"))
Expand Down Expand Up @@ -146,6 +149,20 @@ def exit_message(self) -> str:
return self._exit_message


@dataclass
class CliArgs:
apparatus: str | None = None
session_config: str | None = None
daq_config_directory: str | None = None
session_name: str | None = None
base_url: str | None = None
operation_url: str | None = None
log_level: str = "INFO"
local_config: str | None = None

def as_kwargs(self):
return {k: v for k, v in vars(self).items() if v is not None}

@click.command()
@click.option(
"-a",
Expand All @@ -165,7 +182,7 @@ def exit_message(self) -> str:
@click.option(
"-d",
"--daq-config-directory",
"download_directory",
"daq_config_directory",
required=False,
help="Where do you want to download configs from/where are they located",
)
Expand Down Expand Up @@ -194,39 +211,17 @@ def exit_message(self) -> str:
@click.option(
"-l",
"--local-config",
"use_local",
"local_config",
required=False,
is_flag=True,
help="Use local config files instead of downloading from the github, expert use only!",
help="Use local config files instead of downloading from the github, should be a path to the LOCAL config repo, expert use only!",
)
def main(
apparatus,
session_config,
download_directory,
session_name,
base_url,
operation_url,
log_level,
use_local,
):
def main(**kwargs):
# Slghtly complicated here, as we need to remove unused args
cli_args = {
"apparatus": apparatus,
"session_config": session_config,
"download_directory": download_directory,
"session_name": session_name,
"base_url": base_url,
"operation_url": operation_url,
"log_level": log_level,
"use_local": use_local,
}

cli_args = {k: v for k, v in cli_args.items() if v is not None}

app = ShifterView(**cli_args)
cli_args = CliArgs(**kwargs)

app = ShifterView(**cli_args.as_kwargs())
app.run()
print(app.exit_message())


if __name__ == "__main__":
main()
main()
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from pathlib import Path
import os
from pathlib import Path

from runconf_ui.configuration_manager_interfaces.management_interface import (
ManagementInterface,
)
Expand All @@ -10,7 +11,6 @@
ShifterInterfaceState,
)

import logging

class LocalDaqConfManager(ManagementInterface):
def __init__(self, application_controller: ShifterInterfaceState):
Expand All @@ -21,7 +21,7 @@ def __init__(self, application_controller: ShifterInterfaceState):

self.config_directories = [
Path(p)
for p in f"{self.application_controller.shifter_interface_config.download_directory}".split(
for p in f"{self.application_controller.shifter_interface_config.daq_config_directory}".split(
":"
)
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@
Simple wrapper for talking to config-management
"""

import logging
from abc import ABC, abstractmethod
from pathlib import Path

import runconf_ui.daq_config_interfaces.actions.actions as ca
from runconf_ui.daq_config_interfaces.daq_config_file_io.daq_config_wrapper import (
DaqConfigurationWrapper,
)
from runconf_ui.runconf_ui_controllers.runconf_ui_state import (
ShifterInterfaceState,
)
import runconf_ui.daq_config_interfaces.actions.actions as ca

import logging
from abc import ABC, abstractmethod
from pathlib import Path


class ManagementInterface(ABC):
Expand Down Expand Up @@ -56,5 +56,4 @@ def find_session(cls, file_name: str):
file_sessions = ca.GetDalsOfClassAction(config_file)("Session")
if file_sessions:
return ca.GetAttributeAction(config_file)(file_sessions[0], "id")
else:
return None
return None
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,22 @@
"Could not import runconftool or config_management. Please install runconftools or config_management"
)

import logging
import re
import shutil
import traceback
from pathlib import Path

from runconf_ui.configuration_manager_interfaces.management_interface import (
ManagementInterface,
)
from runconf_ui.daq_config_interfaces.daq_config_file_io.daq_conf_path_reader import (
DaqConfPathReader,
)
from runconf_ui.exceptions import CiderInvalidRepoException
from runconf_ui.runconf_ui_controllers.runconf_ui_state import (
ShifterInterfaceState,
)
from runconf_ui.configuration_manager_interfaces.management_interface import (
ManagementInterface,
)

import re
from pathlib import Path
import logging
import traceback
import shutil

from runconf_ui.exceptions import CiderInvalidRepoException


class RemoteDaqConfManager(ManagementInterface):
Expand All @@ -41,7 +40,7 @@ def __init__(self, application_controller: ShifterInterfaceState):
try:
self.conf_pool = ConfPool(
str(
self.application_controller.shifter_interface_config.download_directory
self.application_controller.shifter_interface_config.daq_config_directory
),
apparatus=self.application_controller.apparatus,
operation_url=self.application_controller.shifter_interface_config.operation_url,
Expand Down Expand Up @@ -77,7 +76,7 @@ def open_file(self, daq_configuration: str):
CiderInvalidRepoException(e)


detector_config_path = Path(self.application_controller.shifter_interface_config.download_directory) / 'runconf-ui-settings' / f"{self.application_controller.apparatus}.yml"
detector_config_path = Path(self.application_controller.shifter_interface_config.daq_config_directory) / 'runconf-ui-settings' / f"{self.application_controller.apparatus}.yml"
if not detector_config_path.exists():
raise FileNotFoundError(f"Detector configuration file {detector_config_path} does not exist")

Expand All @@ -92,7 +91,7 @@ def open_file(self, daq_configuration: str):
return super().open_file(self.application_controller.direct_config_path)

config_list = config_path_reader(
self.application_controller.shifter_interface_config.download_directory
self.application_controller.shifter_interface_config.daq_config_directory
)

valid_config_files = [
Expand Down Expand Up @@ -138,11 +137,11 @@ def reset(self):
self.conf_pool.repo.close()

shutil.rmtree(
self.application_controller.shifter_interface_config.download_directory
self.application_controller.shifter_interface_config.daq_config_directory
)

Path(
self.application_controller.shifter_interface_config.download_directory
self.application_controller.shifter_interface_config.daq_config_directory
).mkdir(parents=True, exist_ok=True)

self.__init__(self.application_controller)
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import traceback
from abc import ABC, abstractmethod
from typing import Any

from runconf_ui.daq_config_interfaces.daq_config_file_io.daq_config_wrapper import (
DaqConfigurationWrapper,
)
from runconf_ui.exceptions import CiderBadActionException

from abc import ABC, abstractmethod
from typing import Any
import traceback

# The idea here is to define an interface for actions on a configuration,
# currently this is very simple but there is scope to add some complexity

Expand All @@ -29,8 +29,7 @@ def action(self, *args, **kwargs):

def __call__(self, *args, **kwargs) -> Any:
try:
a = self.action(*args, **kwargs)
return a
return self.action(*args, **kwargs)
except Exception:
raise CiderBadActionException(traceback.format_exc())

Expand Down
Loading