python-arango-async 1.2.2__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.2 → python_arango_async-1.2.3}/.circleci/config.yml +21 -5
  2. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/.github/workflows/pypi.yaml +2 -2
  3. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/PKG-INFO +3 -3
  4. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/README.md +1 -1
  5. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/aql.py +9 -0
  6. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/cluster.py +4 -0
  7. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/database.py +26 -2
  8. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/foxx.py +5 -1
  9. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/typings.py +6 -1
  10. python_arango_async-1.2.3/arangoasync/version.py +1 -0
  11. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/aql.rst +4 -0
  12. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/cluster.rst +0 -4
  13. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/foxx.rst +4 -0
  14. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/graph.rst +1 -1
  15. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/overview.rst +1 -1
  16. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/task.rst +4 -0
  17. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/pyproject.toml +1 -1
  18. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/python_arango_async.egg-info/PKG-INFO +3 -3
  19. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/python_arango_async.egg-info/SOURCES.txt +3 -1
  20. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/python_arango_async.egg-info/requires.txt +1 -1
  21. python_arango_async-1.2.3/starter.sh +84 -0
  22. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/conftest.py +12 -11
  23. python_arango_async-1.2.3/tests/static/cluster-4.0.conf +15 -0
  24. python_arango_async-1.2.3/tests/static/single-4.0.conf +14 -0
  25. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_aql.py +10 -2
  26. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_cluster.py +6 -4
  27. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_database.py +16 -14
  28. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_foxx.py +5 -1
  29. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_task.py +5 -1
  30. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_transaction.py +5 -1
  31. python_arango_async-1.2.2/arangoasync/version.py +0 -1
  32. python_arango_async-1.2.2/starter.sh +0 -60
  33. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/.github/workflows/codeql.yaml +0 -0
  34. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/.github/workflows/docs.yaml +0 -0
  35. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/.gitignore +0 -0
  36. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/.pre-commit-config.yaml +0 -0
  37. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/.readthedocs.yaml +0 -0
  38. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/CONTRIBUTING.md +0 -0
  39. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/LICENSE +0 -0
  40. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/__init__.py +0 -0
  41. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/auth.py +0 -0
  42. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/backup.py +0 -0
  43. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/client.py +0 -0
  44. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/collection.py +0 -0
  45. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/compression.py +0 -0
  46. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/connection.py +0 -0
  47. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/cursor.py +0 -0
  48. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/errno.py +0 -0
  49. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/exceptions.py +0 -0
  50. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/executor.py +0 -0
  51. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/graph.py +0 -0
  52. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/http.py +0 -0
  53. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/job.py +0 -0
  54. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/logger.py +0 -0
  55. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/replication.py +0 -0
  56. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/request.py +0 -0
  57. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/resolver.py +0 -0
  58. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/response.py +0 -0
  59. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/result.py +0 -0
  60. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/arangoasync/serialization.py +0 -0
  61. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/admin.rst +0 -0
  62. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/analyzer.rst +0 -0
  63. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/async.rst +0 -0
  64. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/authentication.rst +0 -0
  65. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/backup.rst +0 -0
  66. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/certificates.rst +0 -0
  67. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/collection.rst +0 -0
  68. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/compression.rst +0 -0
  69. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/conf.py +0 -0
  70. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/cursor.rst +0 -0
  71. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/database.rst +0 -0
  72. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/document.rst +0 -0
  73. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/errno.rst +0 -0
  74. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/errors.rst +0 -0
  75. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/helpers.rst +0 -0
  76. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/http.rst +0 -0
  77. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/index.rst +0 -0
  78. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/indexes.rst +0 -0
  79. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/logging.rst +0 -0
  80. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/migration.rst +0 -0
  81. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/serialization.rst +0 -0
  82. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/specs.rst +0 -0
  83. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/static/logo.png +0 -0
  84. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/transaction.rst +0 -0
  85. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/user.rst +0 -0
  86. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/docs/view.rst +0 -0
  87. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/python_arango_async.egg-info/dependency_links.txt +0 -0
  88. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/python_arango_async.egg-info/top_level.txt +0 -0
  89. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/setup.cfg +0 -0
  90. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/setup.py +0 -0
  91. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/__init__.py +0 -0
  92. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/helpers.py +0 -0
  93. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/static/cluster-3.12.conf +0 -0
  94. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/static/keyfile +0 -0
  95. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/static/service.zip +0 -0
  96. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/static/single-3.12.conf +0 -0
  97. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_analyzer.py +0 -0
  98. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_async.py +0 -0
  99. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_backup.py +0 -0
  100. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_client.py +0 -0
  101. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_collection.py +0 -0
  102. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_compression.py +0 -0
  103. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_connection.py +0 -0
  104. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_cursor.py +0 -0
  105. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_document.py +0 -0
  106. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_graph.py +0 -0
  107. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_http.py +0 -0
  108. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_resolver.py +0 -0
  109. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_typings.py +0 -0
  110. {python_arango_async-1.2.2 → python_arango_async-1.2.3}/tests/test_user.py +0 -0
  111. {python_arango_async-1.2.2 → 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.2
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
 
@@ -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
@@ -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.2
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,15 @@
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.server.options-api = admin
@@ -0,0 +1,14 @@
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.server.options-api = admin
@@ -91,14 +91,19 @@ async def test_list_queries(superuser, db, bad_db):
91
91
  long_running_task = asyncio.create_task(aql.execute("RETURN SLEEP(10)"))
92
92
  time.sleep(1)
93
93
 
94
+ queries = list()
94
95
  for _ in range(10):
95
96
  queries = await aql.queries()
96
97
  if len(queries) > 0:
97
98
  break
99
+ time.sleep(1)
100
+
101
+ if len(queries) == 0:
102
+ warnings.warn("No queries found in the list!")
98
103
 
99
104
  # Only superuser can list all queries from all databases.
100
105
  all_queries = await superuser.aql.queries(all_queries=True)
101
- assert len(all_queries) > 0
106
+ assert isinstance(all_queries, list)
102
107
 
103
108
  # Only test no-throws.
104
109
  _ = await aql.slow_queries()
@@ -304,7 +309,10 @@ async def test_cache_plan_management(db, bad_db, doc_col, docs, db_version):
304
309
 
305
310
 
306
311
  @pytest.mark.asyncio
307
- async def test_aql_function_management(db, bad_db):
312
+ async def test_aql_function_management(db_version, db, bad_db):
313
+ if db_version >= version.parse("4.0.0"):
314
+ pytest.skip("Javascript is not available in ArangoDB v4.0")
315
+
308
316
  fn_group = "functions::temperature"
309
317
  fn_name_1 = "functions::temperature::celsius_to_fahrenheit"
310
318
  fn_body_1 = "function (celsius) { return celsius * 1.8 + 32; }"
@@ -60,15 +60,17 @@ async def test_cluster(
60
60
  health = await cluster.health()
61
61
  assert "Health" in health
62
62
 
63
- # DB-Server statistics
64
63
  db_server = None
65
64
  for server in health["Health"]:
66
65
  if server.startswith("PRMR"):
67
66
  db_server = server
68
67
  break
69
- assert db_server is not None, f"No DB server found in {health}"
70
- stats = await cluster.statistics(db_server)
71
- assert "enabled" in stats
68
+
69
+ if db_version < version.parse("4.0.0"):
70
+ # DB-Server statistics
71
+ assert db_server is not None, f"No DB server found in {health}"
72
+ stats = await cluster.statistics(db_server)
73
+ assert "enabled" in stats
72
74
 
73
75
  # Cluster endpoints
74
76
  endpoints = await cluster.endpoints()
@@ -90,7 +90,7 @@ async def test_database_misc_methods(
90
90
 
91
91
  # Version
92
92
  v = await sys_db.version()
93
- assert v["version"].startswith("3.")
93
+ assert isinstance(v["version"], str)
94
94
  with pytest.raises(ServerVersionError):
95
95
  await bad_db.version()
96
96
 
@@ -152,19 +152,20 @@ async def test_database_misc_methods(
152
152
  with pytest.raises(ServerShutdownProgressError):
153
153
  await bad_db.shutdown_progress()
154
154
 
155
- with pytest.raises(ServerReloadRoutingError):
156
- await bad_db.reload_routing()
157
- await sys_db.reload_routing()
155
+ if db_version < version.parse("4.0.0"):
156
+ with pytest.raises(ServerReloadRoutingError):
157
+ await bad_db.reload_routing()
158
+ await sys_db.reload_routing()
158
159
 
159
- with pytest.raises(ServerEchoError):
160
- await bad_db.echo()
161
- result = await sys_db.echo()
162
- assert isinstance(result, dict)
160
+ with pytest.raises(ServerEchoError):
161
+ await bad_db.echo()
162
+ result = await sys_db.echo()
163
+ assert isinstance(result, dict)
163
164
 
164
- with pytest.raises(ServerExecuteError):
165
- await bad_db.execute("return 1")
166
- result = await sys_db.execute("return 1")
167
- assert result == 1
165
+ with pytest.raises(ServerExecuteError):
166
+ await bad_db.execute("return 1")
167
+ result = await sys_db.execute("return 1")
168
+ assert result == 1
168
169
 
169
170
  with pytest.raises(DatabaseCompactError):
170
171
  await bad_db.compact()
@@ -176,10 +177,11 @@ async def test_database_misc_methods(
176
177
 
177
178
  # Custom Request
178
179
  request = Request(
179
- method=Method.POST, endpoint="/_admin/execute", data="return 1".encode("utf-8")
180
+ method=Method.GET,
181
+ endpoint="/_api/version",
180
182
  )
181
183
  response = await sys_db.request(request)
182
- assert json.loads(response.raw_body) == 1
184
+ assert "version" in json.loads(response.raw_body)
183
185
 
184
186
  if "enterprise" not in skip_tests and db_version >= version.parse("3.12.0"):
185
187
  # API calls
@@ -4,6 +4,7 @@ import json
4
4
  import aiofiles
5
5
  import aiohttp
6
6
  import pytest
7
+ from packaging import version
7
8
 
8
9
  from arangoasync.exceptions import (
9
10
  FoxxCommitError,
@@ -34,7 +35,10 @@ service_name = "test"
34
35
 
35
36
 
36
37
  @pytest.mark.asyncio
37
- async def test_foxx(db, bad_db, skip_tests, foxx_path):
38
+ async def test_foxx(db_version, db, bad_db, skip_tests, foxx_path):
39
+ if db_version >= version.parse("4.0.0"):
40
+ pytest.skip("Foxx API has been removed in ArangoDB v4.0")
41
+
38
42
  if "foxx" in skip_tests:
39
43
  pytest.skip("Skipping Foxx tests")
40
44
 
@@ -1,4 +1,5 @@
1
1
  import pytest
2
+ from packaging import version
2
3
 
3
4
  from arangoasync.exceptions import (
4
5
  TaskCreateError,
@@ -10,10 +11,13 @@ from tests.helpers import generate_task_id, generate_task_name
10
11
 
11
12
 
12
13
  @pytest.mark.asyncio
13
- async def test_task_management(sys_db, bad_db, skip_tests):
14
+ async def test_task_management(db_version, sys_db, bad_db, skip_tests):
14
15
  # This test intentionally uses the system database because cleaning up tasks is
15
16
  # easier there.
16
17
 
18
+ if db_version >= version.parse("4.0.0"):
19
+ pytest.skip("The tasks feature is deprecated and removed in ArangoDB v4.0")
20
+
17
21
  if "task" in skip_tests:
18
22
  pytest.skip("Skipping task tests")
19
23
 
@@ -1,6 +1,7 @@
1
1
  import asyncio
2
2
 
3
3
  import pytest
4
+ from packaging import version
4
5
 
5
6
  from arangoasync.database import TransactionDatabase
6
7
  from arangoasync.errno import BAD_PARAMETER, FORBIDDEN, TRANSACTION_NOT_FOUND
@@ -14,10 +15,13 @@ from arangoasync.exceptions import (
14
15
 
15
16
 
16
17
  @pytest.mark.asyncio
17
- async def test_transaction_execute_raw(db, doc_col, docs, skip_tests):
18
+ async def test_transaction_execute_raw(db, doc_col, docs, skip_tests, db_version):
18
19
  if "js-transactions" in skip_tests:
19
20
  pytest.skip("Skipping JS transaction tests")
20
21
 
22
+ if db_version >= version.parse("4.0"):
23
+ pytest.skip("Javascript transactions are no longer supported in ArangoDB 4.0")
24
+
21
25
  # Test a valid JS transaction
22
26
  doc = docs[0]
23
27
  key = doc["_key"]
@@ -1 +0,0 @@
1
- __version__ = "1.2.2"
@@ -1,60 +0,0 @@
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] [version]
8
- # Example:
9
- # ./starter.sh cluster enterprise 3.12.4
10
-
11
- setup="${1:-single}"
12
- license="${2:-community}"
13
- version="${3:-latest}"
14
-
15
- extra_ports=""
16
- if [ "$setup" == "single" ]; then
17
- echo ""
18
- elif [ "$setup" == "cluster" ]; then
19
- extra_ports="-p 8539:8539 -p 8549:8549"
20
- else
21
- echo "Invalid argument. Please provide either 'single' or 'cluster'."
22
- exit 1
23
- fi
24
-
25
- image_name=""
26
- if [ "$license" == "community" ]; then
27
- image_name="arangodb"
28
- elif [ "$license" == "enterprise" ]; then
29
- image_name="enterprise"
30
- else
31
- echo "Invalid argument. Please provide either 'community' or 'enterprise'."
32
- exit 1
33
- fi
34
-
35
- if [ "$version" == "latest" ]; then
36
- conf_file="${setup}-3.12"
37
- elif [[ "$version" == *.*.* ]]; then
38
- conf_file="${setup}-${version%.*}"
39
- else
40
- conf_file="${setup}-${version}"
41
- fi
42
-
43
- docker run -d \
44
- --name arango \
45
- -p 8528:8528 \
46
- -p 8529:8529 \
47
- $extra_ports \
48
- -v "$(pwd)/tests/static/":/tests/static \
49
- -v /tmp:/tmp \
50
- "arangodb/$image_name:$version" \
51
- /bin/sh -c "arangodb --configuration=/tests/static/$conf_file.conf"
52
-
53
- wget --quiet --waitretry=1 --tries=120 -O - http://localhost:8528/version | jq
54
- if [ $? -eq 0 ]; then
55
- echo "OK starter ready"
56
- exit 0
57
- else
58
- echo "ERROR starter not ready, giving up"
59
- exit 1
60
- fi