Skip to content

Commit

Permalink
Merge 4dd771b into db236cf
Browse files Browse the repository at this point in the history
  • Loading branch information
Anthchirp committed Oct 5, 2018
2 parents db236cf + 4dd771b commit 06d2e5b
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 18 deletions.
18 changes: 7 additions & 11 deletions ispyb/model/__future__.py
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
@@ -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.retrieve_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
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 retrieve_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
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()
29 changes: 25 additions & 4 deletions tests/test_mxacquisition.py
@@ -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.retrieve_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,23 @@ 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.retrieve_dcg_grid(dcgid)
assert len(gridinfo) == 1
gridinfo = gridinfo[0]
assert gridinfo['gridInfoId'] == dcg_grid_id
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 06d2e5b

Please sign in to comment.