1{
2 lib,
3 buildPythonPackage,
4 fetchFromGitHub,
5 pythonOlder,
6 pytestCheckHook,
7
8 # build-system
9 setuptools,
10 setuptools-scm,
11
12 # dependencies
13 urllib3,
14 requests,
15 requests-toolbelt,
16 pyjwt,
17 importlib-metadata,
18 packaging,
19
20 # tests
21 arangodb,
22 mock,
23}:
24
25let
26 testDBOpts = {
27 host = "127.0.0.1";
28 port = "8529";
29 password = "test";
30 secret = "secret";
31 };
32in
33
34buildPythonPackage rec {
35 pname = "python-arango";
36 version = "7.9.1";
37 format = "pyproject";
38
39 disabled = pythonOlder "3.7";
40
41 src = fetchFromGitHub {
42 owner = "ArangoDB-Community";
43 repo = "python-arango";
44 rev = "refs/tags/${version}";
45 hash = "sha256-N10ysJKk0jxFyjgR/MXKHVS2MxCQtfFFGEh1IZ2eJk0=";
46 };
47
48 nativeBuildInputs = [
49 setuptools
50 setuptools-scm
51 ];
52
53 propagatedBuildInputs = [
54 importlib-metadata
55 requests
56 requests-toolbelt
57 packaging
58 pyjwt
59 setuptools
60 urllib3
61 ];
62
63 nativeCheckInputs = [
64 arangodb
65 mock
66 pytestCheckHook
67 ];
68
69 # arangodb is compiled only for particular target architectures
70 # (i.e. "haswell"). Thus, these tests may not pass reproducibly,
71 # failing with: `166: Illegal instruction` if not run on arangodb's
72 # specified architecture.
73 #
74 # nonetheless, the client library should remain in nixpkgs - since
75 # the client library will talk to arangodb across the network and
76 # architecture issues will be irrelevant.
77 doCheck = false;
78
79 preCheck = lib.optionalString doCheck ''
80 # Start test DB
81 mkdir -p .nix-test/{data,work}
82
83 ICU_DATA=${arangodb}/share/arangodb3 \
84 GLIBCXX_FORCE_NEW=1 \
85 TZ=UTC \
86 TZ_DATA=${arangodb}/share/arangodb3/tzdata \
87 ARANGO_ROOT_PASSWORD=${testDBOpts.password} \
88 ${arangodb}/bin/arangod \
89 --server.uid=$(id -u) \
90 --server.gid=$(id -g) \
91 --server.authentication=true \
92 --server.endpoint=http+tcp://${testDBOpts.host}:${testDBOpts.port} \
93 --server.descriptors-minimum=4096 \
94 --server.jwt-secret=${testDBOpts.secret} \
95 --javascript.app-path=.nix-test/app \
96 --log.file=.nix-test/log \
97 --database.directory=.nix-test/data \
98 --foxx.api=false &
99 '';
100
101 pytestFlagsArray = [
102 "--host"
103 testDBOpts.host
104 "--port"
105 testDBOpts.port
106 "--passwd"
107 testDBOpts.password
108 "--secret"
109 testDBOpts.secret
110 ];
111
112 disabledTests = [
113 # AssertionError geo-related - try enabling later
114 "test_document_find_in_box"
115
116 # maybe arangod misconfig - try enabling later
117 # arango.exceptions.JWTAuthError: [HTTP 401][ERR 401] Wrong credentials
118 "test_auth_jwt"
119
120 # ValueError - try enabling later
121 # maybe missed 3.9.3->3.10.0 changes
122 # most caused by key change: isNewlyCreated->new
123 "test_add_hash_index"
124 "test_add_skiplist_index"
125 "test_add_persistent_index"
126 "test_add_ttl_index"
127 "test_delete_index"
128 "test_pregel_management"
129
130 # formatting error - try enabling later
131 # maybe missed 3.9.3->3.10.0 changes
132 # caused by: body["computedValues"] = None
133 "test_permission_management"
134 "test_collection_misc_methods"
135 "test_collection_management"
136 "test_replication_inventory"
137
138 # want outgoing network to update foxx apis
139 # so foxx.api disabled in arangod startup
140 "test_foxx_service_management_file"
141 "test_foxx_service_management_json"
142 "test_foxx_config_management"
143 "test_foxx_dependency_management"
144 "test_foxx_development_toggle"
145 "test_foxx_misc_functions"
146
147 # no replication configured via arangod invocation
148 "test_replication_applier"
149 ];
150
151 pythonImportsCheck = [ "arango" ];
152
153 meta = with lib; {
154 description = "Python Driver for ArangoDB";
155 homepage = "https://github.com/ArangoDB-Community/python-arango";
156 changelog = "https://github.com/ArangoDB-Community/python-arango/releases/tag/${version}";
157 license = licenses.mit;
158 maintainers = with maintainers; [ jsoo1 ];
159 };
160}