[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