[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