Source code for penaltymodel.cache.cache_manager

# Copyright 2017 D-Wave Systems Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import os

import homebase

from penaltymodel.cache.package_info import __version__

__all__ = ['cache_file']

APPNAME = 'dwave-penaltymodel-cache'
"""The application name is used to determine the cache location."""

APPAUTHOR = 'dwave-systems'
"""The application author is used to determine the cache location."""

DATABASENAME = 'penaltymodel_cache_v%s.db' % __version__
"""The name for the sqlite database itself. Based on the version of the package."""


[docs]def cache_file(app_name=APPNAME, app_author=APPAUTHOR, filename=DATABASENAME): """Returns the filename (including path) for the data cache. The path will depend on the operating system, certain environmental variables and whether it is being run inside a virtual environment. See `homebase <https://github.com/dwavesystems/homebase>`_. Args: app_name (str, optional): The application name. Default is given by :obj:`.APPNAME`. app_author (str, optional): The application author. Default is given by :obj:`.APPAUTHOR`. filename (str, optional): The name of the database file. Default is given by :obj:`DATABASENAME`. Returns: str: The full path to the file that can be used as a cache. Notes: Creates the directory if it does not already exist. If run inside of a virtual environment, the cache will be stored in `/path/to/virtualenv/data/app_name` """ user_data_dir = homebase.user_data_dir(app_name=app_name, app_author=app_author, create=True) return os.path.join(user_data_dir, filename)