Skip to content

Commit a864a9d

Browse files
Merge pull request #1055 from douglasjacobsen/base-classes-in-repo
Move base object classes to object repository
2 parents 2394980 + fc957f7 commit a864a9d

File tree

42 files changed

+890
-354
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+890
-354
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# -------------------------------------------------------------------------
2+
# This is the default ramble repository configuration. It includes the
3+
# builtin ramble base application repository.
4+
#
5+
# Users can override these settings by editing the following files.
6+
#
7+
# Per-ramble-instance settings (overrides defaults):
8+
# $RAMBLE_ROOT/etc/ramble/base_application_repos.yaml
9+
#
10+
# Per-user settings (overrides default and site settings):
11+
# ~/.ramble/base_class_repos.yaml
12+
# -------------------------------------------------------------------------
13+
base_class_repos:
14+
- $ramble/var/ramble/repos/builtin

lib/ramble/ramble/appkit.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616
from llnl.util.filesystem import *
1717

1818
import ramble.language.application_language
19-
from ramble.application import ApplicationBase
20-
from ramble.application_types.executable import ExecutableApplication
19+
from ramble.repository import get_base_class
20+
21+
ExecutableApplication = get_base_class("executable-application")
22+
ApplicationBase = get_base_class("application-base")
23+
2124
from ramble.language.application_language import *
2225
from ramble.language.shared_language import *
2326
from ramble.spec import Spec

lib/ramble/ramble/application_types/__init__.py

Lines changed: 0 additions & 7 deletions
This file was deleted.

lib/ramble/ramble/config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import ramble.schema
5050
import ramble.schema.applications
5151
import ramble.schema.base_application_repos
52+
import ramble.schema.base_class_repos
5253
import ramble.schema.base_modifier_repos
5354
import ramble.schema.base_package_manager_repos
5455
import ramble.schema.base_workflow_manager_repos
@@ -102,6 +103,7 @@
102103
"package_manager_repos": ramble.schema.package_manager_repos.schema,
103104
"workflow_manager_repos": ramble.schema.workflow_manager_repos.schema,
104105
"base_application_repos": ramble.schema.base_application_repos.schema,
106+
"base_class_repos": ramble.schema.base_class_repos.schema,
105107
"base_modifier_repos": ramble.schema.base_modifier_repos.schema,
106108
"base_package_manager_repos": ramble.schema.base_package_manager_repos.schema,
107109
"base_workflow_manager_repos": ramble.schema.base_workflow_manager_repos.schema,

lib/ramble/ramble/error.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,3 +96,67 @@ class SpecError(RambleError):
9696

9797
class RambleCommandError(Exception):
9898
"""Raised when RambleCommand execution fails."""
99+
100+
101+
class ApplicationError(RambleError):
102+
"""
103+
Exception that is raised by applications
104+
"""
105+
106+
107+
class ExecutableNameError(RambleError):
108+
"""
109+
Exception raised when a name collision in executables happens
110+
"""
111+
112+
113+
class FormattedExecutableError(ApplicationError):
114+
"""
115+
Exception raise when there are issues defining formatted executables
116+
"""
117+
118+
119+
class PhaseCycleDetectedError(ApplicationError):
120+
"""
121+
Exception raised when a cycle is detected while ordering phases
122+
"""
123+
124+
125+
class InvalidPhaseError(ApplicationError):
126+
"""
127+
Exception raised when a phase is used but not defined
128+
"""
129+
130+
131+
class ChainCycleDetectedError(ApplicationError):
132+
"""
133+
Exception raised when a cycle is detected in a defined experiment chain
134+
"""
135+
136+
137+
class InvalidChainError(ApplicationError):
138+
"""
139+
Exception raised when a invalid chained experiment is defined
140+
"""
141+
142+
143+
class ObjectValidationError(ApplicationError):
144+
"""Error when an object validator fails"""
145+
146+
147+
class ModifierError(RambleError):
148+
"""
149+
Exception that is raised by modifiers
150+
"""
151+
152+
153+
class InvalidModeError(ModifierError):
154+
"""
155+
Exception raised when an invalid mode is passed
156+
"""
157+
158+
159+
class PackageManagerError(RambleError):
160+
"""
161+
Exception that is raised by package managers
162+
"""

lib/ramble/ramble/language/language_base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
"ramble.package_manager",
3434
"ramble.wm",
3535
"ramble.workflow_manager",
36-
"ramble.application",
36+
"ramble.base_cls",
3737
"ramble.modifier",
3838
]
3939

lib/ramble/ramble/modkit.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,9 @@
1313
from llnl.util.filesystem import *
1414

1515
import ramble.language.modifier_language
16+
import ramble.repository
1617
from ramble.language.modifier_language import *
1718
from ramble.language.shared_language import *
18-
from ramble.modifier import ModifierBase
19-
from ramble.modifier_types.basic import BasicModifier
2019
from ramble.spec import Spec
2120
from ramble.util.command_runner import (
2221
CommandRunner,
@@ -30,3 +29,6 @@
3029
from ramble.util.logger import logger
3130
from ramble.util.logger import logger as tty
3231
from ramble.util.output_capture import OUTPUT_CAPTURE
32+
33+
ModifierBase = ramble.repository.get_base_class("modifier-base")
34+
BasicModifier = ramble.repository.get_base_class("basic-modifier")

lib/ramble/ramble/pipeline.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
import llnl.util.tty as tty
2020
from llnl.util.tty.color import cprint
2121

22-
import ramble.application
2322
import ramble.config
2423
import ramble.expander
24+
import ramble.experiment_result
2525
import ramble.fetch_strategy
2626
import ramble.repository
2727
import ramble.software_environments
@@ -36,6 +36,11 @@
3636
import spack.util.spack_json as sjson
3737
from spack.util.executable import Executable, which
3838

39+
ApplicationBase = ramble.repository.get_obj_class(
40+
"application-base", object_type=ramble.repository.ObjectTypes.base_classes
41+
)
42+
43+
3944
if not ramble.config.get("config:disable_progress_bar", False):
4045
try:
4146
import tqdm
@@ -259,7 +264,7 @@ def _prepare(self):
259264
no_analyze_cnt = 0
260265
for _, app_inst, _ in self._experiment_set.filtered_experiments(self.filters):
261266
if not (app_inst.is_template or app_inst.repeats.is_repeat_base):
262-
if app_inst.get_status() != ramble.application.ExperimentStatus.UNKNOWN:
267+
if app_inst.get_status() != ramble.experiment_result.ExperimentStatus.UNKNOWN:
263268
found_valid_experiment = True
264269
else:
265270
no_analyze_cnt += 1
@@ -369,7 +374,7 @@ def _prepare(self):
369374

370375
excluded_secrets = set()
371376
if not self.include_secrets:
372-
excluded_secrets.add(ramble.application.ApplicationBase.license_inc_name)
377+
excluded_secrets.add(ApplicationBase.license_inc_name)
373378

374379
fs.mkdirp(archive_shared)
375380
for root, _, files in os.walk(self.workspace.shared_dir):

lib/ramble/ramble/pkgmankit.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@
1515
from llnl.util.filesystem import *
1616

1717
import ramble.language.package_manager_language
18+
import ramble.repository
1819
from ramble.language.package_manager_language import *
1920
from ramble.language.shared_language import *
20-
from ramble.package_manager import PackageManagerBase
2121
from ramble.software_environments import ExternalEnvironment
22+
from ramble.software_info import SoftwareInfo
2223
from ramble.spec import Spec
2324
from ramble.util.command_runner import (
2425
CommandRunner,
@@ -31,3 +32,5 @@
3132
from ramble.util.logger import logger
3233
from ramble.util.logger import logger as tty
3334
from ramble.util.output_capture import OUTPUT_CAPTURE
35+
36+
PackageManagerBase = ramble.repository.get_base_class("package-manager-base")

lib/ramble/ramble/repository.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
"modifiers",
6363
"package_managers",
6464
"workflow_managers",
65+
"base_classes",
6566
"base_applications",
6667
"base_modifiers",
6768
"base_package_managers",
@@ -108,6 +109,14 @@
108109
"accepted_configs": ["workflow_manager_repo.yaml", unified_config],
109110
"singular": "workflow manager",
110111
},
112+
ObjectTypes.base_classes: {
113+
"file_name": "base_class.py",
114+
"dir_name": "base_classes",
115+
"abbrev": "base_cls",
116+
"config_section": "base_class_repos",
117+
"accepted_configs": ["base_class_repo.yaml", unified_config],
118+
"singular": "base class",
119+
},
111120
ObjectTypes.base_applications: {
112121
"file_name": "base_application.py",
113122
"dir_name": "base_applications",
@@ -163,6 +172,11 @@ def _workflow_managers(repo_dirs=None):
163172
return _gen_path(repo_dirs=repo_dirs, obj_type=ObjectTypes.workflow_managers)
164173

165174

175+
def _base_classes(repo_dirs=None):
176+
"""Get the base classes singleton RepoPath instance for Ramble."""
177+
return _gen_path(repo_dirs=repo_dirs, obj_type=ObjectTypes.base_classes)
178+
179+
166180
def _base_apps(repo_dirs=None):
167181
"""Get the base applications singleton RepoPath instance for Ramble."""
168182
return _gen_path(repo_dirs=repo_dirs, obj_type=ObjectTypes.base_applications)
@@ -188,6 +202,7 @@ def _base_workflow_managers(repo_dirs=None):
188202
ObjectTypes.modifiers: llnl.util.lang.Singleton(_mods),
189203
ObjectTypes.package_managers: llnl.util.lang.Singleton(_package_managers),
190204
ObjectTypes.workflow_managers: llnl.util.lang.Singleton(_workflow_managers),
205+
ObjectTypes.base_classes: llnl.util.lang.Singleton(_base_classes),
191206
ObjectTypes.base_applications: llnl.util.lang.Singleton(_base_apps),
192207
ObjectTypes.base_modifiers: llnl.util.lang.Singleton(_base_mods),
193208
ObjectTypes.base_package_managers: llnl.util.lang.Singleton(_base_package_managers),
@@ -272,6 +287,16 @@ def get(spec, object_type=default_type):
272287
return paths[object_type].get(spec)
273288

274289

290+
def get_base_class(spec):
291+
"""Convenience wrapper around ``ramble.repository.get_obj_class()`` for base classes."""
292+
return paths[ObjectTypes.base_classes].get_obj_class(spec)
293+
294+
295+
def get_obj_class(spec, object_type=default_type):
296+
"""Convenience wrapper around ``ramble.repository.get_obj_class()``."""
297+
return paths[object_type].get_obj_class(spec)
298+
299+
275300
def set_path(repo, object_type=default_type):
276301
"""Set the path singleton to a specific value.
277302

0 commit comments

Comments
 (0)