[Gsoc] Respector: A Grok Introspector Replacement
Lennart Regebro
regebro at gmail.com
Fri Mar 28 11:54:49 EDT 2008
A quick look through looks like I agree with most of this. :)
Basically what is needed is a component registry viewer and an object
inspector that both are pluggable enough so that frameworks like Grok
and Plone can plug in their own stuff. Integration with some
apidoc/docfindertab thingy would be nice too.
The component registry helper we hopefully has somebody to do.
Just my 2 centimes.
On Thu, Mar 27, 2008 at 4:28 PM, Uli Fouquet <uli at gnufix.de> wrote:
> Hi there,
>
> I followed the interesting discussion on the list. Especially
> ZODB/registry/component browsers seem to be a hot thing currently ;-)
>
> Because my last years' work on the Grok introspector is affected at
> least indirectly by that development and because I am considering to
> apply one more time for GSOC, I would like to put in some thoughts
> concerning the Grok introspector, but also all kinds of 'runtime
> scanners'.
>
> As usual, please forgive the length!
>
> Respector: A Grok Introspector Replacement
> ******************************************
>
> The Grok introspector I developed during GSOC 2007 is still missing
> some fundamental functionality and suffers from some fundamental
> design flaws.
>
> After (re)thinking about it and reading all the ideas mentioned in
> this list (most notably: ideas collected and put in by Lennart and
> Martin Aspeli), I came to the conclusion that a proper
> reimplementation might be the best way to get a more powerfull tool
> here. A reimplementation, that is based on a more general engine.
>
> This might inlude improvements on the ZODB broken object model.
>
>
> What does 'respector' mean here?
> =================================
>
> The word 'respector' is built from 'replacement', 'debugger' and
> 'introspector'.
>
> It denotes both of the (currently) two distinct parts of 'runtime'
> orientation for users in Grok, the ZODB browser as well as the
> package/component browser. While the first one gets and displays
> information about ZODB objects, the latter delivers (or: should
> deliver) information about loaded packages, interfaces, directives
> etc. It should be kept in mind, that ZODB and registry objects might
> be only a part of the things users might want to examine in a runtime
> environment.
>
>
> Problems with current approach
> ==============================
>
> The current approach of `docgrok`, the tool that does introspection
> for Grok, suffers from some shortcomings:
>
> - it is bound quite strictly to Grok, which means: it requires a full
> fledged Grok instance running to work.
>
> - it makes strong assumptions about the environment it runs in, namely
> the existance of `apidoc` and other voluminous packages.
>
> - it comes as a part of the grok core, which bloats the number of
> packages needed to run grok, even if the introspecting functionality
> is not wanted (for example in production environments).
>
> - it might be considered a security risk, because it frankly passes all
> information to (authenticated) users without a possibility to
> restrict access. There is no possibility to create something like a
> 'developer user'.
>
> - it does not provide an interface other than the Web-UI, nor does it
> provide entry points for, say, remote debugging without a browser.
>
> - its API might be too complex. While it is possible to register
> arbitrary types of things to be displayed by `docgrok`, the way to
> do it might be plainer.
>
> - it makes too little use of other tools already available (basically
> it wraps only `apidoc`).
>
> Apparently `docgrok` also lacks the ability to display important data
> like directives used in a view, available layers, default values
> etc. This, however, is more a question of diligence, because in
> principle all this is supported by the current approach. It would only
> need a concrete implementation for concrete types of things.
>
>
> Renewing the Grok admin app
> ===========================
>
> Some of the shortcomings mentioned above can be tackled by simply
> factoring the admin-UI out of the Grok core/trunk. Such, a user can
> decide whether s/he needs this functionality or not on his/her own.
>
> To cope with the deeper design flaws, I can think of a two-step
> strategy:
>
> 1) factor out introspection stuff from the then standalone admin app
> into an own package or subpackage that can be used also without
> grok/grok.admin.
>
> 2) give it a new, more general, easy to use base.
>
> All this should not be too complex, except the 'general base' stuff.
>
>
> A more basic foundation for grabbing runtime information
> --------------------------------------------------------
>
> Reading all the proposals and ideas on the grok-dev and GSOC lists I
> see, that there is a high demand for a better integrated
> 'runtime-scanner' which can be used in different environments (Plone,
> Grok, etc.) and with different frontends (webbrowser, shell, wxpython,
> etc.).
>
> If such a tool exists, also Grok should of course make use of it.
>
> From the experiences from last GSOC I might mention some things to pay
> attention to when creating such a tool.
>
> A basic runtime scanner
>
> - should be extensible in the way, that it can handle different kinds
> of data sources such as the ZODB, registry etc. It should be
> possible to implement new scanners based on a well-designed API if
> appropriate, for example to add support for RDBMs one day.
>
> This means, that in the beginning a basic scanner would be needed,
> that makes nearly no assumptions about existing things in the
> environment, but is extensible to provide support for example for
> scanning the ZODB. The zodbscanner in this case would be a special
> case of the base scanner.
>
> - should separate the tasks of information retrieval and information
> presentation. Nearly all tools existing in that area do that
> internally, namely `docgrok`, `apidoc` and `zodbbrowser`. But they
> all make assumptions about the used frontend (browser, wxpython-GUI)
> and offer only support for that kind of 'display'.
>
> A well designed runtime-scanner might be prepared for collaboration
> with unknown presentation 'plugins'. The separation of retrieval and
> presentation would ease the implementation of specialized frontends
> for Plone, Grok, etc.
>
> - might be prepared for modification of objects. This means, it might
> provide a 'communication channel' to tell a frontend, whether a
> certain attribute/object/thing is modifiable and perform this
> modification on request.
>
> This way, the scanner would turn into a debugging tool.
>
> All this is _much_ work, probably too much for a single GSOC, but at
> least a plain but well thought base implementation should be possible.
>
> When the base API exists, numerous scanner extensions/frontends could
> be implemented independant from each other later on.
>
>
> A renewed runtime scanner for Grok
> ==================================
>
> Retrieving information
> ----------------------
>
> Given that such a general base exists, Grok certainly needs a
> specialized version that diggs for
>
> - directives used (also default ones, not explicitly used)
>
> - views/layers (also ones not currently used but available)
>
> - other stuff
>
> This would basically mean to implement a scanner, that extends the
> base scanner, because every scanner can only look for things it is
> aware of. This might make use of existing tools like `apidoc` to
> avoid reinventing the reel.
>
>
> Presenting information
> ----------------------
>
> Once, the scanner works, an appropriate 'frontend' would be needed,
> that naturally would be a set of views.
>
> For Grok there might be much code of the current docgrok
> implementation that can be reused for that.
>
> I could also think of a wxpython-based remote tool for debugging,
> which would require an appropriate 'frontend' as well.
>
>
> Modify information
> ------------------
>
> It would be nice to be able to change values of certain objects
> on-the-fly.
>
> A nice feature (not only for Grok) would be the ability to edit broken
> objects. This would require a generic broken objects implementation as
> proposed on http://wiki.zope.org/gsoc/SummerOfCode2008. I already
> implemented support for deletion of broken objects in Grok.
>
>
> Is all that necessary?
> ======================
>
> No, it's not. For Grok we can archive the same functionality with the
> existing docgrok stuff. It, however, makes sense from my point of
> view, because a unified runtime scanner would distribute the effort for
> keeping everything up-to-date on many shoulders and avoid
> double/triple work. Why should the same ZODB scanning be performed by
> four different packages, when in fact they all try to grab the same
> information? Unfortunately, this is the current state.
>
> Maybe something like a base runtime scanner already exists due to
> efforts starting at the Plone summit. The apidoc package is usable
> anyway and also the z3c.zodbbrowser might be of use, if it would
> separate the information retrieval and presentation (currently wxpython
> based, right?) even more accurate.
>
> The Grok admin UI needs a redesign anyway to address all the issues
> mentioned above. So why not go back to the roots?
>
> Furthermore this addresses a topic, which crosscuts several planned
> projects for upcoming GSOC. Why not try a collaborative effort? Is there
> a better opportunity?
>
> Kind regards,
>
> --
> Uli
>
>
> _______________________________________________
> Gsoc mailing list
> Gsoc at zope.org
> http://mail.zope.org/mailman/listinfo/gsoc
>
>
--
Lennart Regebro: Zope and Plone consulting.
http://www.colliberty.com/
+33 661 58 14 64
More information about the Gsoc
mailing list