Skip to content

Commit d40669a

Browse files
authored
Merge pull request #158 from satra/enh/et
enh: add etelemetry support
2 parents b82d18a + 10922e1 commit d40669a

File tree

6 files changed

+71
-2
lines changed

6 files changed

+71
-2
lines changed

.et

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{ "bad_versions" : []
2+
}

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ cov.xml
1414

1515
.*.swp
1616
*~
17+
.idea

min-requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
# Auto-generated by tools/update_min_requirements.py
22
cloudpickle == 0.8.0
33
filelock == 3.0.0
4+
etelemetry

pydra/__init__.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,60 @@
55

66
from .engine import Submitter, Workflow, AuditFlag, ShellCommandTask, DockerTask, specs
77
from . import mark
8+
9+
10+
def check_latest_version(raise_exception=False):
11+
"""Check for the latest version of the library
12+
13+
parameters:
14+
raise_exception: boolean
15+
Raise a RuntimeError if a bad version is being used
16+
"""
17+
import etelemetry
18+
import logging
19+
from pkg_resources import parse_version
20+
21+
logger = logging.getLogger("pydra")
22+
23+
INIT_MSG = "Running {packname} version {version} (latest: {latest})".format
24+
25+
latest = {"version": "Unknown", "bad_versions": []}
26+
result = None
27+
try:
28+
result = etelemetry.get_project("nipype/pydra")
29+
except Exception as e:
30+
logger.warning("Could not check for version updates: \n%s", e)
31+
finally:
32+
if result:
33+
latest.update(**result)
34+
if parse_version(__version__) != parse_version(latest["version"]):
35+
logger.info(
36+
INIT_MSG(
37+
packname="pydra", version=__version__, latest=latest["version"]
38+
)
39+
)
40+
if latest["bad_versions"] and any(
41+
[
42+
parse_version(__version__) == parse_version(ver)
43+
for ver in latest["bad_versions"]
44+
]
45+
):
46+
message = (
47+
"You are using a version of Pydra with a critical "
48+
"bug. Please use a different version."
49+
)
50+
if raise_exception:
51+
raise RuntimeError(message)
52+
else:
53+
logger.critical(message)
54+
return latest
55+
56+
57+
# Run telemetry on import for interactive sessions, such as IPython, Jupyter notebooks, Python REPL
58+
import __main__
59+
60+
if not hasattr(__main__, "__file__"):
61+
from .engine.core import TaskBase
62+
63+
if TaskBase._etelemetry_version_data is None:
64+
TaskBase._etelemetry_version_data = check_latest_version()

pydra/engine/core.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939

4040
class TaskBase:
4141
_api_version: str = "0.0.1" # Should generally not be touched by subclasses
42+
_etelemetry_version_data = None # class variable to store etelemetry information
4243
_version: str # Version of tool being wrapped
4344
_task_version: ty.Optional[
4445
str
@@ -77,6 +78,11 @@ def __init__(
7778
inputs : dictionary (input name, input value or list of values)
7879
States this node's input names
7980
"""
81+
from .. import check_latest_version
82+
83+
if TaskBase._etelemetry_version_data is None:
84+
TaskBase._etelemetry_version_data = check_latest_version()
85+
8086
self.name = name
8187
if not self.input_spec:
8288
raise Exception("No input_spec in class: %s" % self.__class__.__name__)

setup.cfg

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[metadata]
22
url = https://github.com/nipype/pydra
3-
author = nipype developers
3+
author = nipype developers
44
author_email = [email protected]
55
maintainer = nipype developers
66
maintainer_email = [email protected]
@@ -25,6 +25,8 @@ python_requires = >= 3.7
2525
install_requires =
2626
cloudpickle >= 0.8.0
2727
filelock >= 3.0.0
28+
etelemetry
29+
2830
test_requires =
2931
pytest >= 4.4.0
3032
pytest-cov
@@ -60,7 +62,7 @@ test =
6062
jupyter_contrib_nbextensions
6163
tests =
6264
%(test)s
63-
dev =
65+
dev =
6466
%(test)s
6567
black
6668
pre-commit

0 commit comments

Comments
 (0)