source: sasview/run.py @ 79592b8c

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalccostrafo411magnetic_scattrelease-4.2.2ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since 79592b8c was 64ca561, checked in by Ricardo Ferraz Leal <ricleal@…>, 8 years ago

Log not repeated any longer

  • Property mode set to 100755
File size: 5.4 KB
Line 
1#!/usr/bin/env python
2"""
3Run sasview in place.  This allows sasview to use the python
4files in the source tree without having to call setup.py install
5first.  A rebuild is still necessary when working on sas models
6or c modules.
7
8Usage:
9
10./run.py [(module|script) args...]
11
12Without arguments run.py runs sasview.  With arguments, run.py will run
13the given module or script.
14"""
15
16import os
17import sys
18import imp
19import logging
20import logging.config
21
22from contextlib import contextmanager
23from os.path import abspath, dirname, join as joinpath
24
25
26LOGGER_CONFIG_FILE = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'sasview/logging.ini')
27logging.config.fileConfig(LOGGER_CONFIG_FILE, disable_existing_loggers=True)
28logger = logging.getLogger(__name__)
29
30def update_all_logs_to_debug(logger):
31    '''
32    This updates all loggers and respective handlers to DEBUG
33    '''
34    for handler in logger.handlers or logger.parent.handlers:
35        handler.setLevel(logging.DEBUG)
36    for name,_ in logging.Logger.manager.loggerDict.items():
37        logging.getLogger(name).setLevel(logging.DEBUG)
38       
39def addpath(path):
40    """
41    Add a directory to the python path environment, and to the PYTHONPATH
42    environment variable for subprocesses.
43    """
44    path = abspath(path)
45    if 'PYTHONPATH' in os.environ:
46        PYTHONPATH = path + os.pathsep + os.environ['PYTHONPATH']
47    else:
48        PYTHONPATH = path
49    os.environ['PYTHONPATH'] = PYTHONPATH
50    sys.path.insert(0, path)
51
52@contextmanager
53def cd(path):
54    """
55    Change directory for duration of "with" context.
56    """
57    old_dir = os.getcwd()
58    os.chdir(path)
59    yield
60    os.chdir(old_dir)
61
62def import_package(modname, path):
63    """Import a package into a particular point in the python namespace"""
64    mod = imp.load_source(modname, abspath(joinpath(path,'__init__.py')))
65    sys.modules[modname] = mod
66    mod.__path__ = [abspath(path)]
67    return mod
68
69def import_dll(modname, build_path):
70    """Import a DLL from the build directory"""
71    import sysconfig
72    ext = sysconfig.get_config_var('SO')
73    # build_path comes from context
74    path = joinpath(build_path, *modname.split('.'))+ext
75    #print "importing", modname, "from", path
76    return imp.load_dynamic(modname, path)
77
78def prepare():
79    # Don't create *.pyc files
80    sys.dont_write_bytecode = True
81
82    # Debug numpy warnings
83    #import numpy; numpy.seterr(all='raise')
84
85    # find the directories for the source and build
86    from distutils.util import get_platform
87    root = abspath(dirname(__file__))
88    platform = '%s-%s'%(get_platform(),sys.version[:3])
89    build_path = joinpath(root, 'build','lib.'+platform)
90
91    # Notify the help menu that the Sphinx documentation is in a different
92    # place than it otherwise would be.
93    os.environ['SASVIEW_DOC_PATH'] = joinpath(build_path, "doc")
94
95    # Make sure that we have a private version of mplconfig
96    #mplconfig = joinpath(abspath(dirname(__file__)), '.mplconfig')
97    #os.environ['MPLCONFIGDIR'] = mplconfig
98    #if not os.path.exists(mplconfig): os.mkdir(mplconfig)
99    #import matplotlib
100    #matplotlib.use('Agg')
101    #print matplotlib.__file__
102    #import pylab; pylab.hold(False)
103    # add periodictable to the path
104    try: import periodictable
105    except: addpath(joinpath(root, '..','periodictable'))
106
107    try: import bumps
108    except: addpath(joinpath(root, '..','bumps'))
109
110    # select wx version
111    #addpath(os.path.join(root, '..','wxPython-src-3.0.0.0','wxPython'))
112
113    # Build project if the build directory does not already exist.
114    if not os.path.exists(build_path):
115        import subprocess
116        with cd(root):
117            subprocess.call((sys.executable, "setup.py", "build"), shell=False)
118
119    # Put the source trees on the path
120    addpath(joinpath(root, 'src'))
121
122    # sasmodels on the path
123    addpath(joinpath(root, '../sasmodels/'))
124
125    # Import the sasview package from root/sasview as sas.sasview.  It would
126    # be better to just store the package in src/sas/sasview.
127    import sas
128    sas.sasview = import_package('sas.sasview', joinpath(root,'sasview'))
129
130    # The sas.models package Compiled Model files should be pulled in from the build directory even though
131    # the source is stored in src/sas/models.
132
133    # Compiled modules need to be pulled from the build directory.
134    # Some packages are not where they are needed, so load them explicitly.
135    import sas.sascalc.pr
136    sas.sascalc.pr.core = import_package('sas.sascalc.pr.core',
137                                  joinpath(build_path, 'sas', 'sascalc', 'pr', 'core'))
138
139    # Compiled modules need to be pulled from the build directory.
140    # Some packages are not where they are needed, so load them explicitly.
141    import sas.sascalc.file_converter
142    sas.sascalc.file_converter.core = import_package('sas.sascalc.file_converter.core',
143                                  joinpath(build_path, 'sas', 'sascalc', 'file_converter', 'core'))                   
144
145    # Compiled modules need to be pulled from the build directory.
146    # Some packages are not where they are needed, so load them explicitly.
147    import sas.sascalc.calculator
148    sas.sascalc.calculator.core = import_package('sas.sascalc.calculator.core',
149                                  joinpath(build_path, 'sas', 'sascalc', 'calculator', 'core'))
150
151    sys.path.append(build_path)
152
153    #print "\n".join(sys.path)
154
155if __name__ == "__main__":
156    update_all_logs_to_debug(logger)
157    prepare()
158    from sas.sasview.sasview import run
159    run()
160   
Note: See TracBrowser for help on using the repository browser.