1 | import sys |
---|
2 | import os |
---|
3 | from os.path import exists, expanduser, dirname, realpath, join as joinpath |
---|
4 | |
---|
5 | |
---|
6 | def dirn(path, n): |
---|
7 | path = realpath(path) |
---|
8 | for _ in range(n): |
---|
9 | path = dirname(path) |
---|
10 | return path |
---|
11 | |
---|
12 | # Set up config directories |
---|
13 | def make_user_folder(): |
---|
14 | path = joinpath(expanduser("~"),'.sasview') |
---|
15 | if not exists(path): |
---|
16 | os.mkdir(path) |
---|
17 | return path |
---|
18 | |
---|
19 | |
---|
20 | def find_app_folder(): |
---|
21 | # We are starting out with the following info: |
---|
22 | # __file__ = .../sas/sasgui/__init__.pyc |
---|
23 | # Check if the sister path .../sas/sasview exists, and use it as the |
---|
24 | # app directory. This will only be the case if the app is not frozen. |
---|
25 | path = joinpath(dirn(__file__, 2), 'sasview') |
---|
26 | if exists(path): |
---|
27 | return path |
---|
28 | |
---|
29 | # If we are running frozen, then root is a parent directory |
---|
30 | if sys.platform == 'darwin': |
---|
31 | # Here is the path to the file on the mac: |
---|
32 | # .../Sasview.app/Contents/Resources/lib/python2.7/site-packages.zip/sas/sasgui/__init__.pyc |
---|
33 | # We want the path to the Resources directory. |
---|
34 | path = dirn(__file__, 6) |
---|
35 | elif os.name == 'nt': |
---|
36 | # Here is the path to the file on windows: |
---|
37 | # ../Sasview/library.zip/sas/sasgui/__init__.pyc |
---|
38 | # We want the path to the Sasview directory. |
---|
39 | path = dirn(__file__, 4) |
---|
40 | else: |
---|
41 | raise RuntimeError("Couldn't find the app directory") |
---|
42 | return path |
---|
43 | |
---|
44 | USER_FOLDER = make_user_folder() |
---|
45 | APP_FOLDER = find_app_folder() |
---|
46 | |
---|
47 | |
---|
48 | def get_app_dir(): |
---|
49 | return APP_FOLDER |
---|
50 | |
---|
51 | def get_user_dir(): |
---|
52 | return USER_FOLDER |
---|
53 | |
---|
54 | def get_custom_config_path(): |
---|
55 | dirname = os.path.join(get_user_dir(), 'config') |
---|
56 | # If the directory doesn't exist, create it |
---|
57 | if not os.path.exists(dirname): |
---|
58 | os.makedirs(dirname) |
---|
59 | path = os.path.join(dirname, "custom_config.py") |
---|
60 | return path |
---|
61 | |
---|
62 | _config_cache = None |
---|
63 | def get_local_config(): |
---|
64 | global _config_cache |
---|
65 | if not _config_cache: |
---|
66 | _config_cache = _load_config() |
---|
67 | return _config_cache |
---|
68 | |
---|
69 | def _load_config(): |
---|
70 | import os |
---|
71 | import sys |
---|
72 | import logging |
---|
73 | from sasmodels.custom import load_module_from_path |
---|
74 | |
---|
75 | logger = logging.getLogger(__name__) |
---|
76 | dirname = get_app_dir() |
---|
77 | filename = 'local_config.py' |
---|
78 | path = os.path.join(dirname, filename) |
---|
79 | try: |
---|
80 | module = load_module_from_path('sas.sasgui.local_config', path) |
---|
81 | logger.info("GuiManager loaded %s", path) |
---|
82 | return module |
---|
83 | except Exception as exc: |
---|
84 | logger.critical("Error loading %s: %s", path, exc) |
---|
85 | sys.exit() |
---|