More repeatable header for autogenerated files
authorunknown <kimgr@WSAB101310.eur.gad.schneider-electric.com>
Tue, 2 Feb 2016 20:40:13 +0000 (21:40 +0100)
committerunknown <kimgr@WSAB101310.eur.gad.schneider-electric.com>
Tue, 2 Feb 2016 20:40:13 +0000 (21:40 +0100)
We now include asn1ate version, source filename and last-modified time
of source file.

This makes output repeatable for the same inputs.

asn1ate/pyasn1gen.py
asn1ate/support/pygen.py
asn1ate/test.py

index e3856e1..bb31733 100644 (file)
@@ -28,7 +28,7 @@ from __future__ import print_function  # Python 2 compatibility
 import sys
 import argparse
 import keyword
-from asn1ate import parser
+from asn1ate import parser, __version__
 from asn1ate.support import pygen
 from asn1ate.sema import *
 
@@ -588,12 +588,13 @@ def _sanitize_module(name):
 # Simplistic command-line driver
 def main():
     arg_parser = argparse.ArgumentParser(description='Generate Python classes from an ASN.1 definition file. Output to stdout by default.')
-    arg_parser.add_argument('file', metavar='file', type=argparse.FileType('r'),
-                            help='the ASN.1 file to process')
+    arg_parser.add_argument('file', help='the ASN.1 file to process')
     arg_parser.add_argument('--split', action='store_true',
                             help='output multiple modules to separate files')
     args = arg_parser.parse_args()
-    asn1def = args.file.read()
+
+    with open(args.file, 'r') as input:
+        asn1def = input.read()
 
     parse_tree = parser.parse_asn1(asn1def)
 
@@ -606,7 +607,8 @@ def main():
         try:
             if args.split:
                 output_file = open(_sanitize_module(module.name) + '.py', 'w')
-            print(pygen.auto_generated_header(), file=output_file)
+            print(pygen.auto_generated_header(args.file, __version__),
+                  file=output_file)
             generate_pyasn1(module, output_file, modules)
         finally:
             if output_file != sys.stdout:
index 53f10a7..09b71d0 100644 (file)
@@ -30,15 +30,20 @@ except ImportError:
     # Python 3\r
     from io import StringIO\r
 \r
+import os.path\r
 from datetime import datetime\r
 \r
 \r
-def auto_generated_header(source_filename=None):\r
-    prefix = '# Auto-generated'\r
-    if source_filename:\r
-        prefix += ' from %s' % source_filename\r
+def auto_generated_header(source_filename, version):\r
+    lastmod = datetime.fromtimestamp(os.path.getmtime(source_filename))\r
+    source_filename = os.path.basename(source_filename)\r
 \r
-    return '%s by asn1ate on %s' % (prefix, datetime.now())\r
+    lines = []\r
+    lines.append('# Auto-generated by asn1ate v.%s from %s' %\r
+                 (version, source_filename))\r
+    lines.append('# (last modified on %s)' % lastmod)\r
+    lines.append('')\r
+    return os.linesep.join(lines)\r
 \r
 \r
 class NullBackend(object):\r
index beba7a3..658c65b 100644 (file)
@@ -27,7 +27,7 @@ from __future__ import print_function  # Python 2 compatibility
 
 import sys
 import argparse # Requires Python 2.7 or later, but that's OK for a test driver
-from asn1ate import parser, sema, pyasn1gen
+from asn1ate import parser, sema, pyasn1gen, __version__
 from asn1ate.support import pygen
 
 def parse_args():
@@ -60,7 +60,7 @@ def main():
 
     if args.gen:
         for module in modules:
-            print(pygen.auto_generated_header(args.file))
+            print(pygen.auto_generated_header(args.file, __version__))
             pyasn1gen.generate_pyasn1(module, sys.stdout, modules)
 
     return 0