From a144536f881b0ba36ed865ceaed74f11949ca93c Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 10 Sep 2021 17:06:22 +0200 Subject: [PATCH] Fix `is_writeable()` for 3 OS support (#4743) * Fix `is_writeable()` for 3 OS support * Update general.py --- utils/general.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/utils/general.py b/utils/general.py index e3fc31e..6201320 100755 --- a/utils/general.py +++ b/utils/general.py @@ -105,19 +105,24 @@ def get_latest_run(search_dir='.'): def user_config_dir(dir='Ultralytics'): # Return path of user configuration directory (make if necessary) - system = platform.system() - cfg = {'Windows': 'AppData/Roaming', 'Linux': '.config', 'Darwin': 'Library/Application Support'} - path = Path.home() / cfg.get(system, '') / dir - if system == 'Linux' and not is_writeable(path): # GCP functions and AWS lambda solution, only /tmp is writeable - path = Path('/tmp') / dir - if not path.is_dir(): - path.mkdir() # make dir if required + cfg = {'Windows': 'AppData/Roaming', 'Linux': '.config', 'Darwin': 'Library/Application Support'} # 3 config dirs + path = Path.home() / cfg.get(platform.system(), '') # OS-specific config dir + path = (path if is_writeable(path) else Path('/tmp')) / dir # GCP and AWS lambda fix, only /tmp is writeable + path.mkdir(exist_ok=True) # make if required return path -def is_writeable(path): - # Return True if path has write permissions (Warning: known issue on Windows) - return os.access(path, os.R_OK) +def is_writeable(dir): + # Return True if directory has write permissions + # return os.access(path, os.R_OK) # known issue on Windows + file = Path(dir) / 'tmp.txt' + try: + with open(file, 'w'): + pass + file.unlink() # remove file + return True + except IOError: + return False def is_docker():