rcsb.exdb 1.32__tar.gz → 1.34__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 (96) hide show
  1. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/HISTORY.txt +2 -0
  2. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/PKG-INFO +2 -2
  3. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/pyproject.toml +2 -2
  4. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/seq/PolymerEntityExtractor.py +3 -2
  5. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tree/TreeNodeListWorker.py +72 -49
  6. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/.gitignore +0 -0
  7. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/LICENSE +0 -0
  8. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/README.md +0 -0
  9. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/__init__.py +0 -0
  10. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/__init__.py +0 -0
  11. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/branch/BranchedEntityExtractor.py +0 -0
  12. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/branch/GlycanProvider.py +0 -0
  13. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/branch/GlycanUtils.py +0 -0
  14. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/branch/__init__.py +0 -0
  15. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/chemref/ChemRefEtlWorker.py +0 -0
  16. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/chemref/ChemRefExtractor.py +0 -0
  17. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/chemref/ChemRefMappingProvider.py +0 -0
  18. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/chemref/PubChemDataCacheProvider.py +0 -0
  19. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/chemref/PubChemEtlWrapper.py +0 -0
  20. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/chemref/PubChemIndexCacheProvider.py +0 -0
  21. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/chemref/__init__.py +0 -0
  22. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/citation/CitationAdapter.py +0 -0
  23. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/citation/CitationExtractor.py +0 -0
  24. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/citation/CitationUtils.py +0 -0
  25. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/citation/__init__.py +0 -0
  26. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/cli/__init__.py +0 -0
  27. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/entry/EntryInfoProvider.py +0 -0
  28. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/entry/__init__.py +0 -0
  29. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/examples-seq/EntityInstanceExtractor.py +0 -0
  30. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/examples-seq/EntityPolymerExtractor.py +0 -0
  31. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/examples-seq/EntityPolymerExtractorFullTests.py +0 -0
  32. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/examples-seq/ReferenceSequenceAssignmentUpdater.py +0 -0
  33. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/examples-seq/ReferenceSequenceUtils.py +0 -0
  34. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/examples-seq/ReferenceSequenceUtilsTests.py +0 -0
  35. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/examples-seq/exampleObjectExtractor.py +0 -0
  36. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/examples-seq/fixtureEntityPolymerExtractor.py +0 -0
  37. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/examples-seq/testEntityInstanceExtractor.py +0 -0
  38. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/examples-seq/testEntityPolymerExtractor.py +0 -0
  39. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/examples-seq/testReferenceSequenceAssignmentUpdater.py +0 -0
  40. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/examples-seq/testReferenceSequenceUtils.py +0 -0
  41. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/seq/AnnotationExtractor.py +0 -0
  42. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/seq/LigandNeighborMappingExtractor.py +0 -0
  43. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/seq/LigandNeighborMappingProvider.py +0 -0
  44. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/seq/ReferenceSequenceAnnotationAdapter.py +0 -0
  45. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/seq/ReferenceSequenceAnnotationProvider.py +0 -0
  46. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/seq/ReferenceSequenceAssignmentAdapter.py +0 -0
  47. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/seq/ReferenceSequenceAssignmentProvider.py +0 -0
  48. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/seq/ReferenceSequenceCacheProvider.py +0 -0
  49. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/seq/TaxonomyExtractor.py +0 -0
  50. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/seq/UniProtCoreEtlWorker.py +0 -0
  51. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/seq/UniProtExtractor.py +0 -0
  52. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/seq/__init__.py +0 -0
  53. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/__init__.py +0 -0
  54. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/fixtureDictMethodResourceProvider.py +0 -0
  55. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/fixturePdbxLoader.py +0 -0
  56. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testAnnotationExtractor.py +0 -0
  57. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testBranchedEntityExtractor.py +0 -0
  58. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testChemRefLoader.py +0 -0
  59. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testChemRefMappingProvider.py +0 -0
  60. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testCitationAdapter.py +0 -0
  61. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testCitationExtractor.py +0 -0
  62. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testCitationUtils.py +0 -0
  63. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testEntryInfoEtlWorkflow.py +0 -0
  64. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testEntryInfoProvider.py +0 -0
  65. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testGlycanEtlWorkflow.py +0 -0
  66. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testGlycanProvider.py +0 -0
  67. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testGlycanUtils.py +0 -0
  68. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testLigandNeighborMappingProvider.py +0 -0
  69. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testObjectExtractor.py +0 -0
  70. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testObjectTransformer.py +0 -0
  71. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testObjectUpdater.py +0 -0
  72. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testPolymerEntityExtractor.py +0 -0
  73. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testPubChemDataCacheProvider.py +0 -0
  74. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testPubChemEtlWorkflow.py +0 -0
  75. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testPubChemEtlWrapper.py +0 -0
  76. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testPubChemIndexCacheProvider.py +0 -0
  77. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testReferenceSequenceAnnotationAdapter.py +0 -0
  78. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testReferenceSequenceAssignmentAdapter.py +0 -0
  79. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testReferenceSequenceAssignmentAdapterValidate.py +0 -0
  80. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testReferenceSequenceAssignmentProvider.py +0 -0
  81. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testReferenceSequenceCacheProvider.py +0 -0
  82. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testTaxonomyExtractor.py +0 -0
  83. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testTreeNodeListWorker.py +0 -0
  84. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testUniProtCoreEtlWorker.py +0 -0
  85. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tests/testUniProtExtractor.py +0 -0
  86. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/tree/__init__.py +0 -0
  87. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/utils/ObjectAdapterBase.py +0 -0
  88. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/utils/ObjectExtractor.py +0 -0
  89. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/utils/ObjectTransformer.py +0 -0
  90. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/utils/ObjectUpdater.py +0 -0
  91. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/utils/ObjectValidator.py +0 -0
  92. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/utils/__init__.py +0 -0
  93. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/wf/EntryInfoEtlWorkflow.py +0 -0
  94. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/wf/GlycanEtlWorkflow.py +0 -0
  95. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/wf/PubChemEtlWorkflow.py +0 -0
  96. {rcsb_exdb-1.32 → rcsb_exdb-1.34}/rcsb/exdb/wf/__init__.py +0 -0
@@ -114,3 +114,5 @@
114
114
  2-Oct-2025 V1.30 Make use of ExDB configuration file for loading drugbank and tree node list DBs/collections and setting indexed fields
115
115
  2-Dec-2025 V1.31 Switch to 'pyproject.toml' file and update test pipelines to python 3.12
116
116
  8-Dec-2025 V1.32 Correction to pyproject.toml
117
+ 6-Jan-2026 V1.33 Updates to TreeNodeListWorker to raise errors upon failures and allow for manual specification of tree lists to load
118
+ 2-Feb-2026 V1.34 Handle case of missing 'rcsb_entity_source_organism.source_type' in PolymerEntityExtractor
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rcsb.exdb
3
- Version: 1.32
3
+ Version: 1.34
4
4
  Summary: RCSB Python ExDB data extraction and loading workflows
5
5
  Project-URL: Homepage, https://github.com/rcsb/py-rcsb_exdb
6
6
  Author-email: John Westbrook <john.westbrook@rcsb.org>
@@ -26,7 +26,7 @@ Requires-Dist: rcsb-utils-ec>=0.25
26
26
  Requires-Dist: rcsb-utils-go>=0.18
27
27
  Requires-Dist: rcsb-utils-io>=1.48
28
28
  Requires-Dist: rcsb-utils-seq>=0.82
29
- Requires-Dist: rcsb-utils-struct>=0.47
29
+ Requires-Dist: rcsb-utils-struct>=0.51
30
30
  Requires-Dist: rcsb-utils-targets>=0.82
31
31
  Requires-Dist: rcsb-utils-taxonomy>=0.43
32
32
  Provides-Extra: tests
@@ -5,7 +5,7 @@ build-backend = "hatchling.build"
5
5
  [project]
6
6
  name = "rcsb.exdb"
7
7
  description = "RCSB Python ExDB data extraction and loading workflows"
8
- version = "1.32"
8
+ version = "1.34"
9
9
  readme = "README.md"
10
10
  authors = [
11
11
  { name="John Westbrook", email="john.westbrook@rcsb.org" }
@@ -40,7 +40,7 @@ dependencies = [
40
40
  "rcsb.utils.go >= 0.18",
41
41
  "rcsb.utils.seq >= 0.82",
42
42
  "rcsb.utils.targets >= 0.82",
43
- "rcsb.utils.struct >= 0.47",
43
+ "rcsb.utils.struct >= 0.51",
44
44
  "rcsb.utils.taxonomy >= 0.43",
45
45
  "rcsb.utils.dictionary >= 1.27",
46
46
  ]
@@ -9,6 +9,7 @@
9
9
  # 9-Jan-2024 dwp Turn off use of uniprot_exdb DB for enriching protein entity details file (data not used)
10
10
  # 10-Dec-2024 dwp Sort extracted polymer entity sequence data by entity ID (alphabetically), to ensure consistent
11
11
  # ordering between coasts (order of sequence data influences results of mmseqs2 sequence searching)
12
+ # 2-Feb-2026 dwp Handle case of missing 'rcsb_entity_source_organism.source_type'
12
13
  #
13
14
  ##
14
15
  __docformat__ = "google en"
@@ -115,7 +116,7 @@ class PolymerEntityExtractor(object):
115
116
  begSeqNum = 1
116
117
  endSeqNum = seqLen
117
118
  srcId = tD["pdbx_src_id"]
118
- srcType = tD["source_type"]
119
+ srcType = tD["source_type"] if "source_type" in tD else None
119
120
  taxId = tD["ncbi_taxonomy_id"] if "ncbi_taxonomy_id" in tD else -1
120
121
  if srcName and taxId == -1:
121
122
  missingSrcD.setdefault(srcName, []).append(rId)
@@ -138,7 +139,7 @@ class PolymerEntityExtractor(object):
138
139
  pD = eD["rcsb_polymer_entity"]
139
140
  taxCount = pD["rcsb_source_taxonomy_count"]
140
141
  except Exception:
141
- if srcType == "synthetic":
142
+ if srcType is not None and srcType == "synthetic":
142
143
  taxCount = 0
143
144
  else:
144
145
  logger.warning("%s (srcName %r) no source taxonomy count type %r", rId, srcName, srcType)
@@ -12,6 +12,8 @@
12
12
  # 23-Jan-2025 dwp Change indexed field from 'update_id' to 'id'
13
13
  # 7-Aug-2025 dwp Change target DB and collection names to "dw" and "tree_*" (via configuration file);
14
14
  # Make use of configuration file for loading tree node lists and setting indexed fields
15
+ # 6-Jan-2026 dwp Raise error if a tree node list is empty or fails to load;
16
+ # Add support for providing a manual list of tree node lists to load (for testing)
15
17
  #
16
18
  ##
17
19
  __docformat__ = "google en"
@@ -41,7 +43,20 @@ logger = logging.getLogger(__name__)
41
43
  class TreeNodeListWorker(object):
42
44
  """Prepare and load repository holdings and repository update data."""
43
45
 
44
- def __init__(self, cfgOb, cachePath, numProc=1, chunkSize=10, maxStepLength=4000, readBackCheck=False, documentLimit=None, verbose=False, useCache=False, useFilteredLists=False):
46
+ def __init__(
47
+ self,
48
+ cfgOb,
49
+ cachePath,
50
+ numProc=1,
51
+ chunkSize=10,
52
+ maxStepLength=4000,
53
+ readBackCheck=False,
54
+ documentLimit=None,
55
+ verbose=False,
56
+ useCache=False,
57
+ useFilteredLists=False,
58
+ treeCollectionList=None,
59
+ ):
45
60
  self.__cfgOb = cfgOb
46
61
  self.__cachePath = os.path.abspath(cachePath)
47
62
  self.__readBackCheck = readBackCheck
@@ -55,6 +70,7 @@ class TreeNodeListWorker(object):
55
70
  self.__statusList = []
56
71
  self.__useCache = useCache
57
72
  self.__useFilteredLists = useFilteredLists
73
+ self.__treeCollectionList = treeCollectionList if treeCollectionList else [] # Manually specify tree collections to load
58
74
 
59
75
  def __updateStatus(self, updateId, databaseName, collectionName, status, startTimestamp):
60
76
  try:
@@ -95,43 +111,49 @@ class TreeNodeListWorker(object):
95
111
  ATTRIBUTE_NAMES:
96
112
  - parents
97
113
  """
98
- try:
99
- useCache = self.__useCache
100
- #
101
- logger.info("Starting with cache path %r (useCache=%r)", self.__cachePath, useCache)
102
- #
103
- self.__statusList = []
104
- desp = DataExchangeStatus()
105
- statusStartTimestamp = desp.setStartTime()
106
- dl = DocumentLoader(
107
- self.__cfgOb,
108
- self.__cachePath,
109
- self.__resourceName,
110
- numProc=self.__numProc,
111
- chunkSize=self.__chunkSize,
112
- maxStepLength=self.__maxStepLength,
113
- documentLimit=self.__documentLimit,
114
- verbose=self.__verbose,
115
- readBackCheck=self.__readBackCheck,
116
- )
117
- #
118
- sectionName = "tree_node_lists_configuration"
119
- databaseNameMongo = self.__cfgOb.get("DATABASE_NAME", sectionName=sectionName)
120
- collectionNameList = self.__cfgOb.get("COLLECTION_NAME_LIST", sectionName=sectionName)
121
- collectionIndexList = self.__cfgOb.get("COLLECTION_INDICES", sectionName=sectionName)
122
- # databaseNameMongo = 'dw'
123
- # collectionNameList = ['tree_taxonomy', 'tree_ec', 'tree_scop', 'tree_scop2', 'tree_cath', 'tree_atc', 'tree_card', 'tree_ecod', 'tree_go']
124
- # collectionIndexList = [{'INDEX_NAME': 'primary', 'ATTRIBUTE_NAMES': ['id']}, {'INDEX_NAME': 'index_2', 'ATTRIBUTE_NAMES': ['parents']}]
125
-
126
- # collectionVersion = self.__cfgOb.get("COLLECTION_VERSION_STRING", sectionName=sectionName)
127
- # addValues = {"_schema_version": collectionVersion}
128
- addValues = None
129
-
130
- ok = True
131
- for collectionName in collectionNameList:
132
- nL = self.__getTreeDocList(collectionName, useCache)
133
- if nL and doLoad:
134
- ok = dl.load(
114
+ ok = True
115
+ useCache = self.__useCache
116
+ #
117
+ logger.info("Starting with cache path %r (useCache=%r)", self.__cachePath, useCache)
118
+ #
119
+ self.__statusList = []
120
+ desp = DataExchangeStatus()
121
+ statusStartTimestamp = desp.setStartTime()
122
+ dl = DocumentLoader(
123
+ self.__cfgOb,
124
+ self.__cachePath,
125
+ self.__resourceName,
126
+ numProc=self.__numProc,
127
+ chunkSize=self.__chunkSize,
128
+ maxStepLength=self.__maxStepLength,
129
+ documentLimit=self.__documentLimit,
130
+ verbose=self.__verbose,
131
+ readBackCheck=self.__readBackCheck,
132
+ )
133
+ #
134
+ sectionName = "tree_node_lists_configuration"
135
+ databaseNameMongo = self.__cfgOb.get("DATABASE_NAME", sectionName=sectionName)
136
+ collectionNameList = self.__cfgOb.get("COLLECTION_NAME_LIST", sectionName=sectionName)
137
+ collectionIndexList = self.__cfgOb.get("COLLECTION_INDICES", sectionName=sectionName)
138
+ # databaseNameMongo = 'dw'
139
+ # collectionNameList = ['tree_taxonomy', 'tree_ec', 'tree_scop', 'tree_scop2', 'tree_cath', 'tree_atc', 'tree_card', 'tree_ecod', 'tree_go']
140
+ # collectionIndexList = [{'INDEX_NAME': 'primary', 'ATTRIBUTE_NAMES': ['id']}, {'INDEX_NAME': 'index_2', 'ATTRIBUTE_NAMES': ['parents']}]
141
+
142
+ if len(self.__treeCollectionList) > 0:
143
+ collectionNameList = [col for col in self.__treeCollectionList]
144
+
145
+ # collectionVersion = self.__cfgOb.get("COLLECTION_VERSION_STRING", sectionName=sectionName)
146
+ # addValues = {"_schema_version": collectionVersion}
147
+ addValues = None
148
+
149
+ for collectionName in collectionNameList:
150
+ nL = self.__getTreeDocList(collectionName, useCache)
151
+ if doLoad:
152
+ if not nL or len(nL) == 0:
153
+ logger.error("Empty node list returned for collectionName %r", collectionName)
154
+ ok = False
155
+ else:
156
+ okL = dl.load(
135
157
  databaseNameMongo,
136
158
  collectionName,
137
159
  loadType=loadType,
@@ -140,18 +162,19 @@ class TreeNodeListWorker(object):
140
162
  addValues=addValues,
141
163
  schemaLevel=None,
142
164
  indexDL=collectionIndexList
143
- ) and ok
165
+ )
166
+ ok = okL and ok
144
167
  self.__updateStatus(updateId, databaseNameMongo, collectionName, ok, statusStartTimestamp)
145
- logger.info(
146
- "Completed load of tree node list for database %r, collection %r, len(nL) %r (status %r)",
147
- databaseNameMongo, collectionName, len(nL), ok
148
- )
149
- # ---
150
- logger.info("Completed tree node list loading operations with loadType %r (status %r)", loadType, ok)
151
- return True
152
- except Exception as e:
153
- logger.exception("Failing with %s", str(e))
154
- return False
168
+
169
+ logger.info(
170
+ "Completed load of tree node list for database %r, collection %r, len(nL) %r (status %r)",
171
+ databaseNameMongo, collectionName, len(nL), okL
172
+ )
173
+ # ---
174
+ logger.info("Completed tree node list loading operations with loadType %r (status %r)", loadType, ok)
175
+ if not ok:
176
+ raise ValueError("Failed to load at least one tree node list.")
177
+ return ok
155
178
 
156
179
  def __checkTaxonNodeList(self, nL):
157
180
  eCount = 0
File without changes
File without changes
File without changes
File without changes
File without changes