Skip to content
Snippets Groups Projects
Commit fd2c3e1c authored by Jan Müller's avatar Jan Müller
Browse files

Merge branch 'develop' into feature/Add_arbor_support

parents 3c730380 90109b0b
No related branches found
No related tags found
1 merge request!4Feature/add arbor support
Pipeline #163305 failed
include:
- project: 'vr-group/in-situ-pipeline/insite'
ref: develop
file: '/test-setup.yml'
variables:
ACCESS_NODE_COMMIT: $CI_COMMIT_SHA
api_test:
extends: .api_test
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
import connexion import connexion
from access_node import encoder from access_node import encoder
from flask_cors import CORS
from access_node.models.nodes import nodes from access_node.models.nodes import nodes
import json import json
...@@ -31,6 +32,7 @@ def main(): ...@@ -31,6 +32,7 @@ def main():
app.app.json_encoder = encoder.JSONEncoder app.app.json_encoder = encoder.JSONEncoder
app.add_api('swagger.yaml', arguments={ app.add_api('swagger.yaml', arguments={
'title': 'In-Situ Pipeline REST API'}) 'title': 'In-Situ Pipeline REST API'})
CORS(app.app)
app.run(port=8080) app.run(port=8080)
......
...@@ -39,14 +39,15 @@ def nest_get_gids_in_population(population_id): # noqa: E501 ...@@ -39,14 +39,15 @@ def nest_get_gids_in_population(population_id): # noqa: E501
def nest_get_multimeter_info(): # noqa: E501 def nest_get_multimeter_info(): # noqa: E501
"""Retrieves the measurements for a multimeter (optional) and GIDS (optional). """Retreives the available multimeters and their properties.
# noqa: E501 # noqa: E501
:rtype: MultimeterInfo :rtype: MultimeterInfo
""" """
return 'do some magic!' multimeter_info = requests.get(nodes.info_node+'/multimeter_info').json()
return multimeter_info
def nest_get_multimeter_measurements(multimeter_id, attribute, _from=None, to=None, gids=None, offset=None, limit=None): # noqa: E501 def nest_get_multimeter_measurements(multimeter_id, attribute, _from=None, to=None, gids=None, offset=None, limit=None): # noqa: E501
...@@ -71,7 +72,53 @@ def nest_get_multimeter_measurements(multimeter_id, attribute, _from=None, to=No ...@@ -71,7 +72,53 @@ def nest_get_multimeter_measurements(multimeter_id, attribute, _from=None, to=No
:rtype: MultimeterMeasurement :rtype: MultimeterMeasurement
""" """
return 'do some magic!' mult_info = get_multimeter_info()
mult_gids = []
multimeter_exists = False
for mult in mult_info:
if mult['id'] == multimeter_id:
multimeter_exists = True
if attribute not in mult['attributes']:
return Status(code=400, message="Given multimeter does not measure given attribute")
mult_gids = mult['gids']
break
if not multimeter_exists:
return Status(code=400, message="Given multimeter does not exist")
if gids == None:
gids = mult_gids
else:
for gid in gids:
if gid not in mult_gids:
return Status(code=400, message="Gid "+str(gid)+" is not measured by given Multimeter")
init = True
sim_times = []
measurement = MultimeterMeasurement([],[],[])
for node in nodes.simulation_nodes:
response = requests.get(
'http://'+node+'/multimeter_measurement', params={"multimeter_id": multimeter_id, "attribute": attribute, "_from": _from, "to": to, "gids": gids}).json()
if init:
sim_times = response['simulation_times']
measurement = MultimeterMeasurement(sim_times, gids, [None for x in range(0,(len(sim_times)*len(gids)))])
init = False
for x in range(len(response['gids'])):
gid = response['gids'][x]
index = measurement.gids.index(gid)
index_offset = index * len(sim_times)
for y in range(len(sim_times)):
measurement.values[index_offset+y] = response['values'][x*len(sim_times)+y]
# offset and limit
if (offset is None):
offset = 0
if (limit is None or (limit + offset) > len(measurement.gids)):
limit = len(measurement.gids) - offset
measurement.gids = measurement.gids[offset:offset+limit]
measurement.values = measurement.values[offset*len(sim_times):(offset+limit)*len(sim_times)]
return measurement
def nest_get_neuron_properties(gids=None): # noqa: E501 def nest_get_neuron_properties(gids=None): # noqa: E501
...@@ -147,10 +194,10 @@ def nest_get_spikes(_from=None, to=None, gids=None, offset=None, limit=None): # ...@@ -147,10 +194,10 @@ def nest_get_spikes(_from=None, to=None, gids=None, offset=None, limit=None): #
# offset and limit # offset and limit
if (offset is None): if (offset is None):
offset = 0 offset = 0
if (limit is None): if (limit is None or (limit + offset) > len(spikes.gids)):
limit = len(spikes.gids) limit = len(spikes.gids) - offset
spikes.gids = spikes.gids[offset:limit] spikes.gids = spikes.gids[offset:offset+limit]
spikes.simulation_times = spikes.simulation_times[offset:limit] spikes.simulation_times = spikes.simulation_times[offset:offset+limit]
return spikes return spikes
...@@ -190,9 +237,9 @@ def nest_get_spikes_by_population(population_id, _from=None, to=None, offset=Non ...@@ -190,9 +237,9 @@ def nest_get_spikes_by_population(population_id, _from=None, to=None, offset=Non
# offset and limit # offset and limit
if (offset is None): if (offset is None):
offset = 0 offset = 0
if (limit is None): if (limit is None or (limit + offset) > len(spikes.gids)):
limit = len(spikes.gids) limit = len(spikes.gids) - offset
spikes.gids = spikes.gids[offset:limit] spikes.gids = spikes.gids[offset:offset+limit]
spikes.simulation_times = spikes.simulation_times[offset:limit] spikes.simulation_times = spikes.simulation_times[offset:offset+limit]
return spikes return spikes
...@@ -2,3 +2,4 @@ connexion == 1.1.15 ...@@ -2,3 +2,4 @@ connexion == 1.1.15
python_dateutil == 2.6.0 python_dateutil == 2.6.0
setuptools >= 21.0.0 setuptools >= 21.0.0
requests requests
flask_cors
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment