[Checkins] SVN: megrok.icon/trunk/ Added base code. it works ! Even tested. How classy.

Souheil CHELFOUH souheil at chelfouh.com
Wed Dec 30 12:47:17 EST 2009


Log message for revision 107367:
  Added base code. it works ! Even tested. How classy.
  

Changed:
  A   megrok.icon/trunk/
  A   megrok.icon/trunk/.installed.cfg
  A   megrok.icon/trunk/bootstrap.py
  A   megrok.icon/trunk/buildout.cfg
  A   megrok.icon/trunk/docs/
  A   megrok.icon/trunk/docs/HISTORY.txt
  A   megrok.icon/trunk/setup.py
  A   megrok.icon/trunk/src/
  A   megrok.icon/trunk/src/megrok/
  A   megrok.icon/trunk/src/megrok/__init__.py
  A   megrok.icon/trunk/src/megrok/icon/
  A   megrok.icon/trunk/src/megrok/icon/README.txt
  A   megrok.icon/trunk/src/megrok/icon/__init__.py
  A   megrok.icon/trunk/src/megrok/icon/configure.zcml
  A   megrok.icon/trunk/src/megrok/icon/directive.py
  A   megrok.icon/trunk/src/megrok/icon/interfaces.py
  A   megrok.icon/trunk/src/megrok/icon/registry.py
  A   megrok.icon/trunk/src/megrok/icon/tests/
  A   megrok.icon/trunk/src/megrok/icon/tests/__init__.py
  A   megrok.icon/trunk/src/megrok/icon/tests/ftesting.zcml
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-default.png
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-documents.png
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-downloads.png
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-favorite.png
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-generic.png
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-important.png
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-mail.png
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-new.png
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-package.png
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-photos.png
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-readonly.png
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-shared.png
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-symbolic-link.png
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-system.png
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-unreadable.png
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-urgent.png
  A   megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-web.png
  A   megrok.icon/trunk/src/megrok/icon/tests/test_readme.py
  A   megrok.icon/trunk/src/megrok/icon/traversal.py

-=-
Added: megrok.icon/trunk/.installed.cfg
===================================================================
--- megrok.icon/trunk/.installed.cfg	                        (rev 0)
+++ megrok.icon/trunk/.installed.cfg	2009-12-30 17:47:16 UTC (rev 107367)
@@ -0,0 +1,127 @@
+[buildout]
+installed_develop_eggs = 
+parts = releaser interpreter test
+
+[releaser]
+__buildout_installed__ = /home/trollfot/work/sandbox/megrok.icon/bin/fullrelease
+	/home/trollfot/work/sandbox/megrok.icon/bin/postrelease
+	/home/trollfot/work/sandbox/megrok.icon/bin/lasttagdiff
+	/home/trollfot/work/sandbox/megrok.icon/bin/prerelease
+	/home/trollfot/work/sandbox/megrok.icon/bin/release
+	/home/trollfot/work/sandbox/megrok.icon/bin/longtest
+__buildout_signature__ = zc.recipe.egg-1.2.2-py2.6.egg setuptools-0.6c11-py2.6.egg zc.buildout-1.4.3-py2.6.egg
+_b = /home/trollfot/work/sandbox/megrok.icon/bin
+_d = /home/trollfot/work/sandbox/megrok.icon/develop-eggs
+_e = /home/trollfot/.buildout/eggs
+bin-directory = /home/trollfot/work/sandbox/megrok.icon/bin
+develop-eggs-directory = /home/trollfot/work/sandbox/megrok.icon/develop-eggs
+eggs = zest.releaser
+eggs-directory = /home/trollfot/.buildout/eggs
+executable = /usr/bin/python
+recipe = zc.recipe.egg
+
+[interpreter]
+__buildout_installed__ = /home/trollfot/work/sandbox/megrok.icon/bin/python
+__buildout_signature__ = zc.recipe.egg-1.2.2-py2.6.egg setuptools-0.6c11-py2.6.egg zc.buildout-1.4.3-py2.6.egg
+_b = /home/trollfot/work/sandbox/megrok.icon/bin
+_d = /home/trollfot/work/sandbox/megrok.icon/develop-eggs
+_e = /home/trollfot/.buildout/eggs
+bin-directory = /home/trollfot/work/sandbox/megrok.icon/bin
+develop-eggs-directory = /home/trollfot/work/sandbox/megrok.icon/develop-eggs
+eggs = megrok.icon
+eggs-directory = /home/trollfot/.buildout/eggs
+executable = /usr/bin/python
+interpreter = python
+recipe = zc.recipe.egg
+
+[test]
+__buildout_installed__ = /home/trollfot/work/sandbox/megrok.icon/parts/test
+	/home/trollfot/work/sandbox/megrok.icon/bin/test
+__buildout_signature__ = zc.recipe.testrunner-1.2.0-py2.6.egg zc.recipe.egg-1.2.2-py2.6.egg setuptools-0.6c11-py2.6.egg zope.testing-3.8.3-py2.6.egg zc.buildout-1.4.3-py2.6.egg zope.interface-3wCJRBBMjNvMcCqzQ5mnYw== zope.exceptions-3.5.2-py2.6.egg
+_b = /home/trollfot/work/sandbox/megrok.icon/bin
+_d = /home/trollfot/work/sandbox/megrok.icon/develop-eggs
+_e = /home/trollfot/.buildout/eggs
+bin-directory = /home/trollfot/work/sandbox/megrok.icon/bin
+defaults = ['--tests-pattern', '^f?tests$', '-v', '-c']
+develop-eggs-directory = /home/trollfot/work/sandbox/megrok.icon/develop-eggs
+eggs = megrok.icon [test]
+eggs-directory = /home/trollfot/.buildout/eggs
+executable = /usr/bin/python
+location = /home/trollfot/work/sandbox/megrok.icon/parts/test
+recipe = zc.recipe.testrunner
+script = /home/trollfot/work/sandbox/megrok.icon/bin/test
+
+[buildout]
+parts = interpreter test releaser
+
+[buildout]
+installed_develop_eggs = 
+
+[buildout]
+parts = test releaser interpreter
+
+[buildout]
+parts = releaser interpreter test
+
+[buildout]
+parts = interpreter test releaser
+
+[buildout]
+installed_develop_eggs = 
+
+[buildout]
+parts = test releaser interpreter
+
+[buildout]
+parts = releaser interpreter test
+
+[buildout]
+parts = interpreter test releaser
+
+[buildout]
+installed_develop_eggs = 
+
+[buildout]
+parts = test releaser interpreter
+
+[buildout]
+parts = releaser interpreter test
+
+[buildout]
+parts = interpreter test releaser
+
+[buildout]
+installed_develop_eggs = 
+
+[buildout]
+parts = test releaser interpreter
+
+[buildout]
+parts = releaser interpreter test
+
+[buildout]
+parts = interpreter test releaser
+
+[buildout]
+installed_develop_eggs = 
+
+[buildout]
+parts = test releaser interpreter
+
+[buildout]
+parts = releaser interpreter test
+
+[buildout]
+parts = interpreter test releaser
+
+[buildout]
+installed_develop_eggs = 
+
+[buildout]
+parts = test releaser interpreter
+
+[buildout]
+parts = releaser interpreter test
+
+[buildout]
+parts = interpreter test releaser

Added: megrok.icon/trunk/bootstrap.py
===================================================================
--- megrok.icon/trunk/bootstrap.py	                        (rev 0)
+++ megrok.icon/trunk/bootstrap.py	2009-12-30 17:47:16 UTC (rev 107367)
@@ -0,0 +1,77 @@
+##############################################################################
+#
+# Copyright (c) 2006 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Bootstrap a buildout-based project
+
+Simply run this script in a directory containing a buildout.cfg.
+The script accepts buildout command-line options, so you can
+use the -c option to specify an alternate configuration file.
+
+$Id: bootstrap.py 90478 2008-08-27 22:44:46Z georgyberdyshev $
+"""
+
+import os, shutil, sys, tempfile, urllib2
+
+tmpeggs = tempfile.mkdtemp()
+
+is_jython = sys.platform.startswith('java')
+
+try:
+    import pkg_resources
+except ImportError:
+    ez = {}
+    exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
+                         ).read() in ez
+    ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)
+
+    import pkg_resources
+
+if sys.platform == 'win32':
+    def quote(c):
+        if ' ' in c:
+            return '"%s"' % c # work around spawn lamosity on windows
+        else:
+            return c
+else:
+    def quote (c):
+        return c
+
+cmd = 'from setuptools.command.easy_install import main; main()'
+ws  = pkg_resources.working_set
+
+if is_jython:
+    import subprocess
+    
+    assert subprocess.Popen([sys.executable] + ['-c', quote(cmd), '-mqNxd', 
+           quote(tmpeggs), 'zc.buildout'], 
+           env=dict(os.environ,
+               PYTHONPATH=
+               ws.find(pkg_resources.Requirement.parse('setuptools')).location
+               ),
+           ).wait() == 0
+
+else:
+    assert os.spawnle(
+        os.P_WAIT, sys.executable, quote (sys.executable),
+        '-c', quote (cmd), '-mqNxd', quote (tmpeggs), 'zc.buildout',
+        dict(os.environ,
+            PYTHONPATH=
+            ws.find(pkg_resources.Requirement.parse('setuptools')).location
+            ),
+        ) == 0
+
+ws.add_entry(tmpeggs)
+ws.require('zc.buildout')
+import zc.buildout.buildout
+zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
+shutil.rmtree(tmpeggs)

Added: megrok.icon/trunk/buildout.cfg
===================================================================
--- megrok.icon/trunk/buildout.cfg	                        (rev 0)
+++ megrok.icon/trunk/buildout.cfg	2009-12-30 17:47:16 UTC (rev 107367)
@@ -0,0 +1,20 @@
+[buildout]
+develop = .
+parts = interpreter test releaser
+extends = http://grok.zope.org/releaseinfo/grok-1.1a2.cfg
+versions = versions
+newest = false
+
+[interpreter]
+recipe = zc.recipe.egg
+eggs = megrok.icon
+interpreter = python
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = megrok.icon [test]
+defaults = ['--tests-pattern', '^f?tests$', '-v', '-c']
+
+[releaser]
+recipe = zc.recipe.egg
+eggs = zest.releaser

Added: megrok.icon/trunk/setup.py
===================================================================
--- megrok.icon/trunk/setup.py	                        (rev 0)
+++ megrok.icon/trunk/setup.py	2009-12-30 17:47:16 UTC (rev 107367)
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+
+from setuptools import setup, find_packages
+from os.path import join
+
+name = 'megrok.icon'
+version = '0.1'
+readme = open(join('src', 'megrok', 'icon', "README.txt")).read()
+history = open(join('docs', 'HISTORY.txt')).read()
+
+
+install_requires = [
+    'martian',
+    'setuptools',
+    'grokcore.view',
+    'grokcore.component',
+    'zc.dict',
+    ]
+
+tests_require = [
+    'zope.testbrowser',
+    'zope.app.testing',
+    'zope.browserresource',
+    'zope.configuration',
+    'zope.app.zcmlfiles',
+    ]
+
+setup(name = name,
+      version = version,
+      description = 'Icon registration utility',
+      long_description = readme + '\n\n' + history,
+      keywords = 'Grok Zope3 CMS Dolmen Icon',
+      author = 'Souheil Chelfouh',
+      author_email = 'trollfot at gmail.com',
+      url = '',
+      license = 'GPL',
+      packages=find_packages('src', exclude=['ez_setup']),
+      package_dir={'': 'src'},
+      namespace_packages = ['megrok'],
+      include_package_data = True,
+      platforms = 'Any',
+      zip_safe = False,
+      tests_require = tests_require,
+      install_requires = install_requires,
+      extras_require = {'test': tests_require},
+      classifiers = [
+        'Development Status :: 4 - Beta',
+        'Environment :: Web Environment',
+        'Framework :: Zope3',
+        'Intended Audience :: Other Audience',
+        'License :: OSI Approved :: GNU General Public License (GPL)',
+        'Operating System :: OS Independent',
+        'Programming Language :: Python',
+        ],
+      )

Added: megrok.icon/trunk/src/megrok/__init__.py
===================================================================
--- megrok.icon/trunk/src/megrok/__init__.py	                        (rev 0)
+++ megrok.icon/trunk/src/megrok/__init__.py	2009-12-30 17:47:16 UTC (rev 107367)
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+    from pkgutil import extend_path
+    __path__ = extend_path(__path__, __name__)

Added: megrok.icon/trunk/src/megrok/icon/README.txt
===================================================================
--- megrok.icon/trunk/src/megrok/icon/README.txt	                        (rev 0)
+++ megrok.icon/trunk/src/megrok/icon/README.txt	2009-12-30 17:47:16 UTC (rev 107367)
@@ -0,0 +1,52 @@
+===========
+megrok.icon
+===========
+
+  >>> from megrok.icon import IconRegistry, IIconRegistry
+  >>> from grokcore.view import path, name 
+
+  >>> class TestIcons(IconRegistry):
+  ...   name('tests')
+  ...   path('tests/icons')
+
+
+  >>> grok_component('icons', TestIcons)
+  True
+
+  >>> from zope.component import getUtility
+  >>> registry = getUtility(IIconRegistry, name='tests')
+
+  >>> print registry.get('emblem-photos')
+  <megrok.icon.registry.Icon object at ...>
+
+  >>> print registry.get('not-here')
+  None
+
+  >>> resource = registry.resource('emblem-photos')
+  >>> print resource
+  <zope.browserresource.file.FileResourceFactory object at ...>
+
+  >>> from zope.publisher.browser import TestRequest
+  >>> request = TestRequest(REQUEST_METHOD='GET')
+  >>> icon = resource(request)
+  >>> print icon
+  <zope.browserresource.file.FileResource object at ...>
+
+  >>> view, ignore = icon.browserDefault(request)
+  >>> view()
+  '\x89PNG...'
+
+  >>> from zope.testbrowser.testing import Browser
+
+  >>> browser = Browser()
+  >>> browser.handleErrors = False 
+
+  >>> browser.open('http://localhost/++icon++tests/emblem-photos')
+  >>> browser.contents
+  '\x89PNG...'
+
+  >>> browser.open('http://localhost/++icon++tests/i-dont-exist')
+  Traceback (most recent call last):
+  ...
+  NotFound: Object: <megrok.icon.tests.TestIcons object at ...>,
+  name: u'i-dont-exist'

Added: megrok.icon/trunk/src/megrok/icon/__init__.py
===================================================================
--- megrok.icon/trunk/src/megrok/icon/__init__.py	                        (rev 0)
+++ megrok.icon/trunk/src/megrok/icon/__init__.py	2009-12-30 17:47:16 UTC (rev 107367)
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+
+import logging
+
+# Configuring level and formatter
+ch = logging.StreamHandler()
+ch.setLevel(logging.WARNING)
+formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
+ch.setFormatter(formatter)
+
+# Creating logger
+log = logging.getLogger('iconregistry')
+log.addHandler(ch)
+
+from megrok.icon.interfaces import IIcon, IIconRegistry, IIconRegistryStorage
+from megrok.icon.registry import Icon, IconRegistry

Added: megrok.icon/trunk/src/megrok/icon/configure.zcml
===================================================================
--- megrok.icon/trunk/src/megrok/icon/configure.zcml	                        (rev 0)
+++ megrok.icon/trunk/src/megrok/icon/configure.zcml	2009-12-30 17:47:16 UTC (rev 107367)
@@ -0,0 +1,9 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:grok="http://namespaces.zope.org/grok">
+
+  <include package="grokcore.component" file="meta.zcml" />
+  <include package="zope.browserresource" />
+  <grok:grok package=".traversal" />
+
+</configure>

Added: megrok.icon/trunk/src/megrok/icon/interfaces.py
===================================================================
--- megrok.icon/trunk/src/megrok/icon/interfaces.py	                        (rev 0)
+++ megrok.icon/trunk/src/megrok/icon/interfaces.py	2009-12-30 17:47:16 UTC (rev 107367)
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+
+from zope import schema
+from zope.interface import Interface
+from zope.container.constraints import contains
+
+
+class IIcon(Interface):
+    """An icon resource.
+    """
+    name = schema.TextLine(
+        title=u"Identifier of the icon.",
+        description=u"",
+        required=True)
+
+    path = schema.URI(
+        title=u"Path of the resource",
+        required=True)
+
+    size = schema.Int(
+        title=u"Size in octet",
+        required=False)
+
+
+class IIconRegistryStorage(Interface):
+    """The icon registry container.
+    """
+    contains(IIcon)
+
+
+class IIconRegistry(Interface):
+    """The icon registry.
+    """
+    def add(name, path):
+        """Adds an icon to the registry.
+        """
+
+    def get(name):
+        """Returns an IIcon component from the registry,
+        with the given name.
+        """
+
+    __registry__ = schema.Object(
+        schema=IIconRegistryStorage,
+        title=u"Icon resource registry")

Added: megrok.icon/trunk/src/megrok/icon/registry.py
===================================================================
--- megrok.icon/trunk/src/megrok/icon/registry.py	                        (rev 0)
+++ megrok.icon/trunk/src/megrok/icon/registry.py	2009-12-30 17:47:16 UTC (rev 107367)
@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+
+import os
+import mimetypes
+from os.path import join, getsize
+from grokcore import view, component as grok
+from megrok.icon import IIcon, IIconRegistry, IIconRegistryStorage
+from zc.dict import Dict
+from zope.interface import directlyProvides
+from zope.schema.fieldproperty import FieldProperty
+from zope.security.checker import NamesChecker
+from zope.browserresource.file import FileResourceFactory
+from zope.publisher.interfaces.browser import IBrowserPage
+
+ALLOWED = ['image/png', 'image/jpg', 'image/jpeg', 'image/gif']
+
+CHECKER = NamesChecker(list(IBrowserPage))
+
+
+class Icon(object):
+    """An icon resource.
+    """
+    grok.implements(IIcon)
+    
+    def __init__(self, name, path):
+        self.name = name
+        self.path = path
+        self.size = getsize(path)
+
+
+class IconRegistry(grok.GlobalUtility):
+    grok.baseclass()
+    grok.implements(IIconRegistry)
+    
+    __registry__ = FieldProperty(IIconRegistry['__registry__'])
+    allowed = ALLOWED
+
+    def _generate_registry(self):
+        registry = Dict()
+        directlyProvides(registry, IIconRegistryStorage)
+        return registry
+
+    def add(self, name, path):
+        if self.registered(name):
+            log.warning(
+                "Skipping %s (%r): already in registry" % (name, path))
+            return False
+        icon = Icon(name, path)
+        mimetype, enc = mimetypes.guess_type(path)
+        if mimetype in self.allowed:
+            self.__registry__[name] = icon
+        else:
+            print "skipping %s (%s) [WRONG MIMETYPE]" % (path, icon.mimetype)
+
+    def populate(self, path):
+        if not os.path.isdir(path):
+            path = os.path.join(os.path.dirname(__file__), path)
+            if not os.path.isdir(path):
+                raise NotImplementedError
+
+        for root, dirs, files in os.walk(path):
+            for name in files:
+                ipath = os.path.join(root, name)
+                iname = os.path.splitext(name)[0]
+                self.add(iname, ipath)
+
+    def registered(self, name):
+        return name in self.__registry__
+
+    def get(self, name):
+        return self.__registry__.get(name)
+
+    def resource(self, name):
+        icon = self.get(name)
+        if icon is None:
+            return None
+        return FileResourceFactory(icon.path, CHECKER, icon.name)
+
+    def __init__(self):
+        self.__registry__ = self._generate_registry()
+        path = view.path.bind().get(self)
+        if path: self.populate(path)

Added: megrok.icon/trunk/src/megrok/icon/tests/ftesting.zcml
===================================================================
--- megrok.icon/trunk/src/megrok/icon/tests/ftesting.zcml	                        (rev 0)
+++ megrok.icon/trunk/src/megrok/icon/tests/ftesting.zcml	2009-12-30 17:47:16 UTC (rev 107367)
@@ -0,0 +1,11 @@
+<configure
+   xmlns="http://namespaces.zope.org/zope"
+   xmlns:grok="http://namespaces.zope.org/grok">
+
+  <include package="grokcore.component" file="meta.zcml" />
+  <include package="zope.app.zcmlfiles" file="meta.zcml" />
+
+  <include package="zope.app.zcmlfiles" />
+  <include package="megrok.icon" />
+
+</configure>

Added: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-default.png
===================================================================
(Binary files differ)


Property changes on: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-default.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-documents.png
===================================================================
(Binary files differ)


Property changes on: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-documents.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-downloads.png
===================================================================
(Binary files differ)


Property changes on: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-downloads.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-favorite.png
===================================================================
(Binary files differ)


Property changes on: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-favorite.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-generic.png
===================================================================
(Binary files differ)


Property changes on: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-generic.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-important.png
===================================================================
(Binary files differ)


Property changes on: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-important.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-mail.png
===================================================================
(Binary files differ)


Property changes on: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-mail.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-new.png
===================================================================
(Binary files differ)


Property changes on: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-new.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-package.png
===================================================================
(Binary files differ)


Property changes on: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-package.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-photos.png
===================================================================
(Binary files differ)


Property changes on: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-photos.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-readonly.png
===================================================================
(Binary files differ)


Property changes on: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-readonly.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-shared.png
===================================================================
(Binary files differ)


Property changes on: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-shared.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-symbolic-link.png
===================================================================
(Binary files differ)


Property changes on: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-symbolic-link.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-system.png
===================================================================
(Binary files differ)


Property changes on: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-system.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-unreadable.png
===================================================================
(Binary files differ)


Property changes on: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-unreadable.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-urgent.png
===================================================================
(Binary files differ)


Property changes on: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-urgent.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-web.png
===================================================================
(Binary files differ)


Property changes on: megrok.icon/trunk/src/megrok/icon/tests/icons/emblem-web.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: megrok.icon/trunk/src/megrok/icon/tests/test_readme.py
===================================================================
--- megrok.icon/trunk/src/megrok/icon/tests/test_readme.py	                        (rev 0)
+++ megrok.icon/trunk/src/megrok/icon/tests/test_readme.py	2009-12-30 17:47:16 UTC (rev 107367)
@@ -0,0 +1,24 @@
+import os.path
+import unittest
+from zope.testing import doctest, module
+from zope.app.testing import functional
+from grokcore.component.testing import grok_component
+
+
+ftesting_zcml = os.path.join(os.path.dirname(__file__), 'ftesting.zcml')
+FunctionalLayer = functional.ZCMLLayer(
+    ftesting_zcml, __name__, 'FunctionalLayer', allow_teardown=True
+    )
+
+
+def setUp(test):
+    module.setUp(test, 'megrok.icon.tests')
+ 
+def test_suite():
+    globs = {'grok_component': grok_component}
+    suite = unittest.TestSuite()
+    readme = functional.FunctionalDocFileSuite(
+        '../README.txt', setUp=setUp, globs=globs)
+    readme.layer = FunctionalLayer
+    suite.addTest(readme)
+    return suite

Added: megrok.icon/trunk/src/megrok/icon/traversal.py
===================================================================
--- megrok.icon/trunk/src/megrok/icon/traversal.py	                        (rev 0)
+++ megrok.icon/trunk/src/megrok/icon/traversal.py	2009-12-30 17:47:16 UTC (rev 107367)
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+
+import grokcore.component as grok
+
+from zope.component import queryUtility
+from zope.interface import Interface
+from zope.publisher.interfaces import IPublishTraverse, NotFound
+from zope.publisher.interfaces.http import IHTTPRequest
+from zope.traversing.interfaces import ITraversable, TraversalError
+from zope.security.proxy import removeSecurityProxy
+from megrok.icon import IIconRegistry
+
+
+class IconTraverser(grok.MultiAdapter):
+    grok.name('icon')
+    grok.provides(ITraversable)
+    grok.adapts(Interface, IHTTPRequest)
+
+    def __init__(self, context, request=None):
+        self.context = context
+        self.request = request
+
+    def traverse(self, name, icon=[]):
+        if not name:
+            raise TraversalError('Icon registry name is missing.')
+        registry = queryUtility(IIconRegistry, name=name)
+        if registry is not None:
+            return registry
+        raise NotFound(self.context, name, self.request)
+
+
+class IconRegistryTraverser(grok.MultiAdapter):
+    grok.provides(IPublishTraverse)
+    grok.adapts(IIconRegistry, IHTTPRequest)
+
+    def __init__(self, context, request):
+        self.context = context
+        self.request = request
+    
+    def publishTraverse(self, request, name):
+        registry = removeSecurityProxy(self.context)
+        icon = registry.resource(name)
+        if icon is not None:
+            return removeSecurityProxy(icon(self.request))
+        raise NotFound(self.context, name, request)



More information about the checkins mailing list