Retrieving Content Type Information¶
MIME Types¶
We’ll start by initializing the interfaces and registrations for the content type interfaces. This is normally done via ZCML.
>>> from zope.mimetype import mtypes
>>> mtypes.setup()
A utility is used to retrieve MIME types.
>>> from zope import component
>>> from zope.mimetype import typegetter
>>> from zope.mimetype.interfaces import IMimeTypeGetter
>>> component.provideUtility(typegetter.smartMimeTypeGuesser,
... provides=IMimeTypeGetter)
>>> mime_getter = component.getUtility(IMimeTypeGetter)
To map a particular file name, file contents, and content type to a MIME type.
>>> mime_getter(name='file.txt', data='A text file.',
... content_type='text/plain')
'text/plain'
In the default implementation if not enough information is given to discern a MIME type, None is returned.
>>> mime_getter() is None
True
Character Sets¶
A utility is also used to retrieve character sets (charsets).
>>> from zope.mimetype.interfaces import ICharsetGetter
>>> component.provideUtility(typegetter.charsetGetter,
... provides=ICharsetGetter)
>>> charset_getter = component.getUtility(ICharsetGetter)
To map a particular file name, file contents, and content type to a charset.
>>> charset_getter(name='file.txt', data='This is a text file.',
... content_type='text/plain;charset=ascii')
'ascii'
In the default implementation if not enough information is given to discern a charset, None is returned.
>>> charset_getter() is None
True
Finding Interfaces¶
Given a MIME type we need to be able to find the appropriate interface.
>>> from zope.mimetype.interfaces import IContentTypeInterface
>>> component.getUtility(IContentTypeInterface, name=u'text/plain')
<InterfaceClass zope.mimetype.mtypes.IContentTypeTextPlain>
It is also possible to enumerate all content type interfaces.
>>> utilities = list(component.getUtilitiesFor(IContentTypeInterface))
If you want to find an interface from a MIME string, you can use the utilityies.
>>> component.getUtility(IContentTypeInterface, name='text/plain')
<InterfaceClass zope.mimetype.mtypes.IContentTypeTextPlain>