[Checkins] SVN: megrok.icon/trunk/src/megrok/icon/ Added URL Location for icons and registries
Souheil CHELFOUH
souheil at chelfouh.com
Wed Dec 30 15:36:25 EST 2009
Log message for revision 107387:
Added URL Location for icons and registries
Changed:
U megrok.icon/trunk/src/megrok/icon/README.txt
U megrok.icon/trunk/src/megrok/icon/__init__.py
U megrok.icon/trunk/src/megrok/icon/directive.py
U megrok.icon/trunk/src/megrok/icon/registry.py
U megrok.icon/trunk/src/megrok/icon/traversal.py
A megrok.icon/trunk/src/megrok/icon/utils.py
-=-
Modified: megrok.icon/trunk/src/megrok/icon/README.txt
===================================================================
--- megrok.icon/trunk/src/megrok/icon/README.txt 2009-12-30 20:30:50 UTC (rev 107386)
+++ megrok.icon/trunk/src/megrok/icon/README.txt 2009-12-30 20:36:24 UTC (rev 107387)
@@ -9,7 +9,6 @@
... name('tests')
... path('tests/icons')
-
>>> grok_component('icons', TestIcons)
True
@@ -41,6 +40,18 @@
>>> browser = Browser()
>>> browser.handleErrors = False
+ >>> browser.open('http://localhost/++icon++')
+ Traceback (most recent call last):
+ ...
+ NotFound: Object: <zope.site.folder.Folder object at ...>,
+ name: u'++icon++'
+
+ >>> browser.open('http://localhost/++icon++i-dont-exist')
+ Traceback (most recent call last):
+ ...
+ NotFound: Object: <zope.site.folder.Folder object at ...>,
+ name: u'i-dont-exist'
+
>>> browser.open('http://localhost/++icon++tests/emblem-photos')
>>> browser.contents
'\x89PNG...'
@@ -50,3 +61,33 @@
...
NotFound: Object: <megrok.icon.tests.TestIcons object at ...>,
name: u'i-dont-exist'
+
+ >>> from megrok.icon import icon, get_component_icon_url
+
+ >>> class MyContent(object):
+ ... icon(name="emblem-web", registry="tests")
+
+ >>> from zope.site.hooks import setSite
+ >>> root = getRootFolder()
+ >>> setSite(root)
+
+ >>> get_component_icon_url(MyContent, request)
+ 'http://127.0.0.1/++icon++tests/emblem-web'
+
+ >>> inst = MyContent()
+ >>> get_component_icon_url(inst, request)
+ 'http://127.0.0.1/++icon++tests/emblem-web'
+
+ >>> class AnotherContent(object):
+ ... icon(name="none", registry="tests")
+
+ >>> print get_component_icon_url(AnotherContent, request)
+ None
+
+ >>> class YetAnotherContent(object):
+ ... icon(name="an-icon", registry="buzz")
+
+ >>> print get_component_icon_url(YetAnotherContent, request)
+ None
+
+
Modified: megrok.icon/trunk/src/megrok/icon/__init__.py
===================================================================
--- megrok.icon/trunk/src/megrok/icon/__init__.py 2009-12-30 20:30:50 UTC (rev 107386)
+++ megrok.icon/trunk/src/megrok/icon/__init__.py 2009-12-30 20:36:24 UTC (rev 107387)
@@ -12,5 +12,7 @@
log = logging.getLogger('iconregistry')
log.addHandler(ch)
+from megrok.icon.directive import icon
from megrok.icon.interfaces import IIcon, IIconRegistry, IIconRegistryStorage
from megrok.icon.registry import Icon, IconRegistry
+from megrok.icon.utils import get_icon_url, get_component_icon_url
Modified: megrok.icon/trunk/src/megrok/icon/directive.py
===================================================================
--- megrok.icon/trunk/src/megrok/icon/directive.py 2009-12-30 20:30:50 UTC (rev 107386)
+++ megrok.icon/trunk/src/megrok/icon/directive.py 2009-12-30 20:36:24 UTC (rev 107387)
@@ -0,0 +1,9 @@
+import martian
+
+
+class icon(martian.Directive):
+ scope = martian.CLASS
+ store = martian.ONCE
+
+ def factory(self, name, registry='common'):
+ return (name, registry)
Modified: megrok.icon/trunk/src/megrok/icon/registry.py
===================================================================
--- megrok.icon/trunk/src/megrok/icon/registry.py 2009-12-30 20:30:50 UTC (rev 107386)
+++ megrok.icon/trunk/src/megrok/icon/registry.py 2009-12-30 20:36:24 UTC (rev 107387)
@@ -50,7 +50,7 @@
if mimetype in self.allowed:
self.__registry__[name] = icon
else:
- print "skipping %s (%s) [WRONG MIMETYPE]" % (path, icon.mimetype)
+ print "skipping %s (%s) [WRONG MIMETYPE]" % (path, mimetype)
def populate(self, path):
if not os.path.isdir(path):
@@ -63,6 +63,7 @@
ipath = os.path.join(root, name)
iname = os.path.splitext(name)[0]
self.add(iname, ipath)
+ dirs.remove('.svn')
def registered(self, name):
return name in self.__registry__
Modified: megrok.icon/trunk/src/megrok/icon/traversal.py
===================================================================
--- megrok.icon/trunk/src/megrok/icon/traversal.py 2009-12-30 20:30:50 UTC (rev 107386)
+++ megrok.icon/trunk/src/megrok/icon/traversal.py 2009-12-30 20:36:24 UTC (rev 107387)
@@ -2,13 +2,17 @@
import grokcore.component as grok
+from megrok.icon import IIconRegistry
from zope.component import queryUtility
from zope.interface import Interface
+from zope.location.interfaces import ILocation
+from zope.location.location import locate, LocationProxy
from zope.publisher.interfaces import IPublishTraverse, NotFound
from zope.publisher.interfaces.http import IHTTPRequest
+from zope.security.proxy import removeSecurityProxy
+from zope.site.hooks import getSite
+from zope.traversing.browser.interfaces import IAbsoluteURL
from zope.traversing.interfaces import ITraversable, TraversalError
-from zope.security.proxy import removeSecurityProxy
-from megrok.icon import IIconRegistry
class IconTraverser(grok.MultiAdapter):
@@ -43,3 +47,13 @@
if icon is not None:
return removeSecurityProxy(icon(self.request))
raise NotFound(self.context, name, request)
+
+
+ at grok.adapter(IIconRegistry)
+ at grok.implementer(ILocation)
+def locate_registry(registry):
+ site = getSite()
+ name = '++icon++' + grok.name.bind().get(registry)
+ locatable = LocationProxy(registry)
+ locate(locatable, site, name=name)
+ return locatable
Added: megrok.icon/trunk/src/megrok/icon/utils.py
===================================================================
--- megrok.icon/trunk/src/megrok/icon/utils.py (rev 0)
+++ megrok.icon/trunk/src/megrok/icon/utils.py 2009-12-30 20:36:24 UTC (rev 107387)
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+
+import grokcore.component as grok
+
+from megrok.icon import IIconRegistry
+from megrok.icon.directive import icon
+from zope.component import queryUtility
+from zope.location.interfaces import ILocation
+from zope.traversing.browser.absoluteurl import absoluteURL
+
+
+def get_icon_url(registry, request, name):
+ url = absoluteURL(registry, request)
+ return '%s/%s' % (url, name)
+
+
+def get_component_icon_url(component, request):
+ name, registry_name = icon.bind().get(component)
+ registry = queryUtility(IIconRegistry, name=registry_name)
+ if registry is not None:
+ if registry.registered(name):
+ return get_icon_url(registry, request, name)
+ return None
More information about the checkins
mailing list