[ 
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:

    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.


  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:

```python
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:
>     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.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to