|
22 | 22 |
|
23 | 23 | config = NipypeConfig()
|
24 | 24 | logging = Logging(config)
|
25 |
| -logger = logging.getLogger('nipype.utils') |
26 | 25 |
|
27 |
| -INIT_MSG = "Running {packname} version {version} (latest: {latest})".format |
28 | 26 |
|
29 | 27 | class NipypeTester(object):
|
30 | 28 | def __call__(self, doctests=True, parallel=False):
|
@@ -60,15 +58,46 @@ def get_info():
|
60 | 58 | Rename, Function, Select, Merge)
|
61 | 59 |
|
62 | 60 |
|
63 |
| -if config.getboolean('execution', 'check_version'): |
| 61 | +def check_latest_version(raise_exception=False): |
| 62 | + """Check for the latest version of the library |
| 63 | +
|
| 64 | + parameters: |
| 65 | + raise_exception: boolean |
| 66 | + Raise a RuntimeError if a bad version is being used |
| 67 | + """ |
64 | 68 | import etelemetry
|
| 69 | + logger = logging.getLogger('nipype.utils') |
| 70 | + |
| 71 | + INIT_MSG = "Running {packname} version {version} (latest: {latest})".format |
65 | 72 |
|
66 |
| - latest = {"version": 'Unknown'} |
| 73 | + latest = {"version": 'Unknown', "bad_versions": []} |
| 74 | + result = None |
67 | 75 | try:
|
68 |
| - latest = etelemetry.get_project("nipy/nipype") |
| 76 | + result = etelemetry.get_project("nipy/nipype") |
69 | 77 | except Exception as e:
|
70 | 78 | logger.warning("Could not check for version updates: \n%s", e)
|
71 | 79 | finally:
|
72 |
| - logger.info(INIT_MSG(packname='nipype', |
73 |
| - version=__version__, |
74 |
| - latest=latest["version"])) |
| 80 | + if result: |
| 81 | + latest.update(**result) |
| 82 | + if LooseVersion(__version__) != LooseVersion(latest["version"]): |
| 83 | + logger.info(INIT_MSG(packname='nipype', |
| 84 | + version=__version__, |
| 85 | + latest=latest["version"])) |
| 86 | + if latest["bad_versions"] and \ |
| 87 | + any([LooseVersion(__version__) == LooseVersion(ver) |
| 88 | + for ver in latest["bad_versions"]]): |
| 89 | + message = ('You are using a version of Nipype with a critical ' |
| 90 | + 'bug. Please use a different version.') |
| 91 | + if raise_exception: |
| 92 | + raise RuntimeError(message) |
| 93 | + else: |
| 94 | + logger.critical(message) |
| 95 | + return latest |
| 96 | + |
| 97 | +# Run telemetry on import for interactive sessions, such as IPython, Jupyter notebooks, Python REPL |
| 98 | +if config.getboolean('execution', 'check_version'): |
| 99 | + import __main__ |
| 100 | + if not hasattr(__main__, '__file__'): |
| 101 | + from .interfaces.base import BaseInterface |
| 102 | + if BaseInterface._etelemetry_version_data is None: |
| 103 | + BaseInterface._etelemetry_version_data = check_latest_version() |
0 commit comments