Create a global requests session
This should massively cut down on the number of TCP handshakes
This commit is contained in:
parent
fa065648d7
commit
36749ceac3
5 changed files with 17 additions and 11 deletions
|
@ -13,6 +13,8 @@ from wagtail.models import get_page_models as get_wagtail_page_models
|
||||||
|
|
||||||
HEADER_TAGS = ["h2", "h3", "h4", "h5", "h6"]
|
HEADER_TAGS = ["h2", "h3", "h4", "h5", "h6"]
|
||||||
|
|
||||||
|
requests_session = requests.Session()
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class TocEntry:
|
class TocEntry:
|
||||||
|
@ -113,6 +115,6 @@ def get_site_title() -> str:
|
||||||
@django_cache_decorator(time=21600)
|
@django_cache_decorator(time=21600)
|
||||||
def get_url_mime_type(url: str) -> Optional[str]:
|
def get_url_mime_type(url: str) -> Optional[str]:
|
||||||
try:
|
try:
|
||||||
return requests.head(url).headers.get("Content-Type")
|
return requests_session.head(url).headers.get("Content-Type")
|
||||||
except requests.exceptions.RequestException:
|
except requests.exceptions.RequestException:
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
from functools import cache
|
from functools import cache
|
||||||
from importlib.metadata import version
|
from importlib.metadata import version
|
||||||
|
|
||||||
import requests
|
|
||||||
import yaml
|
import yaml
|
||||||
from django_cache_decorator import django_cache_decorator
|
from django_cache_decorator import django_cache_decorator
|
||||||
|
|
||||||
|
from website.common.utils import requests_session
|
||||||
|
|
||||||
PYGMENTS_VERSION = version("pygments")
|
PYGMENTS_VERSION = version("pygments")
|
||||||
PYGMENTS_VERSION_SLUG = PYGMENTS_VERSION.replace(".", "-")
|
PYGMENTS_VERSION_SLUG = PYGMENTS_VERSION.replace(".", "-")
|
||||||
|
|
||||||
|
@ -13,7 +14,7 @@ LINGUIST_DATA_URL = "https://raw.githubusercontent.com/github/linguist/master/li
|
||||||
|
|
||||||
@django_cache_decorator(time=600)
|
@django_cache_decorator(time=600)
|
||||||
def _get_linguist_colours() -> dict[str, str]:
|
def _get_linguist_colours() -> dict[str, str]:
|
||||||
response = requests.get(LINGUIST_DATA_URL)
|
response = requests_session.get(LINGUIST_DATA_URL)
|
||||||
|
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import requests
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
|
from website.common.utils import requests_session
|
||||||
|
|
||||||
|
|
||||||
def get_unsplash_photo(image_id: str) -> dict:
|
def get_unsplash_photo(image_id: str) -> dict:
|
||||||
response = requests.get(
|
response = requests_session.get(
|
||||||
f"https://api.unsplash.com/photos/{image_id}",
|
f"https://api.unsplash.com/photos/{image_id}",
|
||||||
headers={
|
headers={
|
||||||
"Accept-Version": "v1",
|
"Accept-Version": "v1",
|
||||||
|
|
|
@ -1,17 +1,18 @@
|
||||||
import requests
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
|
from website.common.utils import requests_session
|
||||||
|
|
||||||
API_LIMIT = 50
|
API_LIMIT = 50
|
||||||
|
|
||||||
|
|
||||||
def is_valid_playlist(playlist_id: str) -> bool:
|
def is_valid_playlist(playlist_id: str) -> bool:
|
||||||
return requests.get(
|
return requests_session.get(
|
||||||
f"https://{settings.SPOTIFY_PROXY_HOST}/v1/playlists/{playlist_id}"
|
f"https://{settings.SPOTIFY_PROXY_HOST}/v1/playlists/{playlist_id}"
|
||||||
).ok
|
).ok
|
||||||
|
|
||||||
|
|
||||||
def get_playlist(playlist_id: str) -> dict:
|
def get_playlist(playlist_id: str) -> dict:
|
||||||
playlist_response = requests.get(
|
playlist_response = requests_session.get(
|
||||||
f"https://{settings.SPOTIFY_PROXY_HOST}/v1/playlists/{playlist_id}",
|
f"https://{settings.SPOTIFY_PROXY_HOST}/v1/playlists/{playlist_id}",
|
||||||
params={"fields": "name,external_urls.spotify,tracks.total,description"},
|
params={"fields": "name,external_urls.spotify,tracks.total,description"},
|
||||||
)
|
)
|
||||||
|
@ -20,7 +21,7 @@ def get_playlist(playlist_id: str) -> dict:
|
||||||
|
|
||||||
tracks = []
|
tracks = []
|
||||||
for offset in range(0, playlist_data["tracks"]["total"], API_LIMIT):
|
for offset in range(0, playlist_data["tracks"]["total"], API_LIMIT):
|
||||||
tracks_response = requests.get(
|
tracks_response = requests_session.get(
|
||||||
f"https://{settings.SPOTIFY_PROXY_HOST}/v1/playlists/{playlist_id}/tracks",
|
f"https://{settings.SPOTIFY_PROXY_HOST}/v1/playlists/{playlist_id}/tracks",
|
||||||
params={
|
params={
|
||||||
"offset": str(offset),
|
"offset": str(offset),
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
import requests
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from health_check.backends import BaseHealthCheckBackend
|
from health_check.backends import BaseHealthCheckBackend
|
||||||
|
|
||||||
|
from website.common.utils import requests_session
|
||||||
|
|
||||||
|
|
||||||
class SpotifyHealthCheckBackend(BaseHealthCheckBackend):
|
class SpotifyHealthCheckBackend(BaseHealthCheckBackend):
|
||||||
def check_status(self) -> None:
|
def check_status(self) -> None:
|
||||||
try:
|
try:
|
||||||
requests.get(
|
requests_session.get(
|
||||||
f"https://{settings.SPOTIFY_PROXY_HOST}/.health/"
|
f"https://{settings.SPOTIFY_PROXY_HOST}/.health/"
|
||||||
).raise_for_status()
|
).raise_for_status()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
Loading…
Reference in a new issue