You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@spamassassin.apache.org by Justin Mason <jm...@jmason.org> on 2007/08/01 11:45:45 UTC

Re: plugin hook advice?

Dave Brondsema writes:
> I'm working on a plugin and need some advice for hooks.
> $plugin->check_post_dnsbl says "This is a good place to harvest your own
> asynchronously-started network lookups".  I'm using
> Mail::SpamAssassin::Plugin::Karmasphere as a reference, and it uses
> parsed_metadata() and check_post_dnsbl() to start and retrieve some
> network queries.  My plugin will do something very similar, but it
> relies on another plugin running first and it needs to only do the query
> if the first plugin sets a certain field on permsgstatus.  My problem is
> that the first plugin has not run when my parsed_metadata() executes, so
> I'm not sure the best place to initiate my network query.  Any suggestions?

In SpamAssassin 3.2.x, you can use register_method_priority() to set
the second plugin to always run after the first one (if it's loaded):


=item $plugin->register_method_priority($methodname, $priority)

Indicate that the method named C<$methodname> on the current object
has a callback priority of C<$priority>.

This is used by the plugin handler to determine the relative order of
callbacks; plugins with lower-numbered priorities are called before plugins
with higher-numbered priorities.  Each method can have a different priority
value.  The default value is C<0>.  The ordering of callbacks to methods with
equal priority is undefined.

Typically, you only need to worry about this if you need to ensure your
plugin's method is called before another plugin's implementation of that
method.  It should be called from your plugin's constructor.

This API was added in SpamAssassin 3.2.0.



Does that do the trick?

--j.

Re: plugin hook advice?

Posted by Dave Brondsema <da...@brondsema.net>.
Justin Mason wrote:
> Dave Brondsema writes:
>> I'm working on a plugin and need some advice for hooks.
>> $plugin->check_post_dnsbl says "This is a good place to harvest your own
>> asynchronously-started network lookups".  I'm using
>> Mail::SpamAssassin::Plugin::Karmasphere as a reference, and it uses
>> parsed_metadata() and check_post_dnsbl() to start and retrieve some
>> network queries.  My plugin will do something very similar, but it
>> relies on another plugin running first and it needs to only do the query
>> if the first plugin sets a certain field on permsgstatus.  My problem is
>> that the first plugin has not run when my parsed_metadata() executes, so
>> I'm not sure the best place to initiate my network query.  Any suggestions?
> 
> In SpamAssassin 3.2.x, you can use register_method_priority() to set
> the second plugin to always run after the first one (if it's loaded):
> 
> 
> =item $plugin->register_method_priority($methodname, $priority)
> 
> Indicate that the method named C<$methodname> on the current object
> has a callback priority of C<$priority>.
> 
> This is used by the plugin handler to determine the relative order of
> callbacks; plugins with lower-numbered priorities are called before plugins
> with higher-numbered priorities.  Each method can have a different priority
> value.  The default value is C<0>.  The ordering of callbacks to methods with
> equal priority is undefined.
> 
> Typically, you only need to worry about this if you need to ensure your
> plugin's method is called before another plugin's implementation of that
> method.  It should be called from your plugin's constructor.
> 
> This API was added in SpamAssassin 3.2.0.
> 
> 
> 
> Does that do the trick?
> 

That definitely helps, I will have to look in to that.  Currently, I'm
ordering the plugins by the naming of the config files that have the
eval rules (26_openpgp.cf and 61_konfidi.cf).  And the first plugin only
has eval rules, it doesn't implement any hook methods.

Is there source or docs for a main lifecycle method that goes through
all the plugins and the hooks, so I can understand the main phases used
to handle each email?  I haven't been able to find one yet.

Thanks again


-- 
Dave Brondsema : dave@brondsema.net
http://www.brondsema.net : personal
http://www.splike.com : programming
               <><