Skip to content

Commit 4d3248a

Browse files
authored
Allow custom Gremlin serializers for Neptune (#547)
* Allow custom Gremlin serializers for Neptune * update changelog
1 parent e7614eb commit 4d3248a

File tree

5 files changed

+54
-5
lines changed

5 files changed

+54
-5
lines changed

ChangeLog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Starting with v1.31.6, this file will contain a record of major features and upd
44

55
## Upcoming
66
- Fixed `neptune_ml_utils` imports in `03-Neptune-ML` samples ([Link to PR](https://github.com/aws/graph-notebook/pull/546))
7+
- Enable Gremlin `message_serializer` config field for Neptune endpoints ([Link to PR](https://github.com/aws/graph-notebook/pull/547))
78

89
## Release 4.0.1 (Nov 29, 2023)
910
- Fixed @neptune_db_only magics decorator ([Link to PR](https://github.com/aws/graph-notebook/pull/543))

src/graph_notebook/configuration/generate_config.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,8 @@ def __init__(self, host: str, port: int,
141141
self.auth_mode = auth_mode
142142
self.load_from_s3_arn = load_from_s3_arn
143143
self.aws_region = aws_region
144-
self.gremlin = GremlinSection()
144+
self.gremlin = GremlinSection(message_serializer=gremlin_section.message_serializer) \
145+
if gremlin_section is not None else GremlinSection()
145146
self.neo4j = Neo4JSection()
146147
else:
147148
self.is_neptune_config = False

src/graph_notebook/configuration/get_config.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
neptune_params = ['neptune_service', 'auth_mode', 'load_from_s3_arn', 'aws_region']
1515

16-
neptune_params = ['auth_mode', 'load_from_s3_arn', 'aws_region']
1716

1817
def get_config_from_dict(data: dict, neptune_hosts: list = NEPTUNE_CONFIG_HOST_IDENTIFIERS) -> Configuration:
1918

test/unit/configuration/test_configuration.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
import unittest
88

99
from graph_notebook.configuration.get_config import get_config
10-
from graph_notebook.configuration.generate_config import Configuration, DEFAULT_AUTH_MODE, AuthModeEnum, generate_config
10+
from graph_notebook.configuration.generate_config import Configuration, DEFAULT_AUTH_MODE, AuthModeEnum, \
11+
generate_config, GremlinSection
1112
from graph_notebook.neptune.client import NEPTUNE_DB_SERVICE_NAME, NEPTUNE_ANALYTICS_SERVICE_NAME
1213

1314

@@ -219,6 +220,46 @@ def test_configuration_neptune_proxy_host_with_whitespace_using_setter(self):
219220
self.assertEqual(config.proxy_host, self.neptune_host_reg)
220221
self.assertEqual(config._proxy_host, self.neptune_host_reg)
221222

223+
def test_configuration_gremlinsection_generic_default(self):
224+
config = Configuration('localhost', self.port)
225+
self.assertEqual(config.gremlin.traversal_source, 'g')
226+
self.assertEqual(config.gremlin.username, '')
227+
self.assertEqual(config.gremlin.password, '')
228+
self.assertEqual(config.gremlin.message_serializer, 'graphsonv3')
229+
230+
def test_configuration_gremlinsection_generic_override(self):
231+
config = Configuration('localhost',
232+
self.port,
233+
gremlin_section=GremlinSection(traversal_source='t',
234+
username='foo',
235+
password='bar',
236+
message_serializer='graphbinary'),
237+
)
238+
self.assertEqual(config.gremlin.traversal_source, 't')
239+
self.assertEqual(config.gremlin.username, 'foo')
240+
self.assertEqual(config.gremlin.password, 'bar')
241+
self.assertEqual(config.gremlin.message_serializer, 'graphbinaryv1')
242+
243+
def test_configuration_gremlinsection_neptune_default(self):
244+
config = Configuration(self.neptune_host_reg, self.port)
245+
self.assertEqual(config.gremlin.traversal_source, 'g')
246+
self.assertEqual(config.gremlin.username, '')
247+
self.assertEqual(config.gremlin.password, '')
248+
self.assertEqual(config.gremlin.message_serializer, 'graphsonv3')
249+
250+
def test_configuration_gremlinsection_neptune_override(self):
251+
config = Configuration(self.neptune_host_reg,
252+
self.port,
253+
gremlin_section=GremlinSection(traversal_source='t',
254+
username='foo',
255+
password='bar',
256+
message_serializer='graphbinary'),
257+
)
258+
self.assertEqual(config.gremlin.traversal_source, 'g')
259+
self.assertEqual(config.gremlin.username, '')
260+
self.assertEqual(config.gremlin.password, '')
261+
self.assertEqual(config.gremlin.message_serializer, 'graphbinaryv1')
262+
222263
def test_configuration_neptune_service_default(self):
223264
config = Configuration(self.neptune_host_reg, self.port)
224265
self.assertEqual(config.neptune_service, self.neptune_service_db)

test/unit/configuration/test_configuration_from_main.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import os
77
import unittest
88

9-
from graph_notebook.configuration.generate_config import AuthModeEnum, Configuration
9+
from graph_notebook.configuration.generate_config import AuthModeEnum, Configuration, GremlinSection
1010
from graph_notebook.configuration.get_config import get_config
1111

1212

@@ -59,6 +59,12 @@ def test_generate_configuration_main_override_defaults_neptune_no_verify(self):
5959
ssl=True, ssl_verify=False)
6060
self.generate_config_from_main_and_test(expected_config, host_type='neptune')
6161

62+
def test_generate_configuration_main_override_defaults_neptune_with_serializer(self):
63+
expected_config = Configuration(self.neptune_host_reg, self.port, neptune_service='neptune-graph',
64+
auth_mode=AuthModeEnum.IAM, load_from_s3_arn='loader_arn', ssl=False,
65+
gremlin_section=GremlinSection(message_serializer='graphbinary'))
66+
self.generate_config_from_main_and_test(expected_config, host_type='neptune')
67+
6268
def test_generate_configuration_main_override_defaults_neptune_cn(self):
6369
expected_config = Configuration(self.neptune_host_cn, self.port, neptune_service='neptune-graph',
6470
auth_mode=AuthModeEnum.IAM, load_from_s3_arn='loader_arn', ssl=False)
@@ -115,7 +121,8 @@ def generate_config_from_main_and_test(self, source_config: Configuration, host_
115121
f'--load_from_s3_arn "{source_config.load_from_s3_arn}" '
116122
f'--proxy_host "{source_config.proxy_host}" '
117123
f'--proxy_port "{source_config.proxy_port}" '
118-
f'--config_destination="{self.test_file_path}" ')
124+
f'--gremlin_serializer "{source_config.gremlin.message_serializer}" '
125+
f'--config_destination="{self.test_file_path}"')
119126
else:
120127
result = os.system(f'{self.python_cmd} -m graph_notebook.configuration.generate_config '
121128
f'--host "{source_config.host}" --port "{source_config.port}" '

0 commit comments

Comments
 (0)