[
https://issues.apache.org/jira/browse/TINKERPOP-1561?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
David M. Brown updated TINKERPOP-1561:
--------------------------------------
Description:
Because {{long}} doesn't exist in Python 3, we created a simple wrapper that
inherits from {{int}} to fill the void. After the last changes to the
gremlin-python {{graphson}} module, this inheritance causes our longs to be
serialized as {{Int32}}. For example:
{code}
from gremlin_python.statics import long
from gremlin_python.structure.io.graphson import GraphSONWriter
writer = GraphSONWriter()
writer.toDict(1)
{'@type': 'g:Int32', '@value': 1}
writer.toDict(long(1))
{'@type': 'g:Int32', '@value': 1}
{code}
This should be an easy fix. As far as I can see there are two main approaches:
1. Combine the {{Int64I0}} and {{Int32IO}} classes and perform an instance
check for long in the {{dictify()}} method; or,
2. Implement a {{long}} type that doesn't inherit from {{int}}. Here we would
probably want to define a variety of methods so our {{long}} emulates Python's
numeric object.
Does anyone have an opinion on a preferred approach? I would probably go with
the first approach, but either could work.
was:
Because ``long`` doesn't exist in Python 3, we created a simple wrapper that
inherits from ``int`` to fill the void. After the last changes to the
gremlin-python ``graphson`` module, this inheritance causes our longs to be
serialized as ``Int32``. For example:
from gremlin_python.statics import long
from gremlin_python.structure.io.graphson import GraphSONWriter
writer = GraphSONWriter()
writer.toDict(1)
{'@type': 'g:Int32', '@value': 1}
writer.toDict(long(1))
{'@type': 'g:Int32', '@value': 1}
This should be an easy fix. As far as I can see there are two main approaches:
1. Combine the ``Int64I0`` and ``Int32IO`` classes and perform an instance
check for long in the ``dictify()`` method; or,
2. Implement a ``long`` type that doesn't inherit from int. Here we would
probably want to define a variety of methods so our ``long`` emulates Python's
numeric object.
Does anyone have an opinion on a preferred approach? I would probably go with
the first approach, but either could work.
> gremiln-python GraphSONWriter doesn't properly serialize long in Python 3.5
> ---------------------------------------------------------------------------
>
> Key: TINKERPOP-1561
> URL: https://issues.apache.org/jira/browse/TINKERPOP-1561
> Project: TinkerPop
> Issue Type: Bug
> Components: language-variant
> Affects Versions: 3.2.3
> Environment: Python 3.5
> Reporter: David M. Brown
>
> Because {{long}} doesn't exist in Python 3, we created a simple wrapper that
> inherits from {{int}} to fill the void. After the last changes to the
> gremlin-python {{graphson}} module, this inheritance causes our longs to be
> serialized as {{Int32}}. For example:
> {code}
> from gremlin_python.statics import long
> from gremlin_python.structure.io.graphson import GraphSONWriter
> writer = GraphSONWriter()
> writer.toDict(1)
> {'@type': 'g:Int32', '@value': 1}
> writer.toDict(long(1))
> {'@type': 'g:Int32', '@value': 1}
> {code}
> This should be an easy fix. As far as I can see there are two main approaches:
> 1. Combine the {{Int64I0}} and {{Int32IO}} classes and perform an instance
> check for long in the {{dictify()}} method; or,
> 2. Implement a {{long}} type that doesn't inherit from {{int}}. Here we would
> probably want to define a variety of methods so our {{long}} emulates
> Python's numeric object.
> Does anyone have an opinion on a preferred approach? I would probably go with
> the first approach, but either could work.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)