ocarina/libsaria/storage/cache.py

60 lines
1.4 KiB
Python

# Bryan Schumaker (5 / 6 / 2011)
import os
join = os.path.join
sep = os.path.sep
isfile = os.path.isfile
isdir = os.path.isdir
getsize = os.path.getsize
CACHE_DIR = None
def set_basedir(saria_dir):
global CACHE_DIR
CACHE_DIR = join(saria_dir, "cache")
def file_exists(cache_path):
if not isfile(cache_path):
return False
return getsize(cache_path) != 0
def make_cache_path(artist, album, file):
cache_file = "%s%s%s%s" % (artist, sep, album, sep)
cache_path = join(CACHE_DIR, cache_file)
if not isdir(cache_path):
os.makedirs(cache_path)
return join(cache_path, file)
def fill_cache(artist, album, title, cache_func, cache_path):
text = cache_func(artist, album, title)
if text != None:
try:
f = open(cache_path, 'w')
f.write(text)
f.close()
except:
pass
return True
return False
def get_item(artist, album, title, file, cache_func, default):
cache_path = make_cache_path(artist, album, file)
filled = True
if not file_exists(cache_path):
filled = fill_cache(artist, album, title, cache_func, cache_path)
if filled == False:
return default
return cache_path
def test_item(artist, album, file, default):
cache_path = make_cache_path(artist, album, file)
if not file_exists(cache_path):
return default
return cache_path
def copy_in_file(artist, album, file, orig_file):
cache_path = make_cache_path(artist, album, file)
orig = open(orig_file)
f = open(cache_path, 'w')
f.write(orig.read())
f.close()