[Checkins] SVN: z3reload/trunk/ Eggify, buildoutify, and add ZPL.

Tres Seaver tseaver at palladion.com
Fri Mar 26 10:18:21 EDT 2010


Log message for revision 110196:
  Eggify, buildoutify, and add ZPL.

Changed:
  _U  z3reload/trunk/
  A   z3reload/trunk/CHANGES.txt
  D   z3reload/trunk/__init__.py
  A   z3reload/trunk/bootstrap.py
  A   z3reload/trunk/buildout.cfg
  D   z3reload/trunk/configure.zcml
  D   z3reload/trunk/ftests/
  D   z3reload/trunk/meta.zcml
  D   z3reload/trunk/metaconfigure.py
  D   z3reload/trunk/metadirectives.py
  D   z3reload/trunk/package-includes/
  D   z3reload/trunk/reload.py
  A   z3reload/trunk/setup.py
  A   z3reload/trunk/src/
  A   z3reload/trunk/src/z3reload/
  A   z3reload/trunk/src/z3reload/__init__.py
  A   z3reload/trunk/src/z3reload/configure.zcml
  A   z3reload/trunk/src/z3reload/ftests/
  A   z3reload/trunk/src/z3reload/meta.zcml
  A   z3reload/trunk/src/z3reload/metaconfigure.py
  A   z3reload/trunk/src/z3reload/metadirectives.py
  A   z3reload/trunk/src/z3reload/package-includes/
  A   z3reload/trunk/src/z3reload/reload.py
  A   z3reload/trunk/src/z3reload/subscriber.py
  D   z3reload/trunk/subscriber.py

-=-

Property changes on: z3reload/trunk
___________________________________________________________________
Added: svn:ignore
   + bin
develop-eggs
eggs
parts
.installed.cfg
*.egg-info


Added: z3reload/trunk/CHANGES.txt
===================================================================
--- z3reload/trunk/CHANGES.txt	                        (rev 0)
+++ z3reload/trunk/CHANGES.txt	2010-03-26 14:18:21 UTC (rev 110196)
@@ -0,0 +1,7 @@
+z3reload Changelog
+==================
+
+0.1 (unreleased)
+----------------
+
+- First publis release.

Deleted: z3reload/trunk/__init__.py
===================================================================
--- z3reload/trunk/__init__.py	2010-03-26 13:53:30 UTC (rev 110195)
+++ z3reload/trunk/__init__.py	2010-03-26 14:18:21 UTC (rev 110196)
@@ -1,2 +0,0 @@
-# Set this to True to list processed view classes on stderr.
-BLATHER = False

Added: z3reload/trunk/bootstrap.py
===================================================================
--- z3reload/trunk/bootstrap.py	                        (rev 0)
+++ z3reload/trunk/bootstrap.py	2010-03-26 14:18:21 UTC (rev 110196)
@@ -0,0 +1,52 @@
+##############################################################################
+#
+# 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 73408 2007-03-21 05:53:10Z baijum $
+"""
+
+import os, shutil, sys, tempfile, urllib2
+
+tmpeggs = tempfile.mkdtemp()
+
+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
+
+cmd = 'from setuptools.command.easy_install import main; main()'
+if sys.platform == 'win32':
+    cmd = '"%s"' % cmd # work around spawn lamosity on windows
+
+ws = pkg_resources.working_set
+assert os.spawnle(
+    os.P_WAIT, sys.executable, sys.executable,
+    '-c', cmd, '-mqNxd', 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: z3reload/trunk/buildout.cfg
===================================================================
--- z3reload/trunk/buildout.cfg	                        (rev 0)
+++ z3reload/trunk/buildout.cfg	2010-03-26 14:18:21 UTC (rev 110196)
@@ -0,0 +1,9 @@
+[buildout]
+develop = .
+parts = test
+index = http://download.zope.org/zope3.4/3.4.0/index
+
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = z3reload

Deleted: z3reload/trunk/configure.zcml
===================================================================
--- z3reload/trunk/configure.zcml	2010-03-26 13:53:30 UTC (rev 110195)
+++ z3reload/trunk/configure.zcml	2010-03-26 14:18:21 UTC (rev 110196)
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<configure xmlns="http://namespaces.zope.org/zope">
-
- <subscriber
-      for="zope.app.appsetup.interfaces.IDatabaseOpenedEvent"
-      handler=".subscriber.database_opened"
-      />
-
-</configure>

Deleted: z3reload/trunk/meta.zcml
===================================================================
--- z3reload/trunk/meta.zcml	2010-03-26 13:53:30 UTC (rev 110195)
+++ z3reload/trunk/meta.zcml	2010-03-26 14:18:21 UTC (rev 110196)
@@ -1,11 +0,0 @@
-<configure xmlns="http://namespaces.zope.org/meta">
-
-  <directives namespace="http://namespaces.pov.lt/z3reload">
-    <directive
-      name="reload"
-      schema=".metadirectives.IReloadDirective"
-      handler=".metaconfigure.reload"
-      />
-  </directives>
-
-</configure>

Deleted: z3reload/trunk/metaconfigure.py
===================================================================
--- z3reload/trunk/metaconfigure.py	2010-03-26 13:53:30 UTC (rev 110195)
+++ z3reload/trunk/metaconfigure.py	2010-03-26 14:18:21 UTC (rev 110196)
@@ -1,23 +0,0 @@
-import sys
-from zope.configuration.exceptions import ConfigurationError
-
-
-enabled_classes = [] # list of class objects
-enabled_modules = [] # list of module names
-enabled_packages = [] # list of package names
-
-
-def handle_reload(classes, modules, packages):
-    """Add provided objects to global registry of reloadable objects."""
-    enabled_classes.extend(classes)
-    enabled_modules.extend([mod.__name__ for mod in modules])
-    enabled_packages.extend([pkg.__name__ for pkg in packages])
-
-
-def reload(_context, classes=[], modules=[], packages=[]):
-    """Process the `reload` ZCML directive."""
-    if not (classes or modules or packages):
-        raise ConfigurationError("You must specify at least one of"
-                                 " `classes`, `modules` or `packages`.")
-    _context.action(discriminator=None, callable=handle_reload,
-                    args=(classes, modules, packages))

Deleted: z3reload/trunk/metadirectives.py
===================================================================
--- z3reload/trunk/metadirectives.py	2010-03-26 13:53:30 UTC (rev 110195)
+++ z3reload/trunk/metadirectives.py	2010-03-26 14:18:21 UTC (rev 110196)
@@ -1,40 +0,0 @@
-from zope.interface import Interface
-from zope.configuration.fields import Tokens, GlobalObject
-
-
-class IReloadDirective(Interface):
-
-    classes = Tokens(
-        title=u"View classes",
-        required=False,
-        value_type=GlobalObject(
-                title=u"View class",
-                description=u"""
-                A view class for which automatic reload should be enabled.
-                """))
-
-    modules = Tokens(
-        title=u"Modules",
-        required=False,
-        value_type=GlobalObject(
-                title=u"Module",
-                description=u"""
-                A module containing views for which automatic reload should be
-                enabled.
-                """))
-
-    packages = Tokens(
-        title=u"Packages",
-        required=False,
-        value_type=GlobalObject(
-            title=u"Package",
-            description=u"""
-            A package containing views for which automatic reload should be
-            enabled.
-
-            `module` only works for a single module, whereas `package` also
-            applies for contained modules and packages.
-            """))
-
-
-# TODO: reload:omit, reload:all

Deleted: z3reload/trunk/reload.py
===================================================================
--- z3reload/trunk/reload.py	2010-03-26 13:53:30 UTC (rev 110195)
+++ z3reload/trunk/reload.py	2010-03-26 14:18:21 UTC (rev 110196)
@@ -1,81 +0,0 @@
-import sys
-from zope.app.pagetemplate.simpleviewclass import simple as SimplePTPage
-from zope.app.publisher.browser.viewmeta import simple as SimplePage
-
-from z3reload import BLATHER
-
-simple_view_classes = (SimplePTPage, SimplePage)
-
-
-class Reloader(object):
-    """A mixin to be used on SimpleViewClass instances.
-
-    These SimpleViewClass instances are in fact dynamically constructed types
-    with either zope.app.pagetemplate.simpleviewclass.simple or
-    zope.app.publisher,browser.viewmeta as one of the base classes.
-
-    This mixin must be the first superclass, because its __init__ must be
-    called on instantiation.
-    """
-
-    def __init__(self, *args, **kw):
-        bases = self.__class__.__bases__
-        assert len(bases) >= 2
-        reloader2, real_view = bases[:2]
-        assert reloader2 is Reloader
-
-        rest = bases[2:]
-#       for c in rest:
-#           if c not in simple_view_classes:
-#               print >> sys.stderr, "Warning: %r has base %r" % (self.__class__, c)
-
-        clsname = real_view.__name__
-        modname = real_view.__module__
-        module = sys.modules[modname]
-        if hasattr(module, clsname):
-            reload(module)
-            new_view = getattr(module, clsname)
-            self.__class__.__bases__ = (Reloader, new_view) + rest
-        else:
-            # If the module does not have such an attribute, chances are that
-            # the class was dynamically constructed.  In this case reloading is
-            # likely to break so we don't do it.
-            new_view = real_view # just use the old view
-
-        self.__sanitize_bases(new_view)
-        new_view.__init__(self, *args, **kw)
-
-    def __sanitize_bases(self, cls):
-        """Make sure that the bases of a class are in the scope.
-
-        This works around the problem when a class bases do not correspond
-        to the same-named classes in the scope, which could happen after a
-        reload.  This causes errors when invoking base clases
-        """
-        modname = cls.__module__
-        module = sys.modules[modname]
-
-        bases = cls.__bases__
-        new_bases = []
-        for b in bases:
-            bc = getattr(module, b.__name__, None)
-            if bc is not None and bc.__module__ != modname:
-                # Make sure that the base class comes from a different module.
-                new_base = getattr(module, b.__name__)
-                self.__sanitize_bases(new_base)
-                new_bases.append(new_base)
-            else:
-                # Couldn't find class in local scope, abort.
-                break
-        else:
-            # All bases checked successfully.
-            cls.__bases__ = tuple(new_bases)
-
-
-
-def install_reloader(view_class):
-    """Install the Reloader mixin on view_class."""
-    assert view_class.__bases__[-1] in simple_view_classes
-    if BLATHER:
-        print >> sys.stderr, 'Reloader installed for', view_class.__bases__[0]
-    view_class.__bases__ = (Reloader, ) + view_class.__bases__

Added: z3reload/trunk/setup.py
===================================================================
--- z3reload/trunk/setup.py	                        (rev 0)
+++ z3reload/trunk/setup.py	2010-03-26 14:18:21 UTC (rev 110196)
@@ -0,0 +1,44 @@
+##############################################################################
+#
+# Copyright (c) 2006--2008 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.
+#
+##############################################################################
+"""Setup for z3reload package
+"""
+from setuptools import find_packages
+from setuptools import setup
+
+long_description = (open('README.txt').read() +
+                    '\n\n' +
+                    open('CHANGES.txt').read())
+
+
+setup(name='z3reload',
+      version='0.1dev',
+      license='ZPL 2.1',
+      author='Zope Corporation and Contributors',
+      author_email='zope-dev at zope.org',
+      description="Enables automatic reloading of Zope3 view code.",
+      long_description=long_description,
+
+      packages=find_packages('src'),
+      package_dir={'': 'src'},
+      tests_require=['zope.testing'],
+      install_requires=['setuptools',
+                        'zope.app.pagetemplate',
+                        'zope.app.publisher',
+                        'zope.component',
+                        'zope.configuration',
+                        'zope.publisher',
+                       ],
+      include_package_data=True,
+      zip_safe=False,
+      )

Copied: z3reload/trunk/src/z3reload/__init__.py (from rev 110195, z3reload/trunk/__init__.py)
===================================================================
--- z3reload/trunk/src/z3reload/__init__.py	                        (rev 0)
+++ z3reload/trunk/src/z3reload/__init__.py	2010-03-26 14:18:21 UTC (rev 110196)
@@ -0,0 +1,2 @@
+# Set this to True to list processed view classes on stderr.
+BLATHER = False


Property changes on: z3reload/trunk/src/z3reload/__init__.py
___________________________________________________________________
Added: svn:keywords
   + Id
Added: svn:mergeinfo
   + 
Added: svn:eol-style
   + native

Copied: z3reload/trunk/src/z3reload/configure.zcml (from rev 110195, z3reload/trunk/configure.zcml)
===================================================================
--- z3reload/trunk/src/z3reload/configure.zcml	                        (rev 0)
+++ z3reload/trunk/src/z3reload/configure.zcml	2010-03-26 14:18:21 UTC (rev 110196)
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<configure xmlns="http://namespaces.zope.org/zope">
+
+ <subscriber
+      for="zope.app.appsetup.interfaces.IDatabaseOpenedEvent"
+      handler=".subscriber.database_opened"
+      />
+
+</configure>


Property changes on: z3reload/trunk/src/z3reload/configure.zcml
___________________________________________________________________
Added: svn:mergeinfo
   + 
Added: svn:eol-style
   + native


Property changes on: z3reload/trunk/src/z3reload/ftests
___________________________________________________________________
Added: svn:mergeinfo
   + 

Copied: z3reload/trunk/src/z3reload/meta.zcml (from rev 110195, z3reload/trunk/meta.zcml)
===================================================================
--- z3reload/trunk/src/z3reload/meta.zcml	                        (rev 0)
+++ z3reload/trunk/src/z3reload/meta.zcml	2010-03-26 14:18:21 UTC (rev 110196)
@@ -0,0 +1,11 @@
+<configure xmlns="http://namespaces.zope.org/meta">
+
+  <directives namespace="http://namespaces.pov.lt/z3reload">
+    <directive
+      name="reload"
+      schema=".metadirectives.IReloadDirective"
+      handler=".metaconfigure.reload"
+      />
+  </directives>
+
+</configure>


Property changes on: z3reload/trunk/src/z3reload/meta.zcml
___________________________________________________________________
Added: svn:mergeinfo
   + 
Added: svn:eol-style
   + native

Copied: z3reload/trunk/src/z3reload/metaconfigure.py (from rev 110195, z3reload/trunk/metaconfigure.py)
===================================================================
--- z3reload/trunk/src/z3reload/metaconfigure.py	                        (rev 0)
+++ z3reload/trunk/src/z3reload/metaconfigure.py	2010-03-26 14:18:21 UTC (rev 110196)
@@ -0,0 +1,23 @@
+import sys
+from zope.configuration.exceptions import ConfigurationError
+
+
+enabled_classes = [] # list of class objects
+enabled_modules = [] # list of module names
+enabled_packages = [] # list of package names
+
+
+def handle_reload(classes, modules, packages):
+    """Add provided objects to global registry of reloadable objects."""
+    enabled_classes.extend(classes)
+    enabled_modules.extend([mod.__name__ for mod in modules])
+    enabled_packages.extend([pkg.__name__ for pkg in packages])
+
+
+def reload(_context, classes=[], modules=[], packages=[]):
+    """Process the `reload` ZCML directive."""
+    if not (classes or modules or packages):
+        raise ConfigurationError("You must specify at least one of"
+                                 " `classes`, `modules` or `packages`.")
+    _context.action(discriminator=None, callable=handle_reload,
+                    args=(classes, modules, packages))


Property changes on: z3reload/trunk/src/z3reload/metaconfigure.py
___________________________________________________________________
Added: svn:keywords
   + Id
Added: svn:mergeinfo
   + 
Added: svn:eol-style
   + native

Copied: z3reload/trunk/src/z3reload/metadirectives.py (from rev 110195, z3reload/trunk/metadirectives.py)
===================================================================
--- z3reload/trunk/src/z3reload/metadirectives.py	                        (rev 0)
+++ z3reload/trunk/src/z3reload/metadirectives.py	2010-03-26 14:18:21 UTC (rev 110196)
@@ -0,0 +1,40 @@
+from zope.interface import Interface
+from zope.configuration.fields import Tokens, GlobalObject
+
+
+class IReloadDirective(Interface):
+
+    classes = Tokens(
+        title=u"View classes",
+        required=False,
+        value_type=GlobalObject(
+                title=u"View class",
+                description=u"""
+                A view class for which automatic reload should be enabled.
+                """))
+
+    modules = Tokens(
+        title=u"Modules",
+        required=False,
+        value_type=GlobalObject(
+                title=u"Module",
+                description=u"""
+                A module containing views for which automatic reload should be
+                enabled.
+                """))
+
+    packages = Tokens(
+        title=u"Packages",
+        required=False,
+        value_type=GlobalObject(
+            title=u"Package",
+            description=u"""
+            A package containing views for which automatic reload should be
+            enabled.
+
+            `module` only works for a single module, whereas `package` also
+            applies for contained modules and packages.
+            """))
+
+
+# TODO: reload:omit, reload:all


Property changes on: z3reload/trunk/src/z3reload/metadirectives.py
___________________________________________________________________
Added: svn:keywords
   + Id
Added: svn:mergeinfo
   + 
Added: svn:eol-style
   + native


Property changes on: z3reload/trunk/src/z3reload/package-includes
___________________________________________________________________
Added: svn:mergeinfo
   + 

Copied: z3reload/trunk/src/z3reload/reload.py (from rev 110195, z3reload/trunk/reload.py)
===================================================================
--- z3reload/trunk/src/z3reload/reload.py	                        (rev 0)
+++ z3reload/trunk/src/z3reload/reload.py	2010-03-26 14:18:21 UTC (rev 110196)
@@ -0,0 +1,81 @@
+import sys
+from zope.app.pagetemplate.simpleviewclass import simple as SimplePTPage
+from zope.app.publisher.browser.viewmeta import simple as SimplePage
+
+from z3reload import BLATHER
+
+simple_view_classes = (SimplePTPage, SimplePage)
+
+
+class Reloader(object):
+    """A mixin to be used on SimpleViewClass instances.
+
+    These SimpleViewClass instances are in fact dynamically constructed types
+    with either zope.app.pagetemplate.simpleviewclass.simple or
+    zope.app.publisher,browser.viewmeta as one of the base classes.
+
+    This mixin must be the first superclass, because its __init__ must be
+    called on instantiation.
+    """
+
+    def __init__(self, *args, **kw):
+        bases = self.__class__.__bases__
+        assert len(bases) >= 2
+        reloader2, real_view = bases[:2]
+        assert reloader2 is Reloader
+
+        rest = bases[2:]
+#       for c in rest:
+#           if c not in simple_view_classes:
+#               print >> sys.stderr, "Warning: %r has base %r" % (self.__class__, c)
+
+        clsname = real_view.__name__
+        modname = real_view.__module__
+        module = sys.modules[modname]
+        if hasattr(module, clsname):
+            reload(module)
+            new_view = getattr(module, clsname)
+            self.__class__.__bases__ = (Reloader, new_view) + rest
+        else:
+            # If the module does not have such an attribute, chances are that
+            # the class was dynamically constructed.  In this case reloading is
+            # likely to break so we don't do it.
+            new_view = real_view # just use the old view
+
+        self.__sanitize_bases(new_view)
+        new_view.__init__(self, *args, **kw)
+
+    def __sanitize_bases(self, cls):
+        """Make sure that the bases of a class are in the scope.
+
+        This works around the problem when a class bases do not correspond
+        to the same-named classes in the scope, which could happen after a
+        reload.  This causes errors when invoking base clases
+        """
+        modname = cls.__module__
+        module = sys.modules[modname]
+
+        bases = cls.__bases__
+        new_bases = []
+        for b in bases:
+            bc = getattr(module, b.__name__, None)
+            if bc is not None and bc.__module__ != modname:
+                # Make sure that the base class comes from a different module.
+                new_base = getattr(module, b.__name__)
+                self.__sanitize_bases(new_base)
+                new_bases.append(new_base)
+            else:
+                # Couldn't find class in local scope, abort.
+                break
+        else:
+            # All bases checked successfully.
+            cls.__bases__ = tuple(new_bases)
+
+
+
+def install_reloader(view_class):
+    """Install the Reloader mixin on view_class."""
+    assert view_class.__bases__[-1] in simple_view_classes
+    if BLATHER:
+        print >> sys.stderr, 'Reloader installed for', view_class.__bases__[0]
+    view_class.__bases__ = (Reloader, ) + view_class.__bases__


Property changes on: z3reload/trunk/src/z3reload/reload.py
___________________________________________________________________
Added: svn:keywords
   + Id
Added: svn:mergeinfo
   + 
Added: svn:eol-style
   + native

Copied: z3reload/trunk/src/z3reload/subscriber.py (from rev 110195, z3reload/trunk/subscriber.py)
===================================================================
--- z3reload/trunk/src/z3reload/subscriber.py	                        (rev 0)
+++ z3reload/trunk/src/z3reload/subscriber.py	2010-03-26 14:18:21 UTC (rev 110196)
@@ -0,0 +1,52 @@
+import sys
+
+from zope.component import getGlobalSiteManager
+from zope.publisher.interfaces import IRequest
+from zope.component.registry import AdapterRegistration
+
+from z3reload.reload import install_reloader, simple_view_classes
+from z3reload.metaconfigure import enabled_classes, enabled_modules
+from z3reload.metaconfigure import enabled_packages
+
+request_type = IRequest
+
+
+def is_simple_view(reg):
+    """Return True if reg is a registration for a `simple` view.
+
+    A `simple` view is one that subclasses one of simple_view_classes.
+    """
+    if not (isinstance(reg, AdapterRegistration) and
+            len(reg.required) > 0 and
+            reg.required[-1] is not None and
+            reg.required[-1].isOrExtends(IRequest)):
+        return False # this registration does not appear to be a view
+
+    return (type(reg.factory) == type and
+            issubclass(reg.factory, simple_view_classes))
+
+
+def reload_enabled_for(view_class):
+    """Return True if view_class should be made reloadable."""
+    assert view_class.__bases__[-1] in simple_view_classes
+    real_view = view_class.__bases__[0]
+    if real_view in enabled_classes:
+        return True
+    for module in enabled_modules:
+        if real_view.__module__ == module:
+            return True
+    for package in enabled_packages:
+        if real_view.__module__.startswith(package):
+            return True
+    return False
+
+
+def database_opened(event):
+    """Scan adapter registrations and make specified views reloadable.
+
+    Hooks on the DatabaseOpened event.
+    """
+    gsm = getGlobalSiteManager()
+    for reg in gsm.registeredAdapters():
+        if is_simple_view(reg) and reload_enabled_for(reg.factory):
+            install_reloader(reg.factory)


Property changes on: z3reload/trunk/src/z3reload/subscriber.py
___________________________________________________________________
Added: svn:keywords
   + Id
Added: svn:mergeinfo
   + 
Added: svn:eol-style
   + native

Deleted: z3reload/trunk/subscriber.py
===================================================================
--- z3reload/trunk/subscriber.py	2010-03-26 13:53:30 UTC (rev 110195)
+++ z3reload/trunk/subscriber.py	2010-03-26 14:18:21 UTC (rev 110196)
@@ -1,52 +0,0 @@
-import sys
-
-from zope.component import getGlobalSiteManager
-from zope.publisher.interfaces import IRequest
-from zope.component.registry import AdapterRegistration
-
-from z3reload.reload import install_reloader, simple_view_classes
-from z3reload.metaconfigure import enabled_classes, enabled_modules
-from z3reload.metaconfigure import enabled_packages
-
-request_type = IRequest
-
-
-def is_simple_view(reg):
-    """Return True if reg is a registration for a `simple` view.
-
-    A `simple` view is one that subclasses one of simple_view_classes.
-    """
-    if not (isinstance(reg, AdapterRegistration) and
-            len(reg.required) > 0 and
-            reg.required[-1] is not None and
-            reg.required[-1].isOrExtends(IRequest)):
-        return False # this registration does not appear to be a view
-
-    return (type(reg.factory) == type and
-            issubclass(reg.factory, simple_view_classes))
-
-
-def reload_enabled_for(view_class):
-    """Return True if view_class should be made reloadable."""
-    assert view_class.__bases__[-1] in simple_view_classes
-    real_view = view_class.__bases__[0]
-    if real_view in enabled_classes:
-        return True
-    for module in enabled_modules:
-        if real_view.__module__ == module:
-            return True
-    for package in enabled_packages:
-        if real_view.__module__.startswith(package):
-            return True
-    return False
-
-
-def database_opened(event):
-    """Scan adapter registrations and make specified views reloadable.
-
-    Hooks on the DatabaseOpened event.
-    """
-    gsm = getGlobalSiteManager()
-    for reg in gsm.registeredAdapters():
-        if is_simple_view(reg) and reload_enabled_for(reg.factory):
-            install_reloader(reg.factory)



More information about the checkins mailing list