summaryrefslogtreecommitdiff
path: root/silx/resources/__init__.py
diff options
context:
space:
mode:
authorPicca Frédéric-Emmanuel <picca@synchrotron-soleil.fr>2019-05-28 08:16:16 +0200
committerPicca Frédéric-Emmanuel <picca@synchrotron-soleil.fr>2019-05-28 08:16:16 +0200
commita763e5d1b3921b3194f3d4e94ab9de3fbe08bbdd (patch)
tree45d462ed36a5522e9f3b9fde6c4ec4918c2ae8e3 /silx/resources/__init__.py
parentcebdc9244c019224846cb8d2668080fe386a6adc (diff)
New upstream version 0.10.1+dfsg
Diffstat (limited to 'silx/resources/__init__.py')
-rw-r--r--silx/resources/__init__.py56
1 files changed, 41 insertions, 15 deletions
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)