You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Stepan Pilschikov (JIRA)" <ji...@apache.org> on 2018/10/19 15:29:00 UTC
[jira] [Created] (IGNITE-9950) thin python: Decimal data type
didn't match with others clients
Stepan Pilschikov created IGNITE-9950:
-----------------------------------------
Summary: thin python: Decimal data type didn't match with others clients
Key: IGNITE-9950
URL: https://issues.apache.org/jira/browse/IGNITE-9950
Project: Ignite
Issue Type: Bug
Components: thin client
Environment: Ignite 2.7 latest sources
default cache configuration
Python 3.7
nodejs 10+
PHP 7.2+
Ubuntu 17
Reporter: Stepan Pilschikov
Trying to put Decimal value from JS or PHP client and get with Python, but exception throwing
JS code:
{code}
IgniteClient = require('apache-ignite-client');
IgniteClientConfiguration = IgniteClient.IgniteClientConfiguration;
const Decimal = IgniteClient.Decimal;
const ObjectType = IgniteClient.ObjectType;
ENDPOINT = '127.0.0.1:10800';
igniteClient = new IgniteClient();
async function start() {
await igniteClient.connect(new IgniteClientConfiguration(ENDPOINT));
try {
cache = (await igniteClient.getOrCreateCache("JS_DECIMAL"))
.setKeyType(ObjectType.PRIMITIVE_TYPE.INTEGER)
.setValueType(ObjectType.PRIMITIVE_TYPE.DECIMAL);
await cache.put(1, new Decimal('7.7'));
} finally {
igniteClient.disconnect();
}
}
start();
{code}
Python get code
{code}
from pyignite import Client
from pyignite.datatypes import *
client = Client()
client.connect('127.0.0.1', 10800)
cache = client.get_or_create_cache("JS_DECIMAL")
print(str(cache.get(1, key_hint=IntObject)))
{code}
exception in python
{code}
Traceback (most recent call last):
File get_value_JS_DECIMAL.py", line 7, in <module>
print(str(cache.get(1, key_hint=IntObject)))
File "[ignite_src]/platforms/python/pyignite/utils.py", line 163, in ste_wrapper
result = fn(*args, **kwargs)
File "[ignite_src]/platforms/python/pyignite/cache.py", line 200, in get
result = cache_get(self._client, self._cache_id, key, key_hint=key_hint)
File "[ignite_src]/platforms/python/pyignite/api/key_value.py", line 107, in cache_get
('value', AnyDataObject),
File "[ignite_src]/platforms/python/pyignite/queries/__init__.py", line 291, in perform
result.value = response_struct.to_python(response)
File "[ignite_src]/platforms/python/pyignite/queries/__init__.py", line 96, in to_python
*args, **kwargs
File "[ignite_src]/platforms/python/pyignite/datatypes/internal.py", line 288, in to_python
return data_class.to_python(ctype_object)
File "[ignite_src]/platforms/python/pyignite/datatypes/standard.py", line 183, in to_python
result = decimal.Decimal(data.decode(PROTOCOL_STRING_ENCODING))
decimal.InvalidOperation: [<class 'decimal.ConversionSyntax'>]
{code}
When trying with PHP have same exception
Also when use Decimal from Python others clients return different value:
Python decimal put code
{code}
from pyignite import Client
from pyignite.datatypes import *
from decimal import Decimal
client = Client()
client.connect('127.0.0.1', 10800)
cache = client.get_or_create_cache("PY_DECIMAL")
cache.put(1, Decimal('7.7'), key_hint=IntObject, value_hint=DecimalObject)
{code}
JS get
{code}
IgniteClient = require('apache-ignite-client');
IgniteClientConfiguration = IgniteClient.IgniteClientConfiguration;
const ObjectType = IgniteClient.ObjectType;
ENDPOINT = '127.0.0.1:10800';
igniteClient = new IgniteClient();
async function start() {
await igniteClient.connect(new IgniteClientConfiguration(ENDPOINT));
try {
cache = (await igniteClient.getOrCreateCache("PY_DECIMAL"))
.setKeyType(ObjectType.PRIMITIVE_TYPE.INTEGER);
console.log(await cache.get(1));
} finally {
igniteClient.disconnect();
}
}
start();
{code}
JS return '141350' value
PHP have same behavior as JS
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)