![Oracle Drags Its Feet in the JavaScript Trademark Dispute](https://cdn.sanity.io/images/cgdhsj6q/production/919c3b22c24f93884c548d60cbb338e819ff2435-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
This is a minimal package that can be used to obtain a universally unique identifier (UUID) for an object.
The default implementation uses the Python standard library uuid
module
to generate an RFC 4122-compliant UUID, using the uuid4()
function. It
will assign a UUID upon object creation (by subscribing to
IObjectCreatedEvent
from zope.lifecycleevent
) and store it in an
attribute on the object.
Why use an attribute and not annotations? The most common form of annotation
is the one provided by IAttributeAnnotations
. This stores annotations in
a BTree in an attribute called __annotations__
, which means that
annotation values do not end up in the same ZODB persistent object as the
parent. This is good for "large" values, but not very good for small ones
that are frequently required, as it requires a separate ZODB object load.
To automatically assign a UUID to your objects using the default implementation outlined above, you should:
Make sure they implement plone.uuid.interfaces.IAttributeUUID
. You
can do this in code, via the implements()
directive, or in ZCML, with
a statement like::
Make sure that an IObjectCreatedEvent
is fired for this object when it
is first created.
Once the event handler has triggered, you can obtain a UUID by adapting the
object to the IUUID
interface::
from plone.uuid.interfaces import IUUID
uuid = IUUID(context)
The uuid
variable will now be a (byte) string containing a UUID. If the
UUID has not yet been assigned, adaptation will fail with a TypeError
.
If you would rather get None
instead of a TypeError
, you can do::
uuid = IUUID(context, None)
If you require a UUID in a page template or remotely, you can use the
@@uuid
view, which is registered for all objects that provide the
IUUIDAware
marker interface (which is a super-interface of the
IAttributeUUID
marker seen above).
For example::
<div tal:attributes="id string:uuid-${context/@@uuid}">
...
</div>
The view simply returns the UUID string as looked up by the IUUID
adapter.
There are two primary customisation points for this package:
You can change the default UUID generating algorithm by overriding the
unnamed utility providing the IUUIDGenerator
interface. The default
implementation simply calls uuid.uuid4()
and casts the result to a
str
.
You can change the UUID storage by providing a custom IUUID
adapter
implementation. If you do this, you must also provide a mechanism for
assigning UUIDs upon object creation, usually via an event handler. To
obtain a UUID, use the IUUIDGenerator
interface::
from zope.component import getUtility from plone.uuid.interfaces import IUUIDGenerator
generator = getUtility(IUUIDGenerator) uuid = generator()
You should also make sure that instances with a UUID provide a sub-interface
of plone.uuid.interfaces.IUUIDAware
.
.. You should NOT be adding new change log entries to this file. You should create a file in the news directory instead. For helpful instructions, please see: https://github.com/plone/plone.releaser/blob/master/ADD-A-NEWS-ITEM.rst
.. towncrier release notes start
Internal:
Breaking changes:
Internal:
Bug fixes:
Bug fixes:
Fix package dependencies. [gforcada]
Fix documentation and uuid generator class name to reflect the fact that we use the uuid4
implementation instead of uuid1
.
[thet]
Bug fixes:
Update setup.py url to point to github. [esteele]
Fixed issues preventing tests passing on Python 3 [datakurre]
Use zope.browserpage. [hannosch]
Defensive UUID assignment in addAttributeUUID() handler: keep existing UUID value if handler called more than once, except in case of object copy event, where original and destination should have distinct UUID. [seanupton]
Release 1.0 Final [esteele]
Add MANIFEST.in. [WouterVH]
FAQs
UUIDs for content items
We found that plone.uuid demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 5 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.