| 251 | class SiteStoragePlugin(object): |
| 252 | # Also rebuild from merged sites |
| 253 | def getDbFiles(self): |
| 254 | merger_types = merger_db.get(self.site.address) |
| 255 | |
| 256 | # First return the site's own db files |
| 257 | for item in super(SiteStoragePlugin, self).getDbFiles(): |
| 258 | yield item |
| 259 | |
| 260 | # Not a merger site, that's all |
| 261 | if not merger_types: |
| 262 | return |
| 263 | |
| 264 | merged_sites = [ |
| 265 | site_manager.sites[address] |
| 266 | for address, merged_type in merged_db.items() |
| 267 | if merged_type in merger_types |
| 268 | ] |
| 269 | found = 0 |
| 270 | for merged_site in merged_sites: |
| 271 | self.log.debug("Loading merged site: %s" % merged_site) |
| 272 | merged_type = merged_db[merged_site.address] |
| 273 | for content_inner_path, content in merged_site.content_manager.contents.items(): |
| 274 | # content.json file itself |
| 275 | if merged_site.storage.isFile(content_inner_path): # Missing content.json file |
| 276 | merged_inner_path = "merged-%s/%s/%s" % (merged_type, merged_site.address, content_inner_path) |
| 277 | yield merged_inner_path, merged_site.storage.getPath(content_inner_path) |
| 278 | else: |
| 279 | merged_site.log.error("[MISSING] %s" % content_inner_path) |
| 280 | # Data files in content.json |
| 281 | content_inner_path_dir = helper.getDirname(content_inner_path) # Content.json dir relative to site |
| 282 | for file_relative_path in list(content.get("files", {}).keys()) + list(content.get("files_optional", {}).keys()): |
| 283 | if not file_relative_path.endswith(".json"): |
| 284 | continue # We only interesed in json files |
| 285 | file_inner_path = content_inner_path_dir + file_relative_path # File Relative to site dir |
| 286 | file_inner_path = file_inner_path.strip("/") # Strip leading / |
| 287 | if merged_site.storage.isFile(file_inner_path): |
| 288 | merged_inner_path = "merged-%s/%s/%s" % (merged_type, merged_site.address, file_inner_path) |
| 289 | yield merged_inner_path, merged_site.storage.getPath(file_inner_path) |
| 290 | else: |
| 291 | merged_site.log.error("[MISSING] %s" % file_inner_path) |
| 292 | found += 1 |
| 293 | if found % 100 == 0: |
| 294 | time.sleep(0.001) # Context switch to avoid UI block |
| 295 | |
| 296 | # Also notice merger sites on a merged site file change |
| 297 | def onUpdated(self, inner_path, file=None): |