From 38209cc350b359162237052fde3d022becde4ec6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org> Date: Wed, 12 Apr 2023 23:20:50 +0200 Subject: [PATCH] use django cache instead of requests-cache --- instagram_utils/services.py | 19 ++++++++----------- requirements/base.in | 1 - requirements/base.txt | 6 ++---- requirements/dev.txt | 4 ++-- requirements/production.txt | 4 ++-- shared/blocks.py | 36 +++++++++++++++++++----------------- 6 files changed, 33 insertions(+), 37 deletions(-) diff --git a/instagram_utils/services.py b/instagram_utils/services.py index 10b1754c..bc167bf5 100644 --- a/instagram_utils/services.py +++ b/instagram_utils/services.py @@ -2,7 +2,7 @@ import datetime import logging import io import os -import requests_cache +import requests from django.core.files import File from main.models import MainHomePage, MainPersonPage @@ -19,8 +19,6 @@ class InstagramDownloadService: """ def __init__(self, app_id: int, app_secret: str): - self.session = requests_cache.CachedSession("instagram_cache") - self.app_id = app_id self.app_secret = app_secret @@ -51,7 +49,7 @@ class InstagramDownloadService: def download_remote_image(self, image_url) -> (str, File): try: - response = self.session.get(image_url) + response = requests.get(image_url) response.raise_for_status() except Exception as exc: logger.warning( @@ -63,7 +61,7 @@ class InstagramDownloadService: return os.path.basename(image_url), File(io.BytesIO(response.content)) def get_user_data(self, access_token: str) -> dict: - user_data = self.session.get( + user_data = requests.get( f"https://graph.instagram.com/v16.0/me?access_token={access_token}" "&fields=id,username" ) @@ -72,12 +70,11 @@ class InstagramDownloadService: return user_data.json() def get_recent_media(self, user_data: dict, access_token: str) -> list[dict]: - with self.session.cache_disabled(): - recent_media = self.session.get( - f"https://graph.instagram.com/v16.0/{user_data['id']}/media?access_token=" - f"{access_token}&fields=id,timestamp,caption,media_type,permalink," - "media_url,thumbnail_url" - ) + recent_media = requests.get( + f"https://graph.instagram.com/v16.0/{user_data['id']}/media?access_token=" + f"{access_token}&fields=id,timestamp,caption,media_type,permalink," + "media_url,thumbnail_url" + ) if not recent_media.ok: logger.warning( diff --git a/requirements/base.in b/requirements/base.in index d7f49b0f..d42e722b 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -12,7 +12,6 @@ pirates<=0.7 whitenoise opencv-python requests -requests-cache icalevnt ics arrow diff --git a/requirements/base.txt b/requirements/base.txt index c31ed644..9c49218f 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,6 +1,6 @@ # -# This file is autogenerated by pip-compile with python 3.10 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: # # pip-compile base.in # @@ -8,8 +8,6 @@ amqp==5.1.1 # via kombu anyascii==0.3.2 # via wagtail -appnope==0.1.3 - # via ipython arrow==1.2.3 # via # -r base.in diff --git a/requirements/dev.txt b/requirements/dev.txt index e3a023da..827deebf 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,6 +1,6 @@ # -# This file is autogenerated by pip-compile with python 3.10 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: # # pip-compile dev.in # diff --git a/requirements/production.txt b/requirements/production.txt index 3333386f..4f1ff713 100644 --- a/requirements/production.txt +++ b/requirements/production.txt @@ -1,6 +1,6 @@ # -# This file is autogenerated by pip-compile with python 3.10 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: # # pip-compile production.in # diff --git a/shared/blocks.py b/shared/blocks.py index 869a4555..6b741f2b 100644 --- a/shared/blocks.py +++ b/shared/blocks.py @@ -5,7 +5,8 @@ import re import typing import urllib -import requests_cache +import requests +from django.core.cache import cache from django.core.exceptions import ValidationError from django.core.files.images import ImageFile from django.forms.utils import ErrorList @@ -679,12 +680,7 @@ class ChartDataset(blocks.StructBlock): def get_redmine_projects(): - session = requests_cache.CachedSession( - "redmine_cache", - expire_after=datetime.timedelta(hours=1), - ) - - projects = session.get("https://redmine.pirati.cz/projects.json?limit=10000") + projects = requests.get("https://redmine.pirati.cz/projects.json?limit=10000") projects.raise_for_status() projects = projects.json()["projects"] @@ -774,14 +770,14 @@ class ChartRedmineIssueDataset(blocks.StructBlock): return url def _get_parsed_issues(self, value, labels, issues_url) -> tuple: - session = requests_cache.CachedSession( - "redmine_cache", - expire_after=datetime.timedelta(days=14), - ) + issues_response = cache.get(f"redmine_{issues_url}") + + if issues_response is None: + issues_response = requests.get(issues_url) + issues_response.raise_for_status() + issues_response = issues_response.json() - issues_response = session.get(issues_url) - issues_response.raise_for_status() - issues_response = issues_response.json() + cache.set(f"redmine_{issues_url}", issues_response) only_grow = value.get("only_grow", False) @@ -790,10 +786,16 @@ class ChartRedmineIssueDataset(blocks.StructBlock): while issues_response["total_count"] - offset > len(issues_response["issues"]): offset += 100 + url_with_offset = f"{issues_url}&offset={offset}" - issues_response = session.get(f"{issues_url}&offset={offset}") - issues_response.raise_for_status() - issues_response = issues_response.json() + issues_response = cache.get(f"redmine_{url_with_offset}") + + if issues_response is None: + issues_response = requests.get(url_with_offset) + issues_response.raise_for_status() + issues_response = issues_response.json() + + cache.set(f"redmine_{url_with_offset}", issues_response) collected_issues += issues_response["issues"] -- GitLab