looper 2.0.0__py3-none-any.whl → 2.0.0a2__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.
- looper/_version.py +1 -1
- looper/cli_pydantic.py +1 -1
- looper/command_models/arguments.py +0 -6
- looper/command_models/commands.py +1 -4
- looper/divvy.py +7 -17
- looper/exceptions.py +0 -8
- looper/looper.py +16 -50
- {looper-2.0.0.dist-info → looper-2.0.0a2.dist-info}/METADATA +4 -13
- {looper-2.0.0.dist-info → looper-2.0.0a2.dist-info}/RECORD +13 -13
- {looper-2.0.0.dist-info → looper-2.0.0a2.dist-info}/WHEEL +1 -1
- {looper-2.0.0.dist-info → looper-2.0.0a2.dist-info}/LICENSE.txt +0 -0
- {looper-2.0.0.dist-info → looper-2.0.0a2.dist-info}/entry_points.txt +0 -0
- {looper-2.0.0.dist-info → looper-2.0.0a2.dist-info}/top_level.txt +0 -0
looper/_version.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
__version__ = "2.0.
|
1
|
+
__version__ = "2.0.0a2"
|
2
2
|
# You must change the version in parser = pydantic_argparse.ArgumentParser in cli_pydantic.py!!!
|
looper/cli_pydantic.py
CHANGED
@@ -340,7 +340,7 @@ def main(test_args=None) -> dict:
|
|
340
340
|
prog="looper",
|
341
341
|
description="Looper: A job submitter for Portable Encapsulated Projects",
|
342
342
|
add_help=True,
|
343
|
-
version="2.0.
|
343
|
+
version="2.0.0a2",
|
344
344
|
)
|
345
345
|
|
346
346
|
parser = add_short_arguments(parser, ArgumentEnum)
|
@@ -184,12 +184,6 @@ class ArgumentEnum(enum.Enum):
|
|
184
184
|
default=(str, None),
|
185
185
|
description="Output directory",
|
186
186
|
)
|
187
|
-
REPORT_OUTPUT_DIR = Argument(
|
188
|
-
name="report_dir",
|
189
|
-
alias="-r",
|
190
|
-
default=(str, None),
|
191
|
-
description="Set location for looper report and looper table outputs",
|
192
|
-
)
|
193
187
|
|
194
188
|
GENERIC = Argument(
|
195
189
|
name="generic",
|
@@ -124,9 +124,7 @@ RunProjectParser = Command(
|
|
124
124
|
TableParser = Command(
|
125
125
|
"table",
|
126
126
|
MESSAGE_BY_SUBCOMMAND["table"],
|
127
|
-
[
|
128
|
-
ArgumentEnum.REPORT_OUTPUT_DIR.value,
|
129
|
-
],
|
127
|
+
[],
|
130
128
|
)
|
131
129
|
|
132
130
|
|
@@ -136,7 +134,6 @@ ReportParser = Command(
|
|
136
134
|
MESSAGE_BY_SUBCOMMAND["report"],
|
137
135
|
[
|
138
136
|
ArgumentEnum.PORTABLE.value,
|
139
|
-
ArgumentEnum.REPORT_OUTPUT_DIR.value,
|
140
137
|
],
|
141
138
|
)
|
142
139
|
|
looper/divvy.py
CHANGED
@@ -111,12 +111,9 @@ class ComputingConfiguration(YAMLConfigManager):
|
|
111
111
|
|
112
112
|
:return str: path to folder with default submission templates
|
113
113
|
"""
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
return os.path.join(
|
118
|
-
os.path.dirname(__file__), "default_config", "divvy_templates"
|
119
|
-
)
|
114
|
+
return os.path.join(
|
115
|
+
os.path.dirname(__file__), "default_config", "divvy_templates"
|
116
|
+
)
|
120
117
|
|
121
118
|
def activate_package(self, package_name):
|
122
119
|
"""
|
@@ -158,18 +155,11 @@ class ComputingConfiguration(YAMLConfigManager):
|
|
158
155
|
# but now, it makes more sense to do it here so we can piggyback on
|
159
156
|
# the default update() method and not even have to do that.
|
160
157
|
if not os.path.isabs(self.compute["submission_template"]):
|
161
|
-
|
162
158
|
try:
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
)
|
168
|
-
else:
|
169
|
-
self.compute["submission_template"] = os.path.join(
|
170
|
-
os.path.dirname(self.default_config_file),
|
171
|
-
self.compute["submission_template"],
|
172
|
-
)
|
159
|
+
self.compute["submission_template"] = os.path.join(
|
160
|
+
os.path.dirname(self.default_config_file),
|
161
|
+
self.compute["submission_template"],
|
162
|
+
)
|
173
163
|
except AttributeError as e:
|
174
164
|
# Environment and environment compute should at least have been
|
175
165
|
# set as null-valued attributes, so execution here is an error.
|
looper/exceptions.py
CHANGED
@@ -15,7 +15,6 @@ _all__ = [
|
|
15
15
|
"PipelineInterfaceConfigError",
|
16
16
|
"PipelineInterfaceRequirementsError",
|
17
17
|
"MisconfigurationException",
|
18
|
-
"LooperReportError",
|
19
18
|
]
|
20
19
|
|
21
20
|
|
@@ -110,10 +109,3 @@ class PipelineInterfaceRequirementsError(LooperError):
|
|
110
109
|
)
|
111
110
|
)
|
112
111
|
self.error_specs = typename_by_requirement
|
113
|
-
|
114
|
-
|
115
|
-
class LooperReportError(LooperError):
|
116
|
-
"""Looper reporting errors"""
|
117
|
-
|
118
|
-
def __init__(self, reason):
|
119
|
-
super(LooperReportError, self).__init__(reason)
|
looper/looper.py
CHANGED
@@ -46,7 +46,6 @@ from .utils import (
|
|
46
46
|
sample_folder,
|
47
47
|
)
|
48
48
|
from pipestat.reports import get_file_for_table
|
49
|
-
from pipestat.exceptions import PipestatSummarizeError
|
50
49
|
|
51
50
|
_PKGNAME = "looper"
|
52
51
|
_LOGGER = logging.getLogger(_PKGNAME)
|
@@ -95,19 +94,11 @@ class Checker(Executor):
|
|
95
94
|
|
96
95
|
for piface in self.prj.project_pipeline_interfaces:
|
97
96
|
if piface.psm.pipeline_type == PipelineLevel.PROJECT.value:
|
98
|
-
|
99
|
-
|
100
|
-
for pl_name, psm in psms.items():
|
101
|
-
all_project_level_records = psm.select_records()
|
102
|
-
for record in all_project_level_records["records"]:
|
103
|
-
s = piface.psm.get_status(
|
104
|
-
record_identifier=record["record_identifier"]
|
105
|
-
)
|
97
|
+
psms[piface.psm.pipeline_name] = piface.psm
|
98
|
+
s = piface.psm.get_status() or "unknown"
|
106
99
|
status.setdefault(piface.psm.pipeline_name, {})
|
107
|
-
status[piface.psm.pipeline_name][
|
108
|
-
_LOGGER.debug(
|
109
|
-
f"{self.prj.name} ({record['record_identifier']}): {s}"
|
110
|
-
)
|
100
|
+
status[piface.psm.pipeline_name][self.prj.name] = s
|
101
|
+
_LOGGER.debug(f"{self.prj.name} ({piface.psm.pipeline_name}): {s}")
|
111
102
|
|
112
103
|
else:
|
113
104
|
for sample in self.prj.samples:
|
@@ -568,26 +559,15 @@ class Reporter(Executor):
|
|
568
559
|
|
569
560
|
portable = args.portable
|
570
561
|
|
571
|
-
report_dir = getattr(args, "report_dir", None)
|
572
|
-
|
573
562
|
psms = {}
|
574
563
|
|
575
564
|
if project_level:
|
576
565
|
|
577
566
|
for piface in self.prj.project_pipeline_interfaces:
|
578
567
|
if piface.psm.pipeline_type == PipelineLevel.PROJECT.value:
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
try:
|
583
|
-
report_directory = psm.summarize(
|
584
|
-
looper_samples=self.prj.samples,
|
585
|
-
portable=portable,
|
586
|
-
output_dir=report_dir,
|
587
|
-
)
|
588
|
-
except PipestatSummarizeError as e:
|
589
|
-
raise LooperReportError(
|
590
|
-
f"Looper report error due to the following exception: {e}"
|
568
|
+
psms[piface.psm.pipeline_name] = piface.psm
|
569
|
+
report_directory = piface.psm.summarize(
|
570
|
+
looper_samples=self.prj.samples, portable=portable
|
591
571
|
)
|
592
572
|
print(f"Report directory: {report_directory}")
|
593
573
|
self.debug["report_directory"] = report_directory
|
@@ -595,21 +575,12 @@ class Reporter(Executor):
|
|
595
575
|
else:
|
596
576
|
for piface in self.prj.pipeline_interfaces:
|
597
577
|
if piface.psm.pipeline_type == PipelineLevel.SAMPLE.value:
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
try:
|
602
|
-
report_directory = psm.summarize(
|
603
|
-
looper_samples=self.prj.samples,
|
604
|
-
portable=portable,
|
605
|
-
output_dir=report_dir,
|
606
|
-
)
|
607
|
-
except PipestatSummarizeError as e:
|
608
|
-
raise LooperReportError(
|
609
|
-
f"Looper report error due to the following exception: {e}"
|
578
|
+
psms[piface.psm.pipeline_name] = piface.psm
|
579
|
+
report_directory = piface.psm.summarize(
|
580
|
+
looper_samples=self.prj.samples, portable=portable
|
610
581
|
)
|
611
|
-
|
612
|
-
|
582
|
+
print(f"Report directory: {report_directory}")
|
583
|
+
self.debug["report_directory"] = report_directory
|
613
584
|
return self.debug
|
614
585
|
|
615
586
|
|
@@ -647,23 +618,18 @@ class Tabulator(Executor):
|
|
647
618
|
def __call__(self, args):
|
648
619
|
# p = self.prj
|
649
620
|
project_level = getattr(args, "project", None)
|
650
|
-
report_dir = getattr(args, "report_dir", None)
|
651
621
|
results = []
|
652
622
|
psms = {}
|
653
623
|
if project_level:
|
654
624
|
for piface in self.prj.project_pipeline_interfaces:
|
655
625
|
if piface.psm.pipeline_type == PipelineLevel.PROJECT.value:
|
656
|
-
|
657
|
-
|
658
|
-
for pl_name, psm in psms.items():
|
659
|
-
results = psm.table(output_dir=report_dir)
|
626
|
+
psms[piface.psm.pipeline_name] = piface.psm
|
627
|
+
results = piface.psm.table()
|
660
628
|
else:
|
661
629
|
for piface in self.prj.pipeline_interfaces:
|
662
630
|
if piface.psm.pipeline_type == PipelineLevel.SAMPLE.value:
|
663
|
-
|
664
|
-
|
665
|
-
for pl_name, psm in psms.items():
|
666
|
-
results = psm.table(output_dir=report_dir)
|
631
|
+
psms[piface.psm.pipeline_name] = piface.psm
|
632
|
+
results = piface.psm.table()
|
667
633
|
# Results contains paths to stats and object summaries.
|
668
634
|
return results
|
669
635
|
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.1
|
2
2
|
Name: looper
|
3
|
-
Version: 2.0.
|
3
|
+
Version: 2.0.0a2
|
4
4
|
Summary: A pipeline submission engine that parses sample inputs and submits pipelines for each sample.
|
5
5
|
Home-page: https://github.com/pepkit/looper
|
6
6
|
Author: Nathan Sheffield, Vince Reuter, Michal Stolarczyk, Johanna Klughammer, Andre Rendeiro
|
@@ -16,12 +16,12 @@ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
16
16
|
Description-Content-Type: text/markdown
|
17
17
|
License-File: LICENSE.txt
|
18
18
|
Requires-Dist: colorama>=0.3.9
|
19
|
-
Requires-Dist: eido>=0.2.
|
19
|
+
Requires-Dist: eido>=0.2.3
|
20
20
|
Requires-Dist: jinja2
|
21
21
|
Requires-Dist: logmuse>=0.2.0
|
22
22
|
Requires-Dist: pandas>=2.0.2
|
23
23
|
Requires-Dist: pephubclient>=0.4.0
|
24
|
-
Requires-Dist: pipestat>=0.
|
24
|
+
Requires-Dist: pipestat>=0.10.2
|
25
25
|
Requires-Dist: peppy>=0.40.6
|
26
26
|
Requires-Dist: pyyaml>=3.12
|
27
27
|
Requires-Dist: rich>=9.10.0
|
@@ -29,15 +29,6 @@ Requires-Dist: ubiquerg>=0.8.1a1
|
|
29
29
|
Requires-Dist: yacman==0.9.3
|
30
30
|
Requires-Dist: pydantic-argparse>=0.9.0
|
31
31
|
Requires-Dist: psutil
|
32
|
-
Dynamic: author
|
33
|
-
Dynamic: classifier
|
34
|
-
Dynamic: description
|
35
|
-
Dynamic: description-content-type
|
36
|
-
Dynamic: home-page
|
37
|
-
Dynamic: keywords
|
38
|
-
Dynamic: license
|
39
|
-
Dynamic: requires-dist
|
40
|
-
Dynamic: summary
|
41
32
|
|
42
33
|
# <img src="docs/img/looper_logo.svg" alt="looper logo" height="70">
|
43
34
|
|
@@ -1,13 +1,13 @@
|
|
1
1
|
looper/__init__.py,sha256=f_z9YY4ibOk7eyWoaViH_VaCXMlPQeiftbnibSFj-3E,1333
|
2
2
|
looper/__main__.py,sha256=OOCmI-dPUvInnJHkHNMf54cblNJ3Yl9ELOwZcfOXmD8,240
|
3
|
-
looper/_version.py,sha256=
|
3
|
+
looper/_version.py,sha256=mX3fglKqsJRTjP938X3Xm2eAJT9fve28fdydFnJFimc,121
|
4
4
|
looper/cli_divvy.py,sha256=_VGbOFLkXtKdkZA6omlzgXbXkuUM5aLQ50aTTtbTrVI,5975
|
5
|
-
looper/cli_pydantic.py,sha256=
|
5
|
+
looper/cli_pydantic.py,sha256=uysPJfTrfG7-k7u6oDpaLG-3hD6U8YVrDiOW54ySniI,14425
|
6
6
|
looper/conductor.py,sha256=lzY6Gzsb8oX-KLzLkRa0XrYWSxLeiy6jRmmD15WNAkw,35116
|
7
7
|
looper/const.py,sha256=OscEELQsyLKlSrmwuXfyLRwpAUJUEpGD2UxBeLJDXgw,8703
|
8
|
-
looper/divvy.py,sha256=
|
9
|
-
looper/exceptions.py,sha256=
|
10
|
-
looper/looper.py,sha256=
|
8
|
+
looper/divvy.py,sha256=eiYhcp8ZgQ0uzlk0c5yJp0QaiVrQYfSeEtmQBJiScOM,15417
|
9
|
+
looper/exceptions.py,sha256=AxYCTLxKb_fJFgU9VBnPYaRX2lGhmMEYaCbJOi-27Wk,3384
|
10
|
+
looper/looper.py,sha256=ZWTulMz6NobnYFUjev513TJwXqknrb4_gZrV-a_fT9g,30041
|
11
11
|
looper/parser_types.py,sha256=d3FHt54f9jo9VZMr5SQkbghcAdABqiYZW2JBGO5EBnw,2327
|
12
12
|
looper/pipeline_interface.py,sha256=mN4-XICyZzuVLTOq3b0ijppYe6ib_Ljlyf6KxZCJh2A,14537
|
13
13
|
looper/plugins.py,sha256=MaMdPmK9U_4FkNJE5kccohBbY1i2qj1NTEucubFOJek,5747
|
@@ -17,8 +17,8 @@ looper/utils.py,sha256=-4QlScIB7eewIbmEJdAv2d0ZE0qr_q9acm2XUOiMEek,39769
|
|
17
17
|
looper/command_models/DEVELOPER.md,sha256=eRxnrO-vqNJjExzamXKEq5wr_-Zw6PQEwkS9RPinYrk,2775
|
18
18
|
looper/command_models/README.md,sha256=3RGegeZlTZYnhcHXRu6bdI_81WZom2q7QYMV-KGYY7U,588
|
19
19
|
looper/command_models/__init__.py,sha256=6QWC2TewowEL7dATli5YpMmFWuXaLEPktofJCXkYUBI,187
|
20
|
-
looper/command_models/arguments.py,sha256=
|
21
|
-
looper/command_models/commands.py,sha256=
|
20
|
+
looper/command_models/arguments.py,sha256=wGGc5tleHC31F0etbiYaumHwP5xlJsSXapJ10lhltHg,8830
|
21
|
+
looper/command_models/commands.py,sha256=RMTiHg0txBGDb_fHfhTWujP3VnnB6ROCHqByiwgMS4c,9716
|
22
22
|
looper/default_config/divvy_config.yaml,sha256=wK5kLDGBV2wwoyqg2rl3X8SXjds4x0mwBUjUzF1Ln7g,1705
|
23
23
|
looper/default_config/divvy_templates/localhost_bulker_template.sub,sha256=yn5VB9Brt7Hck9LT17hD2o8Kn-76gYJQk_A-8C1Gr4k,164
|
24
24
|
looper/default_config/divvy_templates/localhost_docker_template.sub,sha256=XRr7AlR7-TP1L3hyBMfka_RgWRL9vzOlS5Kd1xSNwT0,183
|
@@ -60,9 +60,9 @@ looper/schemas/divvy_config_schema.yaml,sha256=7GJfKLc3VX4RGjHnOE1zxwsHXhj_ur9za
|
|
60
60
|
looper/schemas/pipeline_interface_schema_generic.yaml,sha256=3YfKFyRUIwxG41FEidR1dXe9IU6ye51LSUBfSpmMuss,1773
|
61
61
|
looper/schemas/pipeline_interface_schema_project.yaml,sha256=-ZWyA0lKXWik3obuLNVk3IsAZYfbLVbCDvJnD-Fcluo,1567
|
62
62
|
looper/schemas/pipeline_interface_schema_sample.yaml,sha256=x0OwVnijJpvm50DscvvJujdK4UAI7d71pqVemQS-D-0,1564
|
63
|
-
looper-2.0.
|
64
|
-
looper-2.0.
|
65
|
-
looper-2.0.
|
66
|
-
looper-2.0.
|
67
|
-
looper-2.0.
|
68
|
-
looper-2.0.
|
63
|
+
looper-2.0.0a2.dist-info/LICENSE.txt,sha256=oB6ZGDa4kcznznJKJsLLFFcOZyi8Y6e2Jv0rJozgp-I,1269
|
64
|
+
looper-2.0.0a2.dist-info/METADATA,sha256=s4IlCgd597EhgR8H0LIB-3Qz02absf63sudpuFG1rKM,1760
|
65
|
+
looper-2.0.0a2.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
66
|
+
looper-2.0.0a2.dist-info/entry_points.txt,sha256=iHltI2_Jdved27vccmWhvmcHWUZ7Mf6CfDV6QkY1Lc8,91
|
67
|
+
looper-2.0.0a2.dist-info/top_level.txt,sha256=I0Yf7djsoQAMzwHBbDiQi9hGtq4Z41_Ma5CX8qXG8Y8,7
|
68
|
+
looper-2.0.0a2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|