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

Rework Api and implement get_data

parent b0e6d484
No related branches found
No related tags found
No related merge requests found
import connexion
import six
from access_node.models.attribute import Attribute # noqa: E501
from access_node.models.data import Data # noqa: E501
from access_node.models.error import Error # noqa: E501
from access_node.models.info import Info # noqa: E501
from access_node.models.multimeter import Multimeter # noqa: E501
from access_node.models.multimeter_info import MultimeterInfo # noqa: E501
from access_node.models.spikes import Spikes # noqa: E501
from access_node import util
# My imports
import json
import requests
def get_attributes(): # noqa: E501
"""Retrieves the details of per-neuron attributes.
def get_current_simulation_time(): # noqa: E501
"""Retrieves the current simulation time.
# noqa: E501
:rtype: List[Attribute]
:rtype: float
"""
with open('access_node//distribution_nodes.json', 'r') as f:
dist_nodes = json.load(f)
information_node = dist_nodes['addresses'][0]
response = requests.get(information_node+'/attributes').json()
return response
return 'do some magic!'
def get_data(attribute, simulation_steps=None, neuron_ids=None): # noqa: E501
"""Retrieves the per-neuron attributes for the given attribute name, simulation steps (optional) and neuron IDs (optional).
def get_data(multimeter, attribute, _from=None, to=None, neuron_ids=None): # noqa: E501
"""Retrieves the per-neuron attributes for the given multimeter name, attribute name, duration (from - to) (optional) and neuron IDs (optional).
# noqa: E501
:param multimeter: Multimeter name.
:type multimeter: str
:param attribute: Attribute name.
:type attribute: str
:param simulation_steps: Simulation steps (leave empty for all steps).
:type simulation_steps: List[]
:param _from: First timestep to retreive (leave empty for first step possible).
:type _from: float
:param to: Last timestep to retreive (leave empty for last step possible).
:type to: float
:param neuron_ids: Neuron IDs (leave empty for all neurons).
:type neuron_ids: List[]
:rtype: Data
:rtype: Multimeter
"""
# Replace this with request to information_node
with open('access_node//distribution_nodes.json', 'r') as f:
dist_nodes = json.load(f)
addresses = dist_nodes['addresses']
if simulation_steps != None:
num_ts = len(simulation_steps)
first_ts = simulation_steps[0]
else:
num_ts = get_simulation_step_count()
first_ts = get_timestep()
if neuron_ids != None:
ids = neuron_ids
else:
ids = get_neuron_ids()
data = Data(first_ts, num_ts, ids,
[[None]*num_ts for x in range(len(ids))])
# TODO Query this
interval = 0.1
num_values_per_neuron = (to-_from)/interval
mult_response = Multimeter(multimeter)
mult_response._from = _from
mult_response.to = to
mult_response.neuron_ids = ids
mult_response.interval = interval
mult_response.values = [[None]*num_values_per_neuron for x in range(len(ids))]
for address in addresses:
response = requests.get(address+'/data', params={
"attribute": attribute, "simulation_steps": simulation_steps, "neuron_ids": neuron_ids}).json()
response = requests.get(address+'/data', params={ "multimeter": multimeter,
"attribute": attribute, "from": _from, "to": to, "neuron_ids": neuron_ids}).json()
for x in range(len(response['neuron_ids'])):
data.values[data.neuron_ids.index(
response['neuron_ids'][x])] = response['data'][x]
return data
mult_response.values[mult_response.neuron_ids.index(
response['neuron_ids'][x])] = response['values'][x]
return mult_response
def get_neuron_ids(): # noqa: E501
"""Retrieves the list of all neuron IDs.
def get_info(): # noqa: E501
"""Retrieves general simulation information.
# noqa: E501
:rtype: List[float]
:rtype: Info
"""
with open('access_node//distribution_nodes.json', 'r') as f:
dist_nodes = json.load(f)
information_node = dist_nodes['addresses'][0]
return 'do some magic!'
response = requests.get(information_node+'/neuron_ids').json()
return response
def get_simulation_step_count(): # noqa: E501
"""Retrieves the number of simulation steps.
def get_multimeters(): # noqa: E501
"""Retrieves the details of all multimeters.
# noqa: E501
:rtype: float
:rtype: List[MultimeterInfo]
"""
with open('access_node//distribution_nodes.json', 'r') as f:
dist_nodes = json.load(f)
information_node = dist_nodes['addresses'][0]
return 'do some magic!'
def get_neuron_ids(): # noqa: E501
"""Retrieves the list of all neuron IDs.
# noqa: E501
response = requests.get(information_node+'/simulation_step_count').json()
return response
:rtype: List[float]
"""
return 'do some magic!'
def get_spikes(simulation_steps=None, neuron_ids=None): # noqa: E501
......@@ -114,34 +114,4 @@ def get_spikes(simulation_steps=None, neuron_ids=None): # noqa: E501
:rtype: Spikes
"""
# Replace this with request to information_node
with open('access_node//distribution_nodes.json', 'r') as f:
dist_nodes = json.load(f)
addresses = dist_nodes['addresses']
spikes = Spikes([], [])
for address in addresses:
response = requests.get(
address+'/spikes', params={"simulation_steps": simulation_steps, "neuron_ids": neuron_ids}).json()
for x in range(len(response['simulation_steps'])):
spikes.simulation_steps.append(response['simulation_steps'][x])
spikes.neuron_ids.append(response['neuron_ids'][x])
# Sort this?
return spikes
def get_timestep(): # noqa: E501
"""Retrieves the time between two simulation steps.
# noqa: E501
:rtype: float
"""
with open('access_node//distribution_nodes.json', 'r') as f:
dist_nodes = json.load(f)
information_node = dist_nodes['addresses'][0]
response = requests.get(information_node+'/timestep').json()
return response
return 'do some magic!'
......@@ -4,7 +4,6 @@
from __future__ import absolute_import
# import models into model package
from access_node.models.attribute import Attribute
from access_node.models.data import Data
from access_node.models.error import Error
from access_node.models.info import Info
from access_node.models.multimeter import Multimeter
......
......@@ -2,7 +2,7 @@
swagger: "2.0"
info:
description: "This is the REST API for the in-situ pipeline."
version: "1.0.0"
version: "0.0.2"
title: "In-Situ Pipeline REST API"
host: "localhost"
basePath: "/"
......@@ -23,12 +23,11 @@ paths:
200:
description: "Operation successful."
schema:
type: "number"
format: "double"
$ref: "#/definitions/Info"
400:
description: "Operation failed."
schema:
$ref: "#/definitions/Info"
$ref: "#/definitions/Error"
x-swagger-router-controller: "access_node.controllers.nest_controller"
/current_simulation_time:
get:
......@@ -44,7 +43,7 @@ paths:
description: "Operation successful."
schema:
type: "number"
format: "int64"
format: "double"
400:
description: "Operation failed."
schema:
......@@ -72,12 +71,12 @@ paths:
schema:
$ref: "#/definitions/Error"
x-swagger-router-controller: "access_node.controllers.nest_controller"
/attributes:
/multimeters:
get:
tags:
- "nest"
summary: "Retrieves the details of per-neuron attributes."
operationId: "get_attributes"
summary: "Retrieves the details of all multimeters."
operationId: "get_multimeters"
produces:
- "application/json"
parameters: []
......@@ -87,7 +86,7 @@ paths:
schema:
type: "array"
items:
$ref: "#/definitions/Attribute"
$ref: "#/definitions/MultimeterInfo"
400:
description: "Operation failed."
schema:
......@@ -142,7 +141,7 @@ paths:
200:
description: "Operation successful."
schema:
$ref: "#/definitions/Data"
$ref: "#/definitions/Multimeter"
400:
description: "Operation failed."
schema:
......@@ -267,6 +266,14 @@ definitions:
type: "array"
items:
$ref: "#/definitions/Attribute"
example:
name: "name"
interval: 0.1
attributes:
- precision: {}
name: "name"
- precision: {}
name: "name"
Info:
type: "object"
properties:
......@@ -277,51 +284,23 @@ definitions:
type: "array"
items:
$ref: "#/definitions/MultimeterInfo"
Data:
type: "object"
properties:
multimeters:
type: "array"
items:
$ref: "#/definitions/Multimeter"
example:
simulation_resolution: 0.01
multimeters:
- name: "Multimeter_name"
interval: 0.2
attribute:
name: "voltage"
precission: "double"
timesteps:
- 1.2
- 1.4
from: 1.2
to: 1.4
neuron_ids:
- 1
- 2
values:
- - 61.48
- 45.23
- - 13.46
- 23.77
- name: "Multimeter_name"
- name: "name"
interval: 0.1
attributes:
- precision: {}
name: "name"
- precision: {}
name: "name"
- name: "name"
interval: 0.2
attribute:
name: "voltage"
precission: "double"
timesteps:
- 1.2
- 1.4
from: 1.2
to: 1.4
neuron_ids:
- 1
- 2
values:
- - 61.48
- 45.23
- - 13.46
- 23.77
attributes:
- precision: {}
name: "name"
- precision: {}
name: "name"
Spikes:
type: "object"
properties:
......@@ -337,11 +316,11 @@ definitions:
format: "int64"
example:
simulation_times:
- 0.80082819046101150206595775671303272247314453125
- 0.80082819046101150206595775671303272247314453125
- 0.2
- 0.3
neuron_ids:
- 6.02745618307040320615897144307382404804229736328125
- 6.02745618307040320615897144307382404804229736328125
- 1
- 2
Error:
type: "object"
properties:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment