From a763e5d1b3921b3194f3d4e94ab9de3fbe08bbdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Picca=20Fr=C3=A9d=C3=A9ric-Emmanuel?= Date: Tue, 28 May 2019 08:16:16 +0200 Subject: New upstream version 0.10.1+dfsg --- silx/resources/__init__.py | 56 +++++++++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 15 deletions(-) (limited to 'silx/resources/__init__.py') diff --git a/silx/resources/__init__.py b/silx/resources/__init__.py index a45457a..ba390d6 100644 --- a/silx/resources/__init__.py +++ b/silx/resources/__init__.py @@ -56,19 +56,21 @@ of this modules to ensure access across different distribution schemes: __authors__ = ["V.A. Sole", "Thomas Vincent", "J. Kieffer"] __license__ = "MIT" -__date__ = "15/02/2018" +__date__ = "13/02/2019" import os import sys import threading import json -import getpass import logging import tempfile import unittest import importlib -from silx.third_party import six + +import six + + logger = logging.getLogger(__name__) @@ -312,24 +314,47 @@ class ExternalResources(object): self.project = project self._initialized = False self.sem = threading.Semaphore() - self.env_key = env_key or (self.project.upper() + "_DATA") + + self.env_key = env_key or (self.project.upper() + "_TESTDATA") self.url_base = url_base self.all_data = set() self.timeout = timeout - self.data_home = None + self._data_home = None + + @property + def data_home(self): + """Returns the data_home path and make sure it exists in the file + system.""" + if self._data_home is not None: + return self._data_home + + data_home = os.environ.get(self.env_key) + if data_home is None: + try: + import getpass + name = getpass.getuser() + except Exception: + if "getlogin" in dir(os): + name = os.getlogin() + elif "USER" in os.environ: + name = os.environ["USER"] + elif "USERNAME" in os.environ: + name = os.environ["USERNAME"] + else: + name = "uid" + str(os.getuid()) + + basename = "%s_testdata_%s" % (self.project, name) + data_home = os.path.join(tempfile.gettempdir(), basename) + if not os.path.exists(data_home): + os.makedirs(data_home) + self._data_home = data_home + return data_home def _initialize_data(self): """Initialize for downloading test data""" if not self._initialized: with self.sem: if not self._initialized: - - self.data_home = os.environ.get(self.env_key) - if self.data_home is None: - self.data_home = os.path.join(tempfile.gettempdir(), - "%s_testdata_%s" % (self.project, getpass.getuser())) - if not os.path.exists(self.data_home): - os.makedirs(self.data_home) self.testdata = os.path.join(self.data_home, "all_testdata.json") if os.path.exists(self.testdata): with open(self.testdata) as f: @@ -351,9 +376,6 @@ class ExternalResources(object): if not self._initialized: self._initialize_data() - if not os.path.exists(self.data_home): - os.makedirs(self.data_home) - fullfilename = os.path.abspath(os.path.join(self.data_home, filename)) if not os.path.isfile(fullfilename): @@ -379,6 +401,10 @@ class ExternalResources(object): except six.moves.urllib.error.URLError: raise unittest.SkipTest("network unreachable.") + if not os.path.isdir(os.path.dirname(fullfilename)): + # Create sub-directory if needed + os.makedirs(os.path.dirname(fullfilename)) + try: with open(fullfilename, "wb") as outfile: outfile.write(data) -- cgit v1.2.3