python-arango-async 1.2.5__tar.gz → 1.2.6__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 (116) hide show
  1. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/.circleci/config.yml +17 -10
  2. python_arango_async-1.2.6/.github/workflows/pypi.yaml +66 -0
  3. python_arango_async-1.2.6/AGENTS.md +91 -0
  4. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/PKG-INFO +1 -1
  5. python_arango_async-1.2.6/arangoasync/version.py +1 -0
  6. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/indexes.rst +6 -3
  7. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/python_arango_async.egg-info/PKG-INFO +1 -1
  8. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/python_arango_async.egg-info/SOURCES.txt +1 -1
  9. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/python_arango_async.egg-info/scm_file_list.json +1 -1
  10. python_arango_async-1.2.6/python_arango_async.egg-info/scm_version.json +8 -0
  11. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/starter.sh +3 -2
  12. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_collection.py +24 -18
  13. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_user.py +9 -0
  14. python_arango_async-1.2.5/.github/workflows/pypi.yaml +0 -40
  15. python_arango_async-1.2.5/CONTRIBUTING.md +0 -28
  16. python_arango_async-1.2.5/arangoasync/version.py +0 -1
  17. python_arango_async-1.2.5/python_arango_async.egg-info/scm_version.json +0 -8
  18. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/.github/workflows/codeql.yaml +0 -0
  19. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/.github/workflows/docs.yaml +0 -0
  20. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/.gitignore +0 -0
  21. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/.pre-commit-config.yaml +0 -0
  22. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/.readthedocs.yaml +0 -0
  23. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/LICENSE +0 -0
  24. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/README.md +0 -0
  25. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/__init__.py +0 -0
  26. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/aql.py +0 -0
  27. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/auth.py +0 -0
  28. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/backup.py +0 -0
  29. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/client.py +0 -0
  30. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/cluster.py +0 -0
  31. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/collection.py +0 -0
  32. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/compression.py +0 -0
  33. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/connection.py +0 -0
  34. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/cursor.py +0 -0
  35. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/database.py +0 -0
  36. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/errno.py +0 -0
  37. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/exceptions.py +0 -0
  38. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/executor.py +0 -0
  39. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/foxx.py +0 -0
  40. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/graph.py +0 -0
  41. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/http.py +0 -0
  42. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/job.py +0 -0
  43. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/logger.py +0 -0
  44. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/replication.py +0 -0
  45. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/request.py +0 -0
  46. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/resolver.py +0 -0
  47. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/response.py +0 -0
  48. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/result.py +0 -0
  49. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/serialization.py +0 -0
  50. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/arangoasync/typings.py +0 -0
  51. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/admin.rst +0 -0
  52. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/analyzer.rst +0 -0
  53. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/aql.rst +0 -0
  54. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/async.rst +0 -0
  55. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/authentication.rst +0 -0
  56. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/backup.rst +0 -0
  57. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/certificates.rst +0 -0
  58. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/cluster.rst +0 -0
  59. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/collection.rst +0 -0
  60. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/compression.rst +0 -0
  61. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/conf.py +0 -0
  62. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/cursor.rst +0 -0
  63. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/database.rst +0 -0
  64. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/document.rst +0 -0
  65. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/errno.rst +0 -0
  66. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/errors.rst +0 -0
  67. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/foxx.rst +0 -0
  68. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/graph.rst +0 -0
  69. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/helpers.rst +0 -0
  70. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/http.rst +0 -0
  71. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/index.rst +0 -0
  72. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/logging.rst +0 -0
  73. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/migration.rst +0 -0
  74. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/overview.rst +0 -0
  75. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/serialization.rst +0 -0
  76. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/specs.rst +0 -0
  77. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/static/logo.png +0 -0
  78. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/task.rst +0 -0
  79. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/transaction.rst +0 -0
  80. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/user.rst +0 -0
  81. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/docs/view.rst +0 -0
  82. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/pyproject.toml +0 -0
  83. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/python_arango_async.egg-info/dependency_links.txt +0 -0
  84. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/python_arango_async.egg-info/requires.txt +0 -0
  85. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/python_arango_async.egg-info/top_level.txt +0 -0
  86. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/setup.cfg +0 -0
  87. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/setup.py +0 -0
  88. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/__init__.py +0 -0
  89. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/conftest.py +0 -0
  90. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/helpers.py +0 -0
  91. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/static/cluster-3.12.conf +0 -0
  92. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/static/cluster-4.0.conf +0 -0
  93. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/static/keyfile +0 -0
  94. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/static/service.zip +0 -0
  95. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/static/single-3.12.conf +0 -0
  96. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/static/single-4.0.conf +0 -0
  97. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_analyzer.py +0 -0
  98. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_aql.py +0 -0
  99. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_async.py +0 -0
  100. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_backup.py +0 -0
  101. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_client.py +0 -0
  102. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_cluster.py +0 -0
  103. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_compression.py +0 -0
  104. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_connection.py +0 -0
  105. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_cursor.py +0 -0
  106. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_database.py +0 -0
  107. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_document.py +0 -0
  108. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_foxx.py +0 -0
  109. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_graph.py +0 -0
  110. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_http.py +0 -0
  111. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_imports.py +0 -0
  112. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_resolver.py +0 -0
  113. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_task.py +0 -0
  114. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_transaction.py +0 -0
  115. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_typings.py +0 -0
  116. {python_arango_async-1.2.5 → python_arango_async-1.2.6}/tests/test_view.py +0 -0
@@ -30,11 +30,18 @@ workflows:
30
30
  parameters:
31
31
  python_version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
32
32
  - integration-test:
33
- name: ArangoDB (enterprise, 3.12 << matrix.arangodb_config >>)
33
+ name: ArangoDB (enterprise, 3.12.10 << matrix.arangodb_config >>)
34
34
  matrix:
35
35
  parameters:
36
36
  arangodb_config: ["single", "cluster"]
37
- arangodb_image: ["arangodb/enterprise:3.12"]
37
+ arangodb_image: ["arangodb/enterprise:3.12.10"]
38
+ arangodb_conf_version: ["3.12"]
39
+ - integration-test:
40
+ name: ArangoDB (enterprise, 3.12.9 << matrix.arangodb_config >>)
41
+ matrix:
42
+ parameters:
43
+ arangodb_config: ["single", "cluster"]
44
+ arangodb_image: ["arangodb/enterprise:3.12.9"]
38
45
  arangodb_conf_version: ["3.12"]
39
46
  - integration-test:
40
47
  name: ArangoDB (core-preview, 4.0-nightly << matrix.arangodb_config >>)
@@ -60,8 +67,8 @@ jobs:
60
67
  name: Install Dependencies
61
68
  command: python -m pip install .[dev]
62
69
  - run:
63
- name: Run black
64
- command: black --check --verbose --diff --color --config=pyproject.toml ./arangoasync ./tests/
70
+ name: Run black
71
+ command: black --check --verbose --diff --color --config=pyproject.toml ./arangoasync ./tests/
65
72
  - run:
66
73
  name: Run flake8
67
74
  command: flake8 ./arangoasync ./tests
@@ -90,12 +97,12 @@ jobs:
90
97
  command: python -m pytest tests/test_imports.py --skip-arango-setup --color=yes --code-highlight=yes
91
98
  integration-test:
92
99
  parameters:
93
- arangodb_config:
94
- type: string
95
- arangodb_image:
96
- type: string
97
- arangodb_conf_version:
98
- type: string
100
+ arangodb_config:
101
+ type: string
102
+ arangodb_image:
103
+ type: string
104
+ arangodb_conf_version:
105
+ type: string
99
106
  executor:
100
107
  name: arangodb-container
101
108
  arangodb_image: << parameters.arangodb_image >>
@@ -0,0 +1,66 @@
1
+ name: Publish
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ build:
12
+ runs-on: ubuntu-latest
13
+
14
+ steps:
15
+ - name: Checkout repository
16
+ uses: actions/checkout@v7
17
+ with:
18
+ fetch-depth: 0
19
+ fetch-tags: true
20
+ persist-credentials: false
21
+
22
+ - uses: actions/setup-python@v7
23
+ with:
24
+ python-version: "3.12"
25
+
26
+ - name: Install dependencies
27
+ run: python -m pip install build
28
+
29
+ - name: Build distribution
30
+ run: python -m build
31
+
32
+ - uses: actions/upload-artifact@v5
33
+ with:
34
+ name: dist
35
+ path: dist/
36
+ if-no-files-found: error
37
+
38
+ testpypi:
39
+ needs: build
40
+ runs-on: ubuntu-latest
41
+ environment: testpypi
42
+ permissions:
43
+ id-token: write
44
+ steps:
45
+ - uses: actions/download-artifact@v6
46
+ with:
47
+ name: dist
48
+ path: dist/
49
+ - name: Publish to TestPyPI
50
+ uses: pypa/gh-action-pypi-publish@release/v1
51
+ with:
52
+ repository-url: https://test.pypi.org/legacy/
53
+
54
+ pypi:
55
+ needs: testpypi
56
+ runs-on: ubuntu-latest
57
+ environment: pypi
58
+ permissions:
59
+ id-token: write
60
+ steps:
61
+ - uses: actions/download-artifact@v6
62
+ with:
63
+ name: dist
64
+ path: dist/
65
+ - name: Publish to PyPI
66
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,91 @@
1
+ # Quickstart
2
+
3
+ python-arango-async is an async Python driver for ArangoDB. Run the commands below from the
4
+ repository root.
5
+
6
+ ## Repository layout
7
+
8
+ - `arangoasync/`: driver implementation, public APIs, and type annotations.
9
+ - `tests/`: pytest tests; `conftest.py` defines database fixtures and CLI options.
10
+ - `tests/static/`: server configurations and test data used by `starter.sh`.
11
+ - `docs/`: Sphinx documentation in reStructuredText.
12
+ - `pyproject.toml`, `setup.cfg`, `.pre-commit-config.yaml`: packaging and tooling.
13
+ - `.circleci/`, `.github/workflows/`: CI checks, documentation, and publishing.
14
+
15
+ ## Development setup
16
+
17
+ Use Python 3.10 or newer. Create a virtual environment, or use an existing one:
18
+
19
+ ```bash
20
+ python3 -m venv .venv # Create an isolated Python environment.
21
+ source .venv/bin/activate # Use its interpreter and tools.
22
+ python -m pip install -e '.[dev]' # Install the editable driver and dev tools.
23
+ pre-commit install # Enable checks before each commit.
24
+ ```
25
+
26
+ Examples use `python` from the activated environment. If it is unavailable on
27
+ PATH, invoke your environment's interpreter directly. In this workspace, use
28
+ `/home/apetenchea/programs/pyenv/ida/bin/python` and run tests from
29
+ `/home/apetenchea/arangodb/python-arango-async`, so they exercise this driver.
30
+
31
+ ## Local cluster and tests
32
+
33
+ The starter requires Docker, Bash, `wget`, and `jq`. To replace an existing test
34
+ container, run `docker stop arango` and `docker rm arango` first.
35
+
36
+ ```bash
37
+ version="latest" # Or pin a supported version, such as 3.12.10.
38
+ ./starter.sh cluster enterprise "$version" # Start a local test cluster.
39
+ python -m pytest --cluster # Run the full suite against the cluster.
40
+ # Run one test while developing a document change.
41
+ python -m pytest --cluster tests/test_document.py::test_document_insert
42
+ # Generate an HTML coverage report.
43
+ python -m pytest --cluster --cov=arangoasync --cov-report=html
44
+ ```
45
+
46
+ Defaults are `127.0.0.1:8529`, user `root`, password `passwd`, and JWT secret
47
+ `secret`, matching the starter configuration. Override them with `--host`,
48
+ `--port`, `--root`, `--password`, and `--secret`. Use a disposable development
49
+ database: tests create and delete databases, users, jobs, and backups. If a
50
+ sandbox blocks localhost access, rerun with the required sandbox permission.
51
+
52
+ For a single server, use `./starter.sh single enterprise "$version"` and omit
53
+ `--cluster`. Import tests can run without ArangoDB:
54
+
55
+ ```bash
56
+ python -m pytest tests/test_imports.py --skip-arango-setup # Check imports offline.
57
+ ```
58
+
59
+ ## Style and documentation
60
+
61
+ Run the configured hooks for formatting, import ordering, linting, and type
62
+ checks. Build and test documentation separately:
63
+
64
+ ```bash
65
+ pre-commit run --all-files # Run hooks; formatters may modify files.
66
+ python -m sphinx -b html docs docs/_build # Build the HTML documentation.
67
+ python -m sphinx -b doctest docs docs/_build # Test documentation examples.
68
+ ```
69
+
70
+ The Sphinx doctests require a running ArangoDB server. Open
71
+ `docs/_build/index.html` for the HTML documentation or `htmlcov/index.html` for
72
+ the coverage report.
73
+
74
+ ## Changes and pull requests
75
+
76
+ - Agents must work on a branch other than `main`; never commit directly to `main`.
77
+ Check the current branch before editing or committing. If on `main` or a
78
+ detached HEAD, create a branch first:
79
+
80
+ ```bash
81
+ git branch --show-current # Check the current branch.
82
+ git switch -c fix/describe-change # Choose a descriptive branch name.
83
+ ```
84
+
85
+ - Preserve public API compatibility unless a breaking change is intentional.
86
+ - Follow existing code patterns, type annotations, and Sphinx docstrings.
87
+ - Add regression tests for fixes and tests for new behavior; update user documentation.
88
+ - Run relevant tests and checks; report anything skipped and why.
89
+ - Keep test coverage up and squash changes into one commit for submission.
90
+ - Use present-tense commit messages, such as `Fix cursor retry`.
91
+ - Explain what changed, why, and any compatibility impact in the pull request.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-arango-async
3
- Version: 1.2.5
3
+ Version: 1.2.6
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>
@@ -0,0 +1 @@
1
+ __version__ = "1.2.6"
@@ -76,7 +76,7 @@ on fields ``_from`` and ``_to``. For more information on indexes, refer to
76
76
  },
77
77
  )
78
78
 
79
- # Index creation may succeed even if vector training fails.
79
+ # Index creation may succeed even if there is insufficient training data.
80
80
  if vector_index.training_state != "ready":
81
81
  raise RuntimeError(
82
82
  vector_index.error_message or "Vector index is not ready"
@@ -86,7 +86,10 @@ Omitted or scaling-object ``nLists``, ``numberOfDocsPerCentroid``, factory
86
86
  placeholders such as ``IVF{},Flat``, and successful-but-unusable creation
87
87
  behavior require ArangoDB 3.12.10 or later. A successful creation response
88
88
  means that the index exists, but callers should check ``training_state`` before
89
- using it. If training fails permanently, the state is ``"unusable"`` and
90
- ``error_message`` describes the failure.
89
+ using it. If there is insufficient data to train the index, the state is
90
+ ``"unusable"`` and ``error_message`` describes the failure. Invalid index
91
+ definitions, such as an ``nLists`` value that disagrees with the number of
92
+ centroids in the factory string, are rejected during creation with
93
+ ``IndexCreateError`` and no index is created.
91
94
 
92
95
  See :class:`arangoasync.collection.StandardCollection` for API specification.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-arango-async
3
- Version: 1.2.5
3
+ Version: 1.2.6
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>
@@ -1,7 +1,7 @@
1
1
  .gitignore
2
2
  .pre-commit-config.yaml
3
3
  .readthedocs.yaml
4
- CONTRIBUTING.md
4
+ AGENTS.md
5
5
  LICENSE
6
6
  README.md
7
7
  pyproject.toml
@@ -7,7 +7,7 @@
7
7
  ".gitignore",
8
8
  ".pre-commit-config.yaml",
9
9
  ".readthedocs.yaml",
10
- "CONTRIBUTING.md",
10
+ "AGENTS.md",
11
11
  "LICENSE",
12
12
  "README.md",
13
13
  "arangoasync/__init__.py",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "1.2.6",
3
+ "distance": 0,
4
+ "node": "gf4076da6dfc241bee1192e250dbb352edcc276ba",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-10-04"
8
+ }
@@ -1,7 +1,7 @@
1
1
  #!/bin/bash
2
2
 
3
3
  # Starts a local ArangoDB server or cluster (community or enterprise).
4
- # Useful for testing the python-arango driver against a local ArangoDB setup.
4
+ # Useful for testing the python-arango-async driver against a local ArangoDB setup.
5
5
 
6
6
  # Usage:
7
7
  # ./starter.sh [single|cluster] [community|enterprise|enterprise-preview] [version]
@@ -10,9 +10,10 @@
10
10
  # ./starter.sh cluster enterprise 3.12.4
11
11
  # ./starter.sh single enterprise-preview 4.0-nightly
12
12
  # ./starter.sh single arangodb/enterprise-preview:4.0-nightly
13
+ # Defaults: single server, enterprise image, latest version.
13
14
 
14
15
  setup="${1:-single}"
15
- image="${2:-community}"
16
+ image="${2:-enterprise}"
16
17
  version="${3:-latest}"
17
18
 
18
19
  extra_ports=""
@@ -337,24 +337,6 @@ async def test_collection_index(doc_col, bad_col, cluster, db_version):
337
337
  await doc_col.delete_index(default_index.id)
338
338
  await doc_col.delete_index(scaling_index.id)
339
339
 
340
- # A permanent training failure still creates an unusable index.
341
- unusable_index = await doc_col.add_index(
342
- "vector",
343
- ["embedding1"],
344
- {
345
- "name": "vector_index_unusable",
346
- "params": {
347
- "metric": "cosine",
348
- "dimension": 128,
349
- "nLists": 2,
350
- "factory": "IVF3,Flat",
351
- },
352
- },
353
- )
354
- assert unusable_index.training_state == "unusable"
355
- assert unusable_index.error_message
356
- await doc_col.delete_index(unusable_index.id)
357
-
358
340
  # Invalid requests continue to fail at the HTTP layer.
359
341
  with pytest.raises(IndexCreateError) as err:
360
342
  await doc_col.add_index(
@@ -378,6 +360,30 @@ async def test_collection_index(doc_col, bad_col, cluster, db_version):
378
360
  assert await doc_col.delete_index(idx2.id, ignore_missing=True) is False
379
361
 
380
362
 
363
+ @pytest.mark.asyncio
364
+ async def test_unusable_vector_index(doc_col, db_version):
365
+ if db_version < version.parse("3.12.10"):
366
+ pytest.skip("Unusable vector index test requires ArangoDB 3.12.10+")
367
+
368
+ # One training vector is insufficient for two centroids.
369
+ await doc_col.insert({"embedding": [1.0, 1.0]})
370
+ index = await doc_col.add_index(
371
+ "vector",
372
+ ["embedding"],
373
+ {
374
+ "name": "vector_index_unusable",
375
+ "params": {
376
+ "metric": "cosine",
377
+ "dimension": 2,
378
+ "nLists": 2,
379
+ },
380
+ },
381
+ )
382
+ assert index.training_state == "unusable"
383
+ assert index.error_message
384
+ await doc_col.delete_index(index.id)
385
+
386
+
381
387
  @pytest.mark.asyncio
382
388
  async def test_collection_truncate_count(docs, doc_col, bad_col):
383
389
  # Test errors
@@ -4,6 +4,7 @@ from arangoasync.auth import Auth
4
4
  from arangoasync.errno import USER_NOT_FOUND
5
5
  from arangoasync.exceptions import (
6
6
  CollectionCreateError,
7
+ CollectionListError,
7
8
  DocumentInsertError,
8
9
  PermissionResetError,
9
10
  PermissionUpdateError,
@@ -176,6 +177,14 @@ async def test_user_change_permissions(sys_db, arango_client, db):
176
177
  with pytest.raises(PermissionResetError):
177
178
  await db.reset_permission(username, db.name)
178
179
  await sys_db.reset_permission(username, db.name)
180
+ assert await sys_db.permission(username, db.name) == "none"
181
+ # ArangoDB 4.0 returns 403 where earlier versions returned 401.
182
+ with pytest.raises(CollectionCreateError) as err:
183
+ await db2.create_collection(generate_col_name())
184
+ assert err.value.http_code in {401, 403}
185
+ with pytest.raises(CollectionListError) as err:
186
+ await db2.collections()
187
+ assert err.value.http_code in {401, 403}
179
188
  with pytest.raises(DocumentInsertError):
180
189
  await col.insert({"_key": "test"})
181
190
 
@@ -1,40 +0,0 @@
1
- name: Upload to PyPI
2
-
3
- on:
4
- release:
5
- types: [published]
6
-
7
- jobs:
8
- upload:
9
- runs-on: ubuntu-latest
10
-
11
- steps:
12
- - name: Checkout repository
13
- uses: actions/checkout@v7
14
- with:
15
- fetch-depth: 0
16
- fetch-tags: true
17
-
18
- - uses: actions/setup-python@v7
19
- with:
20
- python-version: "3.12"
21
-
22
- - name: Install build dependencies
23
- run: |
24
- python -m pip install --upgrade pip
25
- pip install build twine
26
-
27
- - name: Build package
28
- run: python -m build
29
-
30
- - name: Publish to PyPI Test
31
- env:
32
- TWINE_USERNAME: __token__
33
- TWINE_PASSWORD: ${{ secrets.PYPI_TEST_TOKEN }}
34
- run: twine upload --verbose --repository testpypi dist/*
35
-
36
- - name: Publish to PyPI
37
- env:
38
- TWINE_USERNAME: __token__
39
- TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
40
- run: twine upload --verbose --repository pypi dist/*
@@ -1,28 +0,0 @@
1
- # Contributing
2
-
3
- Set up dev environment:
4
- ```shell
5
- cd ~/your/repository/fork # Activate venv if you have one (recommended)
6
- pip install -e .[dev] # Install dev dependencies (e.g. black, mypy, pre-commit)
7
- pre-commit install # Install git pre-commit hooks
8
- ```
9
-
10
- Run unit tests with coverage:
11
-
12
- ```shell
13
- pytest --cluster --cov=arango --cov-report=html # Open htmlcov/index.html in your browser
14
- ```
15
-
16
- To start and ArangoDB instance locally, run:
17
-
18
- ```shell
19
- ./starter.sh # Requires docker
20
- ```
21
-
22
- Build and test documentation:
23
-
24
- ```shell
25
- python -m sphinx docs docs/_build # Open docs/_build/index.html in your browser
26
- ```
27
-
28
- Thank you for your contribution!
@@ -1 +0,0 @@
1
- __version__ = "1.2.5"
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "1.2.5",
3
- "distance": 0,
4
- "node": "g7efe263be99ae30c006413fc1b608b286d7021c1",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-08-31"
8
- }