[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