[Checkins] SVN: grok/branches/grok-martian/src/grok/grokker.py No
more 'grokker.py'; this functionality moved into martian.
Martijn Faassen
faassen at infrae.com
Tue Jun 19 16:29:46 EDT 2007
Log message for revision 76817:
No more 'grokker.py'; this functionality moved into martian.
Changed:
D grok/branches/grok-martian/src/grok/grokker.py
-=-
Deleted: grok/branches/grok-martian/src/grok/grokker.py
===================================================================
--- grok/branches/grok-martian/src/grok/grokker.py 2007-06-19 20:25:20 UTC (rev 76816)
+++ grok/branches/grok-martian/src/grok/grokker.py 2007-06-19 20:29:46 UTC (rev 76817)
@@ -1,122 +0,0 @@
-import grok
-from grok import util, templatereg
-from grok.error import GrokError
-
-class GrokkerRegistry(object):
- def __init__(self):
- self.clear()
-
- def clear(self):
- self._grokkers = {}
- # register the meta grokkers manually as we can't grok those
- self.registerGrokker(ClassGrokkerGrokker())
- self.registerGrokker(InstanceGrokkerGrokker())
- self.registerGrokker(ModuleGrokkerGrokker())
-
- def registerGrokker(self, grokker):
- # we're using a dictionary to make sure each type of grokker
- # is registered only once (e.g. during meta-grok-time, and not again
- # during grok-time).
- key = grokker.__class__
- if key in self._grokkers:
- return
- self._grokkers[key] = grokker
-
- def _getGrokkersInOrder(self):
- # sort grokkers by priority
- grokkers = sorted(self._grokkers.values(),
- key=lambda grokker: grokker.priority)
- # we want to handle high priority first
- grokkers.reverse()
- return grokkers
-
- def scan(self, module_info):
- components = {}
- for grokker in self._grokkers.values():
- if isinstance(grokker, grok.ModuleGrokker):
- continue
- components[grokker.component_class] = []
-
- grokkers = self._getGrokkersInOrder()
- module = module_info.getModule()
- for name in dir(module):
- if name.startswith('__grok_'):
- continue
- obj = getattr(module, name)
- if not util.defined_locally(obj, module_info.dotted_name):
- continue
- # XXX find way to get rid of this inner loop by doing hash table
- # lookup?
- for grokker in grokkers:
- if grokker.match(obj):
- components[grokker.component_class].append((name, obj))
- if not grokker.continue_scanning:
- break
-
- return components
-
- def grok(self, module_info):
- scanned_results = self.scan(module_info)
-
- # XXX hardcoded in here which base classes are possible contexts
- # this should be made extensible
- possible_contexts = [obj for (name, obj) in
- (scanned_results.get(grok.Model, []) +
- scanned_results.get(grok.LocalUtility, []) +
- scanned_results.get(grok.Container, []))]
- context = util.determine_module_context(module_info, possible_contexts)
-
- templates = templatereg.TemplateRegistry()
-
- # run through all grokkers registering found components in order
- for grokker in self._getGrokkersInOrder():
- # if we run into a ModuleGrokker, just do simple registration.
- # this allows us to hook up grokkers to the process that actually
- # do not respond to anything in the module but for instance
- # to the filesystem to find templates
- if isinstance(grokker, grok.ModuleGrokker):
- grokker.register(context, module_info, templates)
- continue
-
- components = scanned_results.get(grokker.component_class, [])
-
- for name, component in components:
- # this is a base class as it ends with Base, skip
- if type(component) is type:
- if name.endswith('Base'):
- continue
- elif util.class_annotation_nobase(component,
- 'grok.baseclass', False):
- continue
- grokker.register(context,
- name, component,
- module_info, templates)
-
- unassociated = list(templates.listUnassociated())
- if unassociated:
- raise GrokError("Found the following unassociated template(s) when "
- "grokking %r: %s. Define view classes inheriting "
- "from grok.View to enable the template(s)."
- % (module_info.dotted_name,
- ', '.join(unassociated)), module_info)
-
-
-# deep meta mode here - we define grokkers for grok.ClassGrokker,
-# grok.InstanceGrokker, and grokker.ModuleGrokker.
-
-## class MetaGrokker(grok.ClassGrokker):
-## def register(self, context, name, factory, module_info, templates):
-## grokkerRegistry.registerGrokker(factory())
-
-## class ClassGrokkerGrokker(MetaGrokker):
-## component_class = grok.ClassGrokker
-
-## class InstanceGrokkerGrokker(MetaGrokker):
-## component_class = grok.InstanceGrokker
-
-## class ModuleGrokkerGrokker(MetaGrokker):
-## component_class = grok.ModuleGrokker
-
-# the global grokker registry
-#grokkerRegistry = GrokkerRegistry()
-
More information about the Checkins
mailing list