scipion-pyworkflow 3.10.6__py3-none-any.whl → 3.11.0__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.
Files changed (123) hide show
  1. pyworkflow/config.py +131 -67
  2. pyworkflow/constants.py +2 -1
  3. pyworkflow/plugin.py +93 -44
  4. pyworkflow/resources/showj/arrowDown.png +0 -0
  5. pyworkflow/resources/showj/arrowUp.png +0 -0
  6. pyworkflow/resources/showj/background_section.png +0 -0
  7. pyworkflow/resources/showj/colRowModeOff.png +0 -0
  8. pyworkflow/resources/showj/colRowModeOn.png +0 -0
  9. pyworkflow/resources/showj/delete.png +0 -0
  10. pyworkflow/resources/showj/doc_icon.png +0 -0
  11. pyworkflow/resources/showj/download_icon.png +0 -0
  12. pyworkflow/resources/showj/enabled_gallery.png +0 -0
  13. pyworkflow/resources/showj/galleryViewOff.png +0 -0
  14. pyworkflow/resources/showj/galleryViewOn.png +0 -0
  15. pyworkflow/resources/showj/goto.png +0 -0
  16. pyworkflow/resources/showj/menu.png +0 -0
  17. pyworkflow/resources/showj/separator.png +0 -0
  18. pyworkflow/resources/showj/tableViewOff.png +0 -0
  19. pyworkflow/resources/showj/tableViewOn.png +0 -0
  20. pyworkflow/resources/showj/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  21. pyworkflow/resources/showj/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  22. pyworkflow/resources/showj/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  23. pyworkflow/resources/showj/volumeOff.png +0 -0
  24. pyworkflow/resources/showj/volumeOn.png +0 -0
  25. pyworkflow/viewer.py +23 -1
  26. pyworkflowtests/protocols.py +1 -3
  27. {scipion_pyworkflow-3.10.6.dist-info → scipion_pyworkflow-3.11.0.dist-info}/METADATA +13 -27
  28. scipion_pyworkflow-3.11.0.dist-info/RECORD +71 -0
  29. {scipion_pyworkflow-3.10.6.dist-info → scipion_pyworkflow-3.11.0.dist-info}/WHEEL +1 -1
  30. pyworkflow/apps/__init__.py +0 -29
  31. pyworkflow/apps/pw_manager.py +0 -37
  32. pyworkflow/apps/pw_plot.py +0 -51
  33. pyworkflow/apps/pw_project.py +0 -113
  34. pyworkflow/apps/pw_protocol_list.py +0 -143
  35. pyworkflow/apps/pw_protocol_run.py +0 -51
  36. pyworkflow/apps/pw_run_tests.py +0 -267
  37. pyworkflow/apps/pw_schedule_run.py +0 -322
  38. pyworkflow/apps/pw_sleep.py +0 -37
  39. pyworkflow/apps/pw_sync_data.py +0 -439
  40. pyworkflow/apps/pw_viewer.py +0 -78
  41. pyworkflow/gui/__init__.py +0 -36
  42. pyworkflow/gui/browser.py +0 -726
  43. pyworkflow/gui/canvas.py +0 -1190
  44. pyworkflow/gui/dialog.py +0 -977
  45. pyworkflow/gui/form.py +0 -2637
  46. pyworkflow/gui/graph.py +0 -247
  47. pyworkflow/gui/graph_layout.py +0 -271
  48. pyworkflow/gui/gui.py +0 -566
  49. pyworkflow/gui/matplotlib_image.py +0 -233
  50. pyworkflow/gui/plotter.py +0 -247
  51. pyworkflow/gui/project/__init__.py +0 -25
  52. pyworkflow/gui/project/base.py +0 -192
  53. pyworkflow/gui/project/constants.py +0 -139
  54. pyworkflow/gui/project/labels.py +0 -205
  55. pyworkflow/gui/project/project.py +0 -492
  56. pyworkflow/gui/project/searchprotocol.py +0 -154
  57. pyworkflow/gui/project/searchrun.py +0 -181
  58. pyworkflow/gui/project/steps.py +0 -171
  59. pyworkflow/gui/project/utils.py +0 -332
  60. pyworkflow/gui/project/variables.py +0 -179
  61. pyworkflow/gui/project/viewdata.py +0 -472
  62. pyworkflow/gui/project/viewprojects.py +0 -510
  63. pyworkflow/gui/project/viewprotocols.py +0 -2093
  64. pyworkflow/gui/project/viewprotocols_extra.py +0 -559
  65. pyworkflow/gui/text.py +0 -771
  66. pyworkflow/gui/tooltip.py +0 -185
  67. pyworkflow/gui/tree.py +0 -684
  68. pyworkflow/gui/widgets.py +0 -307
  69. pyworkflow/mapper/__init__.py +0 -26
  70. pyworkflow/mapper/mapper.py +0 -222
  71. pyworkflow/mapper/sqlite.py +0 -1581
  72. pyworkflow/mapper/sqlite_db.py +0 -145
  73. pyworkflow/project/__init__.py +0 -31
  74. pyworkflow/project/config.py +0 -454
  75. pyworkflow/project/manager.py +0 -180
  76. pyworkflow/project/project.py +0 -2007
  77. pyworkflow/protocol/__init__.py +0 -38
  78. pyworkflow/protocol/bibtex.py +0 -48
  79. pyworkflow/protocol/constants.py +0 -87
  80. pyworkflow/protocol/executor.py +0 -471
  81. pyworkflow/protocol/hosts.py +0 -314
  82. pyworkflow/protocol/launch.py +0 -270
  83. pyworkflow/protocol/package.py +0 -42
  84. pyworkflow/protocol/params.py +0 -741
  85. pyworkflow/protocol/protocol.py +0 -2641
  86. pyworkflow/tests/__init__.py +0 -29
  87. pyworkflow/tests/test_utils.py +0 -25
  88. pyworkflow/tests/tests.py +0 -341
  89. pyworkflow/utils/__init__.py +0 -38
  90. pyworkflow/utils/dataset.py +0 -414
  91. pyworkflow/utils/echo.py +0 -104
  92. pyworkflow/utils/graph.py +0 -169
  93. pyworkflow/utils/log.py +0 -284
  94. pyworkflow/utils/path.py +0 -528
  95. pyworkflow/utils/process.py +0 -153
  96. pyworkflow/utils/profiler.py +0 -92
  97. pyworkflow/utils/progressbar.py +0 -154
  98. pyworkflow/utils/properties.py +0 -631
  99. pyworkflow/utils/reflection.py +0 -129
  100. pyworkflow/utils/utils.py +0 -879
  101. pyworkflow/utils/which.py +0 -229
  102. pyworkflow/webservices/__init__.py +0 -8
  103. pyworkflow/webservices/config.py +0 -11
  104. pyworkflow/webservices/notifier.py +0 -162
  105. pyworkflow/webservices/repository.py +0 -59
  106. pyworkflow/webservices/workflowhub.py +0 -74
  107. pyworkflowtests/tests/__init__.py +0 -0
  108. pyworkflowtests/tests/test_canvas.py +0 -72
  109. pyworkflowtests/tests/test_domain.py +0 -45
  110. pyworkflowtests/tests/test_logs.py +0 -74
  111. pyworkflowtests/tests/test_mappers.py +0 -392
  112. pyworkflowtests/tests/test_object.py +0 -507
  113. pyworkflowtests/tests/test_project.py +0 -42
  114. pyworkflowtests/tests/test_protocol_execution.py +0 -142
  115. pyworkflowtests/tests/test_protocol_export.py +0 -78
  116. pyworkflowtests/tests/test_protocol_output.py +0 -158
  117. pyworkflowtests/tests/test_streaming.py +0 -47
  118. pyworkflowtests/tests/test_utils.py +0 -210
  119. scipion_pyworkflow-3.10.6.dist-info/RECORD +0 -140
  120. scipion_pyworkflow-3.10.6.dist-info/dependency_links.txt +0 -1
  121. {scipion_pyworkflow-3.10.6.dist-info → scipion_pyworkflow-3.11.0.dist-info}/entry_points.txt +0 -0
  122. {scipion_pyworkflow-3.10.6.dist-info → scipion_pyworkflow-3.11.0.dist-info}/licenses/LICENSE.txt +0 -0
  123. {scipion_pyworkflow-3.10.6.dist-info → scipion_pyworkflow-3.11.0.dist-info}/top_level.txt +0 -0
@@ -1,78 +0,0 @@
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])
@@ -1,158 +0,0 @@
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))
@@ -1,47 +0,0 @@
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)
@@ -1,210 +0,0 @@
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,140 +0,0 @@
1
- pyworkflow/__init__.py,sha256=Wr-MVKMQJy_Cy-rpPPB0-pyv8-8tx7GPPaLSNBrV1AI,1246
2
- pyworkflow/config.py,sha256=_sq6YCRfcfE4WUNXLShgbICbBeTSLpD2KmPVapR1Wos,22306
3
- pyworkflow/constants.py,sha256=XJiTVSmA0jR8yYgxW-tMaWCPonXgn6P5KXI0__W8mtc,7758
4
- pyworkflow/exceptions.py,sha256=3VFxuNJHcIWxRnLPR0vYg0RFAQMmxPBJZLZSi87VI8E,507
5
- pyworkflow/object.py,sha256=01nUr0Ud-EDVCULtElfC4patgxUYuUIbrI5qmCsC7BY,55149
6
- pyworkflow/plugin.py,sha256=UAwrx8xm0TkVx16q-jYqvCkYva021DdSWUTav4utJJo,28860
7
- pyworkflow/template.py,sha256=uScWMZCR3U6ishDlx7QGDDr8B_aLpKXoh8zOhqAirCY,10463
8
- pyworkflow/viewer.py,sha256=vA6VxYuxmCwMjIxCIdrp_G-R-nVo-0TA8p1rSl24EOY,11386
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=Be4keeCLl32t5HzrqOdMhk_6oJ93Q5WX5FKy8iO9hYU,25590
23
- pyworkflow/gui/canvas.py,sha256=M_pD7QbqnYq9MY145WN6BYzeIAo0cIkbxLrZKNE80yg,42106
24
- pyworkflow/gui/dialog.py,sha256=35YpyOmUsmiVqdjU-k4AFDG7PKq0te4AUR-oTofhxEk,35329
25
- pyworkflow/gui/form.py,sha256=_rqKWNx2tzyU5wg9mup3COo0edrGuzZ-sq29p-JZg0w,104007
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=pEtBYo0bf5grDX8e6Ju920aSDGiWno85pxrSxcMrSTY,20627
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=Zz69960wUO_Lu0_37j_IcUTTN70XiF_XKu5f2hoOx7g,11137
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=LgpwqnOIr6RPqBb76fOoWrPrpdBzQCQev7JuRLj4lEA,18852
40
- pyworkflow/gui/project/searchprotocol.py,sha256=5f3suNir_UNn2CIppmNoKHR0JZIfyuH7XRbEBaGVPsI,5762
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=Xoxy1YTqKGSU2DUiM7j23gf-yv4ToNmX_zWgRpVZDo4,18187
46
- pyworkflow/gui/project/viewprojects.py,sha256=ZcWzfFLVeCKzVsFboxquzBsOagEoPW0CpVUQ8ZLpvQE,22516
47
- pyworkflow/gui/project/viewprotocols.py,sha256=sykimCQUHCUG5Irjr8__sIZJgJEzG-wgZb7SrdpzkVE,84014
48
- pyworkflow/gui/project/viewprotocols_extra.py,sha256=fp7TKQtndw-b0c7GEbTox_w270eKNJnrFybgTCPOg1Q,21261
49
- pyworkflow/mapper/__init__.py,sha256=HM7tMMd1r2BZ8hbPGryUQ80E4evY46zIVjiZ3edg_Mg,1186
50
- pyworkflow/mapper/mapper.py,sha256=YGVlBK3btHL-jLID6v2jLy7Mb9Wu47lxfZjHdzz0hMg,7726
51
- pyworkflow/mapper/sqlite.py,sha256=ESOkr_whle59ECg-icgm8nAin9VMkgocwZSGUYxOgEY,65427
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=7o2XNmfgrXWRMkmyE2OfOkOB4CpQ4yPoipGz7BdW4I8,83532
57
- pyworkflow/project/scripts/clean_projects.py,sha256=5qsLHIyJk7sZJUrfSp8sbMRYTkbZ2purtc-5JJb8awM,2600
58
- pyworkflow/project/scripts/config.py,sha256=VF4NMsykWzQjCQHRwnfFwxFq2PSk57Ni3TpgTh3nF3w,2933
59
- pyworkflow/project/scripts/create.py,sha256=cmyYJoKP4J9goPRRtQRM9jrsfp-DARHS0XeKJ0ObSCE,2781
60
- pyworkflow/project/scripts/edit_workflow.py,sha256=AhwwEFjEgTRR8LUZ4tBSoY2jprDgUmmgFR3FcIU5uno,2940
61
- pyworkflow/project/scripts/fix_links.py,sha256=u6UXXqIIh-Rq8FYPmmtvcrgPdszPt93LnkVv0xowAEY,1049
62
- pyworkflow/project/scripts/load.py,sha256=oA_xZjO94N-hZohLZQXBKEdmE7BZuWxH7x9gPx9lMj8,2696
63
- pyworkflow/project/scripts/refresh.py,sha256=-uw41ouFgEzIF4iBXFRzAI79Lna7fqMmEKhRciSUpTA,2603
64
- pyworkflow/project/scripts/schedule.py,sha256=mUUlaUSiMvA_skES6WOL0Mg-j7-S9Cx6dN-6wx5ZM6Y,3989
65
- pyworkflow/project/scripts/stack2volume.py,sha256=ZV8qtPj4qWg2LJSXHBnx-S8L8pyGGQiWuRcWu3OP8qI,940
66
- pyworkflow/project/scripts/stop.py,sha256=vCeCxkwPCoUkLbna5HCxKWJ1hrsI4U19Sg9JD4ksXj8,2427
67
- pyworkflow/protocol/__init__.py,sha256=bAdIpvUW4GAYdIuv92DZ44-OEkZ7lTtnp1S9T5cwtVs,1413
68
- pyworkflow/protocol/bibtex.py,sha256=mCUk1Hp5Vp_i2lozDM1BQNOw10e_RSu86oXvrR63sOA,2122
69
- pyworkflow/protocol/constants.py,sha256=gyYtGFjfZbyAi2nDK6YpIRq6baZIJc_EdPD3oP2VdNM,3391
70
- pyworkflow/protocol/executor.py,sha256=3f1lZ0Y3ahv7BOkQJLsghJG7vtx30p2BhlttLE7XHx8,18728
71
- pyworkflow/protocol/hosts.py,sha256=fk2RpLL0E6wPphSTr0zl1enq-MHtTAKLQaWq_6cbcZw,10499
72
- pyworkflow/protocol/launch.py,sha256=7WKAiHma2tSuhqK4xVnxD_SnVt7Y5qyDFdQwTo8BLF0,11267
73
- pyworkflow/protocol/package.py,sha256=L6x3HHKtbrhDQRJHD07SG3DQKNMGaRQ0ROoLEY3SuRQ,1444
74
- pyworkflow/protocol/params.py,sha256=gP6QImgULvzCr-f0iseArIp1bjXm1JuUr9padmuMs7M,25901
75
- pyworkflow/protocol/protocol.py,sha256=48x-NleLfKxrzYIz13rZ1EsWa74vlomNZdd54mEIvuw,99724
76
- pyworkflow/resources/Imagej.png,sha256=nU2nWI1wxZB_xlOKsZzdUjj-qiCTjO6GwEKYgZ5Risg,14480
77
- pyworkflow/resources/chimera.png,sha256=AKCuwMqmZo0Cg2sddMUjBWUhmAq-nPsAVCBpVrYNeiQ,815
78
- pyworkflow/resources/fa-exclamation-triangle_alert.png,sha256=31_XvRu0CkJ2dvHSpcBAR43378lIJTWwiag_A7SuUQc,585
79
- pyworkflow/resources/fa-info-circle_alert.png,sha256=KUk6dTqgBa38K9gRKeDGUZfsSGjWftgCRd5WH2rGCcw,596
80
- pyworkflow/resources/fa-search.png,sha256=7qC-76_K7dQuvKipYZofYu4bONRDZBJUAeuP934JatA,319
81
- pyworkflow/resources/fa-times-circle_alert.png,sha256=pgTdYSR5s5tIt6i9ut2YTTMf0uoUew8Z13J2rPWPpUU,672
82
- pyworkflow/resources/file_vol.png,sha256=b_M_W5iXEnG5jEcGvlFAyOm8Nn_ngZcrJnDBq9_361g,961
83
- pyworkflow/resources/loading.gif,sha256=6Jktjiva7Z5W6tqxiQZJZI9zahpwmme_D5G-K9EwI1o,16824
84
- pyworkflow/resources/no-image128.png,sha256=AnPz8ehji-QTJiSSv0kwYh1QR1TMTLGEKRZg-dz0UKA,13217
85
- pyworkflow/resources/scipion_bn.png,sha256=0yVccw1PlBJaoJpIEsChGZH2dXEgphaqHnquaP2i-1c,113916
86
- pyworkflow/resources/scipion_icon.png,sha256=moMOOoaLmcWdPdOn_PUBoAQv79WlfxsKwx8nPmrLbzU,2674
87
- pyworkflow/resources/scipion_icon.svg,sha256=6CGXzBW6tlbwY0tywHcWxsKeEAhynKmzhvYxnIxN9qQ,126140
88
- pyworkflow/resources/scipion_icon_proj.png,sha256=8zyHxxyXo3de7o9dS4vJxrAWnNMDCDhMOJ12zu3iTtI,5147
89
- pyworkflow/resources/scipion_icon_projs.png,sha256=OKdsDjMyVFSa-GsRUxDCuhX7RSL5JFBaihC_Uq8ACpU,13273
90
- pyworkflow/resources/scipion_icon_prot.png,sha256=WOp8WTw54JPwlhXUzFDP75T1nEbIQy90wIauITHvHck,6554
91
- pyworkflow/resources/scipion_logo.png,sha256=NYxY7AxZmp7kb1So2uCDpkzoYRxKl-Fb-zmf59nBkBc,1999
92
- pyworkflow/resources/scipion_logo_normal.png,sha256=nrsdm4tI9r1WThlY7KoNtVRl48fZd8oSaGOSvMJdoKk,35151
93
- pyworkflow/resources/scipion_logo_small.png,sha256=lUUaMbJmCCewirp4SPc4LJrenMGSxz4243yuDYUaP2Q,7811
94
- pyworkflow/resources/sprites.png,sha256=mGbZqKApcnbITOBlH206FKTLcS7kVkrnwG1v9apiifQ,53903
95
- pyworkflow/resources/sprites.xcf,sha256=XImVzBax2VMQNNi1jnH78EhZfE9bb5cpVAUwUsYZFJ0,93331
96
- pyworkflow/resources/wait.gif,sha256=H9UcWI4UbL9cpxrX_gZAtkmLhXHDAHFYirTRtZrn4q0,4035
97
- pyworkflow/tests/__init__.py,sha256=tCnNEVIyRLERuNkAd3stcKo23TxHUILonZM9UFEbUD0,1259
98
- pyworkflow/tests/test_utils.py,sha256=HmPVZ6UPu89u-x_aQmF5yyA4RwK55x4bhEhvWeNy1lY,493
99
- pyworkflow/tests/tests.py,sha256=KgBh_eNHrg3VcYHu-zGye7ot5DzGKFyH8ZI-xABjs98,11757
100
- pyworkflow/utils/__init__.py,sha256=UEd4SxmVd9zv0JElz1J0Sva7klJw3HEKSzwf5a0c-Xc,1429
101
- pyworkflow/utils/dataset.py,sha256=141u2xb-FTe8nF6OVJBJtTNHWz7eDWd24veBWX7eoTI,14943
102
- pyworkflow/utils/echo.py,sha256=ZXJRrmxUaTT4Xxf7_pQwg7Th341iFafTs66VEKNOZmE,3442
103
- pyworkflow/utils/graph.py,sha256=z3Hcj0I38du97DQEqNT5gk--SCDTRPlKotaCszoZfX8,4981
104
- pyworkflow/utils/log.py,sha256=8SIg1jwOKMQzGgDqutB7ZD42ZzLHslxULPvK-f1sDD0,10693
105
- pyworkflow/utils/path.py,sha256=hDisc13HhfB6CxpBcI1JBd5er_S6yVTKw1MFSw1AR3U,16803
106
- pyworkflow/utils/process.py,sha256=6l4Mf6C3nyYMeLBQxbrGaAWWmJvf6zQuTLQzPYQVxPU,5790
107
- pyworkflow/utils/profiler.py,sha256=BC0KkAgfYqf-CV40zLcRxo5Td79f5jw1gzvaDH8iqt8,2218
108
- pyworkflow/utils/progressbar.py,sha256=VntEF_FTdQHjMKawfR1R4IoNgYNTEMmnLUIDvUXurxk,5903
109
- pyworkflow/utils/properties.py,sha256=D1LHkVn0cbxCHhedJE4XAw5ZwOufb_4z48IeJ0L0fWc,23960
110
- pyworkflow/utils/reflection.py,sha256=48cvIDO73JinBsFn3XMiVR56AcivfdJoiMXGM7ZwUDY,4429
111
- pyworkflow/utils/utils.py,sha256=1Sm7UXBhZVL1ZvWHG_QCg32M66OE7OInGJZmPqX60mU,26329
112
- pyworkflow/utils/which.py,sha256=KuyKYE4GnkwMpBJoKgOMnx-hNZjHf6OTyqxEsdHIftI,8627
113
- pyworkflow/webservices/__init__.py,sha256=CfkvvoFQp2t2Tt5p7uOF_tpkZVWPHOl9TLlAtBlKPJ8,294
114
- pyworkflow/webservices/config.py,sha256=CuJeul6ToLvWPHIp3hmxFe0v0pbLGYa3owUdBhIDDsg,577
115
- pyworkflow/webservices/notifier.py,sha256=2JJGRarQKoFjJvxhRbNAiht1d4CWGEiYmaXnxRtovO0,6256
116
- pyworkflow/webservices/repository.py,sha256=Hw2ZhvuJzKbN5ivTuN2gTNeJT49Q3-PuM9BdwayTYfU,2365
117
- pyworkflow/webservices/workflowhub.py,sha256=hA4RETMXmxUF-l605INS1TCT2nWnUwOIjrYKzRUZVLQ,2179
118
- pyworkflowtests/__init__.py,sha256=RoXNgyShL7moVEXaimTDdfY1fU26dgGKtdjO4JfBQOk,1686
119
- pyworkflowtests/bibtex.py,sha256=1f9PjkRO937PB2b-ax-eKLwjU4YY11M5px3dk3xWQzw,2102
120
- pyworkflowtests/objects.py,sha256=uaD9THeybiCkUDbb_cpqEwqCpVG3RLyMsIjOKOX7oNQ,26688
121
- pyworkflowtests/protocols.py,sha256=gSCtA5IuG0a_rvAjZ8uZQIxOr6gmrjfvaaqFnpGY2ds,5529
122
- pyworkflowtests/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
123
- pyworkflowtests/tests/test_canvas.py,sha256=_d3Xccp7BuwdbkNC5cTTNVXH425V4k1hKYuhUsn4JtU,2685
124
- pyworkflowtests/tests/test_domain.py,sha256=8IvVTZllgtqNT66rYLlaHKka9zt-0_tuNQ_69pZDFeE,1624
125
- pyworkflowtests/tests/test_logs.py,sha256=lNHPtvPIWk_nRy3L3B2GriroMwgNmTZ_-RHRw00tcSM,2752
126
- pyworkflowtests/tests/test_mappers.py,sha256=2DBzZaM8rIKQTSU9xWAsNGwZkpUPB1FBwgwMmNNbVkg,15423
127
- pyworkflowtests/tests/test_object.py,sha256=WVWP11oXNeOTUDJ5BLFR32MmQi6C5Y6KjfVRBf9fu3w,18577
128
- pyworkflowtests/tests/test_project.py,sha256=RBrhpIs45dWLrciHqzpj4ORyLZCNvjm8fytIolOZ9Ko,1685
129
- pyworkflowtests/tests/test_protocol_execution.py,sha256=mawHqMjzxZH-sbHapKR2sk5WRlMrBs5UQXIbqGSiVPM,5558
130
- pyworkflowtests/tests/test_protocol_export.py,sha256=z18nKPkOnrYLMU8KqcnVsF6-ylQ8d9mw-qFJWRn4Qdw,3291
131
- pyworkflowtests/tests/test_protocol_output.py,sha256=8gnIFMRNmwPnIBRCG29WHJB6mqK4FLGn1jiXHtTD6pY,5980
132
- pyworkflowtests/tests/test_streaming.py,sha256=vOH-bKCM-fVUSsejqNnCX5TPXhdUayk9ZtJHsNVcfCY,1615
133
- pyworkflowtests/tests/test_utils.py,sha256=_pTYGCuXC7YNMdCBzUYNfSBCR3etrHsxHfIhsQi4VPc,7465
134
- scipion_pyworkflow-3.10.6.dist-info/licenses/LICENSE.txt,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
135
- scipion_pyworkflow-3.10.6.dist-info/METADATA,sha256=jkbWXYBuW00lIHyLX9lCm1AfBL6-0NvxDHVeVoA1Cx8,4881
136
- scipion_pyworkflow-3.10.6.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
137
- scipion_pyworkflow-3.10.6.dist-info/dependency_links.txt,sha256=D7r_CPRjYRtBb3q_OBocTdsaeXI5TwnYMu5ri0JFtzs,84
138
- scipion_pyworkflow-3.10.6.dist-info/entry_points.txt,sha256=-P6GVocWl_NS8wS7lB-bTKf-tKANbw4n7DlXXh_VrWk,54
139
- scipion_pyworkflow-3.10.6.dist-info/top_level.txt,sha256=PzyJteyenJwLjAeSFP7oYrTN_U71GABQwET8oLZkh9k,27
140
- scipion_pyworkflow-3.10.6.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- git+https://github.com/scipion-em/tkColorPicker#egg=tkcolorpicker # updated 01-2023