scipion-pyworkflow 3.11.0__py3-none-any.whl → 3.11.1__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.
- pyworkflow/apps/__init__.py +29 -0
- pyworkflow/apps/pw_manager.py +37 -0
- pyworkflow/apps/pw_plot.py +51 -0
- pyworkflow/apps/pw_project.py +113 -0
- pyworkflow/apps/pw_protocol_list.py +143 -0
- pyworkflow/apps/pw_protocol_run.py +51 -0
- pyworkflow/apps/pw_run_tests.py +267 -0
- pyworkflow/apps/pw_schedule_run.py +322 -0
- pyworkflow/apps/pw_sleep.py +37 -0
- pyworkflow/apps/pw_sync_data.py +439 -0
- pyworkflow/apps/pw_viewer.py +78 -0
- pyworkflow/constants.py +1 -1
- pyworkflow/gui/__init__.py +36 -0
- pyworkflow/gui/browser.py +760 -0
- pyworkflow/gui/canvas.py +1190 -0
- pyworkflow/gui/dialog.py +979 -0
- pyworkflow/gui/form.py +2726 -0
- pyworkflow/gui/graph.py +247 -0
- pyworkflow/gui/graph_layout.py +271 -0
- pyworkflow/gui/gui.py +566 -0
- pyworkflow/gui/matplotlib_image.py +233 -0
- pyworkflow/gui/plotter.py +247 -0
- pyworkflow/gui/project/__init__.py +25 -0
- pyworkflow/gui/project/base.py +192 -0
- pyworkflow/gui/project/constants.py +139 -0
- pyworkflow/gui/project/labels.py +205 -0
- pyworkflow/gui/project/project.py +491 -0
- pyworkflow/gui/project/searchprotocol.py +238 -0
- pyworkflow/gui/project/searchrun.py +181 -0
- pyworkflow/gui/project/steps.py +171 -0
- pyworkflow/gui/project/utils.py +332 -0
- pyworkflow/gui/project/variables.py +179 -0
- pyworkflow/gui/project/viewdata.py +472 -0
- pyworkflow/gui/project/viewprojects.py +510 -0
- pyworkflow/gui/project/viewprotocols.py +2116 -0
- pyworkflow/gui/project/viewprotocols_extra.py +562 -0
- pyworkflow/gui/text.py +771 -0
- pyworkflow/gui/tooltip.py +185 -0
- pyworkflow/gui/tree.py +684 -0
- pyworkflow/gui/widgets.py +307 -0
- pyworkflow/mapper/__init__.py +26 -0
- pyworkflow/mapper/mapper.py +222 -0
- pyworkflow/mapper/sqlite.py +1581 -0
- pyworkflow/mapper/sqlite_db.py +145 -0
- pyworkflow/project/__init__.py +31 -0
- pyworkflow/project/config.py +454 -0
- pyworkflow/project/manager.py +180 -0
- pyworkflow/project/project.py +2095 -0
- pyworkflow/project/usage.py +165 -0
- pyworkflow/protocol/__init__.py +38 -0
- pyworkflow/protocol/bibtex.py +48 -0
- pyworkflow/protocol/constants.py +87 -0
- pyworkflow/protocol/executor.py +483 -0
- pyworkflow/protocol/hosts.py +317 -0
- pyworkflow/protocol/launch.py +277 -0
- pyworkflow/protocol/package.py +42 -0
- pyworkflow/protocol/params.py +781 -0
- pyworkflow/protocol/protocol.py +2707 -0
- pyworkflow/tests/__init__.py +29 -0
- pyworkflow/tests/test_utils.py +25 -0
- pyworkflow/tests/tests.py +341 -0
- pyworkflow/utils/__init__.py +38 -0
- pyworkflow/utils/dataset.py +414 -0
- pyworkflow/utils/echo.py +104 -0
- pyworkflow/utils/graph.py +169 -0
- pyworkflow/utils/log.py +293 -0
- pyworkflow/utils/path.py +528 -0
- pyworkflow/utils/process.py +153 -0
- pyworkflow/utils/profiler.py +92 -0
- pyworkflow/utils/progressbar.py +154 -0
- pyworkflow/utils/properties.py +617 -0
- pyworkflow/utils/reflection.py +129 -0
- pyworkflow/utils/utils.py +880 -0
- pyworkflow/utils/which.py +229 -0
- pyworkflow/webservices/__init__.py +8 -0
- pyworkflow/webservices/config.py +8 -0
- pyworkflow/webservices/notifier.py +152 -0
- pyworkflow/webservices/repository.py +59 -0
- pyworkflow/webservices/workflowhub.py +74 -0
- pyworkflowtests/tests/__init__.py +0 -0
- pyworkflowtests/tests/test_canvas.py +72 -0
- pyworkflowtests/tests/test_domain.py +45 -0
- pyworkflowtests/tests/test_logs.py +74 -0
- pyworkflowtests/tests/test_mappers.py +392 -0
- pyworkflowtests/tests/test_object.py +507 -0
- pyworkflowtests/tests/test_project.py +42 -0
- pyworkflowtests/tests/test_protocol_execution.py +146 -0
- pyworkflowtests/tests/test_protocol_export.py +78 -0
- pyworkflowtests/tests/test_protocol_output.py +158 -0
- pyworkflowtests/tests/test_streaming.py +47 -0
- pyworkflowtests/tests/test_utils.py +210 -0
- {scipion_pyworkflow-3.11.0.dist-info → scipion_pyworkflow-3.11.1.dist-info}/METADATA +2 -2
- scipion_pyworkflow-3.11.1.dist-info/RECORD +161 -0
- scipion_pyworkflow-3.11.0.dist-info/RECORD +0 -71
- {scipion_pyworkflow-3.11.0.dist-info → scipion_pyworkflow-3.11.1.dist-info}/WHEEL +0 -0
- {scipion_pyworkflow-3.11.0.dist-info → scipion_pyworkflow-3.11.1.dist-info}/entry_points.txt +0 -0
- {scipion_pyworkflow-3.11.0.dist-info → scipion_pyworkflow-3.11.1.dist-info}/licenses/LICENSE.txt +0 -0
- {scipion_pyworkflow-3.11.0.dist-info → scipion_pyworkflow-3.11.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,78 @@
|
|
1
|
+
# **************************************************************************
|
2
|
+
# *
|
3
|
+
# * Authors: Pablo Conesa (pconesa@cnb.csic.es)
|
4
|
+
# *
|
5
|
+
# * Unidad de Bioinformatica of Centro Nacional de Biotecnologia , CSIC
|
6
|
+
# *
|
7
|
+
# * This program is free software; you can redistribute it and/or modify
|
8
|
+
# * it under the terms of the GNU General Public License as published by
|
9
|
+
# * the Free Software Foundation; either version 3 of the License, or
|
10
|
+
# * (at your option) any later version.
|
11
|
+
# *
|
12
|
+
# * This program is distributed in the hope that it will be useful,
|
13
|
+
# * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# * GNU General Public License for more details.
|
16
|
+
# *
|
17
|
+
# * You should have received a copy of the GNU General Public License
|
18
|
+
# * along with this program; if not, write to the Free Software
|
19
|
+
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
20
|
+
# * 02111-1307 USA
|
21
|
+
# *
|
22
|
+
# * All comments concerning this program package may be sent to the
|
23
|
+
# * e-mail address 'scipion@cnb.csic.es'
|
24
|
+
# *
|
25
|
+
# **************************************************************************
|
26
|
+
""" Module to test json exporting options"""
|
27
|
+
# from pyworkflow.em import Pointer, ProtMultiPointerTest
|
28
|
+
# from pyworkflow.object import PointerList, String
|
29
|
+
# from tests import *
|
30
|
+
#
|
31
|
+
# MY_OUTPUT = "myOutput"
|
32
|
+
|
33
|
+
# TODO: Check if some tests from pwem/protocol/protocol_tests can be moved here
|
34
|
+
# class TestProtocolExport(BaseTest):
|
35
|
+
#
|
36
|
+
# @classmethod
|
37
|
+
# def setUpClass(cls):
|
38
|
+
# setupTestProject(cls)
|
39
|
+
#
|
40
|
+
# def test_exportMultiPointerToSets(self):
|
41
|
+
# """Test how multipointers to are exported and imported"""
|
42
|
+
#
|
43
|
+
# protMpOutput = self.newProtocol(ProtMultiPointerTest,
|
44
|
+
# objLabel='multipointer for output')
|
45
|
+
#
|
46
|
+
# protMpOutput._defineOutputs(**{MY_OUTPUT: String("hola!")})
|
47
|
+
# self.saveProtocol(protMpOutput)
|
48
|
+
#
|
49
|
+
# # Add multiPointers with extended
|
50
|
+
# plWithExtended = PointerList()
|
51
|
+
# plWithExtended.append(Pointer(protMpOutput, extended=MY_OUTPUT))
|
52
|
+
#
|
53
|
+
# protMp = self.newProtocol(ProtMultiPointerTest,
|
54
|
+
# objLabel='multipointer with extended export to json',
|
55
|
+
# mpToAttr=plWithExtended)
|
56
|
+
#
|
57
|
+
# self.saveProtocol(protMp)
|
58
|
+
# # Trigger the refresh of the runsGraph!!
|
59
|
+
# self.proj._runsGraph = None
|
60
|
+
#
|
61
|
+
# protDict = self.proj.getProtocolsDict()
|
62
|
+
#
|
63
|
+
# # Get the multipointer params items for the second prot
|
64
|
+
# # Get the second prot
|
65
|
+
# # This has the shape of : (33, OrderedDict([('object.className', 'ProtMultiPointerTest'), ...) ])
|
66
|
+
# ndProtAttrs = protDict[protMp.getObjId()]
|
67
|
+
#
|
68
|
+
# # Look for the mpToAttr
|
69
|
+
# for key, value in ndProtAttrs.items():
|
70
|
+
#
|
71
|
+
# if key == "mpToAttr":
|
72
|
+
# self.assertEqual(1, len(value),
|
73
|
+
# "multipointer param items exceeds the "
|
74
|
+
# "expected number of items")
|
75
|
+
# self.assertEqual("%s.%s" % (protMpOutput.getObjId(), MY_OUTPUT),
|
76
|
+
# value[0],
|
77
|
+
# "Multipointer item value %s seems to be wrong."
|
78
|
+
# % value[0])
|
@@ -0,0 +1,158 @@
|
|
1
|
+
# **************************************************************************
|
2
|
+
# *
|
3
|
+
# * Authors: Pablo Conesa (pconesa@cnb.csic.es) [1]
|
4
|
+
# * J.M. De la Rosa Trevin (delarosatrevin@scilifelab.se) [2]
|
5
|
+
# *
|
6
|
+
# * [1] Unidad de Bioinformatica of Centro Nacional de Biotecnologia , CSIC
|
7
|
+
# * [2] SciLifeLab, Stockholm University
|
8
|
+
# *
|
9
|
+
# * This program is free software; you can redistribute it and/or modify
|
10
|
+
# * it under the terms of the GNU General Public License as published by
|
11
|
+
# * the Free Software Foundation; either version 3 of the License, or
|
12
|
+
# * (at your option) any later version.
|
13
|
+
# *
|
14
|
+
# * This program is distributed in the hope that it will be useful,
|
15
|
+
# * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
17
|
+
# * GNU General Public License for more details.
|
18
|
+
# *
|
19
|
+
# * You should have received a copy of the GNU General Public License
|
20
|
+
# * along with this program; if not, write to the Free Software
|
21
|
+
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
22
|
+
# * 02111-1307 USA
|
23
|
+
# *
|
24
|
+
# * All comments concerning this program package may be sent to the
|
25
|
+
# * e-mail address 'scipion@cnb.csic.es'
|
26
|
+
# *
|
27
|
+
# **************************************************************************
|
28
|
+
import os
|
29
|
+
|
30
|
+
import pyworkflow as pw
|
31
|
+
import pyworkflow.object as pwobj
|
32
|
+
import pyworkflow.tests as pwtests
|
33
|
+
import pyworkflow.mapper as pwmapper
|
34
|
+
import pyworkflow.protocol as pwprot
|
35
|
+
from pyworkflow.project import Project
|
36
|
+
from pyworkflowtests.protocols import ProtOutputTest
|
37
|
+
from pyworkflowtests import Domain, MockObject
|
38
|
+
|
39
|
+
|
40
|
+
# Protocol to output of basic scipion objects
|
41
|
+
class TestProtocolOutputs(pwtests.BaseTest):
|
42
|
+
@classmethod
|
43
|
+
def setUpClass(cls):
|
44
|
+
pwtests.setupTestProject(cls, writeLocalConfig=True)
|
45
|
+
pwtests.setupTestOutput(cls)
|
46
|
+
|
47
|
+
# Set the application domain
|
48
|
+
pw.Config.setDomain("pyworkflowtests")
|
49
|
+
|
50
|
+
def test_basicObjectOutput(self):
|
51
|
+
"""Test the list with several Complex"""
|
52
|
+
fn = self.getOutputPath("protocol.sqlite")
|
53
|
+
|
54
|
+
# Discover objects and protocols
|
55
|
+
mapperDict = Domain.getMapperDict()
|
56
|
+
|
57
|
+
mapper = pwmapper.SqliteMapper(fn, mapperDict)
|
58
|
+
# Associate the project
|
59
|
+
proj = Project(Domain, path=self.getOutputPath(''))
|
60
|
+
|
61
|
+
prot = ProtOutputTest(mapper=mapper, n=2, project=proj,
|
62
|
+
workingDir=self.getOutputPath(''))
|
63
|
+
|
64
|
+
# Add and old style o, not in the outputs dictionary
|
65
|
+
prot.output1 = MockObject()
|
66
|
+
|
67
|
+
self.assertFalse(prot._useOutputList.get(),
|
68
|
+
"useOutputList wrongly initialized")
|
69
|
+
|
70
|
+
outputs = [o for o in prot.iterOutputAttributes()]
|
71
|
+
self.assertTrue(1, len(outputs))
|
72
|
+
|
73
|
+
prot._stepsExecutor = pwprot.StepExecutor(hostConfig=None)
|
74
|
+
|
75
|
+
#Create the logs folder
|
76
|
+
prot.makeWorkingDir()
|
77
|
+
|
78
|
+
prot.run()
|
79
|
+
|
80
|
+
self.assertEqual(prot._steps[0].getStatus(),
|
81
|
+
pwprot.STATUS_FINISHED)
|
82
|
+
|
83
|
+
# Check there is an output
|
84
|
+
self.assertOutput(prot)
|
85
|
+
|
86
|
+
outputs = [o for o in prot.iterOutputAttributes()]
|
87
|
+
|
88
|
+
# We are intentionally ignoring a protocol with o (EMObject)
|
89
|
+
# That has been continued, We do not find a real case now.
|
90
|
+
self.assertEqual(1, len(outputs),
|
91
|
+
msg="Integer o not registered properly.")
|
92
|
+
|
93
|
+
outputs = [o for o in prot.iterOutputAttributes(pwobj.Integer)]
|
94
|
+
|
95
|
+
# Test passing a filter
|
96
|
+
self.assertEqual(1, len(outputs),
|
97
|
+
msg="Integer not matched when filtering outputs.")
|
98
|
+
|
99
|
+
# Test with non existing class
|
100
|
+
class NotRealClass:
|
101
|
+
pass
|
102
|
+
|
103
|
+
outputs = [o for o in prot.iterOutputAttributes(NotRealClass)]
|
104
|
+
|
105
|
+
# Test passing a class
|
106
|
+
self.assertEqual(0, len(outputs),
|
107
|
+
msg="Filter by class in iterOutputAttributes does "
|
108
|
+
"not work.")
|
109
|
+
|
110
|
+
self.assertTrue(prot._useOutputList.get(),
|
111
|
+
"useOutputList not activated")
|
112
|
+
|
113
|
+
def test_basicObjectInProject(self):
|
114
|
+
prot = self.newProtocol(ProtOutputTest,
|
115
|
+
objLabel='to generate basic input')
|
116
|
+
print("working dir: %s" % prot.getWorkingDir())
|
117
|
+
# Define a negative output for later tests
|
118
|
+
prot._defineOutputs(negative=pwobj.Integer(-20))
|
119
|
+
self.launchProtocol(prot)
|
120
|
+
|
121
|
+
# Default value is 10 so output is 20
|
122
|
+
self.assertOutput(prot)
|
123
|
+
|
124
|
+
# Second protocol to test linking
|
125
|
+
prot2 = self.newProtocol(ProtOutputTest,
|
126
|
+
objLabel='to read basic input')
|
127
|
+
|
128
|
+
# Set the pointer for the integer
|
129
|
+
prot2.iBoxSize.setPointer(pwobj.Pointer(prot, extended="oBoxSize"))
|
130
|
+
self.launchProtocol(prot2)
|
131
|
+
self.assertOutput(prot2, value=40)
|
132
|
+
|
133
|
+
# Test validation: only positive numbers are allowed
|
134
|
+
prot3 = self.newProtocol(ProtOutputTest,
|
135
|
+
objLabel='invalid input',
|
136
|
+
iBoxSize=-10)
|
137
|
+
# We expect this to fail
|
138
|
+
with self.assertRaises(Exception):
|
139
|
+
self.launchProtocol(prot3)
|
140
|
+
# Test validation: pointer value is validated
|
141
|
+
prot4 = self.newProtocol(ProtOutputTest,
|
142
|
+
objLabel='invalid pointer input')
|
143
|
+
# Now use negative pointer output
|
144
|
+
prot4.iBoxSize.setPointer(pwobj.Pointer(prot, extended="negative"))
|
145
|
+
|
146
|
+
# We expect this to fail
|
147
|
+
with self.assertRaises(Exception):
|
148
|
+
self.launchProtocol(prot4)
|
149
|
+
|
150
|
+
def assertOutput(self, prot, value=20):
|
151
|
+
# Check there is an output
|
152
|
+
self.assertTrue(hasattr(prot, 'oBoxSize'),
|
153
|
+
msg="Protocol output boxSize (OInteger) not registered"
|
154
|
+
" as attribute.")
|
155
|
+
|
156
|
+
self.assertEqual(value, prot.oBoxSize.get(),
|
157
|
+
"oBoxSize value is wrong: %s , expected %s" %
|
158
|
+
(prot.oBoxSize, value))
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# **************************************************************************
|
3
|
+
# *
|
4
|
+
# * Authors: J.M. De la Rosa Trevin (delarosatrevin@scilifelab.se) [1]
|
5
|
+
# *
|
6
|
+
# * [1] SciLifeLab, Stockholm University
|
7
|
+
# *
|
8
|
+
# * This program is free software: you can redistribute it and/or modify
|
9
|
+
# * it under the terms of the GNU General Public License as published by
|
10
|
+
# * the Free Software Foundation, either version 3 of the License, or
|
11
|
+
# * (at your option) any later version.
|
12
|
+
# *
|
13
|
+
# * This program is distributed in the hope that it will be useful,
|
14
|
+
# * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
# * GNU General Public License for more details.
|
17
|
+
# *
|
18
|
+
# * You should have received a copy of the GNU General Public License
|
19
|
+
# * along with this program. If not, see <https://www.gnu.org/licenses/>.
|
20
|
+
# *
|
21
|
+
# * All comments concerning this program package may be sent to the
|
22
|
+
# * e-mail address 'scipion@cnb.csic.es'
|
23
|
+
# *
|
24
|
+
# **************************************************************************
|
25
|
+
|
26
|
+
import pyworkflow.tests as pwtests
|
27
|
+
|
28
|
+
from pyworkflow import Config
|
29
|
+
from pyworkflowtests.protocols import ConcurrencyProtocol
|
30
|
+
|
31
|
+
|
32
|
+
class TestConcurrency(pwtests.BaseTest):
|
33
|
+
|
34
|
+
@classmethod
|
35
|
+
def setUpClass(cls):
|
36
|
+
pwtests.setupTestOutput(cls)
|
37
|
+
|
38
|
+
|
39
|
+
# Set the application domain
|
40
|
+
Config.setDomain("pyworkflowtests")
|
41
|
+
pwtests.setupTestProject(cls)
|
42
|
+
|
43
|
+
|
44
|
+
def test_simple_steps_concurrency(self):
|
45
|
+
prot = self.newProtocol(ConcurrencyProtocol, numberOfThreads=3)
|
46
|
+
|
47
|
+
self.launchProtocol(prot)
|
@@ -0,0 +1,210 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# coding: latin-1
|
3
|
+
"""
|
4
|
+
Created on Mar 25, 2014
|
5
|
+
|
6
|
+
@author: airen
|
7
|
+
@author: roberto.marabini
|
8
|
+
"""
|
9
|
+
import datetime
|
10
|
+
import os
|
11
|
+
from subprocess import Popen
|
12
|
+
from io import StringIO
|
13
|
+
|
14
|
+
from pyworkflow import APPS, Variable
|
15
|
+
from pyworkflow.utils.process import killWithChilds
|
16
|
+
from pyworkflow.tests import *
|
17
|
+
from pyworkflow.utils import utils, prettyDict, getListFromValues, strToDuration
|
18
|
+
from pyworkflow.utils import ProgressBar
|
19
|
+
|
20
|
+
|
21
|
+
class TestBibtex(BaseTest):
|
22
|
+
""" Some minor tests to the bibtexparser library. """
|
23
|
+
|
24
|
+
@classmethod
|
25
|
+
def setUpClass(cls):
|
26
|
+
setupTestOutput(cls)
|
27
|
+
|
28
|
+
def test_Parsing(self):
|
29
|
+
bibtex = """
|
30
|
+
|
31
|
+
@article{delaRosaTrevin2013,
|
32
|
+
title = "Xmipp 3.0: An improved software suite for image processing in electron microscopy ",
|
33
|
+
journal = "Journal of Structural Biology ",
|
34
|
+
volume = "184",
|
35
|
+
number = "2",
|
36
|
+
pages = "321 - 328",
|
37
|
+
year = "2013",
|
38
|
+
issn = "1047-8477",
|
39
|
+
doi = "http://dx.doi.org/10.1016/j.jsb.2013.09.015",
|
40
|
+
url = "http://www.sciencedirect.com/science/article/pii/S1047847713002566",
|
41
|
+
author = "J.M. de la Rosa-Trevín and J. Otón and R. Marabini and A. Zaldívar and J. Vargas and J.M. Carazo and C.O.S. Sorzano",
|
42
|
+
keywords = "Electron microscopy, Single particles analysis, Image processing, Software package "
|
43
|
+
}
|
44
|
+
|
45
|
+
@incollection{Sorzano2013,
|
46
|
+
title = "Semiautomatic, High-Throughput, High-Resolution Protocol for Three-Dimensional Reconstruction of Single Particles in Electron Microscopy",
|
47
|
+
booktitle = "Nanoimaging",
|
48
|
+
year = "2013",
|
49
|
+
isbn = "978-1-62703-136-3",
|
50
|
+
volume = "950",
|
51
|
+
series = "Methods in Molecular Biology",
|
52
|
+
editor = "Sousa, Alioscka A. and Kruhlak, Michael J.",
|
53
|
+
doi = "10.1007/978-1-62703-137-0_11",
|
54
|
+
url = "http://dx.doi.org/10.1007/978-1-62703-137-0_11",
|
55
|
+
publisher = "Humana Press",
|
56
|
+
keywords = "Single particle analysis; Electron microscopy; Image processing; 3D reconstruction; Workflows",
|
57
|
+
author = "Sorzano, CarlosOscar and Rosa Trevín, J.M. and Otón, J. and Vega, J.J. and Cuenca, J. and Zaldívar-Peraza, A. and Gómez-Blanco, J. and Vargas, J. and Quintana, A. and Marabini, Roberto and Carazo, JoséMaría",
|
58
|
+
pages = "171-193",
|
59
|
+
}
|
60
|
+
"""
|
61
|
+
|
62
|
+
prettyDict(utils.parseBibTex(bibtex))
|
63
|
+
|
64
|
+
|
65
|
+
class TestProccess(BaseTest):
|
66
|
+
""" Some tests for utils.process module. """
|
67
|
+
|
68
|
+
@classmethod
|
69
|
+
def setUpClass(cls):
|
70
|
+
setupTestOutput(cls)
|
71
|
+
|
72
|
+
def test_Process(self):
|
73
|
+
prog = pw.join(APPS, 'pw_sleep.py')
|
74
|
+
p = Popen('python %s 500' % prog, shell=True)
|
75
|
+
print("pid: %s" % p.pid)
|
76
|
+
time.sleep(5)
|
77
|
+
killWithChilds(p.pid)
|
78
|
+
|
79
|
+
|
80
|
+
class TestGetListFromRangeString(BaseTest):
|
81
|
+
|
82
|
+
def test_getListFromRangeString(self):
|
83
|
+
inputStrings = ["1,5-8,10" , "2,6,9-11" , "2 5, 6-8" , "1-4 8"]
|
84
|
+
outputLists = [[1, 5, 6, 7, 8, 10], [2, 6, 9, 10, 11], [2, 5, 6, 7, 8], [1,2,3,4, 8]]
|
85
|
+
|
86
|
+
for s, o in zip(inputStrings, outputLists):
|
87
|
+
self.assertEqual(o, pwutils.getListFromRangeString(s))
|
88
|
+
# Check that also works properly with spaces as delimiters
|
89
|
+
s2 = s.replace(',', ' ')
|
90
|
+
self.assertEqual(o, pwutils.getListFromRangeString(s2))
|
91
|
+
|
92
|
+
|
93
|
+
class TestListFromValues(unittest.TestCase):
|
94
|
+
""" Tests list created from str"""
|
95
|
+
|
96
|
+
def _callAndAssert(self, strValue, expected, length=None, caster=str):
|
97
|
+
|
98
|
+
result = getListFromValues( strValue, length, caster)
|
99
|
+
|
100
|
+
self.assertEqual(result, expected, "List from string does not work for %s" % strValue)
|
101
|
+
|
102
|
+
def test_getListFromValues(self):
|
103
|
+
""" Test numeric list definitions like:
|
104
|
+
'1 1 2x2 4 4' -> ['1', '1', '2', '2', '4', '4']
|
105
|
+
'2x3, 3x4, 1' -> ['3', '3', '4', '4', '4', '1']"
|
106
|
+
"""
|
107
|
+
|
108
|
+
self._callAndAssert('1 1 2x2 4 4', ['1', '1', '2x2', '4', '4'])
|
109
|
+
self._callAndAssert('1 1 2x2 4 4', [1, 1, 2, 2, 4, 4], caster=int)
|
110
|
+
self._callAndAssert('2,3,4,1', [2, 3, 4, 1], caster=int)
|
111
|
+
self._callAndAssert('2 , 3 , 4 , 1', [2, 3, 4, 1], caster=int)
|
112
|
+
self._callAndAssert('2,3.3,4', [2.0, 3.3, 4.0], caster=float)
|
113
|
+
|
114
|
+
|
115
|
+
|
116
|
+
class TestProgressBar(unittest.TestCase):
|
117
|
+
|
118
|
+
def caller(self, total, step, fmt, resultGold):
|
119
|
+
ti = time.time()
|
120
|
+
result = StringIO()
|
121
|
+
pb = ProgressBar(total=total, fmt=fmt, output=result,
|
122
|
+
extraArgs={'objectId': 33})
|
123
|
+
|
124
|
+
pb.start()
|
125
|
+
for i in range(total):
|
126
|
+
if i % step == 0:
|
127
|
+
pb.update(i+1)
|
128
|
+
pb.finish()
|
129
|
+
self.assertEqual(resultGold.strip(), result.getvalue().strip())
|
130
|
+
result.close()
|
131
|
+
tf = time.time()
|
132
|
+
print("%d iterations in %f sec" % (total, tf - ti))
|
133
|
+
|
134
|
+
def test_dot(self):
|
135
|
+
total = 1000000
|
136
|
+
step = 10000
|
137
|
+
ratio = int(total/step)
|
138
|
+
resultGold = '.' * (ratio+1)
|
139
|
+
self.caller(total=total, step=step,
|
140
|
+
fmt=ProgressBar.DOT, resultGold=resultGold)
|
141
|
+
|
142
|
+
def test_default(self):
|
143
|
+
total = 3
|
144
|
+
step = 1
|
145
|
+
resultGold = ('\rProgress: [ ] '
|
146
|
+
' 0%\rProgress: [============= '
|
147
|
+
' ] 33%\rProgress: [========================== '
|
148
|
+
' ] 66%\rProgress: [=============================='
|
149
|
+
'==========] 100%')
|
150
|
+
self.caller(total=total, step=step,
|
151
|
+
fmt=ProgressBar.DEFAULT, resultGold=resultGold)
|
152
|
+
|
153
|
+
def test_full(self):
|
154
|
+
total = 3
|
155
|
+
step = 1
|
156
|
+
resultGold = ('\r[ ] 0/3 ( 0%)'
|
157
|
+
' 3 to go\r[============= ] '
|
158
|
+
'1/3 ( 33%) 2 to go\r[========================== '
|
159
|
+
' ] 2/3 ( 66%) 1 to go\r[======================'
|
160
|
+
'==================] 3/3 (100%) 0 to go')
|
161
|
+
self.caller(total=total, step=step,
|
162
|
+
fmt=ProgressBar.FULL, resultGold=resultGold)
|
163
|
+
|
164
|
+
def test_objectid(self):
|
165
|
+
total = 3
|
166
|
+
step = 1
|
167
|
+
ratio = int(total/step)
|
168
|
+
resultGold = ('\r[ ] 0/3 ( 0%)'
|
169
|
+
' (objectId=33)\r[============= '
|
170
|
+
' ] 1/3 ( 33%) (objectId=33)\r[========================'
|
171
|
+
'== ] 2/3 ( 66%) (objectId=33)\r[=========='
|
172
|
+
'==============================] 3/3 (100%) '
|
173
|
+
'(objectId=33)')
|
174
|
+
self.caller(total=total, step=step,
|
175
|
+
fmt=ProgressBar.OBJID, resultGold=resultGold)
|
176
|
+
|
177
|
+
|
178
|
+
|
179
|
+
class TestPathTools(unittest.TestCase):
|
180
|
+
|
181
|
+
def test_filemodificationtime(self):
|
182
|
+
|
183
|
+
# Test is file closed
|
184
|
+
|
185
|
+
import tempfile
|
186
|
+
import time
|
187
|
+
|
188
|
+
since = datetime.datetime.now()
|
189
|
+
time.sleep(1)
|
190
|
+
|
191
|
+
tmpFile = tempfile.NamedTemporaryFile()
|
192
|
+
self.assertFalse(pwutils.isFileFinished(tmpFile.name), "File is NOT finished")
|
193
|
+
time.sleep(1)
|
194
|
+
|
195
|
+
self.assertTrue(pwutils.isFileFinished(tmpFile.name, duration=0.5), "File is finished after 2 seconds")
|
196
|
+
|
197
|
+
|
198
|
+
self.assertTrue(pwutils.hasChangedSince(tmpFile.name, since ), "hasChanged should have returned true. False negative.")
|
199
|
+
since = datetime.datetime.now()
|
200
|
+
self.assertFalse(pwutils.hasChangedSince(tmpFile.name, since ), "hasChanged should have returned false. False positive.")
|
201
|
+
|
202
|
+
|
203
|
+
|
204
|
+
def test_durationstrings(self):
|
205
|
+
|
206
|
+
self.assertEqual(70, strToDuration("1m 10s"), "String duration wrongly converted")
|
207
|
+
|
208
|
+
|
209
|
+
|
210
|
+
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: scipion-pyworkflow
|
3
|
-
Version: 3.11.
|
4
|
-
Summary: Workflow platform used in scientific applications, initially developed
|
3
|
+
Version: 3.11.1
|
4
|
+
Summary: Workflow platform used in scientific applications, initially developed within the Scipion framework for image processing in Electron Microscopy but generic by design to be applied to any domain.
|
5
5
|
Author-email: Pablo Conesa <pconesa@cnb.csic.es>, Yunior Fonseca <cfonseca@cnb.csic.es>, "J.M. De la Rosa Trevin" <josemiguel.delarosatrevin@stjude.org>, Roberto Marabini <roberto@cnb.csic.es>, Grigory Sharov <sharov.grigory@gmail.com>, Josue Gomez Blanco <josue.gomez-blanco@mcgill.ca>
|
6
6
|
License: GNU General Public License v3 (GPLv3)
|
7
7
|
Project-URL: Homepage, https://scipion.i2pc.es
|
@@ -0,0 +1,161 @@
|
|
1
|
+
pyworkflow/__init__.py,sha256=Wr-MVKMQJy_Cy-rpPPB0-pyv8-8tx7GPPaLSNBrV1AI,1246
|
2
|
+
pyworkflow/config.py,sha256=tvGMn6OlOrIUzZKCQwWFOA2oBSn85FTgPwNzA86oFn0,26291
|
3
|
+
pyworkflow/constants.py,sha256=YGPhGk8-RijDCXrYi8bir3cM263wl-PcCz064moLdX0,7800
|
4
|
+
pyworkflow/exceptions.py,sha256=3VFxuNJHcIWxRnLPR0vYg0RFAQMmxPBJZLZSi87VI8E,507
|
5
|
+
pyworkflow/object.py,sha256=01nUr0Ud-EDVCULtElfC4patgxUYuUIbrI5qmCsC7BY,55149
|
6
|
+
pyworkflow/plugin.py,sha256=VVUYkLvH_sBcqsrR3_WzTkogCUi9Zi-MkIgp5GGxRz8,30574
|
7
|
+
pyworkflow/template.py,sha256=uScWMZCR3U6ishDlx7QGDDr8B_aLpKXoh8zOhqAirCY,10463
|
8
|
+
pyworkflow/viewer.py,sha256=YCRoZaF0NYoBnSGhgBLQjCXuGKNWbKP6N1GWuALU_cQ,12053
|
9
|
+
pyworkflow/wizard.py,sha256=nXuk_qMUVlQNa6nB6GCt0CoFQ_P2dnJbGWdwtpDG2tQ,2633
|
10
|
+
pyworkflow/apps/__init__.py,sha256=doupoWHiPmpEwa7o7ro7suxYYjj7h-912kc-fxwnhfE,1187
|
11
|
+
pyworkflow/apps/pw_manager.py,sha256=LqvNLqREsMN-O4QlxHr5mvG7XlKSYVvzgV1pGICV9rU,1356
|
12
|
+
pyworkflow/apps/pw_plot.py,sha256=69L9_qbdaYuC8QbvE9MNOu4P2MYIna0II29PBu0HQdg,1829
|
13
|
+
pyworkflow/apps/pw_project.py,sha256=1P6aGFxc-nDcWrTQ6SbtZSHZQkKHFHkGlnPkDLH0spk,3579
|
14
|
+
pyworkflow/apps/pw_protocol_list.py,sha256=bRC0W_M5Yx0KQ651S4HxB4AOqE4_P8hacc8qrS_3vPo,5193
|
15
|
+
pyworkflow/apps/pw_protocol_run.py,sha256=Uboywq_pwIBAqa_YIsHtBg5iO9b134HEVwrhwkLMoNY,1916
|
16
|
+
pyworkflow/apps/pw_run_tests.py,sha256=0rUeBXIMzq5sWC0BmNBA02zkQrqAkwkX0WJzIpvUdOs,10587
|
17
|
+
pyworkflow/apps/pw_schedule_run.py,sha256=N3os7_wA-QIGnQGmnVoRWmM385idB0cH-h_sCxVy_14,12471
|
18
|
+
pyworkflow/apps/pw_sleep.py,sha256=KhXjsmm04K_JMM13CMDI25sYEay7C2aJ_mTQlBH9n-I,1443
|
19
|
+
pyworkflow/apps/pw_sync_data.py,sha256=rwAShzTuVlCDaLKMLeuY1cPSLyWSP9-1mNTgIgCX40A,17371
|
20
|
+
pyworkflow/apps/pw_viewer.py,sha256=dlvIPzBa_citucezBd0Cl0uCND4eXWYgXF-lZpXWzBc,2595
|
21
|
+
pyworkflow/gui/__init__.py,sha256=D7PVYky81yTcqvkGEtw1CIxRkICpsn4TO5z5lJg84yM,1373
|
22
|
+
pyworkflow/gui/browser.py,sha256=gFBvVYNw2tQW3-n8LqWazuzkKOvI-5FadR0h2aBVeHY,26716
|
23
|
+
pyworkflow/gui/canvas.py,sha256=M_pD7QbqnYq9MY145WN6BYzeIAo0cIkbxLrZKNE80yg,42106
|
24
|
+
pyworkflow/gui/dialog.py,sha256=PQQfS_bYevqBAAGOq1B7wGd9adabUk3KVTlyjiuddV4,35351
|
25
|
+
pyworkflow/gui/form.py,sha256=bF8-y4LeXfV3n3B0Li81zwnzKq-4nyKXd55kOu0agsU,107449
|
26
|
+
pyworkflow/gui/graph.py,sha256=HSZ5PfFKkhv3tzl0o9UtSU_FfDevKR2M3L9HgU9_Gkc,8747
|
27
|
+
pyworkflow/gui/graph_layout.py,sha256=R9uTc_Ei4oWAeCkZ3d78JjC1QKV7HPJaDLyhvSfK7NE,9520
|
28
|
+
pyworkflow/gui/gui.py,sha256=c_KcuOZS7_Euu4Qu21KUJipdhzxI5a0XZjrqzzvk-u4,20619
|
29
|
+
pyworkflow/gui/matplotlib_image.py,sha256=vGD5LKp-AZvu_kXa7Mf_jtOQfZ-QcRUoTMnicNrMqUk,7821
|
30
|
+
pyworkflow/gui/plotter.py,sha256=E9ld43B-AzYhV1PIEPBy2TQWyzoia4y5lD5rqJOQlZY,8464
|
31
|
+
pyworkflow/gui/text.py,sha256=cmAhCm_gCJMi5UDl9br8FoexHeDQjby8dplw9ZiUIgM,28576
|
32
|
+
pyworkflow/gui/tooltip.py,sha256=OceYHesQQ7vSH7FRJmbvDBXjVG1IKkX1A8vocb64ljE,8531
|
33
|
+
pyworkflow/gui/tree.py,sha256=TglyZ-snZHp6hTIRRp4o5Fvzf8Z7hogpFaZ4DVgMGvo,23084
|
34
|
+
pyworkflow/gui/widgets.py,sha256=mIG1AAFvfT_py_yjjgoYeikgIRz-IbD3VOfKAcknqY0,11115
|
35
|
+
pyworkflow/gui/project/__init__.py,sha256=rZmTvqocYhsD2PH1owu7Dkgs7dMrGx7VbKOCpaqvLzM,1118
|
36
|
+
pyworkflow/gui/project/base.py,sha256=N64UXy5ep7RFweyBWTDro9UESgKRRAIvlRuotWIaO_w,7871
|
37
|
+
pyworkflow/gui/project/constants.py,sha256=rORDaNCdAFRFcBmjRt2PJ1cXpSmYgDLfbvrbqZh1Bb0,4943
|
38
|
+
pyworkflow/gui/project/labels.py,sha256=7m4heNcN3zXe0BHuFJyQrPD5hC8LiHnlu1sizRc8l_Y,7680
|
39
|
+
pyworkflow/gui/project/project.py,sha256=2LdwlbPrCejKr_cdFALm_1kOx-Agk9KKIIS4mHOpTrk,18801
|
40
|
+
pyworkflow/gui/project/searchprotocol.py,sha256=NchaO_JFQMGzZkYFyn5_D_BMS3NSbnLTuao6E5UTOfc,9338
|
41
|
+
pyworkflow/gui/project/searchrun.py,sha256=xCGxs7L9PMk48ei9Gi3HI2PAOYEM-zXR5vRfAQRLHKI,7269
|
42
|
+
pyworkflow/gui/project/steps.py,sha256=fq0WhPBoByFs8Lr-qmGZ-aFC4lx3XCF2zM2DOBd_KAc,6053
|
43
|
+
pyworkflow/gui/project/utils.py,sha256=H9oFPzz9lAjAI4PRYSYyYniTBn98Y6YSs0bE0qXpMEM,11923
|
44
|
+
pyworkflow/gui/project/variables.py,sha256=UczW6yQqzssj3eETEKaae5GSpsWr04ItPrr5o2WBnu4,7496
|
45
|
+
pyworkflow/gui/project/viewdata.py,sha256=DUpoF6HURNZagdOtI9M8QNMYcqSFRtXGFA5Ftmrw2P8,18172
|
46
|
+
pyworkflow/gui/project/viewprojects.py,sha256=ZcWzfFLVeCKzVsFboxquzBsOagEoPW0CpVUQ8ZLpvQE,22516
|
47
|
+
pyworkflow/gui/project/viewprotocols.py,sha256=6iq91LHtbHUtq0iQo6UsSuCe69X2mLWLHvjMbE3E64E,85391
|
48
|
+
pyworkflow/gui/project/viewprotocols_extra.py,sha256=_wHn4fa1Qy9zDhyHYJoluIEZtS6SxvF0s9fFmVA1mgc,21262
|
49
|
+
pyworkflow/mapper/__init__.py,sha256=HM7tMMd1r2BZ8hbPGryUQ80E4evY46zIVjiZ3edg_Mg,1186
|
50
|
+
pyworkflow/mapper/mapper.py,sha256=YGVlBK3btHL-jLID6v2jLy7Mb9Wu47lxfZjHdzz0hMg,7726
|
51
|
+
pyworkflow/mapper/sqlite.py,sha256=Y8SGO2n71hfBiuES-oykTEpL08vtNpiQsyRc2qFPUIg,65460
|
52
|
+
pyworkflow/mapper/sqlite_db.py,sha256=HYSXe_fRX1NBKDs6l2zefdO4PMEajnoDMXPjmoFs8Kc,5602
|
53
|
+
pyworkflow/project/__init__.py,sha256=05l9tvr3FfBNL3XNZSbFCs6yO-1HbFlmFu204w7yyKk,1369
|
54
|
+
pyworkflow/project/config.py,sha256=F9H1vLJJ9vPyT6zeSqHX69o-wbaN8hWueOuDn53evjc,13692
|
55
|
+
pyworkflow/project/manager.py,sha256=bk5hFDuIJqEgELU0plFG-RycGhhFfcJxmPp_qhFj1mE,6758
|
56
|
+
pyworkflow/project/project.py,sha256=0a2B1KdiZcofViymJw7xsvMOCTRwTdHPzR4JXgB2JEw,87976
|
57
|
+
pyworkflow/project/usage.py,sha256=UyyqOyVNqbiFBhhemn3qr5Mzlx2-kV7ZNNPGXqJ4PsM,5309
|
58
|
+
pyworkflow/project/scripts/clean_projects.py,sha256=5qsLHIyJk7sZJUrfSp8sbMRYTkbZ2purtc-5JJb8awM,2600
|
59
|
+
pyworkflow/project/scripts/config.py,sha256=VF4NMsykWzQjCQHRwnfFwxFq2PSk57Ni3TpgTh3nF3w,2933
|
60
|
+
pyworkflow/project/scripts/create.py,sha256=cmyYJoKP4J9goPRRtQRM9jrsfp-DARHS0XeKJ0ObSCE,2781
|
61
|
+
pyworkflow/project/scripts/edit_workflow.py,sha256=AhwwEFjEgTRR8LUZ4tBSoY2jprDgUmmgFR3FcIU5uno,2940
|
62
|
+
pyworkflow/project/scripts/fix_links.py,sha256=u6UXXqIIh-Rq8FYPmmtvcrgPdszPt93LnkVv0xowAEY,1049
|
63
|
+
pyworkflow/project/scripts/load.py,sha256=oA_xZjO94N-hZohLZQXBKEdmE7BZuWxH7x9gPx9lMj8,2696
|
64
|
+
pyworkflow/project/scripts/refresh.py,sha256=-uw41ouFgEzIF4iBXFRzAI79Lna7fqMmEKhRciSUpTA,2603
|
65
|
+
pyworkflow/project/scripts/schedule.py,sha256=mUUlaUSiMvA_skES6WOL0Mg-j7-S9Cx6dN-6wx5ZM6Y,3989
|
66
|
+
pyworkflow/project/scripts/stack2volume.py,sha256=ZV8qtPj4qWg2LJSXHBnx-S8L8pyGGQiWuRcWu3OP8qI,940
|
67
|
+
pyworkflow/project/scripts/stop.py,sha256=vCeCxkwPCoUkLbna5HCxKWJ1hrsI4U19Sg9JD4ksXj8,2427
|
68
|
+
pyworkflow/protocol/__init__.py,sha256=bAdIpvUW4GAYdIuv92DZ44-OEkZ7lTtnp1S9T5cwtVs,1413
|
69
|
+
pyworkflow/protocol/bibtex.py,sha256=mCUk1Hp5Vp_i2lozDM1BQNOw10e_RSu86oXvrR63sOA,2122
|
70
|
+
pyworkflow/protocol/constants.py,sha256=gyYtGFjfZbyAi2nDK6YpIRq6baZIJc_EdPD3oP2VdNM,3391
|
71
|
+
pyworkflow/protocol/executor.py,sha256=pnUJr2sNu-Iqnf3-M3YWc4YTNmsUdyf7-v1Kg97rZBY,19108
|
72
|
+
pyworkflow/protocol/hosts.py,sha256=fbuQjHsOL5zWeDuoLqOXZmVc1lfjS2Pb1uomXiC2ysc,10697
|
73
|
+
pyworkflow/protocol/launch.py,sha256=Gls0WlLAkLtOxj4IWyKrDbmqaXXHsGd8oqBAcT61zEI,11731
|
74
|
+
pyworkflow/protocol/package.py,sha256=L6x3HHKtbrhDQRJHD07SG3DQKNMGaRQ0ROoLEY3SuRQ,1444
|
75
|
+
pyworkflow/protocol/params.py,sha256=kPXMPtPJrsSMJQQKIHIInPhity__lWYIVc1m3PXIywE,27947
|
76
|
+
pyworkflow/protocol/protocol.py,sha256=KLqlm6KW4ITJ6TCvc972dUa3fZoTxtkr18CZAIHYG9I,103104
|
77
|
+
pyworkflow/resources/Imagej.png,sha256=nU2nWI1wxZB_xlOKsZzdUjj-qiCTjO6GwEKYgZ5Risg,14480
|
78
|
+
pyworkflow/resources/chimera.png,sha256=AKCuwMqmZo0Cg2sddMUjBWUhmAq-nPsAVCBpVrYNeiQ,815
|
79
|
+
pyworkflow/resources/fa-exclamation-triangle_alert.png,sha256=31_XvRu0CkJ2dvHSpcBAR43378lIJTWwiag_A7SuUQc,585
|
80
|
+
pyworkflow/resources/fa-info-circle_alert.png,sha256=KUk6dTqgBa38K9gRKeDGUZfsSGjWftgCRd5WH2rGCcw,596
|
81
|
+
pyworkflow/resources/fa-search.png,sha256=7qC-76_K7dQuvKipYZofYu4bONRDZBJUAeuP934JatA,319
|
82
|
+
pyworkflow/resources/fa-times-circle_alert.png,sha256=pgTdYSR5s5tIt6i9ut2YTTMf0uoUew8Z13J2rPWPpUU,672
|
83
|
+
pyworkflow/resources/file_vol.png,sha256=b_M_W5iXEnG5jEcGvlFAyOm8Nn_ngZcrJnDBq9_361g,961
|
84
|
+
pyworkflow/resources/loading.gif,sha256=6Jktjiva7Z5W6tqxiQZJZI9zahpwmme_D5G-K9EwI1o,16824
|
85
|
+
pyworkflow/resources/no-image128.png,sha256=AnPz8ehji-QTJiSSv0kwYh1QR1TMTLGEKRZg-dz0UKA,13217
|
86
|
+
pyworkflow/resources/scipion_bn.png,sha256=0yVccw1PlBJaoJpIEsChGZH2dXEgphaqHnquaP2i-1c,113916
|
87
|
+
pyworkflow/resources/scipion_icon.png,sha256=moMOOoaLmcWdPdOn_PUBoAQv79WlfxsKwx8nPmrLbzU,2674
|
88
|
+
pyworkflow/resources/scipion_icon.svg,sha256=6CGXzBW6tlbwY0tywHcWxsKeEAhynKmzhvYxnIxN9qQ,126140
|
89
|
+
pyworkflow/resources/scipion_icon_proj.png,sha256=8zyHxxyXo3de7o9dS4vJxrAWnNMDCDhMOJ12zu3iTtI,5147
|
90
|
+
pyworkflow/resources/scipion_icon_projs.png,sha256=OKdsDjMyVFSa-GsRUxDCuhX7RSL5JFBaihC_Uq8ACpU,13273
|
91
|
+
pyworkflow/resources/scipion_icon_prot.png,sha256=WOp8WTw54JPwlhXUzFDP75T1nEbIQy90wIauITHvHck,6554
|
92
|
+
pyworkflow/resources/scipion_logo.png,sha256=NYxY7AxZmp7kb1So2uCDpkzoYRxKl-Fb-zmf59nBkBc,1999
|
93
|
+
pyworkflow/resources/scipion_logo_normal.png,sha256=nrsdm4tI9r1WThlY7KoNtVRl48fZd8oSaGOSvMJdoKk,35151
|
94
|
+
pyworkflow/resources/scipion_logo_small.png,sha256=lUUaMbJmCCewirp4SPc4LJrenMGSxz4243yuDYUaP2Q,7811
|
95
|
+
pyworkflow/resources/sprites.png,sha256=mGbZqKApcnbITOBlH206FKTLcS7kVkrnwG1v9apiifQ,53903
|
96
|
+
pyworkflow/resources/sprites.xcf,sha256=XImVzBax2VMQNNi1jnH78EhZfE9bb5cpVAUwUsYZFJ0,93331
|
97
|
+
pyworkflow/resources/wait.gif,sha256=H9UcWI4UbL9cpxrX_gZAtkmLhXHDAHFYirTRtZrn4q0,4035
|
98
|
+
pyworkflow/resources/showj/arrowDown.png,sha256=qpePLXb2UKAWBL7EaHZChEpAFNwFm1mBiEfckNUwpus,268
|
99
|
+
pyworkflow/resources/showj/arrowUp.png,sha256=1-rxZDyFUHVZ1SIO9at1_OhkvLnaJDlMx90r137RjGI,276
|
100
|
+
pyworkflow/resources/showj/background_section.png,sha256=udYJgAswKF1t4uEECXdstBGHvCFjw5h-XnRoVKIaq70,284666
|
101
|
+
pyworkflow/resources/showj/colRowModeOff.png,sha256=2qPk4pclbMcOkyjhBYRH7KBAal8WQxhiaUAw9WQ1CCY,208
|
102
|
+
pyworkflow/resources/showj/colRowModeOn.png,sha256=hMStGaI89qWEFy_jxYevJLVhE9uL5N8S1hB-Zu24syg,180
|
103
|
+
pyworkflow/resources/showj/delete.png,sha256=VhKYxRezKSgWp76eYDupFeRVUT0YiB3fLkRNFWWmbwg,624
|
104
|
+
pyworkflow/resources/showj/doc_icon.png,sha256=kfpwilQYdF3sm_-Z4qrDCjnyI6i6MMQ0CschqsiPib4,1015
|
105
|
+
pyworkflow/resources/showj/download_icon.png,sha256=Ga8fUNb1TwlL6vIai-_Ms7JgTEC5qMF_UcQngscyq9o,792
|
106
|
+
pyworkflow/resources/showj/enabled_gallery.png,sha256=-HEJRzvm7iTMEVZXOWfmSmq4t4ZO-QU3vzyWvA7FOlU,493
|
107
|
+
pyworkflow/resources/showj/galleryViewOff.png,sha256=f83t_r87f0UG9pYFYGnA2BKFCBCbIYhf0gqlSYJjjZQ,173
|
108
|
+
pyworkflow/resources/showj/galleryViewOn.png,sha256=w9mTGWvcBlGE-BD3T1EyxDgtNcl5yYzGdvfaRwOGGhw,159
|
109
|
+
pyworkflow/resources/showj/goto.png,sha256=P1RKOGjuB89LrVIxjwtH8D83UztbwRXhehBWezqSlg4,451
|
110
|
+
pyworkflow/resources/showj/menu.png,sha256=nXHsckD78XteuxKut_qOWhajQN1uR7fuMiMLiDCggdI,2736
|
111
|
+
pyworkflow/resources/showj/separator.png,sha256=g_I8lFdg_yFo8oe-Jv702QNXKn_DND4s8_IqgERao7o,288
|
112
|
+
pyworkflow/resources/showj/tableViewOff.png,sha256=mvMeM57miMAw8zXnVtncp5gYkIay09_glfoWAHXzG1c,200
|
113
|
+
pyworkflow/resources/showj/tableViewOn.png,sha256=oQj0mE5nelIuIGgM1X6kxDL_v9PKZi4a3N4v4OwF9lI,172
|
114
|
+
pyworkflow/resources/showj/ui-bg_glass_75_e6e6e6_1x400.png,sha256=HHsEJqgqzvoZSG8cM9_V9uHNdz6DVd0L64-x9W_oT_Q,262
|
115
|
+
pyworkflow/resources/showj/ui-bg_glass_95_fef1ec_1x400.png,sha256=r72mOckMSAlhch0OBmIXbvYQK7nUIR8qJz3SFvmI4eQ,332
|
116
|
+
pyworkflow/resources/showj/ui-bg_highlight-soft_75_cccccc_1x100.png,sha256=C4w_HyBOAH7vPIsQaCTTChcjCGhEE9f223kTugmkCDY,280
|
117
|
+
pyworkflow/resources/showj/volumeOff.png,sha256=LKMWEt8_xwA4tDBruP30Y22QqNebHtH31wxZktfwaIU,751
|
118
|
+
pyworkflow/resources/showj/volumeOn.png,sha256=SsZsmeTdIa0pfMcm0Kq8KzsTDG6A3nhi7jdWWk_7Qfk,614
|
119
|
+
pyworkflow/tests/__init__.py,sha256=tCnNEVIyRLERuNkAd3stcKo23TxHUILonZM9UFEbUD0,1259
|
120
|
+
pyworkflow/tests/test_utils.py,sha256=HmPVZ6UPu89u-x_aQmF5yyA4RwK55x4bhEhvWeNy1lY,493
|
121
|
+
pyworkflow/tests/tests.py,sha256=KgBh_eNHrg3VcYHu-zGye7ot5DzGKFyH8ZI-xABjs98,11757
|
122
|
+
pyworkflow/utils/__init__.py,sha256=UEd4SxmVd9zv0JElz1J0Sva7klJw3HEKSzwf5a0c-Xc,1429
|
123
|
+
pyworkflow/utils/dataset.py,sha256=141u2xb-FTe8nF6OVJBJtTNHWz7eDWd24veBWX7eoTI,14943
|
124
|
+
pyworkflow/utils/echo.py,sha256=ZXJRrmxUaTT4Xxf7_pQwg7Th341iFafTs66VEKNOZmE,3442
|
125
|
+
pyworkflow/utils/graph.py,sha256=z3Hcj0I38du97DQEqNT5gk--SCDTRPlKotaCszoZfX8,4981
|
126
|
+
pyworkflow/utils/log.py,sha256=y7qLB1NKeHF43QhyWZq-32_5DtSJYR1uzrWjRxoSvWk,11096
|
127
|
+
pyworkflow/utils/path.py,sha256=hDisc13HhfB6CxpBcI1JBd5er_S6yVTKw1MFSw1AR3U,16803
|
128
|
+
pyworkflow/utils/process.py,sha256=6l4Mf6C3nyYMeLBQxbrGaAWWmJvf6zQuTLQzPYQVxPU,5790
|
129
|
+
pyworkflow/utils/profiler.py,sha256=BC0KkAgfYqf-CV40zLcRxo5Td79f5jw1gzvaDH8iqt8,2218
|
130
|
+
pyworkflow/utils/progressbar.py,sha256=VntEF_FTdQHjMKawfR1R4IoNgYNTEMmnLUIDvUXurxk,5903
|
131
|
+
pyworkflow/utils/properties.py,sha256=EaTb7VTofsXuKZuOA4cK6ZmwfqmTSOwzd__TZwaL8Cc,23092
|
132
|
+
pyworkflow/utils/reflection.py,sha256=48cvIDO73JinBsFn3XMiVR56AcivfdJoiMXGM7ZwUDY,4429
|
133
|
+
pyworkflow/utils/utils.py,sha256=6h1PthMyGc804PBqbNnVqzzr8upkJMZtaLKalIAELNc,26330
|
134
|
+
pyworkflow/utils/which.py,sha256=KuyKYE4GnkwMpBJoKgOMnx-hNZjHf6OTyqxEsdHIftI,8627
|
135
|
+
pyworkflow/webservices/__init__.py,sha256=CfkvvoFQp2t2Tt5p7uOF_tpkZVWPHOl9TLlAtBlKPJ8,294
|
136
|
+
pyworkflow/webservices/config.py,sha256=7XSkwUiVT71UuARNBQUcePARz8UevwlmxEdoKa_ZVlg,399
|
137
|
+
pyworkflow/webservices/notifier.py,sha256=ntjmIxi2rO0Oc7RE6meuJZ6y5HG4NcrShRqfSUxM8eA,5601
|
138
|
+
pyworkflow/webservices/repository.py,sha256=Hw2ZhvuJzKbN5ivTuN2gTNeJT49Q3-PuM9BdwayTYfU,2365
|
139
|
+
pyworkflow/webservices/workflowhub.py,sha256=hA4RETMXmxUF-l605INS1TCT2nWnUwOIjrYKzRUZVLQ,2179
|
140
|
+
pyworkflowtests/__init__.py,sha256=RoXNgyShL7moVEXaimTDdfY1fU26dgGKtdjO4JfBQOk,1686
|
141
|
+
pyworkflowtests/bibtex.py,sha256=1f9PjkRO937PB2b-ax-eKLwjU4YY11M5px3dk3xWQzw,2102
|
142
|
+
pyworkflowtests/objects.py,sha256=uaD9THeybiCkUDbb_cpqEwqCpVG3RLyMsIjOKOX7oNQ,26688
|
143
|
+
pyworkflowtests/protocols.py,sha256=c9dpwMZW5EEZHp4DELH4WSciCigyUAUGaNem6ZO_D6k,5451
|
144
|
+
pyworkflowtests/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
145
|
+
pyworkflowtests/tests/test_canvas.py,sha256=_d3Xccp7BuwdbkNC5cTTNVXH425V4k1hKYuhUsn4JtU,2685
|
146
|
+
pyworkflowtests/tests/test_domain.py,sha256=8IvVTZllgtqNT66rYLlaHKka9zt-0_tuNQ_69pZDFeE,1624
|
147
|
+
pyworkflowtests/tests/test_logs.py,sha256=lNHPtvPIWk_nRy3L3B2GriroMwgNmTZ_-RHRw00tcSM,2752
|
148
|
+
pyworkflowtests/tests/test_mappers.py,sha256=2DBzZaM8rIKQTSU9xWAsNGwZkpUPB1FBwgwMmNNbVkg,15423
|
149
|
+
pyworkflowtests/tests/test_object.py,sha256=WVWP11oXNeOTUDJ5BLFR32MmQi6C5Y6KjfVRBf9fu3w,18577
|
150
|
+
pyworkflowtests/tests/test_project.py,sha256=RBrhpIs45dWLrciHqzpj4ORyLZCNvjm8fytIolOZ9Ko,1685
|
151
|
+
pyworkflowtests/tests/test_protocol_execution.py,sha256=o1mpO1P_3_Pi80Slv-mma5U6Is11nqbDBTCzIH-7kRk,5649
|
152
|
+
pyworkflowtests/tests/test_protocol_export.py,sha256=z18nKPkOnrYLMU8KqcnVsF6-ylQ8d9mw-qFJWRn4Qdw,3291
|
153
|
+
pyworkflowtests/tests/test_protocol_output.py,sha256=8gnIFMRNmwPnIBRCG29WHJB6mqK4FLGn1jiXHtTD6pY,5980
|
154
|
+
pyworkflowtests/tests/test_streaming.py,sha256=vOH-bKCM-fVUSsejqNnCX5TPXhdUayk9ZtJHsNVcfCY,1615
|
155
|
+
pyworkflowtests/tests/test_utils.py,sha256=_pTYGCuXC7YNMdCBzUYNfSBCR3etrHsxHfIhsQi4VPc,7465
|
156
|
+
scipion_pyworkflow-3.11.1.dist-info/licenses/LICENSE.txt,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
|
157
|
+
scipion_pyworkflow-3.11.1.dist-info/METADATA,sha256=fj1k-LO55-QDXIxh7iGFe3sr_fxiphLt0EkSxd_o_lQ,4440
|
158
|
+
scipion_pyworkflow-3.11.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
159
|
+
scipion_pyworkflow-3.11.1.dist-info/entry_points.txt,sha256=-P6GVocWl_NS8wS7lB-bTKf-tKANbw4n7DlXXh_VrWk,54
|
160
|
+
scipion_pyworkflow-3.11.1.dist-info/top_level.txt,sha256=PzyJteyenJwLjAeSFP7oYrTN_U71GABQwET8oLZkh9k,27
|
161
|
+
scipion_pyworkflow-3.11.1.dist-info/RECORD,,
|