Skip to content
This repository has been archived by the owner on Apr 9, 2023. It is now read-only.

Commit

Permalink
Creating Finally events that are used on API and with async call + ex…
Browse files Browse the repository at this point in the history
…ception number
  • Loading branch information
bloodbare committed Nov 29, 2016
1 parent fb2c61b commit 562a51d
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 11 deletions.
4 changes: 4 additions & 0 deletions src/plone.server/plone/server/api/content.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from plone.server.content import createContentInContainer
from plone.server.events import ObjectFinallyCreatedEvent
from plone.server.events import ObjectFinallyDeletedEvent
from plone.server.events import ObjectFinallyModifiedEvent
from plone.server.interfaces import IAbsoluteURL
from plone.server.json.exceptions import DeserializationError
from plone.server.json.interfaces import IResourceDeserializeFromJson
Expand Down Expand Up @@ -141,6 +142,8 @@ async def __call__(self):
str(e),
status=400)

await notify(ObjectFinallyModifiedEvent(self.context))

return Response(response={}, status=204)


Expand Down Expand Up @@ -181,6 +184,7 @@ async def __call__(self):
for user, roles in data['prinrole'].items():
for role in roles:
prinrole.assignRoleToPrincipal(role, user)
await notify(ObjectFinallyModifiedEvent(self.context))


class DefaultDELETE(Service):
Expand Down
10 changes: 3 additions & 7 deletions src/plone.server/plone/server/catalog/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -18,23 +18,19 @@
<!-- index events -->
<subscriber
for="plone.server.interfaces.IResource
zope.lifecycleevent.interfaces.IObjectAddedEvent"
plone.server.interfaces.IObjectFinallyCreatedEvent"
handler=".index.add_object" />
<subscriber
for="plone.server.interfaces.IResource
zope.lifecycleevent.interfaces.IObjectCopiedEvent"
handler=".index.add_object" />
<subscriber
for="plone.server.interfaces.IResource
zope.lifecycleevent.interfaces.IObjectModifiedEvent"
plone.server.interfaces.IObjectFinallyModifiedEvent"
handler=".index.add_object" />
<!-- will need workflow events as well -->


<!-- unindex events -->
<subscriber
for="plone.server.interfaces.IResource
zope.lifecycleevent.interfaces.IObjectRemovedEvent"
plone.server.interfaces.IObjectFinallyDeletedEvent"
handler=".index.remove_object" />


Expand Down
6 changes: 6 additions & 0 deletions src/plone.server/plone/server/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from plone.server.interfaces import INewUserAdded
from plone.server.interfaces import IObjectFinallyCreatedEvent
from plone.server.interfaces import IObjectFinallyDeletedEvent
from plone.server.interfaces import IObjectFinallyModifiedEvent
from zope.interface import implementer
from zope.interface.interfaces import ObjectEvent
from zope.event import subscribers as syncsubscribers
Expand All @@ -25,6 +26,11 @@ class ObjectFinallyDeletedEvent(ObjectEvent):
"""An object has been deleted."""


@implementer(IObjectFinallyModifiedEvent)
class ObjectFinallyModifiedEvent(ObjectEvent):
"""An object has been modified."""


@implementer(INewUserAdded)
class NewUserAdded(object):
"""An object has been created."""
Expand Down
1 change: 1 addition & 0 deletions src/plone.server/plone/server/interfaces/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from plone.server.interfaces.events import INewUserAdded # noqa
from plone.server.interfaces.events import IObjectFinallyCreatedEvent # noqa
from plone.server.interfaces.events import IObjectFinallyDeletedEvent # noqa
from plone.server.interfaces.events import IObjectFinallyModifiedEvent # noqa
from plone.server.interfaces.files import IFile # noqa
from plone.server.interfaces.files import IFileField # noqa
from plone.server.interfaces.files import IFileManager # noqa
Expand Down
6 changes: 6 additions & 0 deletions src/plone.server/plone/server/interfaces/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ class IObjectFinallyDeletedEvent(interfaces.IObjectEvent):
The location will usually be ``None`` for this event."""


class IObjectFinallyModifiedEvent(interfaces.IObjectEvent):
"""An object has been modified.
The location will usually be ``None`` for this event."""


class INewUserAdded(Interface):
"""A new user logged in.
Expand Down
13 changes: 9 additions & 4 deletions src/plone.server/plone/server/traversal.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
from zope.security.proxy import ProxyFactory

import aiohttp
import uuid
import json
import logging
import traceback
Expand Down Expand Up @@ -187,13 +188,15 @@ async def handler(self, request):
view_result = UnauthorizedResponse(
_('Not authorized to render operation'))
except Exception as e:
eid = uuid.uuid4().hex
message = _('Error on execution of view') + eid
logger.error(
"Exception on writing execution",
message,
exc_info=e)
await sync(request)(txn.abort)
view_result = ErrorResponse(
'ServiceError',
_('Error on execution of operation')
message
)
else:
try:
Expand All @@ -202,12 +205,14 @@ async def handler(self, request):
view_result = UnauthorizedResponse(
_('Not authorized to render view'))
except Exception as e:
eid = uuid.uuid4().hex
message = _('Error on execution of view') + eid
logger.error(
"Exception on view execution",
message,
exc_info=e)
view_result = ErrorResponse(
'ViewError',
_('Error on execution of view'))
message)

# Make sure its a Response object to send to renderer
if not isinstance(view_result, Response):
Expand Down

0 comments on commit 562a51d

Please sign in to comment.