Skip to content

Commit

Permalink
Merge pull request #37 from Sage-Bionetworks/add-activities-post
Browse files Browse the repository at this point in the history
Add activities post
  • Loading branch information
jaeddy committed Jul 24, 2019
2 parents dfff559 + 4572a89 commit 6de665d
Show file tree
Hide file tree
Showing 10 changed files with 123 additions and 148 deletions.
3 changes: 2 additions & 1 deletion synprov/graph/__init__.py
@@ -1,3 +1,4 @@
from .models.activity import GraphActivity
from .models.agent import GraphAgent
from .models.reference import GraphReference
from .models.reference import GraphReference
from .builder import ActivityBuilder
2 changes: 1 addition & 1 deletion synprov/graph/builder.py
Expand Up @@ -105,4 +105,4 @@ def save(self):
rel.create()
self.gdb.create_relationship(rel)

return True
return self._find_activity()
23 changes: 14 additions & 9 deletions synprov/graph/controllers/activities_controller.py
Expand Up @@ -7,7 +7,7 @@
from py2neo import Node, NodeMatcher

from synprov.config import neo4j_connection as graph
from synprov.graph import GraphActivity, GraphReference, GraphAgent
from synprov.graph import ActivityBuilder
from synprov.util import neo4j_to_d3


Expand All @@ -21,11 +21,16 @@ def create_activity(body=None): # noqa: E501
:rtype: Activity
"""
# act = Activity(**humps.decamelize(body))
# act.save()

# return act.node
return 'Not Implemented', 501
builder = ActivityBuilder(
**body.to_dict()
)
act_node = builder.save()
print(act_node)
return humps.camelize({
'id': str(act_node.identity),
'labels': list(act_node.labels),
'properties': dict(act_node)
})


def get_activities_graph(sort_by=None, order=None, limit=None): # noqa: E501
Expand Down Expand Up @@ -61,7 +66,7 @@ def get_activities_graph(sort_by=None, order=None, limit=None): # noqa: E501
results = graph.run(
query_base,
)
return neo4j_to_d3(results.data())
return humps.camelize(neo4j_to_d3(results.data()))


def get_agent_subgraph(id, sort_by=None, order=None, limit=None): # noqa: E501
Expand Down Expand Up @@ -100,7 +105,7 @@ def get_agent_subgraph(id, sort_by=None, order=None, limit=None): # noqa: E501
query_base,
id=id
)
return neo4j_to_d3(results.data())
return humps.camelize(neo4j_to_d3(results.data()))


def get_reference_subgraph(id,
Expand Down Expand Up @@ -150,4 +155,4 @@ def get_reference_subgraph(id,
query_base,
id=id
)
return neo4j_to_d3(results.data())
return humps.camelize(neo4j_to_d3(results.data()))
73 changes: 58 additions & 15 deletions synprov/test/conftest.py
Expand Up @@ -36,7 +36,7 @@ def mock_graph():
def mock_graph_data(mock_graph):
logger.info("setup: populating graph database")
graph = mock_graph
random.seed(0)
random.seed(1)
gc = GraphClient(graph)
create_mock_graph(gc, 5)
yield graph
Expand All @@ -46,37 +46,37 @@ def mock_graph_data(mock_graph):
def mock_activity_form():
used = [
{
'name': 'Reference_5',
'target_id': 'TargetID_5',
'name': 'Reference_3',
'target_id': 'TargetID_3',
'target_version_id': '1.0',
'_class': 'Resource',
'subclass': 'File'
},
{
'name': 'Reference_4',
'target_id': 'TargetID_4',
'target_version_id': '1.0',
'_class': 'Tool',
'subclass': 'Tool'
}
# {
# 'name': 'Reference_5',
# 'target_id': 'TargetID_5',
# 'target_version_id': '1.0',
# '_class': 'Tool',
# 'subclass': 'Tool'
# }
]
generated = [
{
'name': 'Reference_6',
'target_id': 'TargetID_6',
'name': 'Reference_5',
'target_id': 'TargetID_5',
'target_version_id': '1.0',
'_class': 'Resource',
'subclass': 'State'
}
]
agents = [
{
'name': 'User_2',
'user_id': 'UserID_2'
'name': 'User_1',
'user_id': 'UserID_1'
}
]
form = {
'name': 'Activity_3',
'name': 'Activity_2',
'_class': 'Tool session',
'agents': agents,
'description': '',
Expand All @@ -86,3 +86,46 @@ def mock_activity_form():
}
yield form

@pytest.fixture(scope='function')
def mock_activity_request():
used = [
{
'name': 'Reference_3',
'targetId': 'TargetID_3',
'targetVersionId': '1.0',
'class': 'Resource',
'subclass': 'File'
},
{
'name': 'Reference_4',
'target_id': 'TargetID_4',
'target_version_id': '1.0',
'_class': 'Tool',
'subclass': 'Tool'
}
]
generated = [
{
'name': 'Reference_5',
'targetId': 'TargetID_5',
'targetVersionId': '1.0',
'class': 'Resource',
'subclass': 'State'
}
]
agents = [
{
'name': 'User_1',
'userId': 'UserID_1'
}
]
form = {
'name': 'Activity_3',
'class': 'Tool session',
'agents': agents,
'description': '',
'used': used,
'generated': generated

}
yield form
72 changes: 0 additions & 72 deletions synprov/test/test_activities_controller.py

This file was deleted.

18 changes: 0 additions & 18 deletions synprov/test/test_agents_controller.py

This file was deleted.

47 changes: 47 additions & 0 deletions synprov/test/test_controllers.py
@@ -0,0 +1,47 @@
import logging
import pytest

from synprov.models import ActivityForm
from synprov.graph.controllers import activities_controller


logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)


class TestActivitiesController:

def test_create_activity_exists(self,
mock_graph_data,
mock_activity_request):
node_count = len(mock_graph_data.nodes)
rel_count = len(mock_graph_data.relationships)
body = ActivityForm.from_dict(mock_activity_request)
act_node = activities_controller.create_activity(body)
assert len(mock_graph_data.nodes) == node_count
assert len(mock_graph_data.relationships) == rel_count
assert all([key in act_node for key in ['id', 'labels', 'properties']])

def test_create_activity_new(self,
mock_graph,
mock_activity_request):
node_count = len(mock_graph.nodes)
rel_count = len(mock_graph.relationships)
body = ActivityForm.from_dict(mock_activity_request)
act_node = activities_controller.create_activity(body)

new_nodes = sum([
len(mock_activity_request['used']),
len(mock_activity_request['generated']),
len(mock_activity_request['agents']),
1
])
new_rels = sum([
len(mock_activity_request['used']),
len(mock_activity_request['generated']),
len(mock_activity_request['agents']) * 2,
])

assert len(mock_graph.nodes) == (node_count + new_nodes)
assert len(mock_graph.relationships) == (rel_count + new_rels)
assert all([key in act_node for key in ['id', 'labels', 'properties']])
File renamed without changes.
18 changes: 0 additions & 18 deletions synprov/test/test_references_controller.py

This file was deleted.

15 changes: 1 addition & 14 deletions synprov/util.py
Expand Up @@ -8,9 +8,6 @@
import typing
import socket


from datetime import datetime

from functools import wraps
from hashlib import sha256

Expand Down Expand Up @@ -174,19 +171,9 @@ def _convert_keys(obj):
return obj


def neo4j_to_d3(results):
nodes = []
rels = []
for record in results:
nodes.append(_convert_node(record['source']))
nodes.append(_convert_node(record['target']))
rels.append(_convert_relationship(record['relationship']))
return {"nodes": nodes, "links": rels}


def get_datetime(now=None):
if now is None:
now = datetime.now()
now = datetime.datetime.now()
_date_obj = iso8601.parse_date(now.isoformat())
_date_utc = _date_obj.astimezone(pytz.utc)
return _date_utc.strftime('%Y-%m-%dT%H:%M:%SZ')
Expand Down

0 comments on commit 6de665d

Please sign in to comment.