Acknowlege that current env callback protocol is entrenched.

This commit is contained in:
Stuart Gathman
2005-06-17 00:45:10 +00:00
parent 3e47952438
commit 4c659c7f87
+22 -11
View File
@@ -141,16 +141,28 @@ def closecallback(ctx):
m._setctx(None) # release milterContext m._setctx(None) # release milterContext
return rc return rc
def dictfromlist(args):
"Convert ESMTP parm list to keyword dictionary."
kw = {}
for s in args:
pos = s.find('=')
if pos > 0:
kw[s[:pos].upper()] = s[pos+1:]
return kw
def envcallback(c,args): def envcallback(c,args):
"""Convert ESMTP parms to keyword parameters. """Call function c with ESMTP parms converted to keyword parameters.
Can be used in the envfrom and/or envrcpt callbacks to process Can be used in the envfrom and/or envrcpt callbacks to process
ESMTP parameters as python keyword parameters.""" ESMTP parameters as python keyword parameters."""
kw = {} kw = {}
pargs = [args[0]]
for s in args[1:]: for s in args[1:]:
pos = s.find('=') pos = s.find('=')
if pos > 0: if pos > 0:
kw[s[:pos]] = s[pos+1:] kw[s[:pos].upper()] = s[pos+1:]
return apply(c,args,kw) else:
pargs.append(s)
return c(*pargs,**kw)
def runmilter(name,socketname,timeout = 0): def runmilter(name,socketname,timeout = 0):
# This bit is here on the assumption that you will be starting this filter # This bit is here on the assumption that you will be starting this filter
@@ -177,14 +189,13 @@ def runmilter(name,socketname,timeout = 0):
# milter.set_flags(milter.ADDHDRS) # milter.set_flags(milter.ADDHDRS)
milter.set_connect_callback(connectcallback) milter.set_connect_callback(connectcallback)
milter.set_helo_callback(lambda ctx, host: ctx.getpriv().hello(host)) milter.set_helo_callback(lambda ctx, host: ctx.getpriv().hello(host))
milter.set_envfrom_callback(lambda ctx,*str: # For envfrom and envrcpt, we would like to convert ESMTP parms to keyword
ctx.getpriv().envfrom(*str)) # parms, but then all existing users would have to include **kw to accept
# envcallback(ctx.getpriv().envfrom,str)) # arbitrary keywords without crashing. We do provide envcallback and
milter.set_envrcpt_callback(lambda ctx,*str: # dictfromlist to make parsing the ESMTP args convenient.
ctx.getpriv().envrcpt(*str)) milter.set_envfrom_callback(lambda ctx,*str: ctx.getpriv().envfrom(*str))
# envcallback(ctx.getpriv().envrcpt,str)) milter.set_envrcpt_callback(lambda ctx,*str: ctx.getpriv().envrcpt(*str))
milter.set_header_callback(lambda ctx,fld,val: milter.set_header_callback(lambda ctx,fld,val: ctx.getpriv().header(fld,val))
ctx.getpriv().header(fld,val))
milter.set_eoh_callback(lambda ctx: ctx.getpriv().eoh()) milter.set_eoh_callback(lambda ctx: ctx.getpriv().eoh())
milter.set_body_callback(lambda ctx,chunk: ctx.getpriv().body(chunk)) milter.set_body_callback(lambda ctx,chunk: ctx.getpriv().body(chunk))
milter.set_eom_callback(lambda ctx: ctx.getpriv().eom()) milter.set_eom_callback(lambda ctx: ctx.getpriv().eom())