rcsb.exdb 1.31__tar.gz → 1.33__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.31 → rcsb_exdb-1.33}/HISTORY.txt +2 -0
  2. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/PKG-INFO +2 -2
  3. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/pyproject.toml +3 -3
  4. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tree/TreeNodeListWorker.py +72 -49
  5. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/.gitignore +0 -0
  6. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/LICENSE +0 -0
  7. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/README.md +0 -0
  8. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/__init__.py +0 -0
  9. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/__init__.py +0 -0
  10. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/branch/BranchedEntityExtractor.py +0 -0
  11. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/branch/GlycanProvider.py +0 -0
  12. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/branch/GlycanUtils.py +0 -0
  13. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/branch/__init__.py +0 -0
  14. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/chemref/ChemRefEtlWorker.py +0 -0
  15. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/chemref/ChemRefExtractor.py +0 -0
  16. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/chemref/ChemRefMappingProvider.py +0 -0
  17. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/chemref/PubChemDataCacheProvider.py +0 -0
  18. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/chemref/PubChemEtlWrapper.py +0 -0
  19. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/chemref/PubChemIndexCacheProvider.py +0 -0
  20. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/chemref/__init__.py +0 -0
  21. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/citation/CitationAdapter.py +0 -0
  22. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/citation/CitationExtractor.py +0 -0
  23. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/citation/CitationUtils.py +0 -0
  24. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/citation/__init__.py +0 -0
  25. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/cli/__init__.py +0 -0
  26. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/entry/EntryInfoProvider.py +0 -0
  27. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/entry/__init__.py +0 -0
  28. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/examples-seq/EntityInstanceExtractor.py +0 -0
  29. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/examples-seq/EntityPolymerExtractor.py +0 -0
  30. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/examples-seq/EntityPolymerExtractorFullTests.py +0 -0
  31. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/examples-seq/ReferenceSequenceAssignmentUpdater.py +0 -0
  32. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/examples-seq/ReferenceSequenceUtils.py +0 -0
  33. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/examples-seq/ReferenceSequenceUtilsTests.py +0 -0
  34. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/examples-seq/exampleObjectExtractor.py +0 -0
  35. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/examples-seq/fixtureEntityPolymerExtractor.py +0 -0
  36. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/examples-seq/testEntityInstanceExtractor.py +0 -0
  37. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/examples-seq/testEntityPolymerExtractor.py +0 -0
  38. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/examples-seq/testReferenceSequenceAssignmentUpdater.py +0 -0
  39. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/examples-seq/testReferenceSequenceUtils.py +0 -0
  40. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/seq/AnnotationExtractor.py +0 -0
  41. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/seq/LigandNeighborMappingExtractor.py +0 -0
  42. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/seq/LigandNeighborMappingProvider.py +0 -0
  43. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/seq/PolymerEntityExtractor.py +0 -0
  44. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/seq/ReferenceSequenceAnnotationAdapter.py +0 -0
  45. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/seq/ReferenceSequenceAnnotationProvider.py +0 -0
  46. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/seq/ReferenceSequenceAssignmentAdapter.py +0 -0
  47. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/seq/ReferenceSequenceAssignmentProvider.py +0 -0
  48. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/seq/ReferenceSequenceCacheProvider.py +0 -0
  49. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/seq/TaxonomyExtractor.py +0 -0
  50. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/seq/UniProtCoreEtlWorker.py +0 -0
  51. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/seq/UniProtExtractor.py +0 -0
  52. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/seq/__init__.py +0 -0
  53. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/__init__.py +0 -0
  54. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/fixtureDictMethodResourceProvider.py +0 -0
  55. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/fixturePdbxLoader.py +0 -0
  56. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testAnnotationExtractor.py +0 -0
  57. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testBranchedEntityExtractor.py +0 -0
  58. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testChemRefLoader.py +0 -0
  59. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testChemRefMappingProvider.py +0 -0
  60. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testCitationAdapter.py +0 -0
  61. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testCitationExtractor.py +0 -0
  62. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testCitationUtils.py +0 -0
  63. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testEntryInfoEtlWorkflow.py +0 -0
  64. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testEntryInfoProvider.py +0 -0
  65. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testGlycanEtlWorkflow.py +0 -0
  66. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testGlycanProvider.py +0 -0
  67. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testGlycanUtils.py +0 -0
  68. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testLigandNeighborMappingProvider.py +0 -0
  69. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testObjectExtractor.py +0 -0
  70. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testObjectTransformer.py +0 -0
  71. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testObjectUpdater.py +0 -0
  72. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testPolymerEntityExtractor.py +0 -0
  73. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testPubChemDataCacheProvider.py +0 -0
  74. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testPubChemEtlWorkflow.py +0 -0
  75. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testPubChemEtlWrapper.py +0 -0
  76. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testPubChemIndexCacheProvider.py +0 -0
  77. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testReferenceSequenceAnnotationAdapter.py +0 -0
  78. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testReferenceSequenceAssignmentAdapter.py +0 -0
  79. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testReferenceSequenceAssignmentAdapterValidate.py +0 -0
  80. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testReferenceSequenceAssignmentProvider.py +0 -0
  81. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testReferenceSequenceCacheProvider.py +0 -0
  82. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testTaxonomyExtractor.py +0 -0
  83. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testTreeNodeListWorker.py +0 -0
  84. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testUniProtCoreEtlWorker.py +0 -0
  85. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tests/testUniProtExtractor.py +0 -0
  86. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/tree/__init__.py +0 -0
  87. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/utils/ObjectAdapterBase.py +0 -0
  88. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/utils/ObjectExtractor.py +0 -0
  89. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/utils/ObjectTransformer.py +0 -0
  90. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/utils/ObjectUpdater.py +0 -0
  91. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/utils/ObjectValidator.py +0 -0
  92. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/utils/__init__.py +0 -0
  93. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/wf/EntryInfoEtlWorkflow.py +0 -0
  94. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/wf/GlycanEtlWorkflow.py +0 -0
  95. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/wf/PubChemEtlWorkflow.py +0 -0
  96. {rcsb_exdb-1.31 → rcsb_exdb-1.33}/rcsb/exdb/wf/__init__.py +0 -0
@@ -113,3 +113,5 @@
113
113
  8-Apr-2025 V1.29 Add more logging to PubChemIndexCacheProvider and increase default numProc
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
+ 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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rcsb.exdb
3
- Version: 1.31
3
+ Version: 1.33
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.31"
8
+ version = "1.33"
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
  ]
@@ -71,7 +71,7 @@ exclude = [
71
71
  [tool.hatch.build.targets.wheel]
72
72
  packages = ["rcsb"]
73
73
  exclude = [
74
- "/rcsb/db/test*",
74
+ "/rcsb/exdb/test*",
75
75
  "/rcsb/mock-*",
76
76
  ]
77
77
 
@@ -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