diff --git a/libmc/__init__.py b/libmc/__init__.py index 4541bc24..7af38169 100644 --- a/libmc/__init__.py +++ b/libmc/__init__.py @@ -33,8 +33,8 @@ __file__ as _libmc_so_file ) -__VERSION__ = "1.4.11" -__version__ = "1.4.11" +__VERSION__ = "1.4.12" +__version__ = "1.4.12" __author__ = "mckelvin" __email__ = "mckelvin@users.noreply.github.com" __date__ = "Fri Jun 7 06:16:00 2024 +0800" diff --git a/libmc/_client.pyx b/libmc/_client.pyx index 476d61b9..a5f17a7b 100644 --- a/libmc/_client.pyx +++ b/libmc/_client.pyx @@ -16,7 +16,6 @@ from cpython cimport ( PyBytes_AsString as PyString_AsString, PyUnicode_AsUTF8String, ) -from ctypes import c_long as long import os import sys @@ -299,9 +298,6 @@ cdef bytes _encode_value(object val, int comp_threshold, flags_t *flags): flags[0] = _FLAG_BOOL enc_val = b'1' if val else b'0' elif type_ is int: - flags[0] = _FLAG_INTEGER - enc_val = str(val).encode('ascii') - elif type_ is long: flags[0] = _FLAG_LONG enc_val = str(val).encode('ascii') elif type_.__module__ == 'numpy': @@ -346,7 +342,7 @@ cpdef object decode_value(bytes val, flags_t flags): elif flags & _FLAG_INTEGER: dec_val = int(dec_val.decode('ascii')) elif flags & _FLAG_LONG: - dec_val = long(dec_val.decode('ascii')) + dec_val = int(dec_val.decode('ascii')) elif flags & _FLAG_MARSHAL: try: dec_val = marshal.loads(dec_val) diff --git a/src/version.go b/src/version.go index 16369788..e0d081f7 100644 --- a/src/version.go +++ b/src/version.go @@ -1,6 +1,6 @@ package golibmc -const _Version = "1.4.11" +const _Version = "1.4.12" const _Author = "mckelvin" const _Email = "mckelvin@users.noreply.github.com" const _Date = "Fri Jun 7 06:16:00 2024 +0800" diff --git a/tests/test_client.py b/tests/test_client.py index be55b88b..42b96f53 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -1,6 +1,5 @@ # coding: utf-8 -import sys import time import pytest import unittest @@ -31,13 +30,24 @@ def __eq__(self, other): class MiscCase(unittest.TestCase): def test_encode_value(self): - expect = (b'(\x02\x00\x00\x00s\x06\x00\x00\x00doubani\x00\x00\x00\x00', - 32) - data = (b'douban', 0) - # FIXME - vi = sys.version_info - if vi.major == 2 and vi.micro == 7 and vi.minor < 9: - assert encode_value(data, 0) == expect + for expect, flag, data in [ + ( + b'(\x02\x00\x00\x00s\x06\x00\x00\x00doubani\x00\x00\x00\x00', + 32, + (b'douban', 0) + ), + ( + b'1234567890', + 4, + 123_456_789_0, + ), + ( + b'12345678901234567890', + 4, + 123_456_7890_123_456_7890, + ), + ]: + assert encode_value(data, 0) == (expect, flag) def test_decode_value(self): dataset = [ @@ -50,6 +60,7 @@ def test_decode_value(self): "scubadiving", b'haha', ('douban', 0), + 123_456_789, ] for d in dataset: new_d = decode_value(*encode_value(d, 0)) @@ -57,6 +68,13 @@ def test_decode_value(self): if isinstance(d, DiveMaster): assert d is not new_d + for data, flag, expected in [ + (b'123', 2, 123), + (b'123456789', 2, 123_456_789), + (b'12345678901234567890', 4, 123_456_7890_123_456_7890), + ]: + assert decode_value(data, flag) == expected + class SingleServerCase(unittest.TestCase): def setUp(self): @@ -195,7 +213,7 @@ def test_maxiov(self): def test_get_set_raw(self): self.mc.set('foo', 233) - assert self.mc.get_raw('foo') == (b'233', 2) + assert self.mc.get_raw('foo') == (b'233', 4) self.mc.set_raw('foo', b'2335', 0, 2) assert self.mc.get('foo') == 2335