8000 Merge pull request #228 from ArangoDB-Community/DE-429-227-header-for… · arangodb/python-arango@131aa4e · GitHub
[go: up one dir, main page]

Skip to content

Commit 131aa4e

Browse files
authored
Merge pull request #228 from ArangoDB-Community/DE-429-227-header-for-driver-version-and-other-info
Added header for driver version and other info
2 parents 4a66501 + 008947e commit 131aa4e

File tree

3 files changed

+38
-29
lines changed

3 files changed

+38
-29
lines changed

arango/request.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,22 @@
22

33
from typing import Any, MutableMapping, Optional
44

5-
from arango.typings import Fields, Headers, Params
6-
7-
8-
def normalize_headers(headers: Optional[Headers]) -> Headers:
5+
from arango.typings import DriverFlags, Fields, Headers, Params
6+
from arango.version import __version__
7+
8+
9+
def normalize_headers(
10+
headers: Optional[Headers], driver_flags: Optional[DriverFlags] = None
11+
) -> Headers:
12+
flags = ""
13+
if driver_flags is not None:
14+
for flag in driver_flags:
15+
flags = flags + flag + ";"
16+
driver_header = "python-arango/" + __version__ + " (" + flags + ")"
917
normalized_headers: Headers = {
1018
"charset": "utf-8",
1119
"content-type": "application/json",
20+
"x-arango-driver": driver_header,
1221
}
1322
if headers is not None:
1423
for key, value in headers.items():
@@ -53,6 +62,8 @@ class Request:
5362
:type exclusive: str | [str] | None
5463
:param deserialize: Whether the response body can be deserialized.
5564
:type deserialize: bool
65+
:param driver_flags: List of flags for the driver
66+
:type driver_flags: list
5667
5768
:ivar method: HTTP method in lowercase (e.g. "post").
5869
:vartype method: str
@@ -74,6 +85,8 @@ class Request:
7485
:vartype exclusive: str | [str] | None
7586
:ivar deserialize: Whether the response body can be deserialized.
7687
:vartype deserialize: bool
88+
:ivar driver_flags: List of flags for the driver
89+
:vartype driver_flags: list
7790
"""
7891

7992
__slots__ = (
@@ -86,6 +99,7 @@ class Request:
8699
"write",
87100
"exclusive",
88101
"deserialize",
102+
"driver_flags",
89103
)
90104

91105
def __init__(
@@ -99,13 +113,15 @@ def __init__(
99113
write: Optional[Fields] = None,
100114
exclusive: Optional[Fields] = None,
101115
deserialize: bool = True,
116+
driver_flags: Optional[DriverFlags] = None,
102117
) -> None:
103118
self.method = method
104119
self.endpoint = endpoint
105-
self.headers: Headers = normalize_headers(headers)
120+
self.headers: Headers = normalize_headers(headers, driver_flags)
106121
self.params: MutableMapping[str, str] = normalize_params(params)
107122
self.data = data
108123
self.read = read
109124
self.write = write
110125
self.exclusive = exclusive
111126
self.deserialize = deserialize
127+
self.driver_flags = driver_flags

arango/typings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@
77
Params = MutableMapping[str, Union[bool, int, str]]
88
Headers = MutableMapping[str, str]
99
Fields = Union[str, Sequence[str]]
10+
DriverFlags = List[str]

tests/test_request.py

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from arango.request import Request
22

33

4-
def test_request_no_data():
4+
def test_request_no_data() -> None:
55
request = Request(
66
method="post",
77
endpoint="/_api/test",
@@ -11,15 +11,13 @@ def test_request_no_data():
1111
assert request.method == "post"
1212
assert request.endpoint == "/_api/test"
1313
assert request.params == {"bool": "1"}
14-
assert request.headers == {
15-
"charset": "utf-8",
16-
"content-type": "application/json",
17-
"foo": "bar",
18-
}
14+
assert request.headers["charset"] == "utf-8"
15+
assert request.headers["content-type"] == "application/json"
16+
assert request.headers["foo"] == "bar"
1917
assert request.data is None
2018

2119

22-
def test_request_string_data():
20+
def test_request_string_data() -> None:
2321
request = Request(
2422
method="post",
2523
endpoint="/_api/test",
@@ -30,15 +28,13 @@ def test_request_string_data():
3028
assert request.method == "post"
3129
assert request.endpoint == "/_api/test"
3230
assert request.params == {"bool": "1"}
33-
assert request.headers == {
34-
"charset": "utf-8",
35-
"content-type": "application/json",
36-
"foo": "bar",
37-
}
31+
assert request.headers["charset"] == "utf-8"
32+
assert request.headers["content-type"] == "application/json"
33+
assert request.headers["foo"] == "bar"
3834
assert request.data == "test"
3935

4036

41-
def test_request_json_data():
37+
def test_request_json_data() -> None:
4238
request = Request(
4339
method="post",
4440
endpoint="/_api/test",
@@ -49,15 +45,13 @@ def test_request_json_data():
4945
assert request.method == "post"
5046
assert request.endpoint == "/_api/test"
5147
assert request.params == {"bool": "1"}
52-
assert request.headers == {
53-
"charset": "utf-8",
54-
"content-type": "application/json",
55-
"foo": "bar",
56-
}
48+
assert request.headers["charset"] == "utf-8"
49+
assert request.headers["content-type"] == "application/json"
50+
assert request.headers["foo"] == "bar"
5751
assert request.data == {"baz": "qux"}
5852

5953

60-
def test_request_transaction_data():
54+
def test_request_transaction_data() -> None:
6155
request = Request(
6256
method="post",
6357
endpoint="/_api/test",
@@ -68,9 +62,7 @@ def test_request_transaction_data():
6862
assert request.method == "post"
6963
assert request.endpoint == "/_api/test"
7064
assert request.params == {"bool": "1"}
71-
assert request.headers == {
72-
"charset": "utf-8",
73-
"content-type": "application/json",
74-
"foo": "bar",
75-
}
65+
assert request.headers["charset"] == "utf-8"
66+
assert request.headers["content-type"] == "application/json"
67+
assert request.headers["foo"] == "bar"
7668
assert request.data == {"baz": "qux"}

0 commit comments

Comments
 (0)
0