]> git.phdru.name Git - mimedecode.git/commitdiff
Add option --set-header=header:value
authorOleg Broytman <phd@phdru.name>
Sun, 9 Mar 2014 12:42:00 +0000 (16:42 +0400)
committerOleg Broytman <phd@phdru.name>
Sun, 9 Mar 2014 12:42:00 +0000 (16:42 +0400)
Add option --set-header=header:value to set header's value (only at the
top level).

ANNOUNCE
TODO
mimedecode.docbook
mimedecode.py
test/expected/msg_01-1.txt [new file with mode: 0644]
test/test_all

index 5969c158ddf42a4203d643174e2de2bbd2aa852c..27b4e403e11c11939940822640d8c5d6e610aeac 100644 (file)
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -23,6 +23,11 @@ parts ("attachments") all parts are decoded. Decoding can be controlled by
 command-line options.
 
 
+WHAT'S NEW in version 2.5.0 (2014-03-??)
+
+   Add option --set-header=header:value to set header's value (only at the top
+level).
+
 WHAT'S NEW in version 2.4.0 (2014-03-08)
 
    Change option -d to accept a comma-separated list of headers:
diff --git a/TODO b/TODO
index 058039d7ad41d9e2fd3874997a66e7d0ffc25e2f..587eb427a27a11538688f9bd87846e4a000b2ea4 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,6 +1,5 @@
-Add option -s header:value to set header's value.
-
-Add option -S header:param=value to set header parameter's value.
+Add option --set-param=header:param=value to set header parameter's value (only
+at the top level).
 
 
 Add options --save-headers, --save-body and --save-message to save
index 8fbb51be36769d5d028d79dd3a24d959465c4c87..86e84a6d316b348049efd8b3519e935b1d1daa69 100644 (file)
@@ -83,6 +83,9 @@
       <arg choice="opt">
         <option>-R *[,-header1,-header2,-header3,...]:*[,-param1,-param2,-param3,...]</option>
       </arg>
+      <arg choice="opt">
+         <option>--set-header header:value</option>
+      </arg>
       <arg choice="opt">
          <option>-beit mask</option>
       </arg>
       </listitem>
    </varlistentry>
 
+   <varlistentry>
+      <term>--set-header header:value</term>
+      <listitem>
+         <para>
+           The program sets or changes value for the header to the given value
+           (only at the top-level message).
+         </para>
+      </listitem>
+   </varlistentry>
+
    <varlistentry>
       <term>-b mask</term>
       <listitem>
index 637e275e3b127c6598850237fafcec0ca325c856..6ed2560c6d70ee7aca823fbfc6e01664d58ae711 100755 (executable)
@@ -18,7 +18,7 @@ Broytman mimedecode.py version %s, %s
 def usage(code=0, errormsg=''):
     version(0)
     sys.stdout.write("""\
-Usage: %s [-h|--help] [-V|--version] [-cCDP] [-H|--host=hostname] [-f charset] [-d header1[,h2,...]|*[,-h1,...]] [-p header1[,h2,h3,...]:param1[,p2,p3,...]] [-r header1[,h2,...]|*[,-h1,...]] [-R header1[,h2,h3,...]:param1[,p2,p3,...]] [-beit mask] [-o output_file] [input_file [output_file]]
+        Usage: %s [-h|--help] [-V|--version] [-cCDP] [-H|--host=hostname] [-f charset] [-d header1[,h2,...]|*[,-h1,...]] [-p header1[,h2,h3,...]:param1[,p2,p3,...]] [-r header1[,h2,...]|*[,-h1,...]] [-R header1[,h2,h3,...]:param1[,p2,p3,...]] [--set-header header:value] [-beit mask] [-o output_file] [input_file [output_file]]
 """ % me)
     if errormsg:
         sys.stderr.write(errormsg + '\n')
@@ -367,6 +367,11 @@ class GlobalOptions:
     # A list of headers parameters to remove
     remove_headers_params = []
 
+    # A list of header/value pairs to set
+    set_header_value = []
+    # A list of header/parameter/value triples to set
+    #set_header_param = []
+
     totext_mask = [] # A list of content-types to decode
     binary_mask = [] # A list to pass through
     ignore_mask = [] # Ignore (skip, do not decode and do not include into output)
@@ -384,7 +389,7 @@ def get_opt():
     try:
         options, arguments = getopt(sys.argv[1:],
             'hVcCDPH:f:d:p:r:R:b:e:i:t:o:',
-            ['help', 'version', 'host='])
+            ['help', 'version', 'host=', 'set-header='])
     except GetoptError:
         usage(1)
 
@@ -415,6 +420,8 @@ def get_opt():
             gopts.remove_headers.append(value)
         elif option == '-R':
             gopts.remove_headers_params.append(value.split(':', 1))
+        elif option == '--set-header':
+            gopts.set_header_value.append(value.split(':', 1))
         elif option == '-t':
             gopts.totext_mask.append(value)
         elif option == '-b':
@@ -480,8 +487,13 @@ if __name__ == "__main__":
     gopts.outfile = outfile
     output = outfile.write
 
+    msg = email.message_from_file(infile)
+
+    for header, value in gopts.set_header_value:
+        msg[header] = value
+
     try:
-        decode_message(email.message_from_file(infile))
+        decode_message(msg)
     finally:
         infile.close()
         outfile.close()
diff --git a/test/expected/msg_01-1.txt b/test/expected/msg_01-1.txt
new file mode 100644 (file)
index 0000000..86498c6
--- /dev/null
@@ -0,0 +1,22 @@
+From test Sat Feb  1 00:00:00 2014
+Return-Path: <bbb@zzz.org>
+Delivered-To: bbb@zzz.org
+Received: by mail.zzz.org (Postfix, from userid 889)
+       id 27CEAD38CC; Fri,  4 May 2001 14:05:44 -0400 (EDT)
+Content-Transfer-Encoding: 7bit
+Message-ID: <15090.61304.110929.45684@aaa.zzz.org>
+From: bbb@ddd.com (John X. Doe)
+To: bbb@zzz.org
+Subject: This is a test message
+Date: Fri, 4 May 2001 14:05:44 -0400
+X-Test: set
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+X-MIME-Autoconverted: from us-ascii to utf-8 by test id mimedecode.py
+
+
+Hi,
+
+Do you like this message?
+
+-Me
index a00ba268c90d301760db8047c3a40ec34b90a77a..5d4ca8a5095c77e0e3a385e7a9a16d2222eb3712 100755 (executable)
@@ -53,6 +53,7 @@ test_file msg_16.txt msg_16-1.txt -r Received,List-Help,List-Post,List-Subscribe
 test_file msg_16.txt msg_16-2.txt -r \*,-mime-version,-content-type
 test_file msg_29.txt msg_29-1.txt -R Content-Type:title
 test_file msg_18.txt msg_18-1.txt -R X-Foobar-Spoink-Defrobnit:\*
+test_file msg_01.txt msg_01-1.txt --set-header=X-Test:set
 
 if [ "$RC" -eq 0 ]; then
    echo "All tests passed!"