Get the latest Blender, older versions, or experimental builds.
Stay up-to-date with the new features in the latest Blender releases.
Access production assets and knowledge from the open movies.
Documentation on the usage and features in Blender.
Latest development updates, by Blender developers.
Guidelines, release notes and development docs.
A platform to collect and share results of the Blender Benchmark.
The yearly event that brings the community together.
Support core development with a monthly contribution.
Perform a single donation with more payment options available.
"""Cache management."""
import os
import logging
import requests
import cachecontrol
from cachecontrol.caches import FileCache
from . import appdirs
log = logging.getLogger(__name__)
_session = None # requests.Session object that's set up for caching by requests_session().
def cache_directory() -> str:
"""Returns an OS-specifc cache location, and ensures it exists.
Should be replaced with a call to bpy.utils.user_resource('CACHE', ...)
once https://developer.blender.org/T47684 is finished.
"""
# TODO: just use bpy.utils.user_resource('CACHE', ...)
cache_dir = os.path.join(appdirs.user_cache_dir(appname='Blender', appauthor=False), 'blender_cloud')
os.makedirs(cache_dir, exist_ok=True)
return cache_dir
def requests_session() -> requests.Session:
"""Creates a Requests-Cache session object."""
global _session
if _session is not None:
return _session
cache_dir = cache_directory()
cache_name = os.path.join(cache_dir, 'blender_cloud_http')
log.info('Storing cache in %s' % cache_name)
_session = cachecontrol.CacheControl(sess=requests.session(),
cache=FileCache(cache_name))