Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def setup(self):
class NoopHeuristic(BaseHeuristic):
warning = Mock()
def update_headers(self, resp):
return {}
self.heuristic = NoopHeuristic()
self.sess = CacheControl(Session(), heuristic=self.heuristic)
def setup(self):
class DummyHeuristic(BaseHeuristic):
def update_headers(self, resp):
return {"x-dummy-header": "foobar"}
self.sess = CacheControl(Session(), heuristic=DummyHeuristic())
"""
return {}
def apply(self, response):
updated_headers = self.update_headers(response)
if updated_headers:
response.headers.update(updated_headers)
warning_header_value = self.warning(response)
if warning_header_value is not None:
response.headers.update({"Warning": warning_header_value})
return response
class OneDayCache(BaseHeuristic):
"""
Cache the response by providing an expires 1 day in the
future.
"""
def update_headers(self, response):
headers = {}
if "expires" not in response.headers:
date = parsedate(response.headers["date"])
expires = expire_after(timedelta(days=1), date=datetime(*date[:6]))
headers["expires"] = datetime_to_header(expires)
headers["cache-control"] = "public"
return headers
Cache **all** requests for a defined time period.
"""
def __init__(self, **kw):
self.delta = timedelta(**kw)
def update_headers(self, response):
expires = expire_after(self.delta)
return {"expires": datetime_to_header(expires), "cache-control": "public"}
def warning(self, response):
tmpl = "110 - Automatically cached for %s. Response might be stale"
return tmpl % self.delta
class LastModified(BaseHeuristic):
"""
If there is no Expires header already, fall back on Last-Modified
using the heuristic from
http://tools.ietf.org/html/rfc7234#section-4.2.2
to calculate a reasonable value.
Firefox also does something like this per
https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ
http://lxr.mozilla.org/mozilla-release/source/netwerk/protocol/http/nsHttpResponseHead.cpp#397
Unlike mozilla we limit this to 24-hr.
"""
cacheable_by_default_statuses = {
200, 203, 204, 206, 300, 301, 404, 405, 410, 414, 501
}
def update_headers(self, resp):
if not self.__class__._cache:
if self.backend == "RedisCache":
pool = redis.ConnectionPool(host=self.redis_host, port=self.redis_port, db=0)
r = redis.Redis(connection_pool=pool)
self.__class__._cache = RedisCache(r)
elif self.backend == "FileCache":
self.__class__._cache = FileCache(self.file_cache_path)
else:
self.__class__._cache = DictCache()
session = CacheControl(session, heuristic=DefaultHeuristic(self.expire_after), cache=self.__class__._cache)
super(CachedRemoteResource, self).__init__(session)
class DefaultHeuristic(BaseHeuristic):
"""
BaseHeuristic subclass that sets the default caching headers if not supplied by the remote service.
"""
default_cache_vars = "Remote service caching headers not set correctly, using default caching"
"""
str: Message content warning that the response from the remote server did not
return proper HTTP cache headers so we will use default cache settings
"""
server_cache_headers = "Caching being done based on caching headers returned by remote service"
""" str: Message content warning that we are using cache settings returned by the remote server. """
def __init__(self, expire_after):
self.expire_after = expire_after
from ghtopdep import __version__
PACKAGE_NAME = "ghtopdep"
CACHE_DIR = appdirs.user_cache_dir(PACKAGE_NAME)
NEXT_BUTTON_SELECTOR = "#dependents > div.paginate-container > div > a"
ITEM_SELECTOR = "#dependents > div.Box > div.flex-items-center"
REPO_SELECTOR = "span > a.text-bold"
STARS_SELECTOR = "div > span:nth-child(1)"
GITHUB_URL = "https://github.com"
if pipdate.needs_checking(PACKAGE_NAME):
msg = pipdate.check(PACKAGE_NAME, __version__.__version__)
click.echo(msg)
class OneDayHeuristic(BaseHeuristic):
cacheable_by_default_statuses = {
200, 203, 204, 206, 300, 301, 404, 405, 410, 414, 501
}
def update_headers(self, response):
if response.status not in self.cacheable_by_default_statuses:
return {}
date = parsedate(response.headers["date"])
expires = datetime.datetime(*date[:6]) + datetime.timedelta(days=1)
return {"expires": formatdate(calendar.timegm(expires.timetuple())), "cache-control": "public"}
def warning(self, response):
msg = "Automatically cached! Response is Stale."
return "110 - {0}".format(msg)
Cache the response by providing an expires 1 day in the
future.
"""
def update_headers(self, response):
headers = {}
if "expires" not in response.headers:
date = parsedate(response.headers["date"])
expires = expire_after(timedelta(days=1), date=datetime(*date[:6]))
headers["expires"] = datetime_to_header(expires)
headers["cache-control"] = "public"
return headers
class ExpiresAfter(BaseHeuristic):
"""
Cache **all** requests for a defined time period.
"""
def __init__(self, **kw):
self.delta = timedelta(**kw)
def update_headers(self, response):
expires = expire_after(self.delta)
return {"expires": datetime_to_header(expires), "cache-control": "public"}
def warning(self, response):
tmpl = "110 - Automatically cached for %s. Response might be stale"
return tmpl % self.delta
from datetime import datetime, timedelta
from email.utils import formatdate, parsedate
from operator import attrgetter
from urllib.parse import urlparse
import cachecontrol
import click
import github3
import pendulum
from cachecontrol.caches import FileCache
from cachecontrol.heuristics import BaseHeuristic
from halo import Halo
from tabulate import tabulate
class OneDayHeuristic(BaseHeuristic):
def update_headers(self, response):
date = parsedate(response.headers["date"])
expires = datetime(*date[:6]) + timedelta(days=1)
return {
"expires": formatdate(calendar.timegm(expires.timetuple())),
"cache-control": "public",
}
def warning(self, response):
msg = "Automatically cached! Response is Stale."
return "110 - {0}".format(msg)
@click.group()
@click.argument("url")
from cachecontrol.heuristics import BaseHeuristic
class EtagOnlyCache(BaseHeuristic):
"""
Strip max-age cache-control header if it exists alongside etag.
"""
def update_headers(self, response):
headers = {}
max_age = 'max-age' in response.headers.get('cache-control', '')
etag = response.headers.get('etag', None)
if max_age and etag:
headers['cache-control'] = 'public'
return headers