codekingpro/portable-devtools
114k
1"""Application data stored by virtualenv."""2 3from __future__ import annotations4 5import logging6import os7 8from platformdirs import user_data_dir9 10from .na import AppDataDisabled11from .read_only import ReadOnlyAppData12from .via_disk_folder import AppDataDiskFolder13from .via_tempdir import TempAppData14 15 16def _default_app_data_dir(env):17 key = "VIRTUALENV_OVERRIDE_APP_DATA"18 if key in env:19 return env[key]20 return user_data_dir(appname="virtualenv", appauthor="pypa")21 22 23def make_app_data(folder, **kwargs):24 is_read_only = kwargs.pop("read_only")25 env = kwargs.pop("env")26 if kwargs: # py3+ kwonly27 msg = "unexpected keywords: {}"28 raise TypeError(msg)29 30 if folder is None:31 folder = _default_app_data_dir(env)32 folder = os.path.abspath(folder)33 34 if is_read_only:35 return ReadOnlyAppData(folder)36 37 if not os.path.isdir(folder):38 try:39 os.makedirs(folder)40 logging.debug("created app data folder %s", folder)41 except OSError as exception:42 logging.info("could not create app data folder %s due to %r", folder, exception)43 44 if os.access(folder, os.W_OK):45 return AppDataDiskFolder(folder)46 logging.debug("app data folder %s has no write access", folder)47 return TempAppData()48 49 50__all__ = (51 "AppDataDisabled",52 "AppDataDiskFolder",53 "ReadOnlyAppData",54 "TempAppData",55 "make_app_data",56)57 