Skip to content

Commit

Permalink
dev2
Browse files Browse the repository at this point in the history
  • Loading branch information
efagerberg committed Mar 25, 2018
1 parent ba88e84 commit 0109ccc
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 14 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ dist
.eggs
.pytest_cache/
.coverage
docker-compose.yml
4 changes: 3 additions & 1 deletion CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
Version 0.0.1.dev2
* Adding the ability to serialize many entries, make sure there is a subfolder

Version 0.0.1
Version 0.0.1.dev1
* Starting version, includes base ability to serialize StructuredNode and StructuredRel
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ services:
environment:
NEO4J_BOLT_URL: bolt://neo4j:neo4j@neo4j:7687
neo4j:
image: "neo4j:3.1"
image: "neo4j:3.3"
environment:
NEO4J_AUTH: none

Expand Down
Empty file added neomodel_serializer/__init__.py
Empty file.
17 changes: 12 additions & 5 deletions serializers.py → neomodel_serializer/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,21 @@ def __init__(self, *args, **kwargs):
"""
self.instance = args[0]
self.fields = kwargs.get('fields', '__all__')
self.data = OrderedDict()
self.many = kwargs.get('many')

props = self.instance.defined_properties()
if self.many:
self.data = []
for i in self.instance:
entry_data = StructuredThingSerializer(i).data
self.data.append(entry_data)
else:
self.data = OrderedDict()
props = self.instance.defined_properties()

if self.should_include('id'):
self.data['id'] = self.instance.id
if self.should_include('id'):
self.data['id'] = self.instance.id

self.process_properties(props)
self.process_properties(props)
self.serialized_data = json.dumps(self.data)

def should_include(self, key):
Expand Down
4 changes: 2 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

setup(
name='neomodel-serializer',
version='0.0.1.dev1',
version='0.0.1.dev2',
description='Serialize neomodels',
long_description=open('README.rst').read(),
author='Evan Fagerberg',
Expand All @@ -12,7 +12,7 @@
url='http://github.com/efagerberg/neomodel-serializer',
license='MIT',
packages=find_packages(exclude=('tests',)),
keywords='neo4j neomodel',
keywords='neo4j neomodel serializer',
install_requires=['neomodel>=3.2.5', 'six'],
setup_requires=['pytest-runner']
if any(x in ('pytest', 'test') for x in sys.argv) else [],
Expand Down
32 changes: 27 additions & 5 deletions tests/test_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
from mock import patch

from neomodel import (
db, clear_neo4j_database,
ArrayProperty, IntegerProperty,
StructuredNode, StructuredRel,
StringProperty, RelationshipFrom
)
import pytest
from serializers import StructuredThingSerializer
from neomodel_serializer.serializers import StructuredThingSerializer


class Person(StructuredNode):
Expand All @@ -30,15 +31,20 @@ class Movie(StructuredNode):

@pytest.fixture()
def movie():
movie = Movie(title="Space Cop", released=2016).save()
yield movie
movie.delete()
yield Movie(title="Space Cop", released=2016).save()
clear_neo4j_database(db)


@pytest.fixture()
def movies():
for i in range(2):
Movie(title=i, released=2016).save()
clear_neo4j_database(db)


@pytest.fixture()
def mock_isinstance():
path = 'serializers.isinstance'
path = 'neomodel_serializer.serializers.isinstance'
with patch(path) as m:
yield m

Expand Down Expand Up @@ -99,3 +105,19 @@ def test_raises_on_non_property_non_rel_def(movie, mock_isinstance):
mock_isinstance.return_value = False
with pytest.raises(ValueError):
StructuredThingSerializer(movie)


def test_serialize_many(movies):
"""StructuredThingSerializer should be able to serialize
many movies"""
qs = Movie.nodes
expected = [{
'id': movie.id,
'actors': [],
'directors': [],
'released': movie.released,
'tagline': movie.tagline,
'title': movie.title,
} for movie in qs]
actual = StructuredThingSerializer(qs, many=True).data
assert actual == expected

0 comments on commit 0109ccc

Please sign in to comment.