rcsb.workflow 0.64__tar.gz → 0.65__tar.gz

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 (35) hide show
  1. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/HISTORY.txt +1 -0
  2. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/PKG-INFO +2 -2
  3. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/pyproject.toml +2 -2
  4. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/tests/fixturePdbxLoader.py +7 -0
  5. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/tests/testExDbWorkflow.py +16 -5
  6. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/tests/testProteinTargetSequenceWorkflow.py +26 -10
  7. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/wuw/ExDbWorkflow.py +2 -0
  8. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/.gitignore +0 -0
  9. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/LICENSE +0 -0
  10. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/README.md +0 -0
  11. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/__init__.py +0 -0
  12. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/__init__.py +0 -0
  13. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/bcif/__init__.py +0 -0
  14. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/bcif/task_functions.py +0 -0
  15. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/chem/ChemCompFileWorkflow.py +0 -0
  16. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/chem/ChemCompImageWorkflow.py +0 -0
  17. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/chem/ChemCompSearchIndexWorkflow.py +0 -0
  18. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/chem/__init__.py +0 -0
  19. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/cli/BcifExec.py +0 -0
  20. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/cli/ChemSearchIndexExec.py +0 -0
  21. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/cli/ExDbExec.py +0 -0
  22. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/cli/ImgExec.py +0 -0
  23. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/cli/__init__.py +0 -0
  24. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/targets/ProteinTargetSequenceExecutionWorkflow.py +0 -0
  25. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/targets/ProteinTargetSequenceWorkflow.py +0 -0
  26. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/targets/__init__.py +0 -0
  27. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/tests/__init__.py +0 -0
  28. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/tests/testBcifWorkflow.py +0 -0
  29. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/tests/testChemCompFileWorkflow.py +0 -0
  30. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/tests/testChemCompImageWorkflow.py +0 -0
  31. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/tests/testChemCompSearchIndexWorkflow.py +0 -0
  32. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/wuw/BcifWorkflow.py +0 -0
  33. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/wuw/PdbCsmImageWorkflow.py +0 -0
  34. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/wuw/WuwUtils.py +0 -0
  35. {rcsb_workflow-0.64 → rcsb_workflow-0.65}/rcsb/workflow/wuw/__init__.py +0 -0
@@ -58,3 +58,4 @@
58
58
  30-Sep-2025 - V0.62 Let jpg gen use model file over URL
59
59
  15-Oct-2025 - V0.63 Add ChemSearchIndex from weekly-update-workflow so it can be a cli call instead
60
60
  8-Dec-2025 - V0.64 Switch to 'pyproject.toml' file and update test pipelines to python 3.12
61
+ 6-Jan-2026 - V0.65 Reduce resource utilization for test suites
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rcsb.workflow
3
- Version: 0.64
3
+ Version: 0.65
4
4
  Summary: RCSB Python data processing and ETL/ELT workflow entry points
5
5
  Project-URL: Homepage, https://github.com/rcsb/py-rcsb_workflow
6
6
  Author-email: John Westbrook <john.westbrook@rcsb.org>
@@ -17,7 +17,7 @@ Requires-Python: >=3.9
17
17
  Requires-Dist: mmcif>=1.0.0
18
18
  Requires-Dist: openeye-toolkits>=2024.1.1
19
19
  Requires-Dist: rcsb-db>=1.812
20
- Requires-Dist: rcsb-exdb>=1.31
20
+ Requires-Dist: rcsb-exdb>=1.33
21
21
  Requires-Dist: rcsb-utils-chem>=0.84
22
22
  Requires-Dist: rcsb-utils-io>=1.49
23
23
  Requires-Dist: rcsb-utils-seq>=0.84
@@ -5,7 +5,7 @@ build-backend = "hatchling.build"
5
5
  [project]
6
6
  name = "rcsb.workflow"
7
7
  description = "RCSB Python data processing and ETL/ELT workflow entry points"
8
- version = "0.64"
8
+ version = "0.65"
9
9
  readme = "README.md"
10
10
  authors = [
11
11
  { name="John Westbrook", email="john.westbrook@rcsb.org" }
@@ -38,7 +38,7 @@ dependencies = [
38
38
  "rcsb.utils.seq >= 0.84",
39
39
  "rcsb.utils.targets >= 0.83",
40
40
  "rcsb.utils.seqalign >= 0.32",
41
- "rcsb.exdb >= 1.31",
41
+ "rcsb.exdb >= 1.33",
42
42
  "requests >= 2.32.3",
43
43
  ]
44
44
 
@@ -24,6 +24,7 @@ import platform
24
24
  import resource
25
25
  import time
26
26
  import unittest
27
+ import shutil
27
28
 
28
29
  from rcsb.db.mongo.DocumentLoader import DocumentLoader
29
30
  from rcsb.db.mongo.PdbxLoader import PdbxLoader
@@ -60,6 +61,9 @@ class PdbxLoaderFixture(unittest.TestCase):
60
61
  configName = "site_info_configuration"
61
62
  self.__cfgOb = ConfigUtil(configPath=configPath, defaultSectionName=configName, mockTopPath=self.__mockTopPath)
62
63
  #
64
+ self._disk_before = shutil.disk_usage(HERE).used
65
+ logger.info("Filesystem disk usage start: %.2f MB", self._disk_before / (1024 ** 2))
66
+ #
63
67
  self.__resourceName = "MONGO_DB"
64
68
  self.__failedFilePath = os.path.join(HERE, "test-output", "failed-list.txt")
65
69
  self.__cachePath = os.path.join(TOPDIR, "CACHE")
@@ -200,6 +204,9 @@ class PdbxLoaderFixture(unittest.TestCase):
200
204
  rusageMax = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
201
205
  logger.info("Maximum resident memory size %.4f %s", rusageMax / 10 ** 6, unitS)
202
206
  endTime = time.time()
207
+ disk_after = shutil.disk_usage(HERE).used
208
+ disk_delta = disk_after - self._disk_before
209
+ logger.info("Filesystem disk usage delta: %.2f MB", disk_delta / (1024 ** 2))
203
210
  logger.info("Completed %s at %s (%.4f seconds)", self.id(), time.strftime("%Y %m %d %H:%M:%S", time.localtime()), endTime - self.__startTime)
204
211
 
205
212
  def testPdbxLoader(self):
@@ -24,6 +24,7 @@ import platform
24
24
  import resource
25
25
  import time
26
26
  import unittest
27
+ import shutil
27
28
 
28
29
  from rcsb.workflow.wuw.ExDbWorkflow import ExDbWorkflow
29
30
 
@@ -48,6 +49,9 @@ class ExDbWorkflowTests(unittest.TestCase):
48
49
  cachePath = os.path.join(TOPDIR, "CACHE")
49
50
  # self.__dataPath = os.path.join(HERE, "test-data")
50
51
  #
52
+ self._disk_before = shutil.disk_usage(HERE).used
53
+ logger.info("Filesystem disk usage start: %.2f MB", self._disk_before / (1024 ** 2))
54
+ #
51
55
  self.__commonD = {
52
56
  "configPath": configPath,
53
57
  "mockTopPath": mockTopPath,
@@ -67,17 +71,24 @@ class ExDbWorkflowTests(unittest.TestCase):
67
71
  rusageMax = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
68
72
  logger.info("Maximum resident memory size %.4f %s", rusageMax / 10 ** 6, unitS)
69
73
  endTime = time.time()
74
+ disk_after = shutil.disk_usage(HERE).used
75
+ disk_delta = disk_after - self._disk_before
76
+ logger.info("Filesystem disk usage delta: %.2f MB", disk_delta / (1024 ** 2))
70
77
  logger.info("Completed %s at %s (%.4f seconds)", self.id(), time.strftime("%Y %m %d %H:%M:%S", time.localtime()), endTime - self.__startTime)
71
78
 
72
79
  def testExDbLoaderWorkflows(self):
73
80
  """Test run workflow steps ..."""
74
81
  try:
75
- # opL = ["etl_chemref", "upd_ref_seq", "etl_tree_node_lists"]
76
- opL = ["etl_chemref", "etl_tree_node_lists"]
77
82
  rlWf = ExDbWorkflow(**self.__commonD)
78
- for op in opL:
79
- ok = rlWf.load(op, **self.__loadCommonD)
80
- self.assertTrue(ok)
83
+ ok = rlWf.load("etl_chemref", **self.__loadCommonD)
84
+ self.assertTrue(ok)
85
+ ok = rlWf.load("etl_tree_node_lists", treeCollectionList=["tree_ec"], **self.__loadCommonD)
86
+ self.assertTrue(ok)
87
+ try:
88
+ ok = rlWf.load("etl_tree_node_lists", treeCollectionList=["tree_scop"], **self.__loadCommonD)
89
+ self.assertFalse(ok)
90
+ except Exception:
91
+ logger.info("Expected failure if tree_scop node list is empty")
81
92
  except Exception as e:
82
93
  logger.exception("Failing with %s", str(e))
83
94
  self.fail()
@@ -6,6 +6,9 @@
6
6
  # Updates:
7
7
  # 13-Feb-2025 dwp Remove IMGT from feature building after service became unavailable February 2025
8
8
  # 19-Feb-2025 dwp Bring back IMGT
9
+ # 6-Jan-2026 dwp Re-exclude IMGT from testing (consumes a lot of disk space by fetching 1.6 GB file,
10
+ # and this is already tested by rcsb.utils.targets);
11
+ # Exclude chembl and drugbank from testing to save on disk space
9
12
  #
10
13
  ##
11
14
  """
@@ -22,6 +25,7 @@ import platform
22
25
  import resource
23
26
  import time
24
27
  import unittest
28
+ import shutil
25
29
 
26
30
  from rcsb.workflow.targets.ProteinTargetSequenceWorkflow import ProteinTargetSequenceWorkflow
27
31
  from rcsb.utils.config.ConfigUtil import ConfigUtil
@@ -46,6 +50,9 @@ class ProteinTargetSequenceWorkflowTests(unittest.TestCase):
46
50
  self.__cfgOb = ConfigUtil(configPath=configPath, defaultSectionName=configName, mockTopPath=self.__mockTopPath)
47
51
  self.__cachePath = os.path.join(HERE, "test-output", "CACHE")
48
52
  #
53
+ self._disk_before = shutil.disk_usage(HERE).used
54
+ logger.info("Filesystem disk usage start: %.2f MB", self._disk_before / (1024 ** 2))
55
+ #
49
56
  self.__workflowFixture()
50
57
  self.__startTime = time.time()
51
58
  logger.debug("Starting %s at %s", self.id(), time.strftime("%Y %m %d %H:%M:%S", time.localtime()))
@@ -55,6 +62,9 @@ class ProteinTargetSequenceWorkflowTests(unittest.TestCase):
55
62
  rusageMax = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
56
63
  logger.info("Maximum resident memory size %.4f %s", rusageMax / 10 ** 6, unitS)
57
64
  endTime = time.time()
65
+ disk_after = shutil.disk_usage(HERE).used
66
+ disk_delta = disk_after - self._disk_before
67
+ logger.info("Filesystem disk usage delta: %.2f MB", disk_delta / (1024 ** 2))
58
68
  logger.info("Completed %s at %s (%.4f seconds)\n", self.id(), time.strftime("%Y %m %d %H:%M:%S", time.localtime()), endTime - self.__startTime)
59
69
 
60
70
  def __workflowFixture(self):
@@ -137,7 +147,8 @@ class ProteinTargetSequenceWorkflowTests(unittest.TestCase):
137
147
  """Test case - export FASTA target files"""
138
148
  try:
139
149
  ptsW = ProteinTargetSequenceWorkflow(self.__cfgOb, self.__cachePath)
140
- ok = ptsW.exportTargetsFasta(useCache=True, addTaxonomy=False, reloadPharos=False, fromDbPharos=False, resourceNameList=["sabdab", "card", "chembl", "pharos"])
150
+ # ok = ptsW.exportTargetsFasta(useCache=True, addTaxonomy=False, reloadPharos=False, fromDbPharos=False, resourceNameList=["sabdab", "card", "chembl", "pharos"])
151
+ ok = ptsW.exportTargetsFasta(useCache=True, addTaxonomy=False, reloadPharos=False, fromDbPharos=False, resourceNameList=["sabdab", "card", "pharos"])
141
152
  self.assertTrue(ok)
142
153
  except Exception as e:
143
154
  logger.exception("Failing with %s", str(e))
@@ -148,7 +159,8 @@ class ProteinTargetSequenceWorkflowTests(unittest.TestCase):
148
159
  """Test case - export FASTA target files (and load Pharos from source)"""
149
160
  try:
150
161
  ptsW = ProteinTargetSequenceWorkflow(self.__cfgOb, self.__cachePath)
151
- ok = ptsW.exportTargetsFasta(useCache=True, addTaxonomy=True, reloadPharos=True, fromDbPharos=True, resourceNameList=["sabdab", "card", "drugbank", "chembl", "pharos"])
162
+ # ok = ptsW.exportTargetsFasta(useCache=True, addTaxonomy=True, reloadPharos=True, fromDbPharos=True, resourceNameList=["sabdab", "card", "drugbank", "chembl", "pharos"])
163
+ ok = ptsW.exportTargetsFasta(useCache=True, addTaxonomy=True, reloadPharos=True, fromDbPharos=True, resourceNameList=["sabdab", "card", "pharos"])
152
164
  self.assertTrue(ok)
153
165
  except Exception as e:
154
166
  logger.exception("Failing with %s", str(e))
@@ -158,7 +170,8 @@ class ProteinTargetSequenceWorkflowTests(unittest.TestCase):
158
170
  """Test case - create search databases"""
159
171
  try:
160
172
  ptsW = ProteinTargetSequenceWorkflow(self.__cfgOb, self.__cachePath)
161
- ok = ptsW.createSearchDatabases(resourceNameList=["sabdab", "card", "chembl", "pharos", "pdbprent"], addTaxonomy=False, timeOutSeconds=3600, verbose=False)
173
+ # ok = ptsW.createSearchDatabases(resourceNameList=["sabdab", "card", "chembl", "pharos", "pdbprent"], addTaxonomy=False, timeOutSeconds=3600, verbose=False)
174
+ ok = ptsW.createSearchDatabases(resourceNameList=["sabdab", "pharos", "pdbprent"], addTaxonomy=False, timeOutSeconds=3600, verbose=False)
162
175
  self.assertTrue(ok)
163
176
  except Exception as e:
164
177
  logger.exception("Failing with %s", str(e))
@@ -171,7 +184,8 @@ class ProteinTargetSequenceWorkflowTests(unittest.TestCase):
171
184
  formatOutput = "query,target,pident,alnlen,mismatch,gapopen,qstart,qend,tstart,tend,evalue,raw,bits,qlen,tlen,qaln,taln,cigar"
172
185
  ok = ptsW.search(
173
186
  referenceResourceName="pdbprent",
174
- resourceNameList=["sabdab", "chembl", "pharos"],
187
+ # resourceNameList=["sabdab", "chembl", "pharos"],
188
+ resourceNameList=["sabdab", "pharos"],
175
189
  identityCutoff=0.95,
176
190
  sensitivity=4.5,
177
191
  timeOutSeconds=1000,
@@ -179,7 +193,7 @@ class ProteinTargetSequenceWorkflowTests(unittest.TestCase):
179
193
  )
180
194
  self.assertTrue(ok)
181
195
  ok = ptsW.search(
182
- referenceResourceName="pdbprent", resourceNameList=["card"], identityCutoff=0.95, sensitivity=4.5, timeOutSeconds=1000, useBitScore=True, formatOutput=formatOutput
196
+ referenceResourceName="pdbprent", resourceNameList=["sabdab"], identityCutoff=0.95, sensitivity=4.5, timeOutSeconds=1000, useBitScore=True, formatOutput=formatOutput
183
197
  )
184
198
  self.assertTrue(ok)
185
199
  except Exception as e:
@@ -190,7 +204,7 @@ class ProteinTargetSequenceWorkflowTests(unittest.TestCase):
190
204
  """Test case - build features from search results"""
191
205
  try:
192
206
  ptsW = ProteinTargetSequenceWorkflow(self.__cfgOb, self.__cachePath)
193
- ok = ptsW.buildFeatureData(referenceResourceName="pdbprent", resourceNameList=["sabdab", "card", "imgt"], useTaxonomy=False, backup=False)
207
+ ok = ptsW.buildFeatureData(referenceResourceName="pdbprent", resourceNameList=["sabdab"], useTaxonomy=False, backup=False)
194
208
  self.assertTrue(ok)
195
209
  except Exception as e:
196
210
  logger.exception("Failing with %s", str(e))
@@ -201,7 +215,8 @@ class ProteinTargetSequenceWorkflowTests(unittest.TestCase):
201
215
  try:
202
216
  ptsW = ProteinTargetSequenceWorkflow(self.__cfgOb, self.__cachePath)
203
217
  if self.__isMac:
204
- ok = ptsW.buildActivityData(referenceResourceName="pdbprent", resourceNameList=["chembl", "pharos"], backup=False, maxTargets=50)
218
+ # ok = ptsW.buildActivityData(referenceResourceName="pdbprent", resourceNameList=["chembl", "pharos"], backup=False, maxTargets=50)
219
+ ok = ptsW.buildActivityData(referenceResourceName="pdbprent", resourceNameList=["pharos"], backup=False, maxTargets=50)
205
220
  else:
206
221
  ok = ptsW.buildActivityData(referenceResourceName="pdbprent", resourceNameList=["pharos"], backup=False, maxTargets=50)
207
222
  self.assertTrue(ok)
@@ -214,7 +229,8 @@ class ProteinTargetSequenceWorkflowTests(unittest.TestCase):
214
229
  """Test case - build features from search results"""
215
230
  try:
216
231
  ptsW = ProteinTargetSequenceWorkflow(self.__cfgOb, self.__cachePath)
217
- ok = ptsW.buildCofactorData(referenceResourceName="pdbprent", resourceNameList=["chembl", "pharos"], backup=False)
232
+ # ok = ptsW.buildCofactorData(referenceResourceName="pdbprent", resourceNameList=["chembl", "pharos"], backup=False)
233
+ ok = ptsW.buildCofactorData(referenceResourceName="pdbprent", resourceNameList=["pharos"], backup=False)
218
234
  self.assertTrue(ok)
219
235
  except Exception as e:
220
236
  logger.exception("Failing with %s", str(e))
@@ -242,7 +258,7 @@ def abbrevSuite():
242
258
  suiteSelect.addTest(ProteinTargetSequenceWorkflowTests("testBBCreateSearchDatabases"))
243
259
  suiteSelect.addTest(ProteinTargetSequenceWorkflowTests("testCCSearchDatabases"))
244
260
  suiteSelect.addTest(ProteinTargetSequenceWorkflowTests("testDDBuildFeatures"))
245
- suiteSelect.addTest(ProteinTargetSequenceWorkflowTests("testDDBuildActivityData"))
261
+ suiteSelect.addTest(ProteinTargetSequenceWorkflowTests("testEEBuildActivityData"))
246
262
  suiteSelect.addTest(ProteinTargetSequenceWorkflowTests("testFFBuildCofactorData"))
247
263
  return suiteSelect
248
264
 
@@ -257,7 +273,7 @@ def fullSuite():
257
273
  suiteSelect.addTest(ProteinTargetSequenceWorkflowTests("testBBCreateSearchDatabases"))
258
274
  suiteSelect.addTest(ProteinTargetSequenceWorkflowTests("testCCSearchDatabases"))
259
275
  suiteSelect.addTest(ProteinTargetSequenceWorkflowTests("testDDBuildFeatures"))
260
- suiteSelect.addTest(ProteinTargetSequenceWorkflowTests("testDDBuildActivityData"))
276
+ suiteSelect.addTest(ProteinTargetSequenceWorkflowTests("testEEBuildActivityData"))
261
277
  suiteSelect.addTest(ProteinTargetSequenceWorkflowTests("testFFBuildCofactorData"))
262
278
  return suiteSelect
263
279
 
@@ -105,6 +105,7 @@ class ExDbWorkflow(object):
105
105
  useSequenceCache = not rebuildSequenceCache
106
106
  #
107
107
  useFilteredLists = kwargs.get("useFilteredLists", False)
108
+ treeCollectionList = kwargs.get("treeCollectionList", None)
108
109
 
109
110
  except Exception as e:
110
111
  logger.exception("Argument or configuration processing failing with %s", str(e))
@@ -124,6 +125,7 @@ class ExDbWorkflow(object):
124
125
  readBackCheck=readBackCheck,
125
126
  useCache=self.__useCache,
126
127
  useFilteredLists=useFilteredLists,
128
+ treeCollectionList=treeCollectionList,
127
129
  )
128
130
  ok = rhw.load(dataSetId, loadType=loadType)
129
131
  okS = self.loadStatus(rhw.getLoadStatus(), readBackCheck=readBackCheck)
File without changes
File without changes
File without changes