Skip to content

Commit ab330d9

Browse files
committed
rework for readability
1 parent b4a3506 commit ab330d9

3 files changed

Lines changed: 64 additions & 53 deletions

File tree

CHANGES.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ Changelog
55
1.16 (unreleased)
66
-----------------
77

8-
- Skip setting a default page if the default is already set to the same value.
8+
- Skip setting a default page if the default is already set to the same value.
99
[mamico]
1010
- Fixed data extraction of Archetypes ATFilefields to concatenate all `Pdata` chunks, when the FileField data was still stored in Filestorage and not not migrated to use blobstorage (using plone.app.blobs).
1111
[@jnptk]
1212
- Bugfix to prevent clearing existing relations from catalog when migrating into sites with existing content [ThibautBorn]
13-
- Add option to export portal settings (local roles, default pages, portlets) [ThibautBorn]
13+
- Enable option to not export the portal settings (local roles, default pages, portlets) [ThibautBorn]
1414

1515
1.15 (2025-07-15)
1616
-----------------

src/collective/exportimport/export_other.py

Lines changed: 58 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from zope.component import getUtility
3131
from zope.component import queryMultiAdapter
3232
from zope.component import queryUtility
33+
from zope.deprecation import deprecation
3334
from zope.interface import providedBy
3435

3536
import json
@@ -86,7 +87,7 @@
8687
class BaseExport(BrowserView):
8788
"""Just DRY"""
8889

89-
show_root_export_option = False
90+
show_export_portal_option = False
9091

9192
def download(self, data):
9293
filename = self.request.form.get("filename")
@@ -429,27 +430,28 @@ def all_translations(self): # noqa: C901
429430
class ExportLocalRoles(BaseExport):
430431
"""Export all local roles"""
431432

432-
show_root_export_option = True
433+
show_export_portal_option = True
433434

434-
def __call__(self, download_to_server=False, exclude_root_settings=False):
435+
def __call__(self, download_to_server=False, exclude_portal=False):
435436
self.title = _(u"Export local roles")
436437
self.download_to_server = download_to_server
437438
if not self.request.form.get("form.submitted", False):
438439
return self.index()
439440

440441
logger.info(u"Exporting local roles...")
441-
data = self.all_localroles(exclude_root_settings)
442+
export_portal = not exclude_portal
443+
data = self.all_localroles(export_portal)
442444
logger.info(u"Exported local roles for %s items", len(data))
443445
self.download(data)
444446

445-
def all_localroles(self, exclude_root_settings=False):
447+
def all_localroles(self, export_portal=True):
446448
self.results = []
447449

448450
portal = api.portal.get()
449451
portal.ZopeFindAndApply(portal, search_sub=True, apply_func=self.get_localroles)
450452

451-
if not exclude_root_settings:
452-
self.get_root_localroles()
453+
if export_portal:
454+
self.get_portal_localroles()
453455

454456
return self.results
455457

@@ -478,10 +480,12 @@ def _get_localroles(self, obj, uid):
478480
return
479481
self.results.append(item)
480482

481-
def get_root_localroles(self):
483+
def get_portal_localroles(self):
482484
site = api.portal.get()
483485
self._get_localroles(site, PORTAL_PLACEHOLDER)
484486

487+
get_root_localroles = deprecation.deprecated(get_portal_localroles, 'get_root_localroles renamed to get_portal_localroles')
488+
485489
def item_hook(self, item):
486490
return item
487491

@@ -525,20 +529,21 @@ def get_position_in_parent(obj, path):
525529
class ExportDefaultPages(BaseExport):
526530
"""Export all default_page settings."""
527531

528-
show_root_export_option = True
532+
show_export_portal_option = True
529533

530-
def __call__(self, download_to_server=False, exclude_root_settings=False):
534+
def __call__(self, download_to_server=False, exclude_portal=False):
531535
self.title = _(u"Export default pages")
532536
self.download_to_server = download_to_server
533537
if not self.request.form.get("form.submitted", False):
534538
return self.index()
535539

536540
logger.info(u"Exporting default pages...")
537-
data = self.all_default_pages(exclude_root_settings)
541+
export_portal = not exclude_portal
542+
data = self.all_default_pages(export_portal)
538543
logger.info(u"Exported %s default pages", len(data))
539544
self.download(data)
540545

541-
def all_default_pages(self, exclude_root_settings=False):
546+
def all_default_pages(self, export_portal=True):
542547
results = []
543548
catalog = api.portal.get_tool("portal_catalog")
544549
for brain in catalog.unrestrictedSearchResults(
@@ -553,11 +558,11 @@ def all_default_pages(self, exclude_root_settings=False):
553558
logger.error(u"brain.getObject() is None %s", brain.getPath())
554559
continue
555560
if IPloneSiteRoot.providedBy(obj):
556-
# Site root is handled below (in Plone 6 it is returned by a catalog search)
561+
# Portal is handled below (in Plone 6 it is returned by a catalog search)
557562
continue
558563

559564
try:
560-
data = self.get_default_page_info(obj)
565+
data = get_default_page_info(obj)
561566
except Exception:
562567
logger.info(
563568
u"Error exporting default_page for %s",
@@ -570,40 +575,43 @@ def all_default_pages(self, exclude_root_settings=False):
570575
results.append(data)
571576

572577
# handle portal
573-
if not exclude_root_settings:
578+
if export_portal:
574579
portal = api.portal.get()
575580
try:
576-
data = self.get_default_page_info(portal)
577-
if data:
578-
data["uuid"] = config.SITE_ROOT
579-
results.append(data)
581+
portal_data = get_default_page_info(portal)
582+
if portal_data:
583+
portal_data["uuid"] = config.SITE_ROOT
584+
results.append(portal_data)
580585
except Exception:
581586
logger.info(u"Error exporting default_page for portal", exc_info=True)
582-
583587
return results
584588

585589
def get_default_page_info(self, obj):
586-
uid = IUUID(obj, None)
590+
return get_default_page_info(obj)
587591

588-
# We use a simplified method to only get index_html
589-
# and the property default_page on the object.
590-
# We don't care about other cases
591-
# 1. obj is folderish, check for a index_html in it
592-
if "index_html" in obj:
593-
default_page = "index_html"
594-
else:
595-
# 2. Check attribute 'default_page'
596-
default_page = getattr(aq_base(obj), "default_page", [])
597-
598-
if default_page and default_page in obj:
599-
default_page_obj = obj.get(default_page)
600-
if default_page_obj:
601-
default_page_uid = IUUID(default_page_obj, None)
602-
return {
603-
"uuid": uid,
604-
"default_page": default_page,
605-
"default_page_uuid": default_page_uid,
606-
}
592+
593+
def get_default_page_info(obj):
594+
uid = IUUID(obj, None)
595+
596+
# We use a simplified method to only get index_html
597+
# and the property default_page on the object.
598+
# We don't care about other cases
599+
# 1. obj is folderish, check for a index_html in it
600+
if "index_html" in obj:
601+
default_page = "index_html"
602+
else:
603+
# 2. Check attribute 'default_page'
604+
default_page = getattr(aq_base(obj), "default_page", [])
605+
606+
if default_page and default_page in obj:
607+
default_page_obj = obj.get(default_page)
608+
if default_page_obj:
609+
default_page_uid = IUUID(default_page_obj, None)
610+
return {
611+
"uuid": uid,
612+
"default_page": default_page,
613+
"default_page_uuid": default_page_uid,
614+
}
607615

608616

609617
if HAS_DISCUSSION: # noqa: C901
@@ -651,28 +659,29 @@ def all_discussions(self):
651659

652660
class ExportPortlets(BaseExport):
653661

654-
show_root_export_option = True
662+
show_export_portal_option = True
655663

656-
def __call__(self, download_to_server=False, exclude_root_settings=False):
664+
def __call__(self, download_to_server=False, exclude_portal=False):
657665
self.title = _(u"Export portlets")
658666
self.download_to_server = download_to_server
659667
if not self.request.form.get("form.submitted", False):
660668
return self.index()
661669

662670
logger.info(u"Exporting portlets...")
663-
data = self.all_portlets(exclude_root_settings)
671+
export_portal = not exclude_portal
672+
data = self.all_portlets(export_portal)
664673
logger.info(u"Exported info for %s items with portlets", len(data))
665674
self.download(data)
666675

667-
def all_portlets(self, exclude_root_settings=False):
676+
def all_portlets(self, export_portal=True):
668677
self.results = []
669678
portal = api.portal.get()
670679
portal.ZopeFindAndApply(
671680
self.context, search_sub=True, apply_func=self.get_portlets
672681
)
673682

674-
if not exclude_root_settings:
675-
self.get_root_portlets()
683+
if export_portal:
684+
self.get_portal_portlets()
676685

677686
return self.results
678687

@@ -698,11 +707,13 @@ def _get_portlets(self, obj, uid):
698707
self.results.append(obj_results)
699708
return
700709

701-
def get_root_portlets(self):
710+
def get_portal_portlets(self):
702711
site = api.portal.get()
703712
self._get_portlets(site, PORTAL_PLACEHOLDER)
704713
return
705714

715+
get_root_portlets = deprecation.deprecated(get_portal_portlets, 'get_root_portlets renamed get_portal_portlets')
716+
706717
def local_portlets_hook(self, portlets):
707718
return portlets
708719

src/collective/exportimport/templates/export_other.pt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
</h1>
1414

1515
<form action="@@export_other" tal:attributes="action request/URL" method="post" enctype="multipart/form-data">
16-
<div class="field mb-3" tal:condition="python: getattr(view, 'show_root_export_option', False)">
16+
<div class="field mb-3" tal:condition="python: getattr(view, 'show_export_portal_option', False)">
1717
<div class="form-check">
18-
<input class="form-check-input" type="checkbox" name="exclude_root_settings:boolean" id="exclude_root">
19-
<label for="exclude_root" class="form-check-label" i18n:translate="">
18+
<input class="form-check-input" type="checkbox" name="exclude_portal:boolean" id="exclude_portal">
19+
<label for="exclude_portal" class="form-check-label" i18n:translate="">
2020
Do not export portal settings.
2121
<span class="formHelp" i18n:translate="">
2222
When you have exported a folder, instead of the entire portal.
@@ -26,7 +26,7 @@
2626
<hr>
2727
</div>
2828

29-
<div class="field mb-3">
29+
<div class="field mb-3">
3030
<div class="form-check">
3131
<input class="form-check-input" type="radio" name="download_to_server:int" value="0" id="download_local" checked="checked">
3232
<label for="download_local" class="form-check-label" i18n:translate="">

0 commit comments

Comments
 (0)