python-arango-async 1.2.1__tar.gz → 1.2.3__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 (111) hide show
  1. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/.circleci/config.yml +21 -5
  2. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/.github/workflows/pypi.yaml +2 -2
  3. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/PKG-INFO +3 -3
  4. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/README.md +1 -1
  5. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/aql.py +9 -0
  6. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/cluster.py +4 -0
  7. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/collection.py +1 -1
  8. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/database.py +26 -2
  9. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/foxx.py +5 -1
  10. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/typings.py +24 -1
  11. python_arango_async-1.2.3/arangoasync/version.py +1 -0
  12. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/aql.rst +4 -0
  13. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/cluster.rst +0 -4
  14. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/foxx.rst +4 -0
  15. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/graph.rst +1 -1
  16. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/overview.rst +1 -1
  17. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/task.rst +4 -0
  18. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/pyproject.toml +1 -1
  19. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/python_arango_async.egg-info/PKG-INFO +3 -3
  20. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/python_arango_async.egg-info/SOURCES.txt +3 -1
  21. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/python_arango_async.egg-info/requires.txt +1 -1
  22. python_arango_async-1.2.3/starter.sh +84 -0
  23. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/conftest.py +12 -11
  24. python_arango_async-1.2.3/tests/static/cluster-3.12.conf +20 -0
  25. python_arango_async-1.2.1/tests/static/cluster-3.12.conf → python_arango_async-1.2.3/tests/static/cluster-4.0.conf +1 -1
  26. python_arango_async-1.2.3/tests/static/single-3.12.conf +19 -0
  27. python_arango_async-1.2.1/tests/static/single-3.12.conf → python_arango_async-1.2.3/tests/static/single-4.0.conf +2 -1
  28. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_aql.py +19 -5
  29. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_cluster.py +6 -4
  30. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_collection.py +22 -1
  31. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_database.py +16 -14
  32. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_foxx.py +5 -1
  33. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_task.py +5 -1
  34. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_transaction.py +5 -1
  35. python_arango_async-1.2.1/arangoasync/version.py +0 -1
  36. python_arango_async-1.2.1/starter.sh +0 -60
  37. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/.github/workflows/codeql.yaml +0 -0
  38. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/.github/workflows/docs.yaml +0 -0
  39. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/.gitignore +0 -0
  40. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/.pre-commit-config.yaml +0 -0
  41. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/.readthedocs.yaml +0 -0
  42. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/CONTRIBUTING.md +0 -0
  43. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/LICENSE +0 -0
  44. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/__init__.py +0 -0
  45. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/auth.py +0 -0
  46. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/backup.py +0 -0
  47. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/client.py +0 -0
  48. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/compression.py +0 -0
  49. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/connection.py +0 -0
  50. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/cursor.py +0 -0
  51. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/errno.py +0 -0
  52. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/exceptions.py +0 -0
  53. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/executor.py +0 -0
  54. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/graph.py +0 -0
  55. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/http.py +0 -0
  56. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/job.py +0 -0
  57. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/logger.py +0 -0
  58. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/replication.py +0 -0
  59. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/request.py +0 -0
  60. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/resolver.py +0 -0
  61. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/response.py +0 -0
  62. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/result.py +0 -0
  63. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/arangoasync/serialization.py +0 -0
  64. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/admin.rst +0 -0
  65. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/analyzer.rst +0 -0
  66. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/async.rst +0 -0
  67. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/authentication.rst +0 -0
  68. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/backup.rst +0 -0
  69. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/certificates.rst +0 -0
  70. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/collection.rst +0 -0
  71. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/compression.rst +0 -0
  72. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/conf.py +0 -0
  73. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/cursor.rst +0 -0
  74. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/database.rst +0 -0
  75. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/document.rst +0 -0
  76. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/errno.rst +0 -0
  77. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/errors.rst +0 -0
  78. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/helpers.rst +0 -0
  79. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/http.rst +0 -0
  80. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/index.rst +0 -0
  81. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/indexes.rst +0 -0
  82. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/logging.rst +0 -0
  83. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/migration.rst +0 -0
  84. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/serialization.rst +0 -0
  85. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/specs.rst +0 -0
  86. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/static/logo.png +0 -0
  87. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/transaction.rst +0 -0
  88. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/user.rst +0 -0
  89. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/docs/view.rst +0 -0
  90. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/python_arango_async.egg-info/dependency_links.txt +0 -0
  91. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/python_arango_async.egg-info/top_level.txt +0 -0
  92. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/setup.cfg +0 -0
  93. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/setup.py +0 -0
  94. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/__init__.py +0 -0
  95. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/helpers.py +0 -0
  96. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/static/keyfile +0 -0
  97. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/static/service.zip +0 -0
  98. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_analyzer.py +0 -0
  99. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_async.py +0 -0
  100. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_backup.py +0 -0
  101. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_client.py +0 -0
  102. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_compression.py +0 -0
  103. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_connection.py +0 -0
  104. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_cursor.py +0 -0
  105. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_document.py +0 -0
  106. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_graph.py +0 -0
  107. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_http.py +0 -0
  108. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_resolver.py +0 -0
  109. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_typings.py +0 -0
  110. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_user.py +0 -0
  111. {python_arango_async-1.2.1 → python_arango_async-1.2.3}/tests/test_view.py +0 -0
@@ -4,7 +4,7 @@ executors:
4
4
  python-container:
5
5
  docker:
6
6
  - image: cimg/python:3.12
7
- resource_class: small
7
+ resource_class: arangodb/small-amd64
8
8
  python-vm:
9
9
  machine:
10
10
  image: ubuntu-2404:current
@@ -15,18 +15,34 @@ workflows:
15
15
  jobs:
16
16
  - lint
17
17
  - test:
18
- name: Python (<< matrix.python_version >>) - ArangoDB (<< matrix.arangodb_license >>, << matrix.arangodb_version >> << matrix.arangodb_config >>)
18
+ name: Python (<< matrix.python_version >>) - ArangoDB (enterprise, << matrix.arangodb_version >> << matrix.arangodb_config >>)
19
19
  matrix:
20
20
  parameters:
21
- python_version: ["3.10", "3.11", "3.12"]
21
+ python_version: ["3.13"]
22
22
  arangodb_config: ["single", "cluster"]
23
23
  arangodb_license: ["enterprise"]
24
24
  arangodb_version: ["3.12"]
25
+ - test:
26
+ name: Python (<< matrix.python_version >>) - ArangoDB (enterprise-preview, << matrix.arangodb_version >> << matrix.arangodb_config >>)
27
+ matrix:
28
+ parameters:
29
+ python_version: ["3.13"]
30
+ arangodb_config: ["single", "cluster"]
31
+ arangodb_license: ["enterprise-preview"]
32
+ arangodb_version: ["4.0-nightly"]
33
+ - test:
34
+ name: Python (<< matrix.python_version >>) - ArangoDB (enterprise, 3.12 cluster)
35
+ matrix:
36
+ parameters:
37
+ python_version: ["3.10", "3.11", "3.12"]
38
+ arangodb_config: ["cluster"]
39
+ arangodb_license: ["enterprise"]
40
+ arangodb_version: ["3.12"]
25
41
 
26
42
  jobs:
27
43
  lint:
28
44
  executor: python-container
29
- resource_class: small
45
+ resource_class: arangodb/small-amd64
30
46
  steps:
31
47
  - checkout
32
48
  - run:
@@ -86,7 +102,7 @@ jobs:
86
102
  args+=("--cluster" "--port=8539" "--port=8549")
87
103
  fi
88
104
 
89
- if [ << parameters.arangodb_license >> != "enterprise" ]; then
105
+ if [ << parameters.arangodb_license >> != "enterprise" ] && [ << parameters.arangodb_license >> != "enterprise-preview" ]; then
90
106
  args+=("--skip" "enterprise")
91
107
  fi
92
108
 
@@ -31,10 +31,10 @@ jobs:
31
31
  env:
32
32
  TWINE_USERNAME: __token__
33
33
  TWINE_PASSWORD: ${{ secrets.PYPI_TEST_TOKEN }}
34
- run: twine upload --repository testpypi dist/*
34
+ run: twine upload --verbose --repository testpypi dist/*
35
35
 
36
36
  - name: Publish to PyPI
37
37
  env:
38
38
  TWINE_USERNAME: __token__
39
39
  TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
40
- run: twine upload --repository pypi dist/*
40
+ run: twine upload --verbose --repository pypi dist/*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-arango-async
3
- Version: 1.2.1
3
+ Version: 1.2.3
4
4
  Summary: Async Python Driver for ArangoDB
5
5
  Author-email: Alexandru Petenchea <alexandru.petenchea@arangodb.com>, Anthony Mahanna <anthony.mahanna@arangodb.com>
6
6
  Maintainer-email: Alexandru Petenchea <alexandru.petenchea@arangodb.com>, Anthony Mahanna <anthony.mahanna@arangodb.com>
@@ -26,7 +26,7 @@ Requires-Dist: multidict>=6.0
26
26
  Requires-Dist: pyjwt>=2.10.0
27
27
  Provides-Extra: dev
28
28
  Requires-Dist: aiofiles>=24.1.0; extra == "dev"
29
- Requires-Dist: black==26.1.0; extra == "dev"
29
+ Requires-Dist: black==26.3.1; extra == "dev"
30
30
  Requires-Dist: flake8==7.3.0; extra == "dev"
31
31
  Requires-Dist: isort>=5.10.1; extra == "dev"
32
32
  Requires-Dist: mypy==1.15.0; extra == "dev"
@@ -169,7 +169,7 @@ async def main():
169
169
  # Traverse the graph in outbound direction, breath-first.
170
170
  query = """
171
171
  FOR v, e, p IN 1..3 OUTBOUND 'students/01' GRAPH 'school'
172
- OPTIONS { bfs: true, uniqueVertices: 'global' }
172
+ OPTIONS { order: 'bfs', uniqueVertices: 'global' }
173
173
  RETURN {vertex: v, edge: e, path: p}
174
174
  """
175
175
 
@@ -127,7 +127,7 @@ async def main():
127
127
  # Traverse the graph in outbound direction, breath-first.
128
128
  query = """
129
129
  FOR v, e, p IN 1..3 OUTBOUND 'students/01' GRAPH 'school'
130
- OPTIONS { bfs: true, uniqueVertices: 'global' }
130
+ OPTIONS { order: 'bfs', uniqueVertices: 'global' }
131
131
  RETURN {vertex: v, edge: e, path: p}
132
132
  """
133
133
 
@@ -678,6 +678,9 @@ class AQL:
678
678
  async def functions(self, namespace: Optional[str] = None) -> Result[Jsons]:
679
679
  """List the registered used-defined AQL functions.
680
680
 
681
+ Warning:
682
+ AQL User Functions are no longer available in ArangoDB 4.0.
683
+
681
684
  Args:
682
685
  namespace (str | None): Returns all registered AQL user functions from
683
686
  the specified namespace.
@@ -718,6 +721,9 @@ class AQL:
718
721
  ) -> Result[Json]:
719
722
  """Registers a user-defined AQL function (UDF) written in JavaScript.
720
723
 
724
+ Warning:
725
+ AQL User Functions are no longer available in ArangoDB 4.0.
726
+
721
727
  Args:
722
728
  name (str): Name of the function.
723
729
  code (str): JavaScript code of the function.
@@ -756,6 +762,9 @@ class AQL:
756
762
  ) -> Result[Json]:
757
763
  """Remove a user-defined AQL function.
758
764
 
765
+ Warning:
766
+ AQL User Functions are no longer available in ArangoDB 4.0.
767
+
759
768
  Args:
760
769
  name (str): Name of the function.
761
770
  group (bool | None): If set to `True`, the function name is treated
@@ -64,6 +64,10 @@ class Cluster:
64
64
  async def statistics(self, db_server: str) -> Result[Json]:
65
65
  """Queries the statistics of the given DB-Server.
66
66
 
67
+ Warning:
68
+ DB-Server statistics are no longer available in ArangoDB 4.0.
69
+ Use :meth:`arangoasync.database.Database.metrics` instead.
70
+
67
71
  Args:
68
72
  db_server (str): The ID of the DB-Server.
69
73
 
@@ -397,7 +397,7 @@ class Collection(Generic[T, U, V]):
397
397
 
398
398
  Args:
399
399
  type (str): Type attribute (ex. "persistent", "inverted", "ttl", "mdi",
400
- "geo").
400
+ "geo", "vector").
401
401
  fields (dict | list): Fields to index.
402
402
  options (dict | None): Additional index options.
403
403
 
@@ -234,6 +234,9 @@ class Database:
234
234
  def foxx(self) -> Foxx:
235
235
  """Return Foxx API wrapper.
236
236
 
237
+ Warning:
238
+ Foxx microservice features are no longer available in ArangoDB 4.0.
239
+
237
240
  Returns:
238
241
  arangoasync.foxx.Foxx: Foxx API wrapper.
239
242
  """
@@ -2429,6 +2432,9 @@ class Database:
2429
2432
  async def tasks(self) -> Result[Jsons]:
2430
2433
  """Fetches all existing tasks from the server.
2431
2434
 
2435
+ Warning:
2436
+ Tasks are no longer available in ArangoDB 4.0.
2437
+
2432
2438
  Returns:
2433
2439
  list: List of currently active server tasks.
2434
2440
 
@@ -2451,6 +2457,9 @@ class Database:
2451
2457
  async def task(self, task_id: str) -> Result[Json]:
2452
2458
  """Return the details of an active server task.
2453
2459
 
2460
+ Warning:
2461
+ Tasks are no longer available in ArangoDB 4.0.
2462
+
2454
2463
  Args:
2455
2464
  task_id (str) -> Server task ID.
2456
2465
 
@@ -2484,6 +2493,9 @@ class Database:
2484
2493
  ) -> Result[Json]:
2485
2494
  """Create a new task.
2486
2495
 
2496
+ Warning:
2497
+ Tasks are no longer available in ArangoDB 4.0.
2498
+
2487
2499
  Args:
2488
2500
  command (str): The JavaScript code to be executed.
2489
2501
  task_id (str | None): Optional task ID. If not provided, the server will
@@ -2542,6 +2554,9 @@ class Database:
2542
2554
  ) -> Result[bool]:
2543
2555
  """Delete a server task.
2544
2556
 
2557
+ Warning:
2558
+ Tasks are no longer available in ArangoDB 4.0.
2559
+
2545
2560
  Args:
2546
2561
  task_id (str): Task ID.
2547
2562
  ignore_missing (bool): If `True`, do not raise an exception if the
@@ -2909,6 +2924,9 @@ class Database:
2909
2924
  async def reload_routing(self) -> None:
2910
2925
  """Reload the routing information.
2911
2926
 
2927
+ Warning:
2928
+ Route reloading is no longer available in ArangoDB 4.0.
2929
+
2912
2930
  Raises:
2913
2931
  ServerReloadRoutingError: If the operation fails.
2914
2932
 
@@ -2926,6 +2944,9 @@ class Database:
2926
2944
  async def echo(self, body: Optional[Json] = None) -> Result[Json]:
2927
2945
  """Return an object with the servers request information.
2928
2946
 
2947
+ Warning:
2948
+ Request echoing is no longer available in ArangoDB 4.0.
2949
+
2929
2950
  Args:
2930
2951
  body (dict | None): Optional body of the request.
2931
2952
 
@@ -2952,6 +2973,9 @@ class Database:
2952
2973
  async def execute(self, command: str) -> Result[Any]:
2953
2974
  """Execute raw Javascript command on the server.
2954
2975
 
2976
+ Warning:
2977
+ Javascript command execution is no longer available in ArangoDB 4.0.
2978
+
2955
2979
  Args:
2956
2980
  command (str): Javascript command to execute.
2957
2981
 
@@ -3004,7 +3028,7 @@ class Database:
3004
3028
  ServerMetricsError: If the operation fails.
3005
3029
 
3006
3030
  References:
3007
- - `metrics-api-v2 <https://docs.arango.ai/arangodb/stable/develop/http-api/monitoring/metrics/#metrics-api-v2>`__
3031
+ - `metrics-api <https://docs.arango.ai/arangodb/stable/develop/http-api/monitoring/metrics/#metrics-api>`__
3008
3032
  """ # noqa: E501
3009
3033
  params: Params = {}
3010
3034
  if server_id is not None:
@@ -3012,7 +3036,7 @@ class Database:
3012
3036
 
3013
3037
  request = Request(
3014
3038
  method=Method.GET,
3015
- endpoint="/_admin/metrics/v2",
3039
+ endpoint="/_admin/metrics",
3016
3040
  params=params,
3017
3041
  )
3018
3042
 
@@ -34,7 +34,11 @@ from arangoasync.typings import Json, Jsons, Params, RequestHeaders
34
34
 
35
35
 
36
36
  class Foxx:
37
- """Foxx API wrapper."""
37
+ """Foxx API wrapper.
38
+
39
+ Warning:
40
+ Foxx microservice features are no longer available in ArangoDB 4.0.
41
+ """
38
42
 
39
43
  def __init__(self, executor: ApiExecutor) -> None:
40
44
  self._executor = executor
@@ -12,6 +12,7 @@ from typing import (
12
12
  TypeAlias,
13
13
  cast,
14
14
  )
15
+ from warnings import warn
15
16
 
16
17
  from multidict import CIMultiDictProxy, MultiDict
17
18
 
@@ -564,7 +565,7 @@ class DatabaseProperties(JsonWrapper):
564
565
 
565
566
  @property
566
567
  def path(self) -> Optional[str]:
567
- """The filesystem path of the current database."""
568
+ """The filesystem path of the current database. Removed in ArangoDB 4.0."""
568
569
  return self._data.get("path")
569
570
 
570
571
  @property
@@ -677,6 +678,8 @@ class CollectionProperties(JsonWrapper):
677
678
 
678
679
  @property
679
680
  def status_string(self) -> Optional[str]:
681
+ m = "statusString attribute has been removed in ArangoDB 4.0"
682
+ warn(m, DeprecationWarning, stacklevel=2)
680
683
  return self._data.get("statusString")
681
684
 
682
685
  @property
@@ -701,6 +704,8 @@ class CollectionProperties(JsonWrapper):
701
704
 
702
705
  @property
703
706
  def status(self) -> CollectionStatus:
707
+ m = "status attribute has been removed in ArangoDB 4.0"
708
+ warn(m, DeprecationWarning, stacklevel=2)
704
709
  return CollectionStatus.from_int(self._data["status"])
705
710
 
706
711
  @property
@@ -727,6 +732,10 @@ class CollectionProperties(JsonWrapper):
727
732
  def computed_values(self) -> Optional[Json]:
728
733
  return self._data.get("computedValues")
729
734
 
735
+ @property
736
+ def supportsRBAC(self) -> Optional[bool]:
737
+ return self._data.get("supportsRBAC")
738
+
730
739
  @property
731
740
  def object_id(self) -> str:
732
741
  return self._data["objectId"] # type: ignore[no-any-return]
@@ -808,6 +817,8 @@ class CollectionProperties(JsonWrapper):
808
817
  result["computedValues"] = data["computedValues"]
809
818
  if "internalValidatorType" in data:
810
819
  result["internal_validator_type"] = data["internalValidatorType"]
820
+ if "supportsRBAC" in data:
821
+ result["supportsRBAC"] = data["supportsRBAC"]
811
822
  return result
812
823
 
813
824
  def format(self, formatter: Optional[Formatter] = None) -> Json:
@@ -1121,6 +1132,14 @@ class IndexProperties(JsonWrapper):
1121
1132
  def features(self) -> Optional[List[str]]:
1122
1133
  return self._data.get("features")
1123
1134
 
1135
+ @property
1136
+ def error_message(self) -> Optional[str]:
1137
+ return self._data.get("errorMessage")
1138
+
1139
+ @property
1140
+ def training_state(self) -> Optional[str]:
1141
+ return self._data.get("trainingState")
1142
+
1124
1143
  @staticmethod
1125
1144
  def compatibility_formatter(data: Json) -> Json:
1126
1145
  """python-arango compatibility formatter."""
@@ -1179,6 +1198,10 @@ class IndexProperties(JsonWrapper):
1179
1198
  result["writebuffer_max_size"] = data["writebufferSizeMax"]
1180
1199
  if "optimizeTopK" in data:
1181
1200
  result["optimizeTopK"] = data["optimizeTopK"]
1201
+ if "errorMessage" in data:
1202
+ result["error_message"] = data["errorMessage"]
1203
+ if "trainingState" in data:
1204
+ result["training_state"] = data["trainingState"]
1182
1205
  return result
1183
1206
 
1184
1207
  def format(self, formatter: Optional[Formatter] = None) -> Json:
@@ -0,0 +1 @@
1
+ __version__ = "1.2.3"
@@ -90,6 +90,10 @@ See :class:`arangoasync.aql.AQL` for API specification.
90
90
  AQL User Functions
91
91
  ==================
92
92
 
93
+ .. warning::
94
+ AQL User Functions are no longer available in ArangoDB 4.0.
95
+
96
+
93
97
  **AQL User Functions** are custom functions you define in Javascript to extend
94
98
  AQL functionality. They are somewhat similar to SQL procedures.
95
99
 
@@ -24,10 +24,6 @@ and architecture, refer to `ArangoDB Manual`_.
24
24
  # Cluster health
25
25
  health = await cluster.health()
26
26
 
27
- # DB-Server statistics
28
- db_server = "PRMR-2716c9d0-4b22-4c66-ba3d-f9cd3143e52b"
29
- stats = await cluster.statistics(db_server)
30
-
31
27
  # Cluster endpoints
32
28
  endpoints = await cluster.endpoints()
33
29
 
@@ -1,6 +1,10 @@
1
1
  Foxx
2
2
  ----
3
3
 
4
+ .. warning::
5
+ Foxx microservice features are no longer available in ArangoDB 4.0.
6
+
7
+
4
8
  **Foxx** is a microservice framework which lets you define custom HTTP endpoints
5
9
  that extend ArangoDB's REST API. For more information, refer to `ArangoDB Manual`_.
6
10
 
@@ -405,7 +405,7 @@ over edges and vertices using various algorithms.
405
405
  # Traverse 1 to 3 hops from the vertex "teachers/jon",
406
406
  query = """
407
407
  FOR v, e, p IN 1..3 OUTBOUND 'teachers/jon' GRAPH 'school'
408
- OPTIONS { bfs: true, uniqueVertices: 'global' }
408
+ OPTIONS { order: 'bfs', uniqueVertices: 'global' }
409
409
  RETURN {vertex: v, edge: e, path: p}
410
410
  """
411
411
 
@@ -116,7 +116,7 @@ Another example with `graphs`_:
116
116
  # Traverse the graph in outbound direction, breath-first.
117
117
  query = """
118
118
  FOR v, e, p IN 1..3 OUTBOUND 'students/01' GRAPH 'school'
119
- OPTIONS { bfs: true, uniqueVertices: 'global' }
119
+ OPTIONS { order: 'bfs', uniqueVertices: 'global' }
120
120
  RETURN {vertex: v, edge: e, path: p}
121
121
  """
122
122
 
@@ -1,6 +1,10 @@
1
1
  Tasks
2
2
  -----
3
3
 
4
+ .. warning::
5
+ Tasks are no longer available in ArangoDB 4.0.
6
+
7
+
4
8
  ArangoDB can schedule user-defined Javascript snippets as one-time or periodic
5
9
  (re-scheduled after each execution) tasks. Tasks are executed in the context of
6
10
  the database they are defined in.
@@ -49,7 +49,7 @@ version = { attr = "arangoasync.version.__version__" }
49
49
  [project.optional-dependencies]
50
50
  dev = [
51
51
  "aiofiles>=24.1.0",
52
- "black==26.1.0",
52
+ "black==26.3.1",
53
53
  "flake8==7.3.0",
54
54
  "isort>=5.10.1",
55
55
  "mypy==1.15.0",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-arango-async
3
- Version: 1.2.1
3
+ Version: 1.2.3
4
4
  Summary: Async Python Driver for ArangoDB
5
5
  Author-email: Alexandru Petenchea <alexandru.petenchea@arangodb.com>, Anthony Mahanna <anthony.mahanna@arangodb.com>
6
6
  Maintainer-email: Alexandru Petenchea <alexandru.petenchea@arangodb.com>, Anthony Mahanna <anthony.mahanna@arangodb.com>
@@ -26,7 +26,7 @@ Requires-Dist: multidict>=6.0
26
26
  Requires-Dist: pyjwt>=2.10.0
27
27
  Provides-Extra: dev
28
28
  Requires-Dist: aiofiles>=24.1.0; extra == "dev"
29
- Requires-Dist: black==26.1.0; extra == "dev"
29
+ Requires-Dist: black==26.3.1; extra == "dev"
30
30
  Requires-Dist: flake8==7.3.0; extra == "dev"
31
31
  Requires-Dist: isort>=5.10.1; extra == "dev"
32
32
  Requires-Dist: mypy==1.15.0; extra == "dev"
@@ -169,7 +169,7 @@ async def main():
169
169
  # Traverse the graph in outbound direction, breath-first.
170
170
  query = """
171
171
  FOR v, e, p IN 1..3 OUTBOUND 'students/01' GRAPH 'school'
172
- OPTIONS { bfs: true, uniqueVertices: 'global' }
172
+ OPTIONS { order: 'bfs', uniqueVertices: 'global' }
173
173
  RETURN {vertex: v, edge: e, path: p}
174
174
  """
175
175
 
@@ -101,6 +101,8 @@ tests/test_typings.py
101
101
  tests/test_user.py
102
102
  tests/test_view.py
103
103
  tests/static/cluster-3.12.conf
104
+ tests/static/cluster-4.0.conf
104
105
  tests/static/keyfile
105
106
  tests/static/service.zip
106
- tests/static/single-3.12.conf
107
+ tests/static/single-3.12.conf
108
+ tests/static/single-4.0.conf
@@ -5,7 +5,7 @@ pyjwt>=2.10.0
5
5
 
6
6
  [dev]
7
7
  aiofiles>=24.1.0
8
- black==26.1.0
8
+ black==26.3.1
9
9
  flake8==7.3.0
10
10
  isort>=5.10.1
11
11
  mypy==1.15.0
@@ -0,0 +1,84 @@
1
+ #!/bin/bash
2
+
3
+ # Starts a local ArangoDB server or cluster (community or enterprise).
4
+ # Useful for testing the python-arango driver against a local ArangoDB setup.
5
+
6
+ # Usage:
7
+ # ./starter.sh [single|cluster] [community|enterprise|enterprise-preview] [version]
8
+ # ./starter.sh [single|cluster] [image[:tag]]
9
+ # Example:
10
+ # ./starter.sh cluster enterprise 3.12.4
11
+ # ./starter.sh single enterprise-preview 4.0-nightly
12
+ # ./starter.sh single arangodb/enterprise-preview:4.0-nightly
13
+
14
+ setup="${1:-single}"
15
+ image="${2:-community}"
16
+ version="${3:-latest}"
17
+
18
+ extra_ports=""
19
+ if [ "$setup" == "single" ]; then
20
+ echo ""
21
+ elif [ "$setup" == "cluster" ]; then
22
+ extra_ports="-p 8539:8539 -p 8549:8549"
23
+ else
24
+ echo "Invalid argument. Please provide either 'single' or 'cluster'."
25
+ exit 1
26
+ fi
27
+
28
+ image_ref=""
29
+ if [[ "$image" == */* ]]; then
30
+ if [[ "$image" == *:* ]]; then
31
+ image_ref="$image"
32
+ if [ "$version" == "latest" ]; then
33
+ version="${image##*:}"
34
+ fi
35
+ else
36
+ image_ref="$image:$version"
37
+ fi
38
+ elif [ "$image" == "community" ]; then
39
+ image_ref="arangodb/arangodb:$version"
40
+ elif [ "$image" == "enterprise" ]; then
41
+ image_ref="arangodb/enterprise:$version"
42
+ elif [ "$image" == "enterprise-preview" ]; then
43
+ image_ref="arangodb/enterprise-preview:$version"
44
+ else
45
+ echo "Invalid argument. Please provide 'community', 'enterprise', 'enterprise-preview', or a full image reference."
46
+ exit 1
47
+ fi
48
+
49
+ if [ "$version" == "latest" ]; then
50
+ conf_file="${setup}-3.12"
51
+ elif [[ "$version" =~ ^([0-9]+\.[0-9]+) ]]; then
52
+ conf_file="${setup}-${BASH_REMATCH[1]}"
53
+ else
54
+ conf_file="${setup}-${version}"
55
+ fi
56
+
57
+ if [ ! -f "tests/static/$conf_file.conf" ]; then
58
+ echo "Missing configuration file: tests/static/$conf_file.conf"
59
+ exit 1
60
+ fi
61
+
62
+ docker run -d \
63
+ --name arango \
64
+ -p 8528:8528 \
65
+ -p 8529:8529 \
66
+ $extra_ports \
67
+ -v "$(pwd)/tests/static/":/tests/static \
68
+ -v /tmp:/tmp \
69
+ "$image_ref" \
70
+ /bin/sh -c "arangodb --configuration=/tests/static/$conf_file.conf"
71
+
72
+ if [ $? -ne 0 ]; then
73
+ echo "ERROR starter failed to start container"
74
+ exit 1
75
+ fi
76
+
77
+ wget --quiet --waitretry=1 --tries=120 -O - http://localhost:8528/version | jq
78
+ if [ $? -eq 0 ]; then
79
+ echo "OK starter ready"
80
+ exit 0
81
+ else
82
+ echo "ERROR starter not ready, giving up"
83
+ exit 1
84
+ fi
@@ -294,18 +294,19 @@ async def teardown():
294
294
  verify=False,
295
295
  )
296
296
 
297
- # Remove all tasks
298
- test_tasks = [
299
- task
300
- for task in await sys_db.tasks()
301
- if task["name"].startswith("test_task")
302
- ]
303
- await asyncio.gather(
304
- *(
305
- sys_db.delete_task(task["id"], ignore_missing=True)
306
- for task in test_tasks
297
+ if global_data.db_version < version.parse("4.0.0"):
298
+ # Remove all tasks
299
+ test_tasks = [
300
+ task
301
+ for task in await sys_db.tasks()
302
+ if task["name"].startswith("test_task")
303
+ ]
304
+ await asyncio.gather(
305
+ *(
306
+ sys_db.delete_task(task["id"], ignore_missing=True)
307
+ for task in test_tasks
308
+ )
307
309
  )
308
- )
309
310
 
310
311
  # Remove all test users.
311
312
  tst_users = [
@@ -0,0 +1,20 @@
1
+ [starter]
2
+ mode = cluster
3
+ local = true
4
+ address = 0.0.0.0
5
+ port = 8528
6
+
7
+ [auth]
8
+ jwt-secret = /tests/static/keyfile
9
+
10
+ [args]
11
+ all.database.password = passwd
12
+ all.vector-index = true
13
+ all.database.extended-names = true
14
+ all.log.api-enabled = true
15
+ all.javascript.allow-admin-execute = true
16
+ all.server.options-api = admin
17
+ all.javascript.files-allowlist = ".*";
18
+ all.javascript.environment-variables-allowlist = ".*";
19
+ all.javascript.endpoints-allowlist = ".*";
20
+ all.javascript.startup-options-allowlist = ".*";
@@ -9,7 +9,7 @@ jwt-secret = /tests/static/keyfile
9
9
 
10
10
  [args]
11
11
  all.database.password = passwd
12
+ all.vector-index = true
12
13
  all.database.extended-names = true
13
14
  all.log.api-enabled = true
14
- all.javascript.allow-admin-execute = true
15
15
  all.server.options-api = admin
@@ -0,0 +1,19 @@
1
+ [starter]
2
+ mode = single
3
+ address = 0.0.0.0
4
+ port = 8528
5
+
6
+ [auth]
7
+ jwt-secret = /tests/static/keyfile
8
+
9
+ [args]
10
+ all.database.password = passwd
11
+ all.vector-index = true
12
+ all.database.extended-names = true
13
+ all.log.api-enabled = true
14
+ all.javascript.allow-admin-execute = true
15
+ all.server.options-api = admin
16
+ all.javascript.files-allowlist = ".*";
17
+ all.javascript.environment-variables-allowlist = ".*";
18
+ all.javascript.endpoints-allowlist = ".*";
19
+ all.javascript.startup-options-allowlist = ".*";
@@ -8,6 +8,7 @@ jwt-secret = /tests/static/keyfile
8
8
 
9
9
  [args]
10
10
  all.database.password = passwd
11
+ all.vector-index = true
11
12
  all.database.extended-names = true
12
- all.javascript.allow-admin-execute = true
13
+ all.log.api-enabled = true
13
14
  all.server.options-api = admin