[Checkins] SVN: Sandbox/ulif/grok-adminui-experimental/src/grok/admin/view Displaying of broken objects.

Uli Fouquet uli at gnufix.de
Sun Aug 26 03:02:29 EDT 2007


Log message for revision 79276:
  Displaying of broken objects.

Changed:
  U   Sandbox/ulif/grok-adminui-experimental/src/grok/admin/view.py
  U   Sandbox/ulif/grok-adminui-experimental/src/grok/admin/view_templates/applications.pt

-=-
Modified: Sandbox/ulif/grok-adminui-experimental/src/grok/admin/view.py
===================================================================
--- Sandbox/ulif/grok-adminui-experimental/src/grok/admin/view.py	2007-08-26 01:14:02 UTC (rev 79275)
+++ Sandbox/ulif/grok-adminui-experimental/src/grok/admin/view.py	2007-08-26 07:02:28 UTC (rev 79276)
@@ -27,6 +27,8 @@
 from grok.admin.utilities import getPathLinksForObject, getPathLinksForClass
 from grok.admin.utilities import getPathLinksForDottedName, getParentURL
 
+from ZODB.broken import Broken
+
 import zope.component
 from zope.interface import Interface
 from zope.app import zapi
@@ -54,7 +56,10 @@
 grok.context(IRootFolder)
 grok.define_permission('grok.ManageApplications')
 
+class Sample(grok.Application, grok.Container):
+    pass
 
+
 class Add(grok.View):
     """Add an application.
     """
@@ -90,7 +95,19 @@
         if not isinstance(items, list):
             items = [items]
         for name in items:
-            del self.context[name]
+            try:
+                del self.context[name]
+            except AttributeError:
+                # object is broken and has to be handled special.
+                #self.context[name].__parent__ = self.context
+                #self.context[name] = object()
+                #self.context._setOb(name, None)
+                #self.context.__setitem__(name, None)
+                obj = self.context[name]
+                #obj = None
+                #del obj
+                del self.context[name]
+                #get_transaction.commit()
             self.flash(u'Application %s was successfully deleted.' % (name,))
         self.redirect(self.url(self.context))
 
@@ -323,17 +340,31 @@
         return result
 
     def update(self):
+        from ZODB import broken
+
+        from zope.app.broken.broken import IBroken
+
+        # Available apps...
         apps = zope.component.getAllUtilitiesRegisteredFor(
             grok.interfaces.IApplication)
+        self.applications = (
+            {'name': "%s.%s" % (x.__module__, x.__name__),
+             'docurl':("%s.%s" % (x.__module__, x.__name__)).replace('.', '/')}
+            for x in apps)
+
+        # Installed apps...
         inst_apps = [x for x in self.context.values()
                      if hasattr(x, '__class__') and x.__class__ in apps]
-        self.applications = (
-          {'name': "%s.%s" % (x.__module__, x.__name__),
-           'docurl':("%s.%s" % (x.__module__, x.__name__)).replace('.', '/')}
-          for x in apps)
+        inst_apps.sort(lambda x, y: cmp(x.__name__, y.__name__))
         self.installed_applications = inst_apps
 
+        # Broken apps...
+        broken_apps = [{'obj':y, 'name':x} for x,y in self.context.items()
+                       if isinstance(y, Broken)]
+        broken_apps.sort(lambda x, y: cmp(x['name'], y['name']))
+        self.broken_applications = broken_apps
 
+
 class AdminMessageSource(grok.GlobalUtility):
 
     grok.name('admin')

Modified: Sandbox/ulif/grok-adminui-experimental/src/grok/admin/view_templates/applications.pt
===================================================================
--- Sandbox/ulif/grok-adminui-experimental/src/grok/admin/view_templates/applications.pt	2007-08-26 01:14:02 UTC (rev 79275)
+++ Sandbox/ulif/grok-adminui-experimental/src/grok/admin/view_templates/applications.pt	2007-08-26 07:02:28 UTC (rev 79276)
@@ -22,6 +22,18 @@
 	  >object browser</a>]
 	</div>
 
+	<div tal:condition="view/broken_applications">
+	  <br/><div class="emph">Broken applications:</div>
+	</div>
+        <div tal:repeat="app view/broken_applications">
+	  <input type="checkbox" 
+		 class="checkbox" 
+		 tal:attributes="value app/name;
+				 name string:items" />
+	  <span tal:content="app/name" />
+	  (broken type: <span tal:replace="string:${app/obj/__class__/__module__}.${app/obj/__class__/__name__}"/>). This application is broken!
+	</div>
+
 	<p>
 	  <input class="button" type="submit" value="Delete Selected"/></p>
       </fieldset>



More information about the Checkins mailing list