Skip to content

Commit

Permalink
Move to plone 6 0 11 (#260)
Browse files Browse the repository at this point in the history
ready to works with plone 6.0.11 and plone.restapi 9.6.1
  • Loading branch information
luca-bellenghi committed May 3, 2024
1 parent 5ff1087 commit 079462d
Show file tree
Hide file tree
Showing 12 changed files with 85 additions and 164 deletions.
6 changes: 5 additions & 1 deletion CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@ Changelog
6.2.9 (unreleased)
------------------

- Aggiunto la cartella "Altri Documenti" sulla persona
- Add this folder "Altri Documenti" under "Persona pubblica"
[lucabel]
- Code porting to work with both plone 6.0.10.x and 6.0.11
due to some core egg update
Code porting to work with the new plone.restapi 9.6.1 version
[lucabel]


Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@
"redturtle.volto>=5.0.0",
"redturtle.bandi",
"z3c.unconfigure",
"plone.restapi<9.6.1",
"plone.restapi",
"eea.api.taxonomy",
"openpyxl",
"collective.volto.enhancedlinks",
Expand Down
27 changes: 1 addition & 26 deletions src/design/plone/contenttypes/browser/utils/check_servizi.py
Original file line number Diff line number Diff line change
@@ -1,45 +1,20 @@
# -*- coding: utf-8 -*-
from DateTime import DateTime
from design.plone.contenttypes.utils import text_in_block
from openpyxl import Workbook
from openpyxl.styles import Alignment
from openpyxl.styles import Font
from openpyxl.styles import PatternFill
from openpyxl.utils import get_column_letter
from plone import api
from plone.restapi.behaviors import IBlocks
from plone.restapi.indexers import SearchableText_blocks
from Products.Five import BrowserView
from zope.interface import implementer

import io


FLAG = '<i class="fa-solid fa-check"></i>'


def text_in_block(blocks):
@implementer(IBlocks)
class FakeObject(object):
"""
We use a fake object to use SearchableText Indexer
"""

def Subject(self):
return ""

def __init__(self, blocks, blocks_layout):
self.blocks = blocks
self.blocks_layout = blocks_layout
self.id = ""
self.title = ""
self.description = ""

if not blocks:
return None
fakeObj = FakeObject(blocks.get("blocks", ""), blocks.get("blocks_layout", ""))
return SearchableText_blocks(fakeObj)()


class CheckServizi(BrowserView):
cds = None

Expand Down
23 changes: 21 additions & 2 deletions src/design/plone/contenttypes/indexers/pagina_argomento.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,24 @@
# -*- coding: utf-8 -*-
from design.plone.contenttypes.interfaces.pagina_argomento import IPaginaArgomento
from plone.app.dexterity.textindexer.interfaces import IDynamicTextIndexExtender
from plone.restapi.indexers import SearchableText_blocks
from zope.component import adapter
from zope.interface import implementer


HAVE_REST_API_PRE_961 = False

try:
# plone 6.0.11 with last plone.restapi>9.6.0
from plone.app.contenttypes.indexers import SearchableText
from plone.restapi.indexers import get_blocks_text
from plone.restapi.indexers import text_strip

except ImportError:
# plone 6.0.10.1 with plone.restapi<9.6.1
HAVE_REST_API_PRE_961 = True
from plone.restapi.indexers import SearchableText_blocks


@adapter(IPaginaArgomento)
@implementer(IDynamicTextIndexExtender)
class SearchableTextExtender(object):
Expand All @@ -14,4 +27,10 @@ def __init__(self, context):

def __call__(self):
"""Extend the searchable text with blocks"""
return SearchableText_blocks(self.context)()
if HAVE_REST_API_PRE_961:
return SearchableText_blocks(self.context)()
else:
blocks_text = get_blocks_text(self.context)
std_text = SearchableText(self.context)
blocks_text.append(std_text)
return text_strip(blocks_text)
27 changes: 1 addition & 26 deletions src/design/plone/contenttypes/restapi/deserializers/documento.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
# -*- coding: utf-8 -*-
from design.plone.contenttypes.interfaces.documento import IDocumento
from plone.restapi.behaviors import IBlocks
from design.plone.contenttypes.utils import text_in_block
from plone.restapi.deserializer import json_body
from plone.restapi.deserializer.dxcontent import DeserializeFromJson
from plone.restapi.indexers import SearchableText_blocks
from plone.restapi.interfaces import IDeserializeFromJson
from zExceptions import BadRequest
from zope.component import adapter
Expand All @@ -24,30 +23,6 @@ def new_error(message):
return {"error": "ValidationError", "message": message}


def text_in_block(blocks):
@implementer(IBlocks)
class FakeObject(object):
"""
We use a fake object to use SearchableText Indexer
"""

def Subject(self):
return ""

def __init__(self, blocks, blocks_layout):
self.blocks = blocks
self.blocks_layout = blocks_layout
self.id = ""
self.title = ""
self.description = ""

if not blocks:
return None

fakeObj = FakeObject(blocks.get("blocks", ""), blocks.get("blocks_layout", ""))
return SearchableText_blocks(fakeObj)()


@implementer(IDeserializeFromJson)
@adapter(IDocumento, Interface)
class DeserializeDocumentoFromJson(DeserializeFromJson):
Expand Down
27 changes: 1 addition & 26 deletions src/design/plone/contenttypes/restapi/deserializers/news.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
# -*- coding: utf-8 -*-
from design.plone.contenttypes.utils import text_in_block
from plone.app.contenttypes.interfaces import INewsItem
from plone.restapi.behaviors import IBlocks
from plone.restapi.deserializer import json_body
from plone.restapi.deserializer.dxcontent import DeserializeFromJson
from plone.restapi.indexers import SearchableText_blocks
from plone.restapi.interfaces import IDeserializeFromJson
from zExceptions import BadRequest
from zope.component import adapter
Expand All @@ -23,30 +22,6 @@ def new_error(message):
return {"error": "ValidationError", "message": message}


def text_in_block(blocks):
@implementer(IBlocks)
class FakeObject(object):
"""
We use a fake object to use SearchableText Indexer
"""

def Subject(self):
return ""

def __init__(self, blocks, blocks_layout):
self.blocks = blocks
self.blocks_layout = blocks_layout
self.id = ""
self.title = ""
self.description = ""

if not blocks:
return None

fakeObj = FakeObject(blocks.get("blocks", ""), blocks.get("blocks_layout", ""))
return SearchableText_blocks(fakeObj)()


@implementer(IDeserializeFromJson)
@adapter(INewsItem, Interface)
class DeserializeNewsFromJson(DeserializeFromJson):
Expand Down
27 changes: 1 addition & 26 deletions src/design/plone/contenttypes/restapi/deserializers/servizio.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
# -*- coding: utf-8 -*-
from design.plone.contenttypes.interfaces.servizio import IServizio
from plone.restapi.behaviors import IBlocks
from design.plone.contenttypes.utils import text_in_block
from plone.restapi.deserializer import json_body
from plone.restapi.deserializer.dxcontent import DeserializeFromJson
from plone.restapi.indexers import SearchableText_blocks
from plone.restapi.interfaces import IDeserializeFromJson
from zExceptions import BadRequest
from zope.component import adapter
Expand All @@ -27,30 +26,6 @@ def new_error(message):
return {"error": "ValidationError", "message": message}


def text_in_block(blocks):
@implementer(IBlocks)
class FakeObject(object):
"""
We use a fake object to use SearchableText Indexer
"""

def Subject(self):
return ""

def __init__(self, blocks, blocks_layout):
self.blocks = blocks
self.blocks_layout = blocks_layout
self.id = ""
self.title = ""
self.description = ""

if not blocks:
return None

fakeObj = FakeObject(blocks.get("blocks", ""), blocks.get("blocks_layout", ""))
return SearchableText_blocks(fakeObj)()


@implementer(IDeserializeFromJson)
@adapter(IServizio, Interface)
class DeserializeServizioFromJson(DeserializeFromJson):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
# -*- coding: utf-8 -*-
from design.plone.contenttypes.interfaces.unita_organizzativa import IUnitaOrganizzativa
from plone.restapi.behaviors import IBlocks
from design.plone.contenttypes.utils import text_in_block
from plone.restapi.deserializer import json_body
from plone.restapi.deserializer.dxcontent import DeserializeFromJson
from plone.restapi.indexers import SearchableText_blocks
from plone.restapi.interfaces import IDeserializeFromJson
from zExceptions import BadRequest
from zope.component import adapter
Expand All @@ -21,30 +20,6 @@ def new_error(message):
return {"error": "ValidationError", "message": message}


def text_in_block(blocks):
@implementer(IBlocks)
class FakeObject(object):
"""
We use a fake object to use SearchableText Indexer
"""

def Subject(self):
return ""

def __init__(self, blocks, blocks_layout):
self.blocks = blocks
self.blocks_layout = blocks_layout
self.id = ""
self.title = ""
self.description = ""

if not blocks:
return None

fakeObj = FakeObject(blocks.get("blocks", ""), blocks.get("blocks_layout", ""))
return SearchableText_blocks(fakeObj)()


@implementer(IDeserializeFromJson)
@adapter(IUnitaOrganizzativa, Interface)
class DeserializeUnitaOrganizzativaFromJson(DeserializeFromJson):
Expand All @@ -58,7 +33,6 @@ def __call__(
is_post = method == "POST"
is_patch = method == "PATCH"
errors = []

if list(data.keys()) != ["ordering"]:
title = data.get("title")
description = data.get("description")
Expand Down
27 changes: 1 addition & 26 deletions src/design/plone/contenttypes/restapi/deserializers/venue.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
# -*- coding: utf-8 -*-
from collective.venue.interfaces import IVenue
from plone.restapi.behaviors import IBlocks
from design.plone.contenttypes.utils import text_in_block
from plone.restapi.deserializer import json_body
from plone.restapi.deserializer.dxcontent import DeserializeFromJson
from plone.restapi.indexers import SearchableText_blocks
from plone.restapi.interfaces import IDeserializeFromJson
from zExceptions import BadRequest
from zope.component import adapter
Expand All @@ -21,30 +20,6 @@ def new_error(message):
return {"error": "ValidationError", "message": message}


def text_in_block(blocks):
@implementer(IBlocks)
class FakeObject(object):
"""
We use a fake object to use SearchableText Indexer
"""

def Subject(self):
return ""

def __init__(self, blocks, blocks_layout):
self.blocks = blocks
self.blocks_layout = blocks_layout
self.id = ""
self.title = ""
self.description = ""

if not blocks:
return None

fakeObj = FakeObject(blocks.get("blocks", ""), blocks.get("blocks_layout", ""))
return SearchableText_blocks(fakeObj)()


@implementer(IDeserializeFromJson)
@adapter(IVenue, Interface)
class DeserializeLuogoFromJson(DeserializeFromJson):
Expand Down
1 change: 0 additions & 1 deletion src/design/plone/contenttypes/upgrades/to_7300.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@


def to_7300(context):

mapping = {
# portal_type
"Documento Personale": {
Expand Down
44 changes: 44 additions & 0 deletions src/design/plone/contenttypes/utils.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,28 @@
# -*- coding: utf-8 -*-
from design.plone.contenttypes.controlpanels.settings import IDesignPloneSettings
from plone import api
from plone.restapi.behaviors import IBlocks
from uuid import uuid4
from zope.interface import implementer

import json
import logging
import six


HAVE_REST_API_PRE_961 = False

try:
# plone 6.0.11 with last plone.restapi>9.6.0
from plone.restapi.indexers import get_blocks_text
from plone.restapi.indexers import text_strip

except ImportError:
# plone 6.0.10.1 with plone.restapi<9.6.1
HAVE_REST_API_PRE_961 = True
from plone.restapi.indexers import SearchableText_blocks


logger = logging.getLogger(__name__)


Expand All @@ -32,3 +47,32 @@ def create_default_blocks(context):
title_uuid = str(uuid4())
context.blocks = {title_uuid: {"@type": "title"}}
context.blocks_layout = {"items": [title_uuid]}


def text_in_block(blocks):
@implementer(IBlocks)
class FakeObject(object):
"""
We use a fake object to use SearchableText Indexer
"""

def Subject(self):
return ""

def __init__(self, blocks, blocks_layout):
self.blocks = blocks
self.blocks_layout = blocks_layout
self.id = ""
self.title = ""
self.description = ""

if not blocks:
return None

fakeObj = FakeObject(blocks.get("blocks", ""), blocks.get("blocks_layout", ""))

if HAVE_REST_API_PRE_961:
return SearchableText_blocks(fakeObj)()
else:
blocks_text = get_blocks_text(fakeObj)
return text_strip(blocks_text)
Loading

0 comments on commit 079462d

Please sign in to comment.