jamcodec 0.1.2__tar.gz → 0.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. {jamcodec-0.1.2 → jamcodec-0.1.4}/PKG-INFO +1 -1
  2. {jamcodec-0.1.2 → jamcodec-0.1.4}/jamcodec/base.py +7 -0
  3. {jamcodec-0.1.2 → jamcodec-0.1.4}/jamcodec/types.py +22 -6
  4. {jamcodec-0.1.2 → jamcodec-0.1.4}/jamcodec.egg-info/PKG-INFO +1 -1
  5. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_enum.py +9 -1
  6. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_map.py +19 -0
  7. {jamcodec-0.1.2 → jamcodec-0.1.4}/LICENSE +0 -0
  8. {jamcodec-0.1.2 → jamcodec-0.1.4}/README.md +0 -0
  9. {jamcodec-0.1.2 → jamcodec-0.1.4}/jamcodec/__init__.py +0 -0
  10. {jamcodec-0.1.2 → jamcodec-0.1.4}/jamcodec/constants.py +0 -0
  11. {jamcodec-0.1.2 → jamcodec-0.1.4}/jamcodec/exceptions.py +0 -0
  12. {jamcodec-0.1.2 → jamcodec-0.1.4}/jamcodec/mixins.py +0 -0
  13. {jamcodec-0.1.2 → jamcodec-0.1.4}/jamcodec.egg-info/SOURCES.txt +0 -0
  14. {jamcodec-0.1.2 → jamcodec-0.1.4}/jamcodec.egg-info/dependency_links.txt +0 -0
  15. {jamcodec-0.1.2 → jamcodec-0.1.4}/jamcodec.egg-info/requires.txt +0 -0
  16. {jamcodec-0.1.2 → jamcodec-0.1.4}/jamcodec.egg-info/top_level.txt +0 -0
  17. {jamcodec-0.1.2 → jamcodec-0.1.4}/pyproject.toml +0 -0
  18. {jamcodec-0.1.2 → jamcodec-0.1.4}/requirements.txt +0 -0
  19. {jamcodec-0.1.2 → jamcodec-0.1.4}/setup.cfg +0 -0
  20. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_array.py +0 -0
  21. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_bitarray.py +0 -0
  22. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_bitvec.py +0 -0
  23. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_boolean.py +0 -0
  24. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_bytes.py +0 -0
  25. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_compact.py +0 -0
  26. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_float.py +0 -0
  27. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_hashmap.py +0 -0
  28. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_integer.py +0 -0
  29. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_mixins.py +0 -0
  30. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_option.py +0 -0
  31. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_scale_types.py +0 -0
  32. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_scalebytes.py +0 -0
  33. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_string.py +0 -0
  34. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_struct.py +0 -0
  35. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_tuple.py +0 -0
  36. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_varint.py +0 -0
  37. {jamcodec-0.1.2 → jamcodec-0.1.4}/test/test_vec.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jamcodec
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Summary: Python JAM Codec Library
5
5
  Author-email: JAMdot Technologies <dev@jamdot.tech>
6
6
  Project-URL: Homepage, https://github.com/JAMdotTech/py-jam-codec
@@ -115,6 +115,13 @@ class JamBytes:
115
115
  return False
116
116
  return self.data == other.data
117
117
 
118
+
119
+ def __lt__(self, other):
120
+ return self.data < other.data
121
+
122
+ def __gt__(self, other):
123
+ return self.data > other.data
124
+
118
125
  def __len__(self):
119
126
  return len(self.data)
120
127
 
@@ -371,8 +371,11 @@ class Enum(JamCodecTypeDef):
371
371
 
372
372
  for idx, (variant_name, variant_obj) in enumerate(self.variants.items()):
373
373
 
374
- if enum_key == variant_name:
374
+ if type(variant_obj) is dict:
375
+ idx = variant_obj.get('id', idx)
376
+ variant_obj = variant_obj.get('type', variant_obj)
375
377
 
378
+ if enum_key == variant_name:
376
379
  data = JamBytes(bytearray([idx]))
377
380
 
378
381
  if variant_obj is not None:
@@ -387,9 +390,19 @@ class Enum(JamCodecTypeDef):
387
390
 
388
391
  index = int.from_bytes(data.get_next_bytes(1), byteorder='little')
389
392
 
390
- try:
391
- enum_key, enum_variant = list(self.variants.items())[index]
392
- except IndexError:
393
+ enum_key = None
394
+ enum_variant = None
395
+
396
+ for idx, (variant_key, variant_obj) in enumerate(self.variants.items()):
397
+ if type(variant_obj) is dict:
398
+ idx = variant_obj.get('id', idx)
399
+ variant_obj = variant_obj.get('type', variant_obj)
400
+ if index == idx:
401
+ enum_key = variant_key
402
+ enum_variant = variant_obj
403
+ break
404
+
405
+ if enum_key is None:
393
406
  raise ScaleDecodeException(f"Index '{index}' not present in Enum type mapping")
394
407
 
395
408
  if enum_variant is None:
@@ -434,6 +447,9 @@ class Enum(JamCodecTypeDef):
434
447
 
435
448
  for idx, (variant_name, variant_obj) in enumerate(self.variants.items()):
436
449
 
450
+ if type(variant_obj) is dict:
451
+ variant_obj = variant_obj.get('type', variant_obj)
452
+
437
453
  if enum_key == variant_name:
438
454
 
439
455
  if variant_obj is not None:
@@ -961,8 +977,8 @@ class Map(JamCodecTypeDef):
961
977
  # Convert to list
962
978
  value = value.items()
963
979
 
964
- # Sort Map by keys
965
- value = sorted(value, key=lambda x: x[0])
980
+ # Sort Map by keys and then values
981
+ value = sorted(value)
966
982
 
967
983
  # Encode length of Vec
968
984
  data = VarInt64.encode(len(value))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jamcodec
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Summary: Python JAM Codec Library
5
5
  Author-email: JAMdot Technologies <dev@jamdot.tech>
6
6
  Project-URL: Homepage, https://github.com/JAMdotTech/py-jam-codec
@@ -17,7 +17,7 @@
17
17
 
18
18
  import unittest
19
19
 
20
- from jamcodec.types import Enum, Bool, U32
20
+ from jamcodec.types import Enum, Bool, U32, String
21
21
 
22
22
 
23
23
  class TestEnum(unittest.TestCase):
@@ -60,6 +60,14 @@ class TestEnum(unittest.TestCase):
60
60
  scale_obj.deserialize('None')
61
61
  self.assertEqual(('None', None), scale_obj.value_object)
62
62
 
63
+ def test_enum_explicit_id(self):
64
+ scale_obj = Enum(Bool=Bool(), Number=U32, Error={'id': 255, 'type': String}).new()
65
+ jam_bytes = scale_obj.encode({'Error': 'test'})
66
+ self.assertEqual('0xff0474657374', jam_bytes.to_hex())
67
+
68
+ value = scale_obj.decode(jam_bytes)
69
+ self.assertEqual({'Error': 'test'}, value)
70
+
63
71
 
64
72
  if __name__ == '__main__':
65
73
  unittest.main()
@@ -56,6 +56,25 @@ class TestMap(unittest.TestCase):
56
56
  data
57
57
  )
58
58
 
59
+ def test_map_encode_sort_key_values(self):
60
+ obj = Map(U32, U32).new()
61
+ value = [
62
+ (2, 1),
63
+ (2, 2),
64
+ (1, 2),
65
+ (1, 1)
66
+ ]
67
+
68
+ data = obj.encode(value)
69
+
70
+ self.assertEqual(
71
+ JamBytes(
72
+ "0x040100000001000000010000000200000002000000010000000200000002000000"
73
+ ),
74
+ data
75
+ )
76
+
77
+
59
78
  def test_map_decode(self):
60
79
  obj = Map(U32, Bytes).new()
61
80
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes