Skip to content

Instantly share code, notes, and snippets.

@HiddenMotives
Last active March 2, 2018 06:41
Show Gist options
  • Save HiddenMotives/b2cbf3a361ba5f55d43c0caa4353ee85 to your computer and use it in GitHub Desktop.
Save HiddenMotives/b2cbf3a361ba5f55d43c0caa4353ee85 to your computer and use it in GitHub Desktop.
Python-SimpleCache - File Based / JSON / Dictionary / List / Caching Module
# Author: Hidden Motives
# Github: https://github.com/HiddenMotives
import os
import json
import time
class SimpleCache:
def __init__(self,path="cache",extension="cache",expiry=0):
self.set_cache_path(path)
self.set_cache_extension(extension)
self.set_cache_expiry(expiry)
def get_cache_path(self, label=None):
return self.__path if not(label) else (self.get_cache_path() + label + self.get_cache_extension())
def get_cache_extension(self):
return self.__extension
def get_cache_expiry(self):
return self.__expiry
def get_cache(self, label):
data = None
if(self.is_cached(label)):
data = json.load(open(self.get_cache_path(label)))
return data
def get_total_cached(self):
return [cached_file for cached_file in os.listdir(self.get_cache_path())
if cached_file.endswith(self.get_cache_extension())]
def set_cache_path(self, path):
if(path[-1] != os.path.sep):
path = path + os.path.sep
if not os.path.exists(path):
os.makedirs(path)
self.__path = path
def set_cache_extension(self, extension):
self.__extension = extension if (extension[0] == ".") else "." + extension
def set_cache_expiry(self,expiry):
self.__expiry = expiry
def set_cache(self, label, data):
with open(self.get_cache_path(label), 'w') as cache_file:
cache_file.write(json.dumps(data))
def is_cached(self, label):
if (os.path.isfile(self.get_cache_path(label))) and (self.get_cache_expiry() > 0) and ((time.time() -
os.path.getmtime(self.get_cache_path(label))) / (24 * 3600) >= self.get_cache_expiry()):
self.clearCache(label)
return os.path.isfile(self.get_cache_path(label))
def clearCache(self, label=None):
if(label):
os.remove(self.get_cache_path(label))
else:
for cache in self.get_total_cached():
os.remove(self.get_cache_path(cache.rstrip(self.get_cache_extension())))
import SimpleCache as sc
import requests
import json
cache = sc.SimpleCache(extension="json",expiry=1)
data = cache.get_cache("Bret")
if not(data):
req = requests.get("https://jsonplaceholder.typicode.com/users?username=Bret")
if(req.status_code == 200):
data = json.loads(req.text)
cache.set_cache("Bret", data)
print("Username: %s" %(data[0]["username"]))
print("Name: %s" %(data[0]["name"]))
print("Email: %s" %(data[0]["email"]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment