diff --git a/coldfront/config/core.py b/coldfront/config/core.py index d06c30381f..78b82193d1 100644 --- a/coldfront/config/core.py +++ b/coldfront/config/core.py @@ -126,3 +126,9 @@ # ------------------------------------------------------------------------------ PROJECT_INSTITUTION_EMAIL_MAP = ENV.dict("PROJECT_INSTITUTION_EMAIL_MAP", default={}) + +# ------------------------------------------------------------------------------ +# Web request settings. +# ------------------------------------------------------------------------------ + +REQUEST_TIMEOUT_SECONDS = ENV.int("REQUEST_TIMEOUT_SECONDS", default=10) diff --git a/coldfront/plugins/iquota/utils.py b/coldfront/plugins/iquota/utils.py index 9b63bcc3a9..f552c3f7ff 100644 --- a/coldfront/plugins/iquota/utils.py +++ b/coldfront/plugins/iquota/utils.py @@ -7,6 +7,7 @@ import humanize import kerberos import requests +from django.conf import settings from coldfront.core.utils.common import import_from_settings from coldfront.plugins.iquota.exceptions import KerberosError, MissingQuotaError @@ -51,7 +52,7 @@ def get_user_quota(self): headers = {"Authorization": "Negotiate " + token} url = "https://{}:{}/quota?user={}".format(self.IQUOTA_API_HOST, self.IQUOTA_API_PORT, self.username) - r = requests.get(url, headers=headers, verify=self.IQUOTA_CA_CERT) + r = requests.get(url, headers=headers, verify=self.IQUOTA_CA_CERT, timeout=settings.REQUEST_TIMEOUT_SECONDS) try: usage = r.json()[0] @@ -79,7 +80,7 @@ def _get_group_quota(self, group): url = "https://{}:{}/quota?group={}".format(self.IQUOTA_API_HOST, self.IQUOTA_API_PORT, group) - r = requests.get(url, headers=headers, verify=self.IQUOTA_CA_CERT) + r = requests.get(url, headers=headers, verify=self.IQUOTA_CA_CERT, timeout=settings.REQUEST_TIMEOUT_SECONDS) try: usage = r.json() diff --git a/coldfront/plugins/xdmod/utils.py b/coldfront/plugins/xdmod/utils.py index 7922ad325e..0d0642c3bf 100644 --- a/coldfront/plugins/xdmod/utils.py +++ b/coldfront/plugins/xdmod/utils.py @@ -7,6 +7,7 @@ import xml.etree.ElementTree as ET import requests +from django.conf import settings from coldfront.core.utils.common import import_from_settings @@ -63,7 +64,7 @@ def xdmod_fetch_total_cpu_hours(start, end, account, resources=None, statistics= payload["realm"] = "Jobs" payload["operation"] = "get_data" payload["statistic"] = statistics - r = requests.get(url, params=payload) + r = requests.get(url, params=payload, timeout=settings.REQUEST_TIMEOUT_SECONDS) logger.info(r.url) logger.info(r.text) @@ -113,7 +114,7 @@ def xdmod_fetch_total_storage(start, end, account, resources=None, statistics="p payload["realm"] = "Storage" payload["operation"] = "get_data" payload["statistic"] = statistics - r = requests.get(url, params=payload) + r = requests.get(url, params=payload, timeout=settings.REQUEST_TIMEOUT_SECONDS) logger.info(r.url) logger.info(r.text) @@ -150,7 +151,7 @@ def xdmod_fetch_cloud_core_time(start, end, project, resources=None): payload["realm"] = "Cloud" payload["operation"] = "get_data" payload["statistic"] = "cloud_core_time" - r = requests.get(url, params=payload) + r = requests.get(url, params=payload, timeout=settings.REQUEST_TIMEOUT_SECONDS) logger.info(r.url) logger.info(r.text) diff --git a/pyproject.toml b/pyproject.toml index 33bf9873f8..0c2ed000f5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -107,7 +107,7 @@ indent-width = 4 target-version = "py312" [tool.ruff.lint] -select = ["E4", "E7", "E9", "F", "I"] +select = ["E4", "E7", "E9", "F", "I", "S113"] [tool.ruff.format] indent-style = "space"