From 496d67c864a884e242d279962f1ad3a8eda00b9c Mon Sep 17 00:00:00 2001
From: Jarmil <jarmil.halamicek@seznam.cz>
Date: Wed, 14 Oct 2020 15:06:33 +0200
Subject: [PATCH] Cache na API requesty

---
 .isort.cfg           |  2 +-
 requirements/base.in |  1 +
 shared/models.py     | 14 ++++++++------
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/.isort.cfg b/.isort.cfg
index 7fe5b8ee..b098b433 100644
--- a/.isort.cfg
+++ b/.isort.cfg
@@ -4,4 +4,4 @@ line_length = 88
 multi_line_output = 3
 default_sectiont = "THIRDPARTY"
 include_trailing_comma = true
-known_third_party = arrow,django,environ,faker,ics,markdown,modelcluster,nbconvert,pirates,pytest,pytz,requests,sentry_sdk,snapshottest,taggit,traitlets,wagtail,wagtailmetadata
+known_third_party = arrow,django,environ,faker,ics,markdown,modelcluster,nbconvert,pirates,pytest,pytz,requests,requests_cache,sentry_sdk,snapshottest,taggit,traitlets,wagtail,wagtailmetadata
diff --git a/requirements/base.in b/requirements/base.in
index 03f31a2c..1ab8f044 100644
--- a/requirements/base.in
+++ b/requirements/base.in
@@ -9,6 +9,7 @@ pirates<=0.4
 whitenoise
 opencv-python
 requests
+requests-cache
 ics
 arrow
 sentry-sdk
diff --git a/shared/models.py b/shared/models.py
index fcb488ee..d0565053 100644
--- a/shared/models.py
+++ b/shared/models.py
@@ -1,4 +1,5 @@
 import requests
+import requests_cache
 from django.db import models
 from modelcluster.contrib.taggit import ClusterTaggableManager
 from modelcluster.fields import ParentalKey
@@ -8,6 +9,11 @@ from wagtail.core.models import Page
 from wagtail.images.edit_handlers import ImageChooserPanel
 from wagtailmetadata.models import MetadataPageMixin
 
+# cacheovani requestu na piratska api, ttl 1 hodina
+requests_cache.install_cache(
+    cache_name="shared_models", backend="memory", expire_after=3600
+)
+
 
 class SharedSubpageMixin:
     """Must be used in class definition before MetadataPageMixin!"""
@@ -76,17 +82,13 @@ class PersonPage(SharedSubpageMixin, MetadataPageMixin, Page):
     ]
 
     def _iapi(self):
-        """ Vrati data o osobe z piratskeho IAPI jako json
-            TODO: neni cacheovano
-        """
+        """ Vrati data o osobe z piratskeho IAPI jako json. Cached via requests_cache """
         return requests.get(
             "https://iapi.pirati.cz/v1/user?username=%s" % self.pirate_id
         ).json()
 
     def _graph(self):
-        """ Vrati data o osobe z graph.pirati.cz (forum) jako json
-            TODO: neni cacheovano
-        """
+        """ Vrati data o osobe z graph.pirati.cz (forum) jako json. Cached via requests_cache """
         return requests.get("https://graph.pirati.cz/user/%s" % self.pirate_id).json()
 
     @property
-- 
GitLab