Skip to content

Commit b5cebe9

Browse files
committed
Set User-Agent header to kci-dev/{version} on all HTTP requests
Use a requests.Session with a User-Agent header following the standard ProductName/Version convention (RFC 7231). Signed-off-by: Ben Copeland <ben.copeland@linaro.org>
1 parent 127db67 commit b5cebe9

File tree

7 files changed

+26
-9
lines changed

7 files changed

+26
-9
lines changed

kcidev/libs/common.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from importlib.metadata import PackageNotFoundError, version
99

1010
import click
11+
import requests
1112

1213
if sys.version_info >= (3, 11):
1314
import tomllib
@@ -19,6 +20,9 @@
1920
except PackageNotFoundError:
2021
kcidev_version = "unknown"
2122

23+
kcidev_session = requests.Session()
24+
kcidev_session.headers["User-Agent"] = f"kci-dev/{kcidev_version}"
25+
2226

2327
def load_toml(settings, subcommand):
2428
fname = "kci-dev.toml"

kcidev/libs/dashboard.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,12 @@ def wrapper(
8383

8484
@_dashboard_request
8585
def dashboard_api_post(endpoint, params, use_json, body, max_retries=3):
86-
return requests.post(endpoint, json=body)
86+
return kcidev_session.post(endpoint, json=body)
8787

8888

8989
@_dashboard_request
9090
def dashboard_api_fetch(endpoint, params, use_json, max_retries=3, error_verbose=True):
91-
return requests.get(endpoint)
91+
return kcidev_session.get(endpoint)
9292

9393

9494
def dashboard_fetch_summary(origin, giturl, branch, commit, arch, use_json):

kcidev/libs/files.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import requests
77

8-
from kcidev.libs.common import kci_err
8+
from kcidev.libs.common import kci_err, kcidev_session
99

1010
INVALID_FILE_CHARS = re.compile(r'[\\/:"*?<>|]+')
1111

@@ -23,7 +23,7 @@ def download_logs_to_file(log_url, log_file):
2323
try:
2424
# Download compressed log
2525
logging.debug("Fetching compressed log file")
26-
response = requests.get(log_url)
26+
response = kcidev_session.get(log_url)
2727
response.raise_for_status()
2828

2929
# Decompress log

kcidev/libs/maestro_common.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def maestro_get_node(url, nodeid):
6161
maestro_print_api_call(url)
6262

6363
try:
64-
response = requests.get(url, headers=headers)
64+
response = kcidev_session.get(url, headers=headers)
6565
logging.debug(f"Node request status: {response.status_code}")
6666
response.raise_for_status()
6767
except requests.exceptions.HTTPError as ex:
@@ -107,7 +107,7 @@ def maestro_get_nodes(url, limit, offset, filter, paginate):
107107
maestro_print_api_call(url)
108108

109109
try:
110-
response = requests.get(url, headers=headers)
110+
response = kcidev_session.get(url, headers=headers)
111111
logging.debug(f"Nodes request status: {response.status_code}")
112112
response.raise_for_status()
113113
except requests.exceptions.HTTPError as ex:
@@ -169,7 +169,7 @@ def maestro_retrieve_treeid_nodes(baseurl, token, treeid):
169169
logging.debug(f"Tree nodes URL: {url}")
170170

171171
try:
172-
response = requests.get(url, headers=headers, timeout=30)
172+
response = kcidev_session.get(url, headers=headers, timeout=30)
173173
logging.debug(f"Tree nodes request status: {response.status_code}")
174174
except requests.exceptions.RequestException as e:
175175
logging.warning(f"Request exception retrieving tree nodes: {e}")

kcidev/subcommands/checkout.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def send_checkout_full(baseurl, token, **kwargs):
4141
maestro_print_api_call(url, data)
4242
try:
4343
logging.debug(f"POST request to: {url}")
44-
response = requests.post(url, headers=headers, data=jdata, timeout=30)
44+
response = kcidev_session.post(url, headers=headers, data=jdata, timeout=30)
4545
logging.debug(f"Checkout response status: {response.status_code}")
4646
except requests.exceptions.RequestException as e:
4747
logging.error(f"Checkout API request failed: {e}")

kcidev/subcommands/testretry.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def send_jobretry(baseurl, jobid, token):
2727

2828
try:
2929
logging.debug("Sending POST request for job retry")
30-
response = requests.post(url, headers=headers, data=jdata)
30+
response = kcidev_session.post(url, headers=headers, data=jdata)
3131
logging.debug(f"Response status: {response.status_code}")
3232
except requests.exceptions.RequestException as e:
3333
logging.error(f"Failed to send job retry request: {e}")

tests/test_kcidev.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import os
2+
import re
23
import shutil
34
from subprocess import PIPE, run
45

56
import git
67
import pytest
78

9+
from kcidev.libs.common import kcidev_session, kcidev_version
810
from kcidev.subcommands.config import add_config
911

1012

@@ -918,6 +920,17 @@ def test_kcidev_results_build_with_real_id():
918920
pass
919921

920922

923+
def test_kcidev_session_user_agent():
924+
ua = kcidev_session.headers["User-Agent"]
925+
assert ua == f"kci-dev/{kcidev_version}"
926+
assert kcidev_version != "unknown"
927+
928+
929+
def test_kcidev_version_from_metadata():
930+
assert isinstance(kcidev_version, str)
931+
assert re.match(r"^\d+\.\d+\.\d+", kcidev_version)
932+
933+
921934
def test_clean():
922935
# clean enviroment
923936
shutil.rmtree("my-new-repo/")

0 commit comments

Comments
 (0)