Skip to content
Merged
Show file tree
Hide file tree
Changes from 15 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
22 changes: 22 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,27 @@
"zocalo.dlq.rabbitmq = dlstbx.health_checks.rabbitmq:check_rabbitmq_dlq",
]

mimas_scenario_handlers = [
"cloud = dlstbx.mimas.core:handle_cloud",
"eiger_screening = dlstbx.mimas.core:handle_eiger_screening",
"eiger_start = dlstbx.mimas.core:handle_eiger_start",
"eiger_end = dlstbx.mimas.core:handle_eiger_end",
"i19_pilatus_start = dlstbx.mimas.i19:handle_i19_start_pilatus",
"i19_eiger_start = dlstbx.mimas.i19:handle_i19_start_eiger",
"i19_pilatus_end = dlstbx.mimas.i19:handle_i19_end_pilatus",
"i19_eiger_end = dlstbx.mimas.i19:handle_i19_end_eiger",
"i19_end = dlstbx.mimas.i19:handle_i19_end",
"pilatus_end = dlstbx.mimas.core:handle_pilatus_end",
"pilatus_gridscan_start = dlstbx.mimas.core:handle_pilatus_gridscan_start",
"pilatus_not_gridscan_start = dlstbx.mimas.core:handle_pilatus_not_gridscan_start",
"pilatus_screening = dlstbx.mimas.core:handle_pilatus_screening",
"rotation_end = dlstbx.mimas.core:handle_rotation_end",
"vmxi_end = dlstbx.mimas.vmxi:handle_vmxi_end",
"vmxi_gridscan = dlstbx.mimas.vmxi:handle_vmxi_gridscan",
"vmxi_rotation = dlstbx.mimas.vmxi:handle_vmxi_rotation_scan",
"vmxi_start = dlstbx.mimas.vmxi:handle_vmxi_start",
]


def get_git_revision():
"""Try to obtain the current git revision number"""
Expand Down Expand Up @@ -220,6 +241,7 @@ def get_git_revision():
"thumbnail = dlstbx.services.images:thumbnail",
],
"zocalo.wrappers": sorted(known_wrappers),
"zocalo.mimas.handlers": sorted(mimas_scenario_handlers),
},
packages=find_packages("src"),
package_dir={"": "src"},
Expand Down
3 changes: 1 addition & 2 deletions src/dlstbx/cli/mimas.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import argparse

import dlstbx.ispybtbx
import dlstbx.mimas.core

_readable = {
dlstbx.mimas.MimasEvent.START: "start of data collection",
Expand Down Expand Up @@ -104,7 +103,7 @@ def run(args=None):

for dcid in args.dcids:
for scenario in get_scenarios(dcid):
actions = dlstbx.mimas.core.run(scenario)
actions = dlstbx.mimas.handle_scenario(scenario)
print(f"At the {_readable.get(scenario.event)} {dcid}:")
for a in sorted(actions, key=lambda a: str(type(a)) + " " + a.recipe):
try:
Expand Down
34 changes: 33 additions & 1 deletion src/dlstbx/mimas/__init__.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
from __future__ import annotations

import dataclasses
import enum
import functools
import numbers
from typing import Optional, Tuple
from typing import Callable, List, Optional, Tuple, Union

import gemmi
import pkg_resources

from dlstbx.mimas.specification import ScenarioSpecification

MimasDCClass = enum.Enum("MimasDCClass", "GRIDSCAN ROTATION SCREENING UNDEFINED")

Expand Down Expand Up @@ -373,3 +378,30 @@ def _(mimasobject: MimasISPyBJobInvocation):
*triggervars,
)
)


Invocation = Union[MimasISPyBJobInvocation, MimasRecipeInvocation]


def match_specification(scenario_specification: ScenarioSpecification):
def outer_wrapper(handler: Callable):
@functools.wraps(handler)
def inner_wrapper(scenario) -> List[Invocation]:
if scenario_specification.is_satisfied_by(scenario):
return handler(scenario)
return []

return inner_wrapper

return outer_wrapper


def handle_scenario(scenario: MimasScenario) -> List[Invocation]:
handlers: dict[str, Callable] = {
e.name: e.load()
for e in pkg_resources.iter_entry_points("zocalo.mimas.handlers")
}
Comment thread
rjgildea marked this conversation as resolved.
Outdated
tasks: List[Invocation] = []
for handler in handlers.values():
tasks.extend(handler(scenario))
return tasks
Loading