Source code for oneibl.tests.test_alyxrest

from pathlib import Path
import unittest
import tempfile

import matplotlib.image
import numpy as np

from oneibl.one import ONE


one = ONE(username='test_user', password='TapetesBloc18',
          base_url='https://test.alyx.internationalbrainlab.org')

EID = 'cf264653-2deb-44cb-aa84-89b82507028a'
EID_EPHYS = 'b1c968ad-4874-468d-b2e4-5ffa9b9964e9'


[docs]class Tests_REST(unittest.TestCase):
[docs] def test_water_restriction(self): """ Examples of how to list all water restrictions and water-restriction for a given subject. """ # get all the water restrictions from start all_wr = one.alyx.rest('water-restriction', 'list') # 2 different ways to get water restrictions for one subject wr_sub2 = one.alyx.rest('water-restriction', 'list', subject='algernon') # recommended # enforce test logic self.assertTrue(set({'end_time', 'reference_weight', 'start_time', 'subject', 'water_type'}) >= set(all_wr[0].keys())) self.assertTrue(len(all_wr) > len(wr_sub2))
[docs] def test_list_pk_query(self): """ It's a bit stupid but the rest endpoint can't forward a direct query of the uuid via the pk keywork. The alyxclient has already an id parameter, which on the list method is used as a pk identifier. This special case is tested here :return: """ ses = one.alyx.rest('sessions', 'list')[0] ses_ = one.alyx.rest('sessions', 'list', id=ses['url'][-36:])[0] self.assertEqual(ses, ses_)
[docs] def test_note_with_picture_upload(self): my_note = {'user': 'olivier', 'content_type': 'session', 'object_id': EID, 'text': "gnagnagna"} # NB: On Windows the name can be used to open the file a second time, while the named # temporary file is still open with tempfile.TemporaryDirectory() as tdir: png = Path(tdir) / f'img{np.random.randint(5000)}.png' matplotlib.image.imsave(png, np.random.random((500, 500))) with open(png, 'rb') as img_file: files = {'image': img_file} ar_note = one.alyx.rest('notes', 'create', data=my_note, files=files) self.assertTrue(len(ar_note['image'])) self.assertTrue(ar_note['content_type'] == 'actions.session') one.alyx.rest('notes', 'delete', id=ar_note['id'])
[docs] def test_channels(self): # need to build insertion + trajectory + channels to test the serialization of a # record array in the channel endpoint probe_insertions = one.alyx.rest('insertions', 'list', session=EID_EPHYS, name='tutu') for pi in probe_insertions: one.alyx.rest('insertions', 'delete', pi['id']) probe_insertion = one.alyx.rest( 'insertions', 'create', data={'session': EID_EPHYS, 'name': 'tutu'}) trajectory = one.alyx.rest('trajectories', 'create', data={ 'probe_insertion': probe_insertion['id'], 'x': 1500, 'y': -2000, 'z': 0, 'depth': 4500, 'phi': 0, 'theta': 0, 'provenance': 'Histology track', }) channel_records = [] for _ in np.arange(3): channel_records.append({ 'x': np.random.randint(-2000, 2000), 'y': np.random.randint(-2000, 2000), 'z': np.random.randint(-2000, 2000), 'axial': np.random.randint(1, 40) * 20, 'lateral': np.random.randint(1, 4) * 4, 'brain_region': 889, 'trajectory_estimate': trajectory['id'] }) channels = one.alyx.rest('channels', 'create', data=channel_records) self.assertTrue(len(channels) == 3) one.alyx.rest('insertions', 'delete', id=probe_insertion['id'])