[Grok-dev] Re: Salt & z3c.autoinclude

Martin Aspeli optilude at gmx.net
Tue Mar 25 04:32:41 EDT 2008

Ethan Jucovy wrote:
> Hey,
> I've incorporated many of the recommendations in this thread into the 
> adding-salt branch of z3c.autoinclude and cleaned up the code a bit.  
> Three specific points follow, in increasing level of code detail.  :)

You rock ;-)

> First, in response to Martin's understandable confusion about 
> autoinclusion (z3c.autoinclude's original functionality: dependency 
> loading) vs plugin inclusion, I've extracted a common base into 
> z3c.autoinclude.utils and tried to distinguish more clearly between the 
> two functions in the README.  I also added a brief introductory section 
> to the README which lays out how to use the package from a user's 
> perspective (ZCML directives, entry points) without going into any of 
> the details of the code or tests.  I hope this makes it all a bit more 
> clear.


> On Sat, Mar 22, 2008 at 6:56 PM, Martijn Faassen <faassen at startifact.com 
> <mailto:faassen at startifact.com>> wrote:
>  > We need to distinguish auto-inclusion from loading up plugins.
>  > Auto-inclusion means automatically also loading the ZCML of that
>  > dependency.
> I think this terminology is contributing to the confusion.  From a new 
> user's perspective I think "auto-inclusion" would seem to describe both 
> functions of the package: whether it is loading ZCML from dependencies 
> or plugins, the package is performing the same task of automatically 
> including packages without any explicit per-package <include> 
> statement.  Perhaps we should disambiguate these and refer explicitly to 
> "including dependencies" and "including plugins" throughout?  (Rename 
> include.py to dependency.py, IncludeFinder to DependencyFinder, etc.)  
> Martijn, I'm sure you have a strong opinion here -- how would you feel 
> about renaming the ``<autoinclude>`` directive to something less 
> ambiguous like ``<includeDependencies>``, symmetric to 
> ``<includePlugins>``?  (I'd love to think of a shorter word than 
> "dependency" for the directive but I'm drawing a blank...)

+1 for this, though I'm not sure if we have live users of this thing 
that need to be migrated?

Perhaps <autoinclude /> could be a convenience directive that does 
*both* <autoincludeDependencies /> and <autoincludePlugins />?

I don't mind longish names if they are descriptive and accurate, personally.

> Second, I've changed the entry point syntax per Martijn's preference; it 
> now looks like (using Products.CMFPlone as the example platform to plug 
> in to) ::
> """
> [z3c.autoinclude.plugin]
> target = Products.CMFPlone
> """
> There is an implicit, enforced assumption that the right-hand side of 
> the entry point (that is, the platform) is a valid dotted module name.

Can we make it an explicit assumption (i.e. documented) if it isn't 
already? :)

> On Sat, Mar 22, 2008 at 7:32 PM, Martin Aspeli <optilude at gmx.net 
> <mailto:optilude at gmx.net>> wrote:
>  > So long as we don't design the syntax or framework so that it's
>  > impossible to cleanly support multiple targets in the future, I'm happy
>  > with that stance.
> I'm pretty sure that this syntax will work quite well for multiple 
> targets (platforms) actually so you needn't worry.  The left-hand side 
> of the entry point ("target") is completely extraneous so multiple entry 
> points can be defined for a single plugin package already; I haven't 
> written any tests to prove this but I think that something like the 
> following would Just Work (assuming the <includePlugins> directives were 
> specified somewhere, and assuming the package magically worked on two 
> frameworks with the same configuration) ::
> """
> [z3c.autoinclude.plugin]
> target = Products.CMFPlone
> smash = grok
> """
> More importantly though, the fact that the left-hand side is ignored 
> entirely leaves plenty of room for a future syntax extension there which 
> specifies a ZCML starting point, which would make the above example 
> rather more useful.  But it seems we're all in agreement to leave this 
> alone for now and wait for a real-world use case to (potentially) come up.

Sounds good.

> Anyway, that's about it for the update.  If anyone's really interested 
> in the inner workings, I refactored out a common base class 
> ``DistributionManager`` which the ``IncludeFinder`` and ``PluginFinder`` 
> both extend.  There's some highly questionable makeshift adaptation of 
> distribution objects and strings going on there which I'm half-tempted 
> to formalize with zope.component and zope.interface but that may be 
> overkill, I'm not really sure.  As always, comments and criticism much 
> appreciated.

Thanks so much for doing this!


Author of `Professional Plone Development`, a book for developers who
want to work with Plone. See http://martinaspeli.net/plone-book

More information about the Grok-dev mailing list