]> git.madduck.net Git - code/mailplate.git/commitdiff

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

hacks to make it py3 compatible master
authormartin f. krafft <madduck@madduck.net>
Tue, 2 Feb 2021 22:01:06 +0000 (11:01 +1300)
committermartin f. krafft <madduck@madduck.net>
Tue, 2 Feb 2021 22:01:06 +0000 (11:01 +1300)
mailplate

index a26c8defeff779a3bb7d30bde863d402bcff1dfa..bda187dfa7be20aac2cf71b6241f07cada0e2697 100755 (executable)
--- a/mailplate
+++ b/mailplate
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python3
 # -*- coding: utf-8 -*-
 #
 # mailplate — reformat mail drafts according to templates
@@ -15,7 +15,7 @@
 
 __name__ = 'mailplate'
 __description__ = 'reformat mail drafts according to templates'
-__version__ = '0.1'
+__version__ = '0.3'
 __author__ = 'martin f. krafft <madduck@madduck.net>'
 __copyright__ = 'Copyright © ' + __author__
 __licence__ = 'Artistic Licence 2.0'
@@ -26,7 +26,7 @@ import posix
 import re
 import sys
 import subprocess
-import ConfigParser
+import configparser
 from optparse import OptionParser
 
 ###
@@ -105,7 +105,7 @@ def interpolate_helpers(s):
             proc = subprocess.Popen(helpers[helper], shell=True,
                     stdout=subprocess.PIPE, stderr=sys.stderr)
             out = proc.communicate()[0]
-            s = s[:helper_begin] + out.strip() + s[helper_end+1:]
+            s = s[:helper_begin] + out.strip().decode() + s[helper_end+1:]
         except KeyError:
             err('unknown helper: ' + helper)
             sys.exit(posix.EX_DATAERR)
@@ -181,11 +181,11 @@ parser.add_option('-V', '--version', dest='version',
 options, args = parser.parse_args()
 
 if options.version:
-    print __name__, __version__ + ' — ' + __description__
-    print
-    print 'Written by ' + __author__
-    print __copyright__
-    print 'Released under the ' + __licence__
+    print(__name__, __version__ + ' — ' + __description__)
+    print('')
+    print('Written by ' + __author__)
+    print(__copyright__)
+    print('Released under the ' + __licence__)
     sys.exit(posix.EX_OK)
 
 ###
@@ -207,7 +207,7 @@ if not os.path.exists(CONFFILE):
 
     if not os.path.isdir(MAILPLATEDIR):
         info('configuration directory not found, creating: ' + MAILPLATEDIR)
-        os.mkdir(MAILPLATEDIR, 0700)
+        os.mkdir(MAILPLATEDIR, o0700)
 
     if not os.path.isfile(CONFFILE):
         info('creating a default configuration file: ' + CONFFILE)
@@ -229,19 +229,21 @@ if not os.access(CONFFILE, os.R_OK):
     sys.exit(posix.EX_OSFILE)
 
 # now parse
-parser = ConfigParser.SafeConfigParser()
+parser = configparser.ConfigParser()
 parser.read(CONFFILE)
 
 # first the GENERAL section into the config dict for all keys with defaults
 for key in config.keys():
     try:
         config[key] = parser.get(SECTION_GENERAL, key)
-    except ConfigParser.NoSectionError, ConfigParser.MissingSectionHeaderError:
+    except (configparser.NoSectionError,
+            configparser.MissingSectionHeaderError):
         err("no section '%s' in %s" % (SECTION_GENERAL, CONFFILE))
         sys.exit(posix.EX_CONFIG)
-    except ConfigParser.NoOptionError:
+    except configparser.NoOptionError:
         continue
-    except ConfigParser.DuplicateSectionError, ConfigParser.ParseError:
+    except (configparser.DuplicateSectionError, 
+            configparser.ParseError):
         err('parse error on %s' % CONFFILE)
         sys.exit(posix.EX_CONFIG)
 
@@ -251,14 +253,14 @@ helpers.update(parser.items(SECTION_HELPERS))
 TPATH = os.path.expanduser(config['template_path'])
 if not os.path.isdir(TPATH):
     info('creating template directory: ' + TPATH)
-    os.mkdir(TPATH, 0700)
+    os.mkdir(TPATH, o0700)
 
 default_templname = config['default_template']
 if default_templname is not None:
     default_templpath = os.path.join(TPATH, default_templname)
     if not os.path.isfile(default_templpath):
         info('creating the default template: ' + default_templpath)
-        f = file(default_templpath, 'w')
+        f = open(default_templpath, 'w')
         f.write('@KEEP_STD_HEADERS\n\n@KEEP_BODY\n')
         f.close()
 
@@ -318,7 +320,7 @@ elif options.menu:
 
 # read in the message from a file, if a filename is given.
 if infname is not None:
-    inf = file(infname, 'r', 1)
+    inf = open(infname, 'r', 1)
 
 # read message into buffer, or preinitialise the buffer if --new is given
 if options.new:
@@ -371,7 +373,7 @@ elif not os.access(templpath, os.R_OK):
     err('template ' + templpath + ' could not be read.')
     sys.exit(posix.EX_OSFILE)
 
-templ = file(templpath, 'r', 1)
+templ = open(templpath, 'r', 1)
 
 for line in templ:
     if not options.auto and line[0] == REGEXPCHAR:
@@ -391,7 +393,7 @@ for line in templ:
         if len(l) == 0:
             payload = '' # end of headers
         elif l[0] == KEEP_SLOT_LEADER:
-            if KEEP_HEADERS.has_key(l[1:]):
+            if l[1:] in KEEP_HEADERS:
                 # found predefined header slot keyword
                 for header in KEEP_HEADERS[l[1:]]:
                     headers[header.lower()] = (header, _keep_header)
@@ -413,7 +415,7 @@ msg = email.message_from_string(rawmsg)
 for header, content in msg.items():
     # iterate all existing mail headers
     lheader = header.lower()
-    if headers.has_key(lheader):
+    if lheader in headers:
         # the template defines this header
         if headers[lheader][1] == _keep_header:
             # it's marked as keep, thus use content from email message
@@ -425,7 +427,7 @@ for header, content in msg.items():
 
 # open the output file
 if outfname is not None:
-    outf = file(outfname, 'w', 0)
+    outf = open(outfname, 'w')
 
 # print the headers, starting with the standard headers in order
 for header in STD_HEADERS:
@@ -433,17 +435,17 @@ for header in STD_HEADERS:
     if headers.get(lheader, (None, _keep_header))[1] is not _keep_header:
         # the template header contains mandatory data, let's print it.
         hpair = headers[lheader]
-        print >>outf, ': '.join(hpair)
+        print(': '.join(hpair), file=outf)
         # and remove it from the dict
         del headers[lheader]
 
-for i, (header, content) in headers.iteritems():
+for i, (header, content) in headers.items():
     # print all remaining headers
     if content == _keep_header: continue
-    print >>outf, ': '.join((header, content))
+    print(': '.join((header, content)), file=outf)
 
 # print empty line to indicate end of headers.
-print >>outf
+print('', file=outf)
 
 # split payload of existing message into body and signature
 body = msg.get_payload().rsplit(SIG_DELIM, 1)
@@ -465,7 +467,7 @@ payload = payload.replace('@KEEP_BODY', body, 1)
 if keep_sig:
     payload = payload.replace('@KEEP_SIGNATURE', signature, 1)
 
-print >>outf, payload.rstrip()
+print(payload.rstrip(), file=outf)
 outf.close()
 
 if options.edit: