]> git.phdru.name Git - mimedecode.git/commitdiff
Allow * and exceptions for -p in the headers list
authorOleg Broytman <phd@phdru.name>
Sat, 8 Mar 2014 14:51:43 +0000 (18:51 +0400)
committerOleg Broytman <phd@phdru.name>
Sat, 8 Mar 2014 14:51:43 +0000 (18:51 +0400)
Allow * and exceptions for -p in the headers list:
-p *,-h1,-h2,-h3:p1,p2,p3

ANNOUNCE
mimedecode.docbook
mimedecode.py
test/test_all

index 23d113c95ad0ed0f11b1b7b3c9ac7c5ba9bf95e2..e23ea9beb7c7881049f0f2d5cd688f8bb35e39ab 100644 (file)
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -34,6 +34,9 @@ WHAT'S NEW in version 2.4.0 (2014-03-??)
    Change option -p to accept lists of headers and parameters:
 -p h1,h2,h3,..:p1,p2,p3,..
 
+   Allow * and exceptions for -p in the headers list:
+-p *,-h1,-h2,-h3:p1,p2,p3
+
    Add ChangeLog.
 
 WHAT'S NEW in version 2.3.8 (2014-02-26)
index d98db683691271f016f08df8cfedd248c961c106..f9650bd26891a9afaf85036f1090a9e4ce02c17a 100644 (file)
       </listitem>
    </varlistentry>
 
+   <varlistentry>
+      <term>-p *[,-header1,-header2,-header3,...]:param1[,param2,param3,...]</term>
+      <listitem>
+         <para>
+            Add the parameters(s) to a list of headers parameters to decode;
+            the parameters will be decoded for all headers except the given
+            ones.
+         </para>
+      </listitem>
+   </varlistentry>
+
    <varlistentry>
       <term>-P</term>
       <listitem>
index 0e01572b67af7d4da6d55cb18aea41c6cd22c9a5..6d4c7ea8cef6856844935337d0798eff27c61da1 100755 (executable)
@@ -94,6 +94,9 @@ def decode_header_param(msg, header, param):
                 msg.set_param(param, new_value, header)
 
 
+def _get_exceptions(list):
+    return [x[1:].lower() for x in list[1:] if x[0]=='-']
+
 def decode_headers(msg):
     "Decode message headers according to global options"
 
@@ -116,20 +119,27 @@ def decode_headers(msg):
     for header_list in gopts.decode_headers:
         header_list = header_list.split(',')
         if header_list[0] == '*': # Decode all headers except listed
-            header_list = [h[1:].lower() for h in header_list[1:] if h[0]=='-']
+            header_list = _get_exceptions(header_list)
             for header in msg.keys():
                 if header.lower() not in header_list:
                     decode_header(msg, header)
-        else: # Decode listed hiders
+        else: # Decode listed headers
             for header in header_list:
                 decode_header(msg, header)
 
     for header_list, param_list in gopts.decode_header_params:
         header_list = header_list.split(',')
         param_list = param_list.split(',')
-        for header in header_list:
-            for param in param_list:
-                decode_header_param(msg, header, param)
+        if header_list[0] == '*': # Decode for all headers except listed
+            header_list = _get_exceptions(header_list)
+            for header in msg.keys():
+                if header.lower() not in header_list:
+                    for param in param_list:
+                        decode_header_param(msg, header, param)
+        else: # Decode for listed headers
+            for header in header_list:
+                for param in param_list:
+                    decode_header_param(msg, header, param)
 
 
 def set_header(msg, header, value):
index f61c63a9ddc74f99e44fcff99f41f713fab5bf80..8c59da558550d5b24b6201bc16a442edbda4d048 100755 (executable)
@@ -48,6 +48,7 @@ test_file msg_22.txt msg_22-1.txt -r content-id
 test_file msg_29.txt msg_29-1.txt -R Content-Type:title
 test_file msg_18.txt msg_18-1.txt --remove-params=X-Foobar-Spoink-Defrobnit
 test_file msg_22.txt msg_22.txt -P -p Content-Type,Content-Disposition:name,filename
+test_file msg_22.txt msg_22.txt -P -p \*:name,filename
 
 if [ "$RC" -eq 0 ]; then
    echo "All tests passed!"