[Checkins] SVN: hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/ intermediate checkin, tests still fail

Jan-Wijbrand Kolman janwijbrand at gmail.com
Wed Nov 24 04:31:26 EST 2010


Log message for revision 118546:
  intermediate checkin, tests still fail

Changed:
  U   hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/README.txt
  U   hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/__init__.py
  U   hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/core.py
  U   hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/publisher.py
  U   hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/wsgi.py

-=-
Modified: hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/README.txt
===================================================================
--- hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/README.txt	2010-11-24 08:39:37 UTC (rev 118545)
+++ hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/README.txt	2010-11-24 09:31:26 UTC (rev 118546)
@@ -1140,9 +1140,14 @@
   >>> needed.render()
   '<link rel="unknown" href="http://localhost/static/fanstatic/:hash:.../foo/nothing.unknown" />'
 
-Resource publisher
-==================
+Inclusions injector middleware
+==============================
 
+...
+
+Resource publisher middleware
+=============================
+
 The hurry.resource.publisher is a WSGI component that publishes registered
 resource libraries.
 

Modified: hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/__init__.py
===================================================================
--- hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/__init__.py	2010-11-24 08:39:37 UTC (rev 118545)
+++ hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/__init__.py	2010-11-24 09:31:26 UTC (rev 118546)
@@ -8,13 +8,7 @@
                                  sort_inclusions_by_extension,
                                  generate_code)
 
-from hurry.resource.core import (register_plugin,
+from hurry.resource.core import (init_current_needed_inclusions,
                                  get_current_needed_inclusions)
 
-publisher_signature = 'fanstatic'
-
-devmode = False
-
-def configure_devmode(enable=True):
-    global devmode
-    devmode = enable
+NEEDED = 'hurry.resource.needed'

Modified: hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/core.py
===================================================================
--- hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/core.py	2010-11-24 08:39:37 UTC (rev 118545)
+++ hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/core.py	2010-11-24 09:31:26 UTC (rev 118546)
@@ -1,7 +1,7 @@
 import os
 import sys
 import pkg_resources
-
+import threading
 import hurry.resource
 import hurry.resource.hash
 
@@ -19,13 +19,12 @@
         self.rootpath = rootpath
         self.path = os.path.join(caller_dir(), rootpath)
 
-    def signature(self):
+    def signature(self, dev_mode=False):
         # Only compute the checksum if (1) it has not been computed
         # before or (2) we are in development mode.
-        if self._signature is None or hurry.resource.devmode:
+        if self._signature is None or dev_mode:
             self._signature = hurry.resource.hash.checksum(self.path)
-        return '%s/:hash:%s' % (
-            hurry.resource.publisher_signature, str(self._signature))
+        return ':hash:%s' % str(self._signature)
 
 # total hack to be able to get the dir the resources will be in
 def caller_dir():
@@ -133,7 +132,7 @@
         return self.library.name, self.relpath
 
     def need(self):
-        needed = _plugin.get_current_needed_inclusions()
+        needed = get_current_needed_inclusions()
         needed.need(self)
 
     def inclusions(self):
@@ -154,7 +153,7 @@
         self.depends = depends
 
     def need(self):
-        needed = _plugin.get_current_needed_inclusions()
+        needed = get_current_needed_inclusions()
         needed.need(self)
 
     def inclusions(self):
@@ -177,7 +176,7 @@
 
 class NeededInclusions(object):
     def __init__(self,
-                 base_url='/',
+                 base_url='',
                  inclusions=None,
                  mode=None,
                  rollup=False,
@@ -219,7 +218,11 @@
         return inclusions
 
     def library_url(self, library):
-        return '%s%s/%s/' % (self.base_url, library.signature(), library.name)
+        return '%s/%s/%s/%s/' % (
+            self.base_url,
+            self.publisher_signature,
+            library.signature(dev_mode=self.devmode),
+            library.name)
 
     def render(self):
         """Render a set of inclusions.
@@ -228,8 +231,6 @@
 
     def render_inclusions(self, inclusions):
         result = []
-        if not self.base_url.endswith('/'):
-            self.base_url += '/'
         url_cache = {} # prevent multiple computations for a library in one request
         for inclusion in inclusions:
             library = inclusion.library
@@ -279,28 +280,15 @@
             html = html.replace('</body>', '%s</body>' % bottom, 1)
         return html
 
+thread_local_needed_data = threading.local()
 
-class PluginNotImplemented(object):
-    """Plug-in point for hurry.resource.
+def init_current_needed_inclusions(*args, **kw):
+    needed = NeededInclusions(*args, **kw)
+    thread_local_needed_data.__dict__[hurry.resource.NEEDED] = needed
+    return needed
 
-    Frameworks that want to plug into hurry.resource need to
-    implement these two methods.
-
-    There's no need to subclass this in your own code; just implement
-    the methods.
-    """
-    def get_current_needed_inclusions(self):
-        raise NotImplementedError(
-            "need to implement plugin.get_current_needed_inclusions()")
-
-_plugin = PluginNotImplemented()
-
-def register_plugin(plugin):
-    global _plugin
-    _plugin = plugin
-
 def get_current_needed_inclusions():
-    return _plugin.get_current_needed_inclusions()
+    return thread_local_needed_data.__dict__[hurry.resource.NEEDED]
 
 def apply_mode(inclusions, mode):
     return [inclusion.mode(mode) for inclusion in inclusions]

Modified: hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/publisher.py
===================================================================
--- hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/publisher.py	2010-11-24 08:39:37 UTC (rev 118545)
+++ hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/publisher.py	2010-11-24 09:31:26 UTC (rev 118546)
@@ -66,6 +66,6 @@
         environ['PATH_INFO'] = '/%s' % chunks[1]
         return self.resource_publisher(environ, start_response)
 
-def make_delegator(app, global_conf, **local_conf):
+def make_publisher(app, global_conf, **local_conf):
     return Delegator(app, **local_conf)
 

Modified: hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/wsgi.py
===================================================================
--- hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/wsgi.py	2010-11-24 08:39:37 UTC (rev 118545)
+++ hurry.resource/branches/janjaapdriessen-resource-publisher/src/hurry/resource/wsgi.py	2010-11-24 09:31:26 UTC (rev 118546)
@@ -1,12 +1,7 @@
 import webob
-
-from paste.util import asbool
-
+from paste.deploy.converters import asbool
 import hurry.resource
-from hurry.resource import NeededInclusions
 
-NEEDED = 'hurry.resource.needed'
-
 # TODO: would be nice to make middleware smarter so it could work with
 # a streamed HTML body instead of serializing it out to body. That
 # would complicate the middleware signicantly, however. We would for
@@ -21,14 +16,12 @@
         self.publisher_signature = publisher_signature
 
     def __call__(self, environ, start_response):
-        request = webob.Request(environ)
-
-        needed = NeededInclusions(
+        needed = hurry.resource.init_current_needed_inclusions(
             devmode=self.devmode,
             publisher_signature=self.publisher_signature)
-        request.environ[NEEDED] = needed
 
         # Get the response from the wrapped application:
+        request = webob.Request(environ)
         response = request.get_response(self.application)
 
         # Post-process the response:
@@ -43,7 +36,7 @@
         return response(environ, start_response)
 
 def make_inject(app, global_config, **local_config):
-    devmode = local_config.pop('devmode')
+    devmode = local_config.get('devmode')
     if devmode is not None:
         local_config['devmode'] = asbool(devmode)
     return InjectMiddleWare(app, **local_config)



More information about the checkins mailing list