Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

collective.readunread

Introduction

This package provides read/unread status for Plone objects.

It adds a “readBy” field and a proper index to any object marked with IReadByProvider interface.

How to use it

In order to activate read/unread feature the target object must implement:

collective.readunread.interfaces.IReadByProvider

You can add a ZCML slug in your package like:

<five:implements
  class="Products.ATContentTypes.content.document.ATDocument"
  interface="collective.readunread.interfaces.IReadByProvider"
  />

How it works

For testing purpose we’ll assign it to the Document content type

>>> from zope import interface
>>> from Products.ATContentTypes.content.document import ATDocument
>>> from collective.readunread.interfaces import IReadByProvider
>>> interface.classImplements(ATDocument,IReadByProvider)

and create a Document

>>> self.setRoles(('Manager',))
>>> docid = self.folder.invokeFactory('Document', 'document')
>>> doc = self.folder[docid]

We must trigger IObjectInitializedEvent on it since we have a subcriber that will take care of pushing the userid of the creator into ‘readBy’ field

>>> from Products.Archetypes.event import ObjectInitializedEvent
>>> from zope.event import notify
>>> notify(ObjectInitializedEvent(doc))

We can use the manager adapter for handling readby status

>>> from collective.readunread.interfaces import IReadByManager
>>> manager = IReadByManager(doc)

Since the doc is new we should get only creator’s ID

>>> len(manager.get_readby()) == 1
True
>>> manager.get_readby()
('test_user_1_',)

Let’s read the doc as other users. The following will create 3 new users

>>> from collective.readunread.tests.tests import setupMembers
>>> setupMembers(self.portal, n=3)

We have two ways for setting the doc as ‘read’ by a user. First, we can trigger the PostValidationHook event with the user (that simulates viewing the doc)

>>> from collective.readunread.tests.tests import fireViewEvent
>>> fireViewEvent(doc,'user1')
>>> fireViewEvent(doc,'user2')

Let’s see who read the doc

>>> 'user1' in manager.get_readby()
True
>>> 'user2' in manager.get_readby()
True
>>> 'user3' in manager.get_readby()
False

The second way is to set it trough the manager

>>> manager.set_readby(['user3',])
>>> 'user3' in manager.get_readby()
True

We can check the status of a user

>>> manager.get_status('user3')
'read'

We can also set a user as unread

>>> manager.set_unreadby(['user3',])
>>> 'user3' not in manager.get_readby()
True
>>> manager.get_status('user3')
'unread'

TODO

  • document & test buttons macro

  • document & test helper views

Changelog

1.0b6

  • fix missing import browser package

1.0b5

  • update docs

  • added doctest for manager

  • fixed adapter

  • improved utils

1.0b4

  • fix profile name

  • add .gitignore

1.0b3

  • missing HISTORY update (experimenting w/ jarn.mkrelease)

1.0b2

  • updated docs

1.0b1dev (unreleased)

  • Initial release

Credits

Developed with the support of International Traning Center of the ILO.

ITCILO - Logo

Authors

This product was developed by Domsense.

Domsense Website

Metadata

Release files for collective.readunread 1.0b6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for collective.readunread 1.0b6
File Size Uploaded
collective.readunread-1.0b6.zip 42.1 kB Details

Release files / collective.readunread-1.0b6.zip

Download URL collective.readunread-1.0b6.zip
Size 42.1 kB
Tags Source
SHA-256 checksum
How to use checksums
9b27e73fe79bbde15b462d665faca2dd6682870476bdd95f6bfca83cf69d3fc3
BLAKE2b-256 checksum
How to use checksums
6b0509aff2458bafbae414a2578a5a76dc39eaa019d2db283cb14c585f408481
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page