gremlinpython 3.8.1__tar.gz → 3.8.2__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 (40) hide show
  1. {gremlinpython-3.8.1/gremlinpython.egg-info → gremlinpython-3.8.2}/PKG-INFO +6 -2
  2. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/__init__.py +1 -1
  3. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/driver/useragent.py +1 -1
  4. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/process/strategies.py +7 -0
  5. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/process/traversal.py +1 -1
  6. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/structure/graph.py +12 -0
  7. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/structure/io/graphbinaryV1.py +19 -13
  8. {gremlinpython-3.8.1 → gremlinpython-3.8.2/gremlinpython.egg-info}/PKG-INFO +6 -2
  9. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/pyproject.toml +6 -2
  10. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/LICENSE +0 -0
  11. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/MANIFEST.in +0 -0
  12. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/NOTICE +0 -0
  13. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/README.rst +0 -0
  14. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/driver/__init__.py +0 -0
  15. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/driver/aiohttp/__init__.py +0 -0
  16. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/driver/aiohttp/transport.py +0 -0
  17. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/driver/client.py +0 -0
  18. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/driver/connection.py +0 -0
  19. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/driver/driver_remote_connection.py +0 -0
  20. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/driver/protocol.py +0 -0
  21. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/driver/remote_connection.py +0 -0
  22. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/driver/request.py +0 -0
  23. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/driver/resultset.py +0 -0
  24. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/driver/serializer.py +0 -0
  25. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/driver/transport.py +0 -0
  26. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/process/__init__.py +0 -0
  27. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/process/anonymous_traversal.py +0 -0
  28. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/process/graph_traversal.py +0 -0
  29. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/process/translator.py +0 -0
  30. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/statics.py +0 -0
  31. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/structure/__init__.py +0 -0
  32. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/structure/io/__init__.py +0 -0
  33. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/structure/io/graphsonV2d0.py +0 -0
  34. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/structure/io/graphsonV3d0.py +0 -0
  35. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlin_python/structure/io/util.py +0 -0
  36. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlinpython.egg-info/SOURCES.txt +0 -0
  37. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlinpython.egg-info/dependency_links.txt +0 -0
  38. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlinpython.egg-info/requires.txt +0 -0
  39. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/gremlinpython.egg-info/top_level.txt +0 -0
  40. {gremlinpython-3.8.1 → gremlinpython-3.8.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gremlinpython
3
- Version: 3.8.1
3
+ Version: 3.8.2
4
4
  Summary: Gremlin-Python for Apache TinkerPop
5
5
  Maintainer-email: Apache TinkerPop <dev@tinkerpop.apache.org>
6
6
  License: Apache 2
@@ -9,7 +9,11 @@ Classifier: Intended Audience :: Developers
9
9
  Classifier: License :: OSI Approved :: Apache Software License
10
10
  Classifier: Natural Language :: English
11
11
  Classifier: Programming Language :: Python :: 3
12
- Requires-Python: >=3.10
12
+ Classifier: Programming Language :: Python :: 3.10
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Requires-Python: <3.14,>=3.10
13
17
  Description-Content-Type: text/x-rst
14
18
  License-File: LICENSE
15
19
  License-File: NOTICE
@@ -18,4 +18,4 @@
18
18
  #
19
19
 
20
20
  __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
21
- __version__ = '3.8.1'
21
+ __version__ = '3.8.2' # Do not touch, updated automatically from maven
@@ -18,7 +18,7 @@
18
18
  #
19
19
  import platform
20
20
 
21
- gremlin_version = "3.8.1" # DO NOT MODIFY - Configured automatically by Maven Replacer Plugin
21
+ gremlin_version = "3.8.2" # DO NOT MODIFY - Configured automatically by Maven Replacer Plugin
22
22
 
23
23
  def _generate_user_agent():
24
24
  application_name = "NotAvailable"
@@ -20,6 +20,7 @@
20
20
  __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
21
21
 
22
22
  from .traversal import TraversalStrategy
23
+ import warnings
23
24
 
24
25
  base_namespace = 'org.apache.tinkerpop.gremlin.process.traversal.strategy.'
25
26
  decoration_namespace = base_namespace + 'decoration.'
@@ -201,7 +202,13 @@ class PathRetractionStrategy(TraversalStrategy):
201
202
 
202
203
  class ProductiveByStrategy(TraversalStrategy):
203
204
  def __init__(self, productiveKeys=None):
205
+ warnings.warn(
206
+ "ProductiveByStrategy is deprecated as of 3.7.7, not replaced. It was added as a temporary way to "
207
+ "mimic pre-3.5.0 null processing behavior.",
208
+ DeprecationWarning)
204
209
  TraversalStrategy.__init__(self, fqcn=optimization_namespace + 'ProductiveByStrategy')
210
+ if productiveKeys is not None:
211
+ self.configuration["productiveKeys"] = productiveKeys
205
212
 
206
213
 
207
214
  class CountStrategy(TraversalStrategy):
@@ -700,7 +700,7 @@ class PeerPressure(object):
700
700
 
701
701
  propertyName = "~tinkerpop.peerPressure.propertyName"
702
702
 
703
- property_name = "~tinkerpop.pageRank.propertyName"
703
+ property_name = "~tinkerpop.peerPressure.propertyName"
704
704
 
705
705
  times = "~tinkerpop.peerPressure.times"
706
706
 
@@ -42,6 +42,18 @@ class Element(object):
42
42
  def __hash__(self):
43
43
  return hash(self.id)
44
44
 
45
+ def property_map(self):
46
+ """Groups this element's properties by key.
47
+
48
+ Returns a dict of property key -> list of property objects (an empty
49
+ dict when this element has no properties). ``self.properties`` is a
50
+ flat list where each item exposes ``.key``.
51
+ """
52
+ result = {}
53
+ for p in self.properties:
54
+ result.setdefault(p.key, []).append(p)
55
+ return result
56
+
45
57
 
46
58
  class Vertex(Element):
47
59
  def __init__(self, id, label="vertex", properties=None):
@@ -119,6 +119,9 @@ class DataType(Enum):
119
119
 
120
120
  NULL_BYTES = [DataType.null.value, 0x01]
121
121
 
122
+ # null type code as a plain int, so the per-read null check skips the aenum lookup
123
+ _NULL = DataType.null.value
124
+
122
125
 
123
126
  def _make_packer(format_string):
124
127
  packer = struct.Struct(format_string)
@@ -188,6 +191,9 @@ class GraphBinaryReader(object):
188
191
  self.deserializers = _deserializers.copy()
189
192
  if deserializer_map:
190
193
  self.deserializers.update(deserializer_map)
194
+ # Mirror of self.deserializers keyed by int type code instead of DataType.
195
+ # Avoids the per-read DataType(bt) call, whose aenum construction negatively affects performance on large results.
196
+ self._deserializer_by_type_code = {dt.value: des.objectify for dt, des in self.deserializers.items()}
191
197
 
192
198
  def read_object(self, b):
193
199
  if isinstance(b, bytearray):
@@ -198,11 +204,15 @@ class GraphBinaryReader(object):
198
204
  def to_object(self, buff, data_type=None, nullable=True):
199
205
  if data_type is None:
200
206
  bt = uint8_unpack(buff.read(1))
201
- if bt == DataType.null.value:
207
+ if bt == _NULL:
202
208
  if nullable:
203
209
  buff.read(1)
204
210
  return None
205
- return self.deserializers[DataType(bt)].objectify(buff, self, nullable)
211
+ try:
212
+ objectify = self._deserializer_by_type_code[bt]
213
+ except KeyError:
214
+ raise ValueError("%r is not a valid DataType" % bt) from None
215
+ return objectify(buff, self, nullable)
206
216
  else:
207
217
  return self.deserializers[data_type].objectify(buff, self, nullable)
208
218
 
@@ -291,17 +301,13 @@ class BigIntIO(_GraphBinaryTypeIO):
291
301
 
292
302
  @classmethod
293
303
  def write_bigint(cls, obj, to_extend):
294
- length = (obj.bit_length() + 7) // 8
295
- if obj > 0:
296
- b = obj.to_bytes(length, byteorder='big')
297
- to_extend.extend(int32_pack(length + 1))
298
- to_extend.extend(int8_pack(0))
299
- to_extend.extend(b)
300
- else:
301
- # handle negative
302
- b = obj.to_bytes(length, byteorder='big', signed=True)
303
- to_extend.extend(int32_pack(length))
304
- to_extend.extend(b)
304
+ # Compute the minimal signed two's-complement byte length, matching the
305
+ # Java reference serializer (BigInteger.toByteArray()).
306
+ bit_length = obj.bit_length() if obj >= 0 else (obj + 1).bit_length()
307
+ length = bit_length // 8 + 1
308
+ b = obj.to_bytes(length, byteorder='big', signed=True)
309
+ to_extend.extend(int32_pack(length))
310
+ to_extend.extend(b)
305
311
  return to_extend
306
312
 
307
313
  @classmethod
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gremlinpython
3
- Version: 3.8.1
3
+ Version: 3.8.2
4
4
  Summary: Gremlin-Python for Apache TinkerPop
5
5
  Maintainer-email: Apache TinkerPop <dev@tinkerpop.apache.org>
6
6
  License: Apache 2
@@ -9,7 +9,11 @@ Classifier: Intended Audience :: Developers
9
9
  Classifier: License :: OSI Approved :: Apache Software License
10
10
  Classifier: Natural Language :: English
11
11
  Classifier: Programming Language :: Python :: 3
12
- Requires-Python: >=3.10
12
+ Classifier: Programming Language :: Python :: 3.10
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Requires-Python: <3.14,>=3.10
13
17
  Description-Content-Type: text/x-rst
14
18
  License-File: LICENSE
15
19
  License-File: NOTICE
@@ -26,7 +26,7 @@ description = "Gremlin-Python for Apache TinkerPop"
26
26
  readme = {file = "README.rst", content-type = "text/x-rst"}
27
27
  license = {text = "Apache 2"}
28
28
  maintainers = [{name = "Apache TinkerPop", email = "dev@tinkerpop.apache.org"}]
29
- requires-python = ">=3.10"
29
+ requires-python = ">=3.10,<3.14"
30
30
  dependencies = [
31
31
  "nest_asyncio",
32
32
  "aiohttp>=3.8.0,<4.0.0",
@@ -38,7 +38,11 @@ classifiers = [
38
38
  "Intended Audience :: Developers",
39
39
  "License :: OSI Approved :: Apache Software License",
40
40
  "Natural Language :: English",
41
- "Programming Language :: Python :: 3"
41
+ "Programming Language :: Python :: 3",
42
+ "Programming Language :: Python :: 3.10",
43
+ "Programming Language :: Python :: 3.11",
44
+ "Programming Language :: Python :: 3.12",
45
+ "Programming Language :: Python :: 3.13"
42
46
  ]
43
47
 
44
48
  [project.urls]
File without changes
File without changes
File without changes
File without changes
File without changes