Skip to main content

Dolmen content-type extension : image

Project description

menhir.contenttype.image provides an image-centered content type for Dolmen based Grok applications.

Schema

The menhir.contenttype.image Image content provides a custom schema, extending the IBaseContent interface, from dolmen.content:

>>> from dolmen.content import IBaseContent
>>> from menhir.contenttype.image import IImage

>>> IImage.isOrExtends(IBaseContent)
True

The IImage interface describes the image field, that is to store the uploaded image data. The field comes from dolmen.file:

>>> for attr, doc in IImage.namesAndDescriptions():
...   print attr, ':', doc
image : <dolmen.file.field.ImageField object at ...>

Factory

The menhir.contenttype.image Image content uses a ZODB Blob to store the data. The image attribute of the factory class, Image, is a blob property from dolmen.blob:

>>> from menhir.contenttype.image import Image
>>> Image.image
<dolmen.blob.property.BlobProperty object at ...>

The instanciation is fairly straightforward:

>>> import os.path
>>> path = os.path.join(os.path.dirname(__file__), 'image.png')

>>> imagefile = open(path)
>>> image = Image(title=u"My Image", image=imagefile)
>>> imagefile.close()

The factory is protected by a common dolmen.app.security right:

>>> from dolmen.content import require
>>> print require.bind().get(image)
dolmen.content.Add

Icon

The content registers an icon, thanks to the dolmen.app.content package:

>>> from zope.component import getMultiAdapter
>>> from zope.publisher.browser import TestRequest

>>> request = TestRequest()
>>> icon = getMultiAdapter((image, request), name="icon")
>>> print icon
<zope.browserresource.icon.IconView object at ...>

View

The content registers its own index view. It displays the image and a download link. To be able to display the content, we need it persisted in a locatable tree, as the links depend on the urls:

>>> from zope.component.hooks import getSite
>>> site = getSite()
>>> site['image'] = image

We can now summon the view and render it. The view is a dolmen.app.layout Page:

>>> from dolmen.app.layout import Page
>>> index = getMultiAdapter((image, request), name="index")
>>> isinstance(index, Page)
True

>>> index.update()
>>> print index.content()
<h1>My Image</h1>
<div class="content">
  <p class="download">
    <a href="http://127.0.0.1/image/++download++image"
       title="Download">Download</a>
    &mdash;
    <span>1 KB</span>
  </p>
  <div class="image">
    <a href="http://127.0.0.1/image/++thumbnail++image.large"
       class="image-link" title="My Image">
      <img src="http://127.0.0.1/image/++thumbnail++image.preview" />
    </a>
  </div>
</div>

Changelog

0.3 (2011-01-13)

  • Resources are now registered and declared thanks to fanstatic.

0.2 (2010-07-27)

  • Packaging corrections.

0.1 (2010-07-21)

  • Initial release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

menhir.contenttype.image-0.3.tar.gz (6.7 kB view details)

Uploaded Source

File details

Details for the file menhir.contenttype.image-0.3.tar.gz.

File metadata

File hashes

Hashes for menhir.contenttype.image-0.3.tar.gz
Algorithm Hash digest
SHA256 631ac1469c4e947af9f37af7bde49b45a563bd4c7cca03f516c0a1b27ecf3553
MD5 a26c5009130a2bf34a41554be8011854
BLAKE2b-256 170af489f16660e4eda9cc5b0c5264187662497a4fac1fd5a8915beaefd4691a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page