Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

handlers.py 940B

1234567891011121314151617181920212223242526272829303132
  1. # -*- coding: utf-8 -*-
  2. from plone.uuid.interfaces import ATTRIBUTE_NAME
  3. from plone.uuid.interfaces import IAttributeUUID
  4. from plone.uuid.interfaces import IUUIDGenerator
  5. from zope.component import adapter
  6. from zope.component import queryUtility
  7. from zope.lifecycleevent.interfaces import IObjectCopiedEvent
  8. from zope.lifecycleevent.interfaces import IObjectCreatedEvent
  9. try:
  10. from Acquisition import aq_base
  11. except ImportError:
  12. aq_base = lambda v: v # soft-dependency on Zope2, fallback
  13. @adapter(IAttributeUUID, IObjectCreatedEvent)
  14. def addAttributeUUID(obj, event):
  15. if not IObjectCopiedEvent.providedBy(event):
  16. if getattr(aq_base(obj), ATTRIBUTE_NAME, None):
  17. return # defensive: keep existing UUID on non-copy create
  18. generator = queryUtility(IUUIDGenerator)
  19. if generator is None:
  20. return
  21. uuid = generator()
  22. if not uuid:
  23. return
  24. setattr(obj, ATTRIBUTE_NAME, uuid)