Skip to content

Commit 112604b

Browse files
Moved all diffractometer routes in /routes to the diffractometer adapter
1 parent 95407a0 commit 112604b

File tree

9 files changed

+31
-113
lines changed

9 files changed

+31
-113
lines changed

mxcubeweb/core/adapter/diffractometer_adapter.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
from typing import ClassVar
22

3-
from mxcubecore.HardwareObjects import (
4-
GenericDiffractometer,
5-
MiniDiff,
6-
)
3+
from mxcubecore.HardwareObjects import GenericDiffractometer, MiniDiff
74

85
from mxcubeweb.core.adapter.adapter_base import AdapterBase
6+
from mxcubeweb.core.models.configmodels import ResourceHandlerConfigModel
7+
8+
resource_handler_config = ResourceHandlerConfigModel(
9+
commands=["set_chip_layout", "set_phase"],
10+
attributes=["data", "get_value", "head_configuration"],
11+
)
912

1013

1114
class DiffractometerAdapter(AdapterBase):
@@ -17,12 +20,12 @@ class DiffractometerAdapter(AdapterBase):
1720
GenericDiffractometer.GenericDiffractometer,
1821
]
1922

20-
def __init__(self, ho, *args):
23+
def __init__(self, ho, role, app):
2124
"""
2225
Args:
2326
(object): Hardware object.
2427
"""
25-
super().__init__(ho, *args)
28+
super().__init__(ho, role, app, resource_handler_config)
2629
ho.connect("stateChanged", self._state_change)
2730
ho.connect("valueChanged", self._state_change)
2831
ho.connect("phaseChanged", self._diffractometer_phase_changed)
@@ -37,6 +40,12 @@ def _diffractometer_phase_changed(self, phase):
3740
def _state_change(self, *args, **kwargs):
3841
self.state_change(*args, **kwargs)
3942

43+
def get_value(self) -> dict:
44+
return {
45+
"currentPhase": self._ho.get_current_phase(),
46+
"phaseList": self._ho.get_phase_list(),
47+
}
48+
4049
def stop(self):
4150
pass
4251

@@ -53,3 +62,7 @@ def set_chip_layout(
5362
) -> bool:
5463
self._ho.set_chip_layout(layout_name)
5564
return True
65+
66+
def set_phase(self, phase: str) -> bool:
67+
self._ho.set_phase(phase)
68+
return True

mxcubeweb/core/components/beamline.py

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -95,42 +95,12 @@ def beamline_get_all_attributes(self):
9595
{"energyScanElements": ho.get_available_elements().get("elements", [])}
9696
)
9797

98-
data.update(self.diffractometer_get_info())
99-
10098
return data
10199

102100
def prepare_beamline_for_sample(self):
103101
if hasattr(HWR.beamline.collect, "prepare_for_new_sample"):
104102
HWR.beamline.collect.prepare_for_new_sample()
105103

106-
def diffractometer_set_phase(self, phase):
107-
try:
108-
HWR.beamline.diffractometer.wait_ready(30)
109-
except Exception:
110-
logging.getLogger("MX3.HWR").warning("Diffractometer not ready")
111-
112-
HWR.beamline.diffractometer.set_phase(phase)
113-
114-
def diffractometer_get_info(self):
115-
ret = {}
116-
117-
try:
118-
ret["useSC"] = HWR.beamline.diffractometer.use_sc
119-
except AttributeError:
120-
ret["useSC"] = False
121-
122-
try:
123-
ret["currentPhase"] = HWR.beamline.diffractometer.get_current_phase()
124-
except AttributeError:
125-
ret["currentPhase"] = "None"
126-
127-
try:
128-
ret["phaseList"] = HWR.beamline.diffractometer.get_phase_list()
129-
except AttributeError:
130-
ret["phaseList"] = []
131-
132-
return ret
133-
134104
def get_detector_info(self):
135105
try:
136106
filetype = HWR.beamline.detector.get_property("file_suffix")

mxcubeweb/routes/diffractometer.py

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

mxcubeweb/server.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,6 @@ def register_routes(mxcube):
120120
from mxcubeweb.routes.beamline import init_route as init_beamline_route
121121
from mxcubeweb.routes.csp_report import init_route as init_csp_route
122122
from mxcubeweb.routes.detector import init_route as init_detector_route
123-
from mxcubeweb.routes.diffractometer import (
124-
init_route as init_diffractometer_route,
125-
)
126123
from mxcubeweb.routes.harvester import init_route as init_harvester_route
127124
from mxcubeweb.routes.lims import init_route as init_lims_route
128125
from mxcubeweb.routes.login import init_route as init_login_route
@@ -146,12 +143,6 @@ def register_routes(mxcube):
146143
init_detector_route, mxcube, f"{url_root_prefix}/detector"
147144
)
148145

149-
Server._register_route(
150-
init_diffractometer_route,
151-
mxcube,
152-
f"{url_root_prefix}/diffractometer",
153-
)
154-
155146
Server._register_route(init_lims_route, mxcube, f"{url_root_prefix}/lims")
156147

157148
Server._register_route(init_login_route, mxcube, f"{url_root_prefix}/login")

test/test_diffractometer_routes.py

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def test_set_phase(client):
1414
current phase after the move is OP
1515
"""
1616
# Get current phase
17-
resp = client.get("/mxcube/api/v0.1/diffractometer/info")
17+
resp = client.get("/mxcube/api/v0.1/hwobj/diffractometer/diffractometer/get_value")
1818
info = json.loads(resp.data)
1919

2020
phase_list = info["phaseList"]
@@ -23,13 +23,13 @@ def test_set_phase(client):
2323

2424
# Set a phase (any in the phase list)
2525
resp = client.put(
26-
"/mxcube/api/v0.1/diffractometer/phase",
26+
"/mxcube/api/v0.1/hwobj/diffractometer/diffractometer/set_phase",
2727
data=json.dumps({"phase": new_phase}),
2828
content_type="application/json",
2929
)
3030

3131
# Retrieve current phase
32-
resp = client.get("/mxcube/api/v0.1/diffractometer/info")
32+
resp = client.get("/mxcube/api/v0.1/hwobj/diffractometer/diffractometer/get_value")
3333
actual_phase = json.loads(resp.data)["currentPhase"]
3434

3535
assert new_phase == actual_phase
@@ -88,11 +88,3 @@ def test_set_aperture(client):
8888

8989
assert ap == actual_aperture
9090
assert actual_original_aperture == original_aperture
91-
92-
93-
def test_get_diffractometer_info(client):
94-
"""
95-
Simply checks if the route runs and does not throws any exceptions
96-
"""
97-
resp = client.get("/mxcube/api/v0.1/diffractometer/info")
98-
assert resp.status_code == 200

ui/src/actions/login.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
/* eslint-disable promise/prefer-await-to-then */
22
import { fetchBeamlineSetup } from '../api/beamline';
33
import { fetchDetectorInfo } from '../api/detector';
4-
import { fetchDiffractometerInfo } from '../api/diffractometer';
54
import { fetchValue } from '../api/hardware-object';
65
import { fetchHarvesterInitialState } from '../api/harvester';
76
import { sendSelectProposal } from '../api/lims';
@@ -110,7 +109,9 @@ export function getInitialState() {
110109
fetchImageData()
111110
.then((camera) => ({ camera }))
112111
.catch(notify),
113-
fetchDiffractometerInfo().catch(notify),
112+
fetchValue('diffractometer', 'diffractometer')
113+
.then((diffractometer) => ({ diffractometer }))
114+
.catch(notify),
114115
fetchDetectorInfo()
115116
.then((detector) => ({ detector }))
116117
.catch(notify),

ui/src/actions/sampleview.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { sendUpdateCurrentPhase } from '../api/diffractometer';
2-
import { sendSetValue } from '../api/hardware-object';
1+
import { sendExecuteCommand, sendSetValue } from '../api/hardware-object';
32
import {
43
sendAbortCentring,
54
sendAcceptCentring,
@@ -355,7 +354,9 @@ export function changeAperture(size) {
355354

356355
export function changeCurrentPhase(phase) {
357356
return async (dispatch) => {
358-
await sendUpdateCurrentPhase(phase);
357+
await sendExecuteCommand('diffractometer', 'diffractometer', 'set_phase', {
358+
phase,
359+
});
359360
dispatch(setCurrentPhase(phase));
360361
};
361362
}

ui/src/api/diffractometer.js

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

ui/src/reducers/sampleview.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,8 @@ function sampleViewReducer(state = INITIAL_STATE, action = {}) {
185185
x: action.data.beamInfo.size_x,
186186
y: action.data.beamInfo.size_y,
187187
},
188-
phaseList: action.data.phaseList,
189-
currentPhase: action.data.currentPhase,
188+
phaseList: action.data.diffractometer.phaseList,
189+
currentPhase: action.data.diffractometer.currentPhase,
190190
pixelsPerMm: action.data.camera.pixelsPerMm,
191191
sourceScale: action.data.camera.scale,
192192
};

0 commit comments

Comments
 (0)