Skip to content

Commit

Permalink
Merge 62fc0a7 into 529fcd1
Browse files Browse the repository at this point in the history
  • Loading branch information
Anthchirp committed Oct 5, 2018
2 parents 529fcd1 + 62fc0a7 commit a2eb0f9
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 18 deletions.
18 changes: 7 additions & 11 deletions ispyb/model/__future__.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,20 +79,9 @@ def __exit__(cm, *args):

import ispyb.model.datacollection
ispyb.model.datacollection.DataCollection.integrations = _get_linked_autoprocintegration_for_dc
import ispyb.model.gridinfo
ispyb.model.gridinfo.GridInfo.reload = _get_gridinfo
import ispyb.model.processingprogram
ispyb.model.processingprogram.ProcessingProgram.reload = _get_autoprocprogram

def _get_gridinfo(self):
# https://jira.diamond.ac.uk/browse/MXSW-1173
with _db_cc() as cursor:
cursor.run("SELECT * "
"FROM GridInfo "
"WHERE dataCollectionGroupId = %s "
"LIMIT 1;", self._dcgid)
self._data = cursor.fetchone()

def _get_autoprocprogram(self):
# https://jira.diamond.ac.uk/browse/SCI-7414
with _db_cc() as cursor:
Expand All @@ -117,3 +106,10 @@ def _get_linked_autoprocintegration_for_dc(self):
ispyb.model.integration.IntegrationResult(ir['autoProcIntegrationId'], self._db, preload=ir)
for ir in cursor.fetchall()
]

def test_connection():
'''A test function to verify that the database connection is alive.'''
with _db_cc() as cursor:
cursor.run("SELECT 1")
data = cursor.fetchall()
assert data == [{'1': 1}]
6 changes: 5 additions & 1 deletion ispyb/model/gridinfo.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from __future__ import absolute_import, division, print_function

import ispyb.exception
import ispyb.model

class GridInfo(ispyb.model.DBCache):
Expand All @@ -24,7 +25,10 @@ def __init__(self, dcgid, db_conn, preload=None):

def reload(self):
'''Load/update information from the database.'''
raise NotImplementedError('TODO: Not implemented yet')
try:
self._data = self._db.mx_acquisition.get_dcg_grid(self._dcgid)[0]
except ispyb.exception.ISPyBNoResultException:
self._data = None

@property
def dcgid(self):
Expand Down
8 changes: 8 additions & 0 deletions ispyb/sp/mxacquisition.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,14 @@ def upsert_dcg_grid(self, values):
'''Insert or update the grid info associated with a data collection group'''
return self.get_connection().call_sp_write('upsert_dcg_grid', values)

def get_dcg_grid(self, dcgid):
'''Retrieve a list of dictionaries containing the grid information for
one data collection group id. Raises ISPyBNoResultException if there
is no grid information available for the given DCGID.
Generally the list will only contain a single dictionary.
'''
return self.get_connection().call_sp_retrieve(procname='retrieve_grid_info_for_dcg', args=(dcgid,))

@classmethod
def get_energy_scan_params(cls):
return copy.deepcopy(cls._energy_scan_params)
Expand Down
6 changes: 4 additions & 2 deletions tests/test_misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,10 @@ def test_database_reconnects_on_connection_failure(testconfig, testdb):
assert dcid, "Could not create dummy data collection"

# Test the database connections
# This goes from DCID to DCGID using the default connection,
# and looks into the GridInfo table using the __future__ connection.
# This goes from DCID to DCGID to GridInfo using the default connection,
assert bool(testdb.get_data_collection(dcid).group.gridinfo) is False
# Test the model.__future__ connection separately
ispyb.model.__future__.test_connection()

fconn = ispyb.model.__future__._db
iconn = testdb.conn
Expand All @@ -87,3 +88,4 @@ def test_database_reconnects_on_connection_failure(testconfig, testdb):

# Test implicit reconnect
assert bool(testdb.get_data_collection(dcid).group.gridinfo) is False
ispyb.model.__future__.test_connection()
28 changes: 24 additions & 4 deletions tests/test_mxacquisition.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
from __future__ import absolute_import, division, print_function

import context
from datetime import datetime

import context
import ispyb
import ispyb.exception
import pytest

def test_mxacquisition_methods(testconfig):
with ispyb.open(testconfig) as conn:
Expand Down Expand Up @@ -54,12 +57,15 @@ def test_mxacquisition_methods(testconfig):
params['comments'] = 'Forgot to comment!'
iid = mxacquisition.upsert_image(list(params.values()))

with pytest.raises(ispyb.exception.ISPyBNoResultException):
gridinfo = mxacquisition.get_dcg_grid(dcgid)

params = mxacquisition.get_dcg_grid_params()
params['parentid'] = dcgid
params['dx_in_mm'] = 1.2
params['dy_in_mm'] = 1.3
params['steps_x'] = 20
params['steps_x'] = 31
params['steps_y'] = 31
params['mesh_angle'] = 45.5
params['pixelsPerMicronX'] = 11
params['pixelsPerMicronY'] = 11
Expand All @@ -68,8 +74,22 @@ def test_mxacquisition_methods(testconfig):
params['orientation'] = 'horizontal'
params['snaked'] = False
dcg_grid_id = mxacquisition.upsert_dcg_grid(list(params.values()))
assert dcg_grid_id is not None
assert dcg_grid_id > 0
assert dcg_grid_id and dcg_grid_id > 0

gridinfo = mxacquisition.get_dcg_grid(dcgid)
assert len(gridinfo) == 1
gridinfo = gridinfo[0]
assert gridinfo['dx_mm'] == params['dx_in_mm']
assert gridinfo['dy_mm'] == params['dy_in_mm']
assert gridinfo['meshAngle'] == params['mesh_angle']
assert gridinfo['orientation'] == params['orientation']
assert gridinfo['pixelsPerMicronX'] == params['pixelsPerMicronX']
assert gridinfo['pixelsPerMicronY'] == params['pixelsPerMicronY']
assert gridinfo['snaked'] == 0
assert gridinfo['snapshot_offsetXPixel'] == params['snapshotOffsetXPixel']
assert gridinfo['snapshot_offsetYPixel'] == params['snapshotOffsetYPixel']
assert gridinfo['steps_x'] == params['steps_x']
assert gridinfo['steps_y'] == params['steps_y']

params = mxacquisition.get_dc_position_params()
params['id'] = id1
Expand Down

0 comments on commit a2eb0f9

Please sign in to comment.