junifer 0.0.6.dev324__py3-none-any.whl → 0.0.6.dev330__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- junifer/_version.py +2 -2
- junifer/api/queue_context/gnu_parallel_local_adapter.py +17 -2
- junifer/api/queue_context/htcondor_adapter.py +18 -2
- junifer/cli/cli.py +83 -7
- junifer/utils/logging.py +112 -3
- {junifer-0.0.6.dev324.dist-info → junifer-0.0.6.dev330.dist-info}/METADATA +1 -1
- {junifer-0.0.6.dev324.dist-info → junifer-0.0.6.dev330.dist-info}/RECORD +12 -12
- {junifer-0.0.6.dev324.dist-info → junifer-0.0.6.dev330.dist-info}/AUTHORS.rst +0 -0
- {junifer-0.0.6.dev324.dist-info → junifer-0.0.6.dev330.dist-info}/LICENSE.md +0 -0
- {junifer-0.0.6.dev324.dist-info → junifer-0.0.6.dev330.dist-info}/WHEEL +0 -0
- {junifer-0.0.6.dev324.dist-info → junifer-0.0.6.dev330.dist-info}/entry_points.txt +0 -0
- {junifer-0.0.6.dev324.dist-info → junifer-0.0.6.dev330.dist-info}/top_level.txt +0 -0
junifer/_version.py
CHANGED
@@ -12,5 +12,5 @@ __version__: str
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
13
13
|
version_tuple: VERSION_TUPLE
|
14
14
|
|
15
|
-
__version__ = version = '0.0.6.
|
16
|
-
__version_tuple__ = version_tuple = (0, 0, 6, '
|
15
|
+
__version__ = version = '0.0.6.dev330'
|
16
|
+
__version_tuple__ = version_tuple = (0, 0, 6, 'dev330')
|
@@ -37,6 +37,9 @@ class GnuParallelLocalAdapter(QueueContextAdapter):
|
|
37
37
|
virtual environment of any kind (default None).
|
38
38
|
verbose : str, optional
|
39
39
|
The level of verbosity (default "info").
|
40
|
+
verbose_datalad : str or None, optional
|
41
|
+
The level of verbosity for datalad. If None, will be the same
|
42
|
+
as ``verbose`` (default None).
|
40
43
|
submit : bool, optional
|
41
44
|
Whether to submit the jobs (default False).
|
42
45
|
|
@@ -65,6 +68,7 @@ class GnuParallelLocalAdapter(QueueContextAdapter):
|
|
65
68
|
pre_collect: Optional[str] = None,
|
66
69
|
env: Optional[dict[str, str]] = None,
|
67
70
|
verbose: str = "info",
|
71
|
+
verbose_datalad: Optional[str] = None,
|
68
72
|
submit: bool = False,
|
69
73
|
) -> None:
|
70
74
|
"""Initialize the class."""
|
@@ -76,6 +80,7 @@ class GnuParallelLocalAdapter(QueueContextAdapter):
|
|
76
80
|
self._pre_collect = pre_collect
|
77
81
|
self._check_env(env)
|
78
82
|
self._verbose = verbose
|
83
|
+
self._verbose_datalad = verbose_datalad
|
79
84
|
self._submit = submit
|
80
85
|
|
81
86
|
self._log_dir = self._job_dir / "logs"
|
@@ -155,6 +160,11 @@ class GnuParallelLocalAdapter(QueueContextAdapter):
|
|
155
160
|
|
156
161
|
def run(self) -> str:
|
157
162
|
"""Return run commands."""
|
163
|
+
verbose_args = f"--verbose {self._verbose}"
|
164
|
+
if self._verbose_datalad:
|
165
|
+
verbose_args = (
|
166
|
+
f"{verbose_args} --verbose-datalad {self._verbose_datalad}"
|
167
|
+
)
|
158
168
|
return (
|
159
169
|
f"#!/usr/bin/env {self._shell}\n\n"
|
160
170
|
"# This script is auto-generated by junifer.\n\n"
|
@@ -169,7 +179,7 @@ class GnuParallelLocalAdapter(QueueContextAdapter):
|
|
169
179
|
f"{self._job_dir.resolve()!s}/{self._executable} "
|
170
180
|
f"{self._arguments} run "
|
171
181
|
f"{self._yaml_config_path.resolve()!s} "
|
172
|
-
f"
|
182
|
+
f"{verbose_args} "
|
173
183
|
f"--element"
|
174
184
|
)
|
175
185
|
|
@@ -184,6 +194,11 @@ class GnuParallelLocalAdapter(QueueContextAdapter):
|
|
184
194
|
|
185
195
|
def collect(self) -> str:
|
186
196
|
"""Return collect commands."""
|
197
|
+
verbose_args = f"--verbose {self._verbose}"
|
198
|
+
if self._verbose_datalad:
|
199
|
+
verbose_args = (
|
200
|
+
f"{verbose_args} --verbose-datalad {self._verbose_datalad}"
|
201
|
+
)
|
187
202
|
return (
|
188
203
|
f"#!/usr/bin/env {self._shell}\n\n"
|
189
204
|
"# This script is auto-generated by junifer.\n\n"
|
@@ -193,7 +208,7 @@ class GnuParallelLocalAdapter(QueueContextAdapter):
|
|
193
208
|
f"{self._job_dir.resolve()!s}/{self._executable} "
|
194
209
|
f"{self._arguments} collect "
|
195
210
|
f"{self._yaml_config_path.resolve()!s} "
|
196
|
-
f"
|
211
|
+
f"{verbose_args}"
|
197
212
|
)
|
198
213
|
|
199
214
|
def prepare(self) -> None:
|
@@ -37,6 +37,9 @@ class HTCondorAdapter(QueueContextAdapter):
|
|
37
37
|
virtual environment of any kind (default None).
|
38
38
|
verbose : str, optional
|
39
39
|
The level of verbosity (default "info").
|
40
|
+
verbose_datalad : str or None, optional
|
41
|
+
The level of verbosity for datalad. If None, will be the same
|
42
|
+
as ``verbose`` (default None).
|
40
43
|
cpus : int, optional
|
41
44
|
The number of CPU cores to use (default 1).
|
42
45
|
mem : str, optional
|
@@ -83,6 +86,7 @@ class HTCondorAdapter(QueueContextAdapter):
|
|
83
86
|
pre_collect: Optional[str] = None,
|
84
87
|
env: Optional[dict[str, str]] = None,
|
85
88
|
verbose: str = "info",
|
89
|
+
verbose_datalad: Optional[str] = None,
|
86
90
|
cpus: int = 1,
|
87
91
|
mem: str = "8G",
|
88
92
|
disk: str = "1G",
|
@@ -99,6 +103,7 @@ class HTCondorAdapter(QueueContextAdapter):
|
|
99
103
|
self._pre_collect = pre_collect
|
100
104
|
self._check_env(env)
|
101
105
|
self._verbose = verbose
|
106
|
+
self._verbose_datalad = verbose_datalad
|
102
107
|
self._cpus = cpus
|
103
108
|
self._mem = mem
|
104
109
|
self._disk = disk
|
@@ -201,10 +206,15 @@ class HTCondorAdapter(QueueContextAdapter):
|
|
201
206
|
|
202
207
|
def run(self) -> str:
|
203
208
|
"""Return run commands."""
|
209
|
+
verbose_args = f"--verbose {self._verbose} "
|
210
|
+
if self._verbose_datalad is not None:
|
211
|
+
verbose_args = (
|
212
|
+
f"{verbose_args} --verbose-datalad {self._verbose_datalad} "
|
213
|
+
)
|
204
214
|
junifer_run_args = (
|
205
215
|
"run "
|
206
216
|
f"{self._yaml_config_path.resolve()!s} "
|
207
|
-
f"
|
217
|
+
f"{verbose_args}"
|
208
218
|
"--element $(element)"
|
209
219
|
)
|
210
220
|
log_dir_prefix = (
|
@@ -246,10 +256,16 @@ class HTCondorAdapter(QueueContextAdapter):
|
|
246
256
|
|
247
257
|
def collect(self) -> str:
|
248
258
|
"""Return collect commands."""
|
259
|
+
verbose_args = f"--verbose {self._verbose} "
|
260
|
+
if self._verbose_datalad is not None:
|
261
|
+
verbose_args = (
|
262
|
+
f"{verbose_args} --verbose-datalad {self._verbose_datalad} "
|
263
|
+
)
|
264
|
+
|
249
265
|
junifer_collect_args = (
|
250
266
|
"collect "
|
251
267
|
f"{self._yaml_config_path.resolve()!s} "
|
252
|
-
f"
|
268
|
+
f"{verbose_args}"
|
253
269
|
)
|
254
270
|
log_dir_prefix = f"{self._log_dir.resolve()!s}/junifer_collect"
|
255
271
|
fixed = (
|
junifer/cli/cli.py
CHANGED
@@ -45,6 +45,32 @@ __all__ = [
|
|
45
45
|
]
|
46
46
|
|
47
47
|
|
48
|
+
def _validate_optional_verbose(
|
49
|
+
ctx: click.Context, param: str, value: Optional[str]
|
50
|
+
):
|
51
|
+
"""Validate optional verbose option.
|
52
|
+
|
53
|
+
Parameters
|
54
|
+
----------
|
55
|
+
ctx : click.Context
|
56
|
+
The context of the command.
|
57
|
+
param : str
|
58
|
+
The parameter to validate.
|
59
|
+
value : str
|
60
|
+
The value to validate.
|
61
|
+
|
62
|
+
Returns
|
63
|
+
-------
|
64
|
+
str or int or None
|
65
|
+
The validated value.
|
66
|
+
|
67
|
+
"""
|
68
|
+
if value is None:
|
69
|
+
return value
|
70
|
+
else:
|
71
|
+
return _validate_verbose(ctx, param, value)
|
72
|
+
|
73
|
+
|
48
74
|
def _validate_verbose(
|
49
75
|
ctx: click.Context, param: str, value: str
|
50
76
|
) -> Union[str, int]:
|
@@ -105,8 +131,17 @@ def cli() -> None: # pragma: no cover
|
|
105
131
|
callback=_validate_verbose,
|
106
132
|
default="info",
|
107
133
|
)
|
134
|
+
@click.option(
|
135
|
+
"--verbose-datalad",
|
136
|
+
type=click.UNPROCESSED,
|
137
|
+
callback=_validate_optional_verbose,
|
138
|
+
default=None,
|
139
|
+
)
|
108
140
|
def run(
|
109
|
-
filepath: click.Path,
|
141
|
+
filepath: click.Path,
|
142
|
+
element: tuple[str],
|
143
|
+
verbose: Union[str, int],
|
144
|
+
verbose_datalad: Optional[Union[str, int]],
|
110
145
|
) -> None:
|
111
146
|
"""Run feature extraction.
|
112
147
|
|
@@ -120,10 +155,12 @@ def run(
|
|
120
155
|
The element(s) to operate on.
|
121
156
|
verbose : click.Choice
|
122
157
|
The verbosity level: warning, info or debug (default "info").
|
158
|
+
verbose_datalad : click.Choice or None
|
159
|
+
The verbosity level for datalad: warning, info or debug (default None).
|
123
160
|
|
124
161
|
"""
|
125
162
|
# Setup logging
|
126
|
-
configure_logging(level=verbose)
|
163
|
+
configure_logging(level=verbose, level_datalad=verbose_datalad)
|
127
164
|
# TODO(synchon): add validation
|
128
165
|
# Parse YAML
|
129
166
|
config = parse_yaml(filepath)
|
@@ -167,7 +204,17 @@ def run(
|
|
167
204
|
callback=_validate_verbose,
|
168
205
|
default="info",
|
169
206
|
)
|
170
|
-
|
207
|
+
@click.option(
|
208
|
+
"--verbose-datalad",
|
209
|
+
type=click.UNPROCESSED,
|
210
|
+
callback=_validate_optional_verbose,
|
211
|
+
default=None,
|
212
|
+
)
|
213
|
+
def collect(
|
214
|
+
filepath: click.Path,
|
215
|
+
verbose: Union[str, int],
|
216
|
+
verbose_datalad: Union[str, int, None],
|
217
|
+
) -> None:
|
171
218
|
"""Collect extracted features.
|
172
219
|
|
173
220
|
\f
|
@@ -178,10 +225,12 @@ def collect(filepath: click.Path, verbose: Union[str, int]) -> None:
|
|
178
225
|
The filepath to the configuration file.
|
179
226
|
verbose : click.Choice
|
180
227
|
The verbosity level: warning, info or debug (default "info").
|
228
|
+
verbose_datalad : click.Choice or None
|
229
|
+
The verbosity level for datalad: warning, info or debug (default None).
|
181
230
|
|
182
231
|
"""
|
183
232
|
# Setup logging
|
184
|
-
configure_logging(level=verbose)
|
233
|
+
configure_logging(level=verbose, level_datalad=verbose_datalad)
|
185
234
|
# TODO: add validation
|
186
235
|
# Parse YAML
|
187
236
|
config = parse_yaml(filepath)
|
@@ -208,12 +257,19 @@ def collect(filepath: click.Path, verbose: Union[str, int]) -> None:
|
|
208
257
|
callback=_validate_verbose,
|
209
258
|
default="info",
|
210
259
|
)
|
260
|
+
@click.option(
|
261
|
+
"--verbose-datalad",
|
262
|
+
type=click.UNPROCESSED,
|
263
|
+
callback=_validate_optional_verbose,
|
264
|
+
default=None,
|
265
|
+
)
|
211
266
|
def queue(
|
212
267
|
filepath: click.Path,
|
213
268
|
element: tuple[str],
|
214
269
|
overwrite: bool,
|
215
270
|
submit: bool,
|
216
271
|
verbose: Union[str, int],
|
272
|
+
verbose_datalad: Union[str, int, None],
|
217
273
|
) -> None:
|
218
274
|
"""Queue feature extraction.
|
219
275
|
|
@@ -231,6 +287,8 @@ def queue(
|
|
231
287
|
Whether to submit the job.
|
232
288
|
verbose : click.Choice
|
233
289
|
The verbosity level: warning, info or debug (default "info").
|
290
|
+
verbose_datalad : click.Choice or None
|
291
|
+
The verbosity level for datalad: warning, info or debug (default None).
|
234
292
|
|
235
293
|
Raises
|
236
294
|
------
|
@@ -239,7 +297,7 @@ def queue(
|
|
239
297
|
|
240
298
|
"""
|
241
299
|
# Setup logging
|
242
|
-
configure_logging(level=verbose)
|
300
|
+
configure_logging(level=verbose, level_datalad=verbose_datalad)
|
243
301
|
# TODO: add validation
|
244
302
|
# Parse YAML
|
245
303
|
config = parse_yaml(filepath) # type: ignore
|
@@ -365,9 +423,16 @@ def selftest(subpkg: str) -> None:
|
|
365
423
|
callback=_validate_verbose,
|
366
424
|
default="info",
|
367
425
|
)
|
426
|
+
@click.option(
|
427
|
+
"--verbose-datalad",
|
428
|
+
type=click.UNPROCESSED,
|
429
|
+
callback=_validate_optional_verbose,
|
430
|
+
default=None,
|
431
|
+
)
|
368
432
|
def reset(
|
369
433
|
filepath: click.Path,
|
370
434
|
verbose: Union[str, int],
|
435
|
+
verbose_datalad: Union[str, int, None],
|
371
436
|
) -> None:
|
372
437
|
"""Reset generated assets.
|
373
438
|
|
@@ -379,10 +444,12 @@ def reset(
|
|
379
444
|
The filepath to the configuration file.
|
380
445
|
verbose : click.Choice
|
381
446
|
The verbosity level: warning, info or debug (default "info").
|
447
|
+
verbose_datalad : click.Choice or None
|
448
|
+
The verbosity level for datalad: warning, info or debug (default None).
|
382
449
|
|
383
450
|
"""
|
384
451
|
# Setup logging
|
385
|
-
configure_logging(level=verbose)
|
452
|
+
configure_logging(level=verbose, level_datalad=verbose_datalad)
|
386
453
|
# Parse YAML
|
387
454
|
config = parse_yaml(filepath)
|
388
455
|
# Perform operation
|
@@ -409,11 +476,18 @@ def reset(
|
|
409
476
|
callback=_validate_verbose,
|
410
477
|
default="info",
|
411
478
|
)
|
479
|
+
@click.option(
|
480
|
+
"--verbose-datalad",
|
481
|
+
type=click.UNPROCESSED,
|
482
|
+
callback=_validate_optional_verbose,
|
483
|
+
default=None,
|
484
|
+
)
|
412
485
|
def list_elements(
|
413
486
|
filepath: click.Path,
|
414
487
|
element: tuple[str],
|
415
488
|
output_file: Optional[click.Path],
|
416
489
|
verbose: Union[str, int],
|
490
|
+
verbose_datalad: Union[str, int, None],
|
417
491
|
) -> None:
|
418
492
|
"""List elements of a dataset.
|
419
493
|
|
@@ -430,10 +504,12 @@ def list_elements(
|
|
430
504
|
stdout is not performed.
|
431
505
|
verbose : click.Choice
|
432
506
|
The verbosity level: warning, info or debug (default "info").
|
507
|
+
verbose_datalad : click.Choice or None
|
508
|
+
The verbosity level for datalad: warning, info or debug (default None
|
433
509
|
|
434
510
|
"""
|
435
511
|
# Setup logging
|
436
|
-
configure_logging(level=verbose)
|
512
|
+
configure_logging(level=verbose, level_datalad=verbose_datalad)
|
437
513
|
# Parse YAML
|
438
514
|
config = parse_yaml(filepath)
|
439
515
|
# Fetch datagrabber
|
junifer/utils/logging.py
CHANGED
@@ -4,6 +4,7 @@
|
|
4
4
|
# Synchon Mandal <s.mandal@fz-juelich.de>
|
5
5
|
# License: AGPL
|
6
6
|
|
7
|
+
import os
|
7
8
|
import sys
|
8
9
|
|
9
10
|
|
@@ -16,7 +17,7 @@ import logging
|
|
16
17
|
import warnings
|
17
18
|
from pathlib import Path
|
18
19
|
from subprocess import PIPE, Popen, TimeoutExpired
|
19
|
-
from typing import NoReturn, Optional, Union
|
20
|
+
from typing import ClassVar, NoReturn, Optional, Union
|
20
21
|
from warnings import warn
|
21
22
|
|
22
23
|
import datalad
|
@@ -80,6 +81,59 @@ class WrapStdOut(logging.StreamHandler):
|
|
80
81
|
raise AttributeError(f"'file' object has not attribute '{name}'")
|
81
82
|
|
82
83
|
|
84
|
+
class ColorFormatter(logging.Formatter):
|
85
|
+
"""Color formatter for logging messages.
|
86
|
+
|
87
|
+
Parameters
|
88
|
+
----------
|
89
|
+
fmt : str
|
90
|
+
The format string for the logging message.
|
91
|
+
datefmt : str, optional
|
92
|
+
The format string for the date.
|
93
|
+
|
94
|
+
"""
|
95
|
+
|
96
|
+
BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
|
97
|
+
|
98
|
+
COLORS: ClassVar[dict[str, int]] = {
|
99
|
+
"WARNING": YELLOW,
|
100
|
+
"INFO": GREEN,
|
101
|
+
"DEBUG": BLUE,
|
102
|
+
"CRITICAL": MAGENTA,
|
103
|
+
"ERROR": RED,
|
104
|
+
}
|
105
|
+
|
106
|
+
RESET_SEQ: str = "\033[0m"
|
107
|
+
COLOR_SEQ: str = "\033[1;%dm"
|
108
|
+
BOLD_SEQ: str = "\033[1m"
|
109
|
+
|
110
|
+
def __init__(self, fmt: str, datefmt: Optional[str] = None) -> None:
|
111
|
+
"""Initialize the ColorFormatter."""
|
112
|
+
logging.Formatter.__init__(self, fmt, datefmt)
|
113
|
+
|
114
|
+
def format(self, record: logging.LogRecord) -> str:
|
115
|
+
"""Format the log record.
|
116
|
+
|
117
|
+
Parameters
|
118
|
+
----------
|
119
|
+
record : logging.LogRecord
|
120
|
+
The log record to format.
|
121
|
+
|
122
|
+
Returns
|
123
|
+
-------
|
124
|
+
str
|
125
|
+
The formatted log record.
|
126
|
+
|
127
|
+
"""
|
128
|
+
levelname = record.levelname
|
129
|
+
if levelname in self.COLORS:
|
130
|
+
levelname_color = (
|
131
|
+
self.COLOR_SEQ % (30 + self.COLORS[levelname]) + levelname
|
132
|
+
)
|
133
|
+
record.levelname = levelname_color + self.RESET_SEQ
|
134
|
+
return logging.Formatter.format(self, record)
|
135
|
+
|
136
|
+
|
83
137
|
def _get_git_head(path: Path) -> str:
|
84
138
|
"""Aux function to read HEAD from git.
|
85
139
|
|
@@ -237,11 +291,51 @@ def log_versions(tbox_path: Optional[Path] = None) -> None:
|
|
237
291
|
pass
|
238
292
|
|
239
293
|
|
294
|
+
def _can_use_color(handler: logging.Handler) -> bool:
|
295
|
+
"""Check if color can be used in the logging output.
|
296
|
+
|
297
|
+
Parameters
|
298
|
+
----------
|
299
|
+
handler : logging.Handler
|
300
|
+
The logging handler to check for color support.
|
301
|
+
|
302
|
+
Returns
|
303
|
+
-------
|
304
|
+
bool
|
305
|
+
Whether color can be used in the logging output.
|
306
|
+
|
307
|
+
"""
|
308
|
+
if isinstance(handler, logging.FileHandler):
|
309
|
+
# Do not use colors in file handlers
|
310
|
+
return False
|
311
|
+
else:
|
312
|
+
stream = handler.stream
|
313
|
+
if hasattr(stream, "isatty") and stream.isatty():
|
314
|
+
valid_terms = [
|
315
|
+
"xterm-256color",
|
316
|
+
"xterm-kitty",
|
317
|
+
"xterm-color",
|
318
|
+
]
|
319
|
+
this_term = os.getenv("TERM", None)
|
320
|
+
if this_term is not None:
|
321
|
+
if this_term in valid_terms:
|
322
|
+
return True
|
323
|
+
if this_term.endswith("256color") or this_term.endswith("256"):
|
324
|
+
return True
|
325
|
+
if this_term == "dumb" and os.getenv("CI", False):
|
326
|
+
return True
|
327
|
+
if os.getenv("COLORTERM", False):
|
328
|
+
return True
|
329
|
+
# No TTY, no color
|
330
|
+
return False
|
331
|
+
|
332
|
+
|
240
333
|
def configure_logging(
|
241
334
|
level: Union[int, str] = "WARNING",
|
242
335
|
fname: Optional[Union[str, Path]] = None,
|
243
336
|
overwrite: Optional[bool] = None,
|
244
337
|
output_format=None,
|
338
|
+
level_datalad: Union[int, str, None] = None,
|
245
339
|
) -> None:
|
246
340
|
"""Configure the logging functionality.
|
247
341
|
|
@@ -264,6 +358,10 @@ def configure_logging(
|
|
264
358
|
e.g., ``"%(asctime)s - %(levelname)s - %(message)s"``.
|
265
359
|
If None, default string format is used
|
266
360
|
(default ``"%(asctime)s - %(name)s - %(levelname)s - %(message)s"``).
|
361
|
+
level_datalad : int or {"DEBUG", "INFO", "WARNING", "ERROR"}, optional
|
362
|
+
The level of the messages to print for datalad. If string, it will be
|
363
|
+
interpreted as elements of logging. If None, it will be set as the
|
364
|
+
``level`` parameter (default None).
|
267
365
|
|
268
366
|
"""
|
269
367
|
_close_handlers(logger) # close relevant logger handlers
|
@@ -297,11 +395,22 @@ def configure_logging(
|
|
297
395
|
# "%(asctime)s [%(levelname)s] %(message)s "
|
298
396
|
# "(%(filename)s:%(lineno)s)"
|
299
397
|
# )
|
300
|
-
|
398
|
+
if _can_use_color(lh):
|
399
|
+
formatter = ColorFormatter(fmt=output_format)
|
400
|
+
else:
|
401
|
+
formatter = logging.Formatter(fmt=output_format)
|
301
402
|
|
302
403
|
lh.setFormatter(formatter) # set formatter
|
303
404
|
logger.setLevel(level) # set level
|
304
|
-
|
405
|
+
|
406
|
+
# Set datalad logging level accordingly
|
407
|
+
if level_datalad is not None:
|
408
|
+
if isinstance(level_datalad, str):
|
409
|
+
level_datalad = _logging_types[level_datalad]
|
410
|
+
else:
|
411
|
+
level_datalad = level
|
412
|
+
datalad.log.lgr.setLevel(level_datalad) # set level for datalad
|
413
|
+
|
305
414
|
logger.addHandler(lh) # set handler
|
306
415
|
log_versions() # log versions of installed packages
|
307
416
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: junifer
|
3
|
-
Version: 0.0.6.
|
3
|
+
Version: 0.0.6.dev330
|
4
4
|
Summary: JUelich NeuroImaging FEature extractoR
|
5
5
|
Author-email: Fede Raimondo <f.raimondo@fz-juelich.de>, Synchon Mandal <s.mandal@fz-juelich.de>
|
6
6
|
Maintainer-email: Fede Raimondo <f.raimondo@fz-juelich.de>, Synchon Mandal <s.mandal@fz-juelich.de>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
junifer/__init__.py,sha256=2McgH1yNue6Z1V26-uN_mfMjbTcx4CLhym-DMBl5xA4,266
|
2
2
|
junifer/__init__.pyi,sha256=SsTvgq2Dod6UqJN96GH1lCphH6hJQQurEJHGNhHjGUI,508
|
3
|
-
junifer/_version.py,sha256=
|
3
|
+
junifer/_version.py,sha256=ib7p2sRvl9n6dHPTqNlqVwUPPOKf5EKIksHMk7EQqno,428
|
4
4
|
junifer/conftest.py,sha256=PWYkkRDU8ly2lYwv7VBKMHje4et6HX7Yey3Md_I2KbA,613
|
5
5
|
junifer/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
6
6
|
junifer/stats.py,sha256=e9aaagMGtgpRfW3Wdpz9ocpnYld1IWylCDcjFUgX9Mk,6225
|
@@ -11,8 +11,8 @@ junifer/api/functions.py,sha256=Tq1LKoxJuHHylcCFJ6SrPoPriIsnTLdbQ5K6w8gdTE8,1369
|
|
11
11
|
junifer/api/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
12
12
|
junifer/api/queue_context/__init__.py,sha256=glr8x4aMm4EvVrHywDIlugdNlwD1RzqV2FTDNPqYQZ4,204
|
13
13
|
junifer/api/queue_context/__init__.pyi,sha256=LoDQFGZ9wCDmgx5a1_nhKo4zOSvqViXZ8V882DksF7U,246
|
14
|
-
junifer/api/queue_context/gnu_parallel_local_adapter.py,sha256=
|
15
|
-
junifer/api/queue_context/htcondor_adapter.py,sha256=
|
14
|
+
junifer/api/queue_context/gnu_parallel_local_adapter.py,sha256=hFeLoqqHiB7JXE5cwkVDRX00tjKyK60xAxvE1uO7OOk,10178
|
15
|
+
junifer/api/queue_context/htcondor_adapter.py,sha256=9TXtPhBsDdGFgkIhtsySFCi4QUjerUXMq5kMHpxNg90,13878
|
16
16
|
junifer/api/queue_context/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
17
17
|
junifer/api/queue_context/queue_context_adapter.py,sha256=a6UE8xavDfuaZbkWYsayVs6l-rwIrbpFSpqSyHsEeYY,1577
|
18
18
|
junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py,sha256=Nv_0axIW4SOE7-TyQXd_nM_0A_kDiFAgrkQcmQafW_s,6585
|
@@ -43,7 +43,7 @@ junifer/api/res/fsl/std2imgcoord,sha256=-X5wRH6XMl0yqnTACJX6MFhO8DFOEWg42MHRxGvi
|
|
43
43
|
junifer/api/tests/test_functions.py,sha256=PPkjs_FqjZZgsEa3a81ulzPxLskVh5HmnaG8TaNCwR0,18084
|
44
44
|
junifer/cli/__init__.py,sha256=DS3kZKHeVDxt6d1MLBerZ2fcAwrEBHee5JOBhOLajUI,197
|
45
45
|
junifer/cli/__init__.pyi,sha256=PiV4znUnzSeuSSJGz-RT8N21PiMqoSMwYcypi7nt2Js,40
|
46
|
-
junifer/cli/cli.py,sha256=
|
46
|
+
junifer/cli/cli.py,sha256=LvtkFMvnxuoviAhs0bki6P4GMda6ZvNsJi4_QF00va8,15691
|
47
47
|
junifer/cli/parser.py,sha256=ouVnk4NrOmVMNnQDMsqAjt2BaOT05bNJq0LVRsIakXI,8358
|
48
48
|
junifer/cli/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
49
49
|
junifer/cli/utils.py,sha256=AbPQC0Kl-tHMNKiPxp_01gLAGD3IGoLbsq3rXyPMM-c,3116
|
@@ -334,17 +334,17 @@ junifer/utils/_config.py,sha256=cfxyv1bfklID2atQseu6y3J7mZrCXPwnGEfBSImG9CM,3054
|
|
334
334
|
junifer/utils/_yaml.py,sha256=jpTroTI2rajECj0RXGCXaOwLpad858WzI7Jg-eXJ_jU,336
|
335
335
|
junifer/utils/fs.py,sha256=M3CKBLh4gPS6s9giyopgb1hHMXzLb6k3cung2wHVBjs,492
|
336
336
|
junifer/utils/helpers.py,sha256=QcfdHPhrYKTf6o5eSOIvDxqmIAxlp9SqmCEdR10jbIY,2033
|
337
|
-
junifer/utils/logging.py,sha256=
|
337
|
+
junifer/utils/logging.py,sha256=8rWEtZPohugiB7niF9yvybi79w3Sj5xcaImJhsuXxks,12998
|
338
338
|
junifer/utils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
339
339
|
junifer/utils/singleton.py,sha256=iATJMdzsSVE9akTI4DDycubhAl98t0EdO17gwgOjAYA,1189
|
340
340
|
junifer/utils/tests/test_config.py,sha256=7ltIXuwb_W4Mv_1dxQWyiyM10XgUAfsWKV6D_iE-XU0,1540
|
341
341
|
junifer/utils/tests/test_fs.py,sha256=WQS7cKlKEZ742CIuiOYYpueeAhY9PqlastfDVpVVtvE,923
|
342
342
|
junifer/utils/tests/test_helpers.py,sha256=k5qqfxK8dFyuewTJyR1Qn6-nFaYNuVr0ysc18bfPjyU,929
|
343
343
|
junifer/utils/tests/test_logging.py,sha256=duO4ou365hxwa_kwihFtKPLaL6LC5XHiyhOijrrngbA,8009
|
344
|
-
junifer-0.0.6.
|
345
|
-
junifer-0.0.6.
|
346
|
-
junifer-0.0.6.
|
347
|
-
junifer-0.0.6.
|
348
|
-
junifer-0.0.6.
|
349
|
-
junifer-0.0.6.
|
350
|
-
junifer-0.0.6.
|
344
|
+
junifer-0.0.6.dev330.dist-info/AUTHORS.rst,sha256=rmULKpchpSol4ExWFdm-qu4fkpSZPYqIESVJBZtGb6E,163
|
345
|
+
junifer-0.0.6.dev330.dist-info/LICENSE.md,sha256=MqCnOBu8uXsEOzRZWh9EBVfVz-kE9NkXcLCrtGXo2yU,34354
|
346
|
+
junifer-0.0.6.dev330.dist-info/METADATA,sha256=LkxGgT6R7p-H0fZTaFoWi71TBNqAnRpuXVa9w6DUhZ4,8429
|
347
|
+
junifer-0.0.6.dev330.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
348
|
+
junifer-0.0.6.dev330.dist-info/entry_points.txt,sha256=6O8ru0BP-SP7YMUZiizFNoaZ2HvJpadO2G7nKk4PwjI,48
|
349
|
+
junifer-0.0.6.dev330.dist-info/top_level.txt,sha256=4bAq1R2QFQ4b3hohjys2JBvxrl0GKk5LNFzYvz9VGcA,8
|
350
|
+
junifer-0.0.6.dev330.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|