Products.CMFUid


NameProducts.CMFUid JSON
Version 4.2 PyPI version JSON
download
home_pagehttps://github.com/zopefoundation/Products.CMFUid
SummaryUid product for the Zope Content Management Framework
upload_time2024-01-23 21:17:58
maintainer
docs_urlNone
authorZope Foundation and Contributors
requires_python>=3.7
licenseZPL 2.1
keywords web application server zope cmf
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            .. image:: https://github.com/zopefoundation/Products.CMFUid/actions/workflows/tests.yml/badge.svg
        :target: https://github.com/zopefoundation/Products.CMFUid/actions/workflows/tests.yml

.. image:: https://coveralls.io/repos/github/zopefoundation/Products.CMFUid/badge.svg
        :target: https://coveralls.io/github/zopefoundation/Products.CMFUid

.. image:: https://img.shields.io/pypi/v/Products.CMFUid.svg
        :target: https://pypi.org/project/Products.CMFUid/
        :alt: Current version on PyPI

.. image:: https://img.shields.io/pypi/pyversions/Products.CMFUid.svg
        :target: https://pypi.org/project/Products.CMFUid/
        :alt: Supported Python versions

Products.CMFUid
===============

.. contents::

CMFUid introduces a simple unique id implementation.

Implementation
--------------

The supplied tools attach the unique ids to the objects. The objects
do not have to be aware of unique ids.

The current implementation depends on the portal catalog to find an 
object of a given unique id. The interfaces do not imply the use
of the catalog (except the IUniqueIdBrainQuery).

Which Tool does What?
---------------------

The 'portal_uidgenerator' tools responsibility is to generate 
unique ids. The 'portal_uidannotation' tool is responsible to 
attach unique ids to a content object, and enforce rules about
what happens on object move/create/delete. The 'portal_uidhandler' 
manages registering and accessing unique ids. 

This design was chosen to allow users replacing only parts of
the functionality without having to understand the whole thing.

Unique Id API
-------------

'portal_uidhandler' implementing 'IUniqueIdHandler' is the main 
API for playing with unique ids.
    
Usage
-----

'portal_uidhandler' fully implements IUniqueIdHandler (IUniqueIdSet
for registering/unregistering unique ids, IUniqueIdQuery for queries
and IUniqueIdBrainQuery for more efficient queries by returning 
catalog brains instead of objects).

The current implementation of get/queryBrain and get/queryObject 
do not return invisible objects (and brains of invisible objects).
By invisible objects, we mean objects that would be filtered out
by portal_catalog.searchResults due to expiry/effective date and/or
user roles.

It is often necessary to avoid this filtering in an application.
To do this, use the unrestrictedGet/QueryBrain and
unrestrictedGet/QueryObject as this will avoid 'None' results.

Have a look at the interfaces.

CMFUid's functionality is used by CMFDefault's favorite content type 
to follow linked objects. The favorite content type works as before if 
CMFUid is not installed. 


Update 2007-03-30
-----------------

The annotation code has been updated to use events for assigning/removing 
uids.  The settings for this live in the portal_uidannotation tool.

The default behaviour is:

- uids are NOT assigned when an object is created
  (it is assumed that other code is responsible for this)

- when an object is moved, a UID is not changed

- when an object is imported, any EXISTING UID is removed
  (this can be controlled via the 'remove_on_add' property)

- when an object is copied, any EXISTING UID is removed
  (this can be controlled via the 'remove_on_clone' property)

A more natural behaviour is for UIDs to be assigned automatically on 
creation.  To enable this feature:

- tick the 'assign UIDs on add' tickbox
  (uids will now be assigned when content is added or imported and any
  EXISTING uid will be replaced)

- tick the 'assign UIDs on copy' tickbox
  (objects will get a NEW uid when they are copied which will replace 
  any EXISTING uid)

In order to preserve the original behaviour of the tool, automatic 
assignment of uids is NOT enabled by default - it must be turned on in 
the uidannotation tool.

The behaviour is hooked in based on object creating/deletion/move events
for any IContentish objects.  The event handlers live in the 
UniqueIdAnnotation tool.


------------------------------------------------------------

Products.CMFUid Changelog
=========================

4.2 (2024-01-23)
----------------

- Fix ``DeprecationWarning``: import ``IObjectAddedEvent`` from ``zope.lifecycleevent``.


4.1 (2023-10-02)
----------------

- Modified the code of ``handleUidAnnotationEvent`` to check if both the
  annotation tool and the UID tool exist before using them. This change
  ensures that the code won't run unless both tools are available.


4.0 (2023-02-01)
----------------

- Drop support for Python 2.7, 3.5, 3.6.


3.5 (2022-12-16)
----------------

- Fix insidious buildout configuration bug for tests against Zope 4.

- Add support for Python 3.11.


3.4 (2022-07-21)
----------------

- When an object is reindexed after its UID is set,
  only reindex the ``cmf_uid`` index rather than all indexes.


3.3 (2022-07-13)
----------------

- Add support for Python 3.10.


3.2.0 (2021-03-15)
------------------

- Add support for Python 3.9.

- Change package structure to move package code into a ``src`` subfolder.


3.1.0 (2020-09-28)
------------------

- Fixed deprecation warning for zope.component.interfaces.IObjectEvent.

- Drop support for ``python setup.py test`` which is broken in Python 3.7+.


3.0.2 (2020-06-24)
------------------

- Clean up and sanitize package and tests configurations

- Remove DeprecationWarning: "InitializeClass is deprecated.
  Please import from AccessControl.class_init."
  Works now with Zope 5


3.0.1 (2018-11-07)
------------------

- fix test isolation problems
  [petschki]


3.0 (2018-07-05)
----------------

- Require `Zope >= 4`.

- Add support for Python 3.5 and 3.6.

- Adapt tests to the new indexing operations queueing.
  Part of PLIP 1343: https://github.com/plone/Products.CMFPlone/issues/1343
  [gforcada]


2.3.0-beta (2012-03-21)
-----------------------

- Made sure converted tools are used as utilities.

- Require at least Zope 2.13.12.


2.2.1 (2010-07-04)
------------------

- Deal with deprecation warnings for Zope 2.13.

- Fix markup error (Chameleon compatibility)


2.2.0 (2010-01-04)
------------------

- no changes from version 2.2.0-beta


2.2.0-beta (2009-12-06)
-----------------------

- no changes from version 2.2.0-alpha


2.2.0-alpha (2009-11-13)
------------------------

- moved the Zope dependency to version 2.12.0b3dev

- Cleaned up / normalized imports:

  o Don't import from Globals;  instead, use real locations.

  o Make other imports use the actual source module, rather than an
    intermediate (e.g., prefer importing 'ClassSecurityInfo' from
    'AccessControl.SecurityInfo' rather than from 'AccessControl').

- Add missing utility registration for IUniqueIdHandler.  See
  https://bugs.launchpad.net/bugs/299058 .

- UniqueIdHandlerTool: Call the reindexObject attribute of the object
  getting a uid, rather than portal_catalog's reindexObject.  This is
  needed to properly handle objects like the portal itself which shouldn't
  get catalogued ever.

- Removed redundant and unexpected code to auto-create catalog index and
  column for the UID handler tool. The index and column are already
  created by the default CMFUid GenericSetup profile.
  (http://www.zope.org/Collectors/CMF/472)


2.1.2 (2008-09-13)
------------------

- no changes from 2.1.2-beta


2.1.2-beta (2008-08-26)
-----------------------

- completed devolution from monolithic CMF package into its component
  products that are distributed as eggs from PyPI.

- testing: Base UidEventZCMLLayer on ZopeTestCase.layer.ZopeLite.

- UniqueIdHandlerTool: Use %r instead of %s in error messages, so
  we don't trip over non-ASCII representations (e.g. File and Image).


2.1.1 (2008-01-06)
------------------

- no changes


2.1.1-beta(2007-12/29)
----------------------

- Testing: Derive test layers from ZopeLite layer if available.


2.1.0 (2007-08-08)
------------------

- Fixed all componentregistry.xml files to use plain object paths and strip
  and slashes. GenericSetup does only support registering objects which are
  in the site root.


2.1.0-beta2 (2007-07-12)
------------------------

- moved the Zope dependency to version 2.10.4

- Remove antique usage of marker attributes in favor of interfaces,
  leaving BBB behind for places potentially affecting third-party code.
  (http://www.zope.org/Collectors/CMF/440)

- Add POST-only protections to security critical methods.
  http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-0240)

- UniqueIdAnnotationTool: Annotation handling has been switched
  from triggering it through old-style manage_*-methods to using
  events. UID assigning behavior has been made more flexible. Please
  review CMFUid/README.txt for information about the current
  behavior and the new features.
  (http://www.zope.org/Collectors/CMF/474)


2.1.0-beta (2007-03-09)
-----------------------

- moved the Zope dependency to verson 2.10.2

- Tool lookup and registration is now done "the Zope 3 way" as utilities, see
  http://svn.zope.org/CMF/branches/2.1/docs/ToolsAreUtilities.stx?view=auto

- UniqueIdHandlerTool: Touching the internal UID value on a
  content item will not cause reindexing all indices anymore, only the
  specific UID index will be touched.
  (http://www.zope.org/Collectors/CMF/469)


2.1.0-alpha2 (2006-11-23)
-------------------------

- moved the Zope dependency to version 2.10.1

- Fixed test breakage induced by use of Z3 pagetemplates in Zope 2.10+.

- browser views: Added some zope.formlib based forms.

- testing: Added test layers for setting up ZCML.


2.1.0-alpha (2006-10-09)
------------------------

- skins: Changed encoding of translated portal_status_messages.
  Now getBrowserCharset is used to play nice with Five forms. Customized
  setRedirect and getMainGlobals scripts have to be updated.

- Profiles: All profiles are now registered by ZCML.

- ZClasses: Removed unmaintained support for ZClasses.
  Marked the 'initializeBases*' methods as deprecated.

- Content: Added IFactory utilities for all content classes.
  They are now used by default instead of the old constructor methods.

- Content: All content classes are now registered by ZCML.
  ContentInit is still used to register oldstyle constructors.

- setup handlers: Removed support for CMF 1.5 CMFSetup profiles.


Earlier releases
----------------

For a complete list of changes before version 2.1.0-alpha, see the HISTORY.txt
file on the CMF-2.1 branch:
http://svn.zope.org/CMF/branches/2.1/HISTORY.txt?view=auto

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/zopefoundation/Products.CMFUid",
    "name": "Products.CMFUid",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "",
    "keywords": "web application server zope cmf",
    "author": "Zope Foundation and Contributors",
    "author_email": "zope-dev@zope.dev",
    "download_url": "https://files.pythonhosted.org/packages/77/f5/9bd554fd5adfc29ab2d49eb027b9852ff9277ef657cf627d1db396c33083/Products.CMFUid-4.2.tar.gz",
    "platform": null,
    "description": ".. image:: https://github.com/zopefoundation/Products.CMFUid/actions/workflows/tests.yml/badge.svg\n        :target: https://github.com/zopefoundation/Products.CMFUid/actions/workflows/tests.yml\n\n.. image:: https://coveralls.io/repos/github/zopefoundation/Products.CMFUid/badge.svg\n        :target: https://coveralls.io/github/zopefoundation/Products.CMFUid\n\n.. image:: https://img.shields.io/pypi/v/Products.CMFUid.svg\n        :target: https://pypi.org/project/Products.CMFUid/\n        :alt: Current version on PyPI\n\n.. image:: https://img.shields.io/pypi/pyversions/Products.CMFUid.svg\n        :target: https://pypi.org/project/Products.CMFUid/\n        :alt: Supported Python versions\n\nProducts.CMFUid\n===============\n\n.. contents::\n\nCMFUid introduces a simple unique id implementation.\n\nImplementation\n--------------\n\nThe supplied tools attach the unique ids to the objects. The objects\ndo not have to be aware of unique ids.\n\nThe current implementation depends on the portal catalog to find an \nobject of a given unique id. The interfaces do not imply the use\nof the catalog (except the IUniqueIdBrainQuery).\n\nWhich Tool does What?\n---------------------\n\nThe 'portal_uidgenerator' tools responsibility is to generate \nunique ids. The 'portal_uidannotation' tool is responsible to \nattach unique ids to a content object, and enforce rules about\nwhat happens on object move/create/delete. The 'portal_uidhandler' \nmanages registering and accessing unique ids. \n\nThis design was chosen to allow users replacing only parts of\nthe functionality without having to understand the whole thing.\n\nUnique Id API\n-------------\n\n'portal_uidhandler' implementing 'IUniqueIdHandler' is the main \nAPI for playing with unique ids.\n    \nUsage\n-----\n\n'portal_uidhandler' fully implements IUniqueIdHandler (IUniqueIdSet\nfor registering/unregistering unique ids, IUniqueIdQuery for queries\nand IUniqueIdBrainQuery for more efficient queries by returning \ncatalog brains instead of objects).\n\nThe current implementation of get/queryBrain and get/queryObject \ndo not return invisible objects (and brains of invisible objects).\nBy invisible objects, we mean objects that would be filtered out\nby portal_catalog.searchResults due to expiry/effective date and/or\nuser roles.\n\nIt is often necessary to avoid this filtering in an application.\nTo do this, use the unrestrictedGet/QueryBrain and\nunrestrictedGet/QueryObject as this will avoid 'None' results.\n\nHave a look at the interfaces.\n\nCMFUid's functionality is used by CMFDefault's favorite content type \nto follow linked objects. The favorite content type works as before if \nCMFUid is not installed. \n\n\nUpdate 2007-03-30\n-----------------\n\nThe annotation code has been updated to use events for assigning/removing \nuids.  The settings for this live in the portal_uidannotation tool.\n\nThe default behaviour is:\n\n- uids are NOT assigned when an object is created\n  (it is assumed that other code is responsible for this)\n\n- when an object is moved, a UID is not changed\n\n- when an object is imported, any EXISTING UID is removed\n  (this can be controlled via the 'remove_on_add' property)\n\n- when an object is copied, any EXISTING UID is removed\n  (this can be controlled via the 'remove_on_clone' property)\n\nA more natural behaviour is for UIDs to be assigned automatically on \ncreation.  To enable this feature:\n\n- tick the 'assign UIDs on add' tickbox\n  (uids will now be assigned when content is added or imported and any\n  EXISTING uid will be replaced)\n\n- tick the 'assign UIDs on copy' tickbox\n  (objects will get a NEW uid when they are copied which will replace \n  any EXISTING uid)\n\nIn order to preserve the original behaviour of the tool, automatic \nassignment of uids is NOT enabled by default - it must be turned on in \nthe uidannotation tool.\n\nThe behaviour is hooked in based on object creating/deletion/move events\nfor any IContentish objects.  The event handlers live in the \nUniqueIdAnnotation tool.\n\n\n------------------------------------------------------------\n\nProducts.CMFUid Changelog\n=========================\n\n4.2 (2024-01-23)\n----------------\n\n- Fix ``DeprecationWarning``: import ``IObjectAddedEvent`` from ``zope.lifecycleevent``.\n\n\n4.1 (2023-10-02)\n----------------\n\n- Modified the code of ``handleUidAnnotationEvent`` to check if both the\n  annotation tool and the UID tool exist before using them. This change\n  ensures that the code won't run unless both tools are available.\n\n\n4.0 (2023-02-01)\n----------------\n\n- Drop support for Python 2.7, 3.5, 3.6.\n\n\n3.5 (2022-12-16)\n----------------\n\n- Fix insidious buildout configuration bug for tests against Zope 4.\n\n- Add support for Python 3.11.\n\n\n3.4 (2022-07-21)\n----------------\n\n- When an object is reindexed after its UID is set,\n  only reindex the ``cmf_uid`` index rather than all indexes.\n\n\n3.3 (2022-07-13)\n----------------\n\n- Add support for Python 3.10.\n\n\n3.2.0 (2021-03-15)\n------------------\n\n- Add support for Python 3.9.\n\n- Change package structure to move package code into a ``src`` subfolder.\n\n\n3.1.0 (2020-09-28)\n------------------\n\n- Fixed deprecation warning for zope.component.interfaces.IObjectEvent.\n\n- Drop support for ``python setup.py test`` which is broken in Python 3.7+.\n\n\n3.0.2 (2020-06-24)\n------------------\n\n- Clean up and sanitize package and tests configurations\n\n- Remove DeprecationWarning: \"InitializeClass is deprecated.\n  Please import from AccessControl.class_init.\"\n  Works now with Zope 5\n\n\n3.0.1 (2018-11-07)\n------------------\n\n- fix test isolation problems\n  [petschki]\n\n\n3.0 (2018-07-05)\n----------------\n\n- Require `Zope >= 4`.\n\n- Add support for Python 3.5 and 3.6.\n\n- Adapt tests to the new indexing operations queueing.\n  Part of PLIP 1343: https://github.com/plone/Products.CMFPlone/issues/1343\n  [gforcada]\n\n\n2.3.0-beta (2012-03-21)\n-----------------------\n\n- Made sure converted tools are used as utilities.\n\n- Require at least Zope 2.13.12.\n\n\n2.2.1 (2010-07-04)\n------------------\n\n- Deal with deprecation warnings for Zope 2.13.\n\n- Fix markup error (Chameleon compatibility)\n\n\n2.2.0 (2010-01-04)\n------------------\n\n- no changes from version 2.2.0-beta\n\n\n2.2.0-beta (2009-12-06)\n-----------------------\n\n- no changes from version 2.2.0-alpha\n\n\n2.2.0-alpha (2009-11-13)\n------------------------\n\n- moved the Zope dependency to version 2.12.0b3dev\n\n- Cleaned up / normalized imports:\n\n  o Don't import from Globals;  instead, use real locations.\n\n  o Make other imports use the actual source module, rather than an\n    intermediate (e.g., prefer importing 'ClassSecurityInfo' from\n    'AccessControl.SecurityInfo' rather than from 'AccessControl').\n\n- Add missing utility registration for IUniqueIdHandler.  See\n  https://bugs.launchpad.net/bugs/299058 .\n\n- UniqueIdHandlerTool: Call the reindexObject attribute of the object\n  getting a uid, rather than portal_catalog's reindexObject.  This is\n  needed to properly handle objects like the portal itself which shouldn't\n  get catalogued ever.\n\n- Removed redundant and unexpected code to auto-create catalog index and\n  column for the UID handler tool. The index and column are already\n  created by the default CMFUid GenericSetup profile.\n  (http://www.zope.org/Collectors/CMF/472)\n\n\n2.1.2 (2008-09-13)\n------------------\n\n- no changes from 2.1.2-beta\n\n\n2.1.2-beta (2008-08-26)\n-----------------------\n\n- completed devolution from monolithic CMF package into its component\n  products that are distributed as eggs from PyPI.\n\n- testing: Base UidEventZCMLLayer on ZopeTestCase.layer.ZopeLite.\n\n- UniqueIdHandlerTool: Use %r instead of %s in error messages, so\n  we don't trip over non-ASCII representations (e.g. File and Image).\n\n\n2.1.1 (2008-01-06)\n------------------\n\n- no changes\n\n\n2.1.1-beta(2007-12/29)\n----------------------\n\n- Testing: Derive test layers from ZopeLite layer if available.\n\n\n2.1.0 (2007-08-08)\n------------------\n\n- Fixed all componentregistry.xml files to use plain object paths and strip\n  and slashes. GenericSetup does only support registering objects which are\n  in the site root.\n\n\n2.1.0-beta2 (2007-07-12)\n------------------------\n\n- moved the Zope dependency to version 2.10.4\n\n- Remove antique usage of marker attributes in favor of interfaces,\n  leaving BBB behind for places potentially affecting third-party code.\n  (http://www.zope.org/Collectors/CMF/440)\n\n- Add POST-only protections to security critical methods.\n  http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-0240)\n\n- UniqueIdAnnotationTool: Annotation handling has been switched\n  from triggering it through old-style manage_*-methods to using\n  events. UID assigning behavior has been made more flexible. Please\n  review CMFUid/README.txt for information about the current\n  behavior and the new features.\n  (http://www.zope.org/Collectors/CMF/474)\n\n\n2.1.0-beta (2007-03-09)\n-----------------------\n\n- moved the Zope dependency to verson 2.10.2\n\n- Tool lookup and registration is now done \"the Zope 3 way\" as utilities, see\n  http://svn.zope.org/CMF/branches/2.1/docs/ToolsAreUtilities.stx?view=auto\n\n- UniqueIdHandlerTool: Touching the internal UID value on a\n  content item will not cause reindexing all indices anymore, only the\n  specific UID index will be touched.\n  (http://www.zope.org/Collectors/CMF/469)\n\n\n2.1.0-alpha2 (2006-11-23)\n-------------------------\n\n- moved the Zope dependency to version 2.10.1\n\n- Fixed test breakage induced by use of Z3 pagetemplates in Zope 2.10+.\n\n- browser views: Added some zope.formlib based forms.\n\n- testing: Added test layers for setting up ZCML.\n\n\n2.1.0-alpha (2006-10-09)\n------------------------\n\n- skins: Changed encoding of translated portal_status_messages.\n  Now getBrowserCharset is used to play nice with Five forms. Customized\n  setRedirect and getMainGlobals scripts have to be updated.\n\n- Profiles: All profiles are now registered by ZCML.\n\n- ZClasses: Removed unmaintained support for ZClasses.\n  Marked the 'initializeBases*' methods as deprecated.\n\n- Content: Added IFactory utilities for all content classes.\n  They are now used by default instead of the old constructor methods.\n\n- Content: All content classes are now registered by ZCML.\n  ContentInit is still used to register oldstyle constructors.\n\n- setup handlers: Removed support for CMF 1.5 CMFSetup profiles.\n\n\nEarlier releases\n----------------\n\nFor a complete list of changes before version 2.1.0-alpha, see the HISTORY.txt\nfile on the CMF-2.1 branch:\nhttp://svn.zope.org/CMF/branches/2.1/HISTORY.txt?view=auto\n",
    "bugtrack_url": null,
    "license": "ZPL 2.1",
    "summary": "Uid product for the Zope Content Management Framework",
    "version": "4.2",
    "project_urls": {
        "Homepage": "https://github.com/zopefoundation/Products.CMFUid"
    },
    "split_keywords": [
        "web",
        "application",
        "server",
        "zope",
        "cmf"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "baf75a022443b99fc39772d3c953726f27d0006561e217632f00344298466c04",
                "md5": "73842552a92f162488912cd840ee9377",
                "sha256": "efb46b10dd55d0c2f207c25c4534df20b70492eb2e4a5b75d0f168961d4560fe"
            },
            "downloads": -1,
            "filename": "Products.CMFUid-4.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "73842552a92f162488912cd840ee9377",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 25519,
            "upload_time": "2024-01-23T21:17:56",
            "upload_time_iso_8601": "2024-01-23T21:17:56.810362Z",
            "url": "https://files.pythonhosted.org/packages/ba/f7/5a022443b99fc39772d3c953726f27d0006561e217632f00344298466c04/Products.CMFUid-4.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "77f59bd554fd5adfc29ab2d49eb027b9852ff9277ef657cf627d1db396c33083",
                "md5": "50b41c9719534d382749361cc9624303",
                "sha256": "74bb13a8189a4308cdd07ab6b63a6132f8e08c9810d69df936c94bfd57d2f942"
            },
            "downloads": -1,
            "filename": "Products.CMFUid-4.2.tar.gz",
            "has_sig": false,
            "md5_digest": "50b41c9719534d382749361cc9624303",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 23950,
            "upload_time": "2024-01-23T21:17:58",
            "upload_time_iso_8601": "2024-01-23T21:17:58.341901Z",
            "url": "https://files.pythonhosted.org/packages/77/f5/9bd554fd5adfc29ab2d49eb027b9852ff9277ef657cf627d1db396c33083/Products.CMFUid-4.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-01-23 21:17:58",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "zopefoundation",
    "github_project": "Products.CMFUid",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "products.cmfuid"
}
        
Elapsed time: 0.19196s