From d4f23a5f48e7a273935cc5dab97b9fbaa1eaca59 Mon Sep 17 00:00:00 2001 From: Faakhir30 Date: Sun, 15 Sep 2024 23:10:56 +0500 Subject: [PATCH] Added create and fetch aliases using csv. --- news/1812.feature | 1 + src/plone/restapi/services/aliases/add.py | 33 ++++++++++- .../restapi/services/aliases/configure.zcml | 9 +++ src/plone/restapi/services/aliases/get.py | 56 ++++++++++++++++--- .../aliases_root_get_csv_format.req | 3 + .../aliases_root_get_csv_format.resp | 6 ++ .../aliases_root_post_csv_format.req | 13 +++++ .../aliases_root_post_csv_format.resp | 2 + src/plone/restapi/tests/test_documentation.py | 37 ++++++++++++ 9 files changed, 149 insertions(+), 11 deletions(-) create mode 100644 news/1812.feature create mode 100644 src/plone/restapi/tests/http-examples/aliases_root_get_csv_format.req create mode 100644 src/plone/restapi/tests/http-examples/aliases_root_get_csv_format.resp create mode 100644 src/plone/restapi/tests/http-examples/aliases_root_post_csv_format.req create mode 100644 src/plone/restapi/tests/http-examples/aliases_root_post_csv_format.resp diff --git a/news/1812.feature b/news/1812.feature new file mode 100644 index 0000000000..85727b674b --- /dev/null +++ b/news/1812.feature @@ -0,0 +1 @@ +Added create and fetch aliases in CSV format. @Faakhir30 diff --git a/src/plone/restapi/services/aliases/add.py b/src/plone/restapi/services/aliases/add.py index 555fbdbe0f..20ea3466b8 100644 --- a/src/plone/restapi/services/aliases/add.py +++ b/src/plone/restapi/services/aliases/add.py @@ -4,14 +4,20 @@ from plone.restapi.deserializer import json_body from plone.restapi.services import Service from Products.CMFPlone.controlpanel.browser.redirects import absolutize_path +from Products.CMFPlone.controlpanel.browser.redirects import RedirectsControlPanel +from Products.statusmessages.interfaces import IStatusMessage from zExceptions import BadRequest from zope.component import getMultiAdapter +from zope.component.hooks import getSite from zope.component import getUtility from zope.interface import alsoProvides from zope.interface import implementer from zope.publisher.interfaces import IPublishTraverse import plone.protect.interfaces +import logging + +logger = logging.getLogger("Plone") @implementer(IPublishTraverse) @@ -83,14 +89,35 @@ def edit_for_navigation_root(self, alias): class AliasesRootPost(Service): """Creates new aliases via controlpanel""" - def reply(self): - data = json_body(self.request) + def _reply_csv(self): + form = self.request.form + if not form.get("file"): + raise BadRequest("No file uploaded") + controlpanel = RedirectsControlPanel(self.context, self.request) storage = getUtility(IRedirectionStorage) - aliases = data.get("items", []) + status = IStatusMessage(self.request) + portal = getSite() + file = form["file"] + controlpanel.upload(file, portal, storage, status) + file.close() + + if err := status.show(): + if err[0].type == "error": + raise BadRequest(err[0].message) + elif err[0].type == "info": + logger.info(err[0].message) + return self.reply_no_content() + def reply(self): # Disable CSRF protection if "IDisableCSRFProtection" in dir(plone.protect.interfaces): alsoProvides(self.request, plone.protect.interfaces.IDisableCSRFProtection) + if "multipart/form-data" in self.request.getHeader("Content-Type"): + return self._reply_csv() + + storage = getUtility(IRedirectionStorage) + data = json_body(self.request) + aliases = data.get("items", []) for alias in aliases: redirection = alias.get("path") diff --git a/src/plone/restapi/services/aliases/configure.zcml b/src/plone/restapi/services/aliases/configure.zcml index e3291cf161..c6499d117a 100644 --- a/src/plone/restapi/services/aliases/configure.zcml +++ b/src/plone/restapi/services/aliases/configure.zcml @@ -12,6 +12,15 @@ name="@aliases" /> + +