Skip to main content
Pre-release

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

dolmen.app.content provides out-of-the-box utilities for Dolmen applications content.

Getting started

We import Grok and grok the package:

>>> import grok
>>> from grokcore.component import testing
>>> from zope.component.hooks import getSite

We create a dolmen.content content:

>>> import dolmen.content
>>> class Mammoth(dolmen.content.Content):
...    grok.name('A furry thing')

>>> testing.grok_component("mammoth", Mammoth)
True

>>> manfred = Mammoth()
>>> manfred.title = u'A nice mammoth'

>>> site = getSite()
>>> site['manfred'] = manfred

Indexes

dolmen.app.content registers two indexes to catalog the dolmen.content.IBaseContent created inside a Dolmen application:

>>> from dolmen.app.content import indexes

Base indexes

The dolmen.app.content.indexes.BaseIndexes handles the title and the content type of an IBaseContent content:

>>> indexes.BaseIndexes.__grok_indexes__
{'content_type': <grok.index.Field object at ...>, 'title': <grok.index.Text object at ...>}

>>> indexes.BaseIndexes.__grok_indexes__['content_type']._attribute
'__content_type__'

Searchable text

dolmen.app.content provides a simple ‘ISearchableText’ implementation, allowing full text searches. It comes in two parts.

The index:

>>> indexes.SearchableIndex.__grok_indexes__
{'searchabletext': <grok.index.Text object at ...>}

The adapter:

>>> from zope.index.text.interfaces import ISearchableText
>>> adapter = ISearchableText(manfred)
>>> adapter.getSearchableText()
u'A nice mammoth'

Thumbnailing

Thanks to dolmen.thumbnailer, dolmen.app.content provides a base thumbnailing policy, using ZODB blobs as storage and introducing a new scale.

Scales

Let’s introspect our Miniaturizer component:

>>> from dolmen.app.content import thumbnails

>>> thumbnails.BlobMiniaturizer.factory
<class 'dolmen.blob.file.BlobValue'>

>>> print thumbnails.BlobMiniaturizer.scales
{'mini': (250, 250), 'square': (64, 64), 'thumb': (150, 150), 'large': (700, 700), 'small': (128, 128), 'preview': (400, 400)}

The new scale, ‘square’, scales down and crops the original image to provide a square thumbnail. This is done using a IThumbnailer adapter:

>>> from dolmen.thumbnailer import IThumbnailer
>>> thumbnails.SquareThumbnailer
<class 'dolmen.app.content.thumbnails.SquareThumbnailer'>
>>> IThumbnailer.implementedBy(thumbnails.SquareThumbnailer)
True

Icon registration

dolmen.app.content allows you to register an icon for your content type.

The default value

>>> from dolmen.app.content import icon
>>> icon.bind().get(manfred)
'...content.png'

Retrieving the icon

>>> from zope.publisher.browser import TestRequest
>>> from zope.component import getMultiAdapter
>>> request = TestRequest()
>>> icon_view = getMultiAdapter((manfred, request), name="icon")
>>> icon_view()
'<img src="http://127.0.0.1/dolmen-content-interfaces-IContent-icon.png" alt="Content" width="16" height="16" border="0" />'

Defining a content icon

Let’s demonstrate the icon registration with a simple test:

>>> from zope import schema

>>> class IContentSchema(dolmen.content.IBaseContent):
...    text = schema.Text(title=u"A body text", default=u"N/A")

>>> class MyContent(dolmen.content.Content):
...  """A simple content with an icon
...  """
...  dolmen.content.schema(IContentSchema)
...  dolmen.content.name("a simple content type")
...  icon('container.png')

>>> testing.grok_component("mycontent", MyContent)
True

Now, we check if our content has a given icon:

>>> elephant = site['elephant'] = MyContent()
>>> icon_view = getMultiAdapter((elephant, request), name="icon")
>>> icon_view()
'<img src="http://127.0.0.1/dolmen-app-content-IContentSchema-icon.png" alt="ContentSchema" width="16" height="16" border="0" />'

Trying to register an icon file that doesn’t exist or cannot resolve will lead to an error:

>>> class AnotherContent(dolmen.content.Content):
...  """Another content with an icon
...  """
...  dolmen.content.schema(IContentSchema)
...  dolmen.content.name("a simple content type")
...  icon('someimaginary thing.png')
Traceback (most recent call last):
...
GrokImportError: Directive 'icon' cannot resolve the file 'someimaginary thing.png'.

Credits

All Dolmen packages are sponsorised by NPAI (http://www.npai.fr)

Changelog

1.0a3 (2010-06-04)

  • Added an icon for the OrderedContainer type.

1.0a2 (2010-06-04)

  • Corrected the icon grokker that failed if the icon directive was not set on a content.

1.0a1 (2010-06-04)

  • dolmen.app.content now defines the icon directive that used to live in dolmen.content. Added tests to demonstrate the new feature.

0.2.1 (2010-02-25)

  • Using PIL 1.1.7 instead of PILwoTK 1.1.6. This prevents having to declare a third party archive download location.

  • Maintenance cleaning for the release of Grok 1.1rc1. Code is now pep8 compliant.

0.2 (2010-02-01)

  • Added dolmen.blob include in configure.zcml.

  • Cleaning dependencies. The package is now zope.app free and relies on the latest Grok evolution.

0.1 (2009-11-02)

  • Initial release

Metadata

Release files for dolmen.app.content 1.0a3

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

Source distribution (sdist)

Source distribution for dolmen.app.content 1.0a3
File Size Uploaded
dolmen.app.content-1.0a3.tar.gz 9.2 kB Details

Release files / dolmen.app.content-1.0a3.tar.gz

Download URL dolmen.app.content-1.0a3.tar.gz
Size 9.2 kB
Tags Source
SHA-256 checksum
How to use checksums
a225d258ed3180d02c60f06b3618dd5b18fafba4938e1a8e49302fd2ece6238b
BLAKE2b-256 checksum
How to use checksums
cdf16081a55ea236a1df70a0299b88995be010c02ae4864424f65d71e294cf66
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