Skip to content

Commit

Permalink
WIP: Serialize (sub)dossiers for a transfer in full_content mode.
Browse files Browse the repository at this point in the history
  • Loading branch information
lukasgraf committed Mar 22, 2024
1 parent 06d60b8 commit d940dd8
Showing 1 changed file with 50 additions and 1 deletion.
51 changes: 50 additions & 1 deletion opengever/dossiertransfer/api/serializers.py
@@ -1,9 +1,12 @@
from opengever.base.interfaces import IOpengeverBaseLayer
from opengever.dossier.behaviors.dossier import IDossierMarker
from opengever.dossiertransfer.model import DossierTransfer
from plone import api
from plone.restapi.interfaces import ISerializeToJson
from plone.restapi.serializer.converters import json_compatible
from zope.component import adapter
from zope.component import getMultiAdapter
from zope.globalrequest import getRequest
from zope.interface import implementer


Expand Down Expand Up @@ -59,8 +62,54 @@ def __init__(self, transfer):
def __call__(self):
# TODO
content = {
'dossiers': [],
'dossiers': DossiersSerializer(self.transfer)(),
'documents': [],
'contacts': [],
}
return content


class DossiersSerializer(object):
"""Returns the list of (sub)dossiers included in the transfer.
"""

ignored_keys = (
'@components',
'items',
'items_total',
'next_item',
'previous_item',
)

def __init__(self, transfer):
self.transfer = transfer

def __call__(self):
# This currently returns a flat list of dossiers, ordered by path
# (parents before children, so in the order they should be created).
# Depending on what is easiest to use on the deserialization side, we
# might want to change this to return a hierarchical structure.
serialized_dossiers = []

catalog = api.portal.get_tool('portal_catalog')

root_dossier = api.content.uuidToObject(self.transfer.root)
query = {
'path': '/'.join(root_dossier.getPhysicalPath()),
'object_provides': IDossierMarker.__identifier__,
'sort_on': 'path',
}
all_dossiers = catalog.unrestrictedSearchResults(**query)

for brain in all_dossiers:
dossier = brain.getObject()
serialized = getMultiAdapter(
(dossier, getRequest()), ISerializeToJson)()

for key in self.ignored_keys:
serialized.pop(key, None)

serialized['@id'] = dossier.absolute_url()
serialized_dossiers.append(serialized)

return serialized_dossiers

0 comments on commit d940dd8

Please sign in to comment.