
  >>> from silva.resourceinclude.tests.resource import static_dir
  >>> from silva.resourceinclude.interfaces import IResource

Resource
========

So we can create a directory resource:

  >>> from silva.resourceinclude.resource import DirectoryResource
  >>> resources = DirectoryResource(
  ...      'silva.resourceinclude.tests.resource', static_dir)

  >>> resources
  <silva.resourceinclude.resource.DirectoryResource object at ...>
  >>> verifyObject(IResource, resources)
  True

A directory as no data but you can access existing sub resources:

  >>> resources.data()
  u''
  >>> resources.content_type
  'text/plain'
  >>> resources['style.css']
  <silva.resourceinclude.resource.FileResource object at ...>
  >>> resources['images']
  <silva.resourceinclude.resource.DirectoryResource object at ...>
  >>> resources['images']['img01.gif']
  <silva.resourceinclude.resource.FileResource object at ...>
  >>> resources['unknown']
  Traceback (most recent call last):
    ...
  KeyError: 'unknown'

A file as some data, but no sub resources:

  >>> file_resource = resources['style.css']
  >>> verifyObject(IResource, file_resource)
  True
  >>> print file_resource.data()
  body {
      margin: auto;
  }
  >>> file_resource.content_type
  'text/css'
  >>> file_resource['something']
  Traceback (most recent call last):
    ...
  KeyError: 'something'

The content type is computed from the extension of the file:

  >>> image_resource = resources['images']['img01.gif']
  >>> image_resource.content_type
  'image/gif'


Viewing Resource
================

We can get a factory out of it:

  >>> from silva.resourceinclude.resource import ResourceFactory
  >>> resources_factory = ResourceFactory(resources)

And if you have a request, you can download / have information on
your resource:

  >>> from zope.publisher.browser import TestRequest
  >>> request = TestRequest()
  >>> resources_view = resources_factory(request)
  >>> resources_view
  <silva.resourceinclude.resource.ResourceView object at ...>

From here you can traverse to sub resources:

  >>> resource_css_view = resources_view.publishTraverse(request, 'style.css')
  >>> resource_css_view
  <silva.resourceinclude.resource.ResourceView object at ...>
  >>> resource_images_view = resources_view.publishTraverse(request, 'images')
  >>> resource_image_view = resource_images_view.publishTraverse(request, 'img01.gif')
  >>> resources_view.publishTraverse(request, 'unknown')
  Traceback (most recent call last):
    ...
  NotFound: Object: <silva.resourceinclude.resource.ResourceView object at ...>, name: 'unknown'

Getting the relative path of a resource
---------------------------------------

You can get the relative path to root of the resource directory:

  >>> resources_view.get_relative_path()
  ['silva.resourceinclude.tests.resource']
  >>> resource_css_view.get_relative_path()
  ['silva.resourceinclude.tests.resource', 'style.css']
  >>> resource_image_view.get_relative_path()
  ['silva.resourceinclude.tests.resource', 'images', 'img01.gif']

Getting the URL of a resource
-----------------------------

And so you can the URL of the resource:

  >>> resources_view()
  u'/++resource++silva.resourceinclude.tests.resource'
  >>> resource_css_view()
  u'/++resource++silva.resourceinclude.tests.resource/style.css'
  >>> resource_image_view()
  u'/++resource++silva.resourceinclude.tests.resource/images/img01.gif'

