From 4251fbc151da58e287cd66450a116aba7390a604 Mon Sep 17 00:00:00 2001 From: "Stuart D. Gathman" <stuart@gathman.org> Date: Tue, 27 Aug 2019 22:29:38 -0400 Subject: [PATCH] Work in python2 and python3 --- Milter/__init__.py | 6 +++++- Milter/testctx.py | 5 +++-- miltermodule.c | 6 +++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Milter/__init__.py b/Milter/__init__.py index 16c1e73..f34694d 100755 --- a/Milter/__init__.py +++ b/Milter/__init__.py @@ -14,6 +14,7 @@ __version__ = '1.0.4' import os import re import milter +import sys try: import thread except: @@ -773,7 +774,10 @@ def runmilter(name,socketname,timeout = 0,rmsock=True): # dictfromlist to make parsing the ESMTP args convenient. milter.set_envfrom_callback(lambda ctx,*str: ctx.getpriv().envfrom(*str)) milter.set_envrcpt_callback(lambda ctx,*str: ctx.getpriv().envrcpt(*str)) - milter.set_header_callback(lambda ctx,fld,val: ctx.getpriv().header(fld,val)) + if sys.version < '3.0.0': + milter.set_header_callback(lambda ctx,f,v: ctx.getpriv().header(f,v)) + else: + milter.set_header_callback(header_callback) milter.set_eoh_callback(lambda ctx: ctx.getpriv().eoh()) milter.set_body_callback(lambda ctx,chunk: ctx.getpriv().body(chunk)) milter.set_eom_callback(lambda ctx: ctx.getpriv().eom()) diff --git a/Milter/testctx.py b/Milter/testctx.py index 84a595c..4225615 100644 --- a/Milter/testctx.py +++ b/Milter/testctx.py @@ -6,6 +6,7 @@ from __future__ import print_function from socket import AF_INET,AF_INET6 +from sys import version as VERSION import time import mime try: @@ -14,8 +15,6 @@ except: from StringIO import StringIO as BytesIO import Milter from Milter import utils -import mime -import email ## Milter context for unit testing %milter applications. # A substitute for milter.milterContext that can be passed to @@ -220,6 +219,8 @@ class TestCtx(object): return rc def _header(self,fld,val): + if VERSION < '3.0.0': + return self._priv.header(fld,val) # email.message_from_binary_file uses surrogateescape to # preserve original bytes in unicode string for decoding errors. # convert str or Header back to original bytes diff --git a/miltermodule.c b/miltermodule.c index ba67953..2987b02 100644 --- a/miltermodule.c +++ b/miltermodule.c @@ -674,7 +674,11 @@ milter_wrap_header(SMFICTX *ctx, char *headerf, char *headerv) { if (header_callback == NULL) return SMFIS_CONTINUE; c = _get_context(ctx); if (!c) return SMFIS_TEMPFAIL; - arglist = Py_BuildValue("(Oyy)", c, headerf, headerv); +#if PY_MAJOR_VERSION >= 3 + arglist = Py_BuildValue("(Osy)", c, headerf, headerv); +#else + arglist = Py_BuildValue("(Oss)", c, headerf, headerv); +#endif return _generic_wrapper(c, header_callback, arglist); } -- GitLab