From d7f36fdd06218e5bd421d647dfb20a6e252f3b94 Mon Sep 17 00:00:00 2001
From: Greg Quinn <greg.quinn@ssec.wisc.edu>
Date: Wed, 9 Dec 2015 14:08:59 -0600
Subject: [PATCH] Add crgen.diff_crs for validated generated CR data

---
 edosl0util/crgen.py | 30 +++++++++++++++++++++++++++++-
 setup.py            |  1 +
 2 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/edosl0util/crgen.py b/edosl0util/crgen.py
index 56c40ef..f648d57 100644
--- a/edosl0util/crgen.py
+++ b/edosl0util/crgen.py
@@ -2,14 +2,42 @@
 """EDOS PDS construction record generation for SUOMI NPP"""
 
 from datetime import datetime
+import copy
+import difflib
 import itertools
 import logging
 import os
+import pprint
 import edosl0util.crio as crio
 from edosl0util.headers import DaySegmentedTimecode
 from edosl0util.stream import jpss_packet_stream
 
 
+def diff_crs(real_file, generated_file):
+    """Print full diff output from a real EDOS CR to one generated by this module
+
+    Only fields which can be generated by this module via a packet scan are compared.
+    Nothing is output if the CRs are the same.
+    """
+
+    def main():
+        real = crio.read(real_file)
+        generated = crio.read(generated_file)
+        make_comparable(real, generated)
+        if real != generated:
+            diff = difflib.ndiff(pprint.pformat(real).splitlines(),
+                                    pprint.pformat(generated).splitlines())
+            for line in diff:
+                print line
+
+    def make_comparable(real, generated):
+        insert_fake_cr_info(real)
+        del generated['completion_time']  # it seems CR completion time does not match PDS
+        del real['completion_time']       # creation time from the file name
+
+    main()
+
+
 def test_build_apid_info():
     # FIXME: build CR comparison into the CLI
     calculated = build_cr('P1571289CRISSCIENCEAAT15320210920101.PDS')
@@ -102,7 +130,7 @@ def get_pds_creation_time(pds_file_or_id):
 
 def build_apid_info(scan_apid_info):
     """Build up apid_info resulting from scan_packets into a full apid_info for a CR"""
-    apid_info = deepcopy(scan_apid_info)
+    apid_info = copy.deepcopy(scan_apid_info)
     for entry in apid_info:
         entry['scid'] = npp_scid
         entry['vcid_count'] = 1
diff --git a/setup.py b/setup.py
index 6ec26b2..d86625e 100644
--- a/setup.py
+++ b/setup.py
@@ -22,6 +22,7 @@ setup(
     edosl0trunc = edosl0util.cli.trunc:main
     edosl0info = edosl0util.cli.info:main
     edosl0merge = edosl0util.cli.merge:main
+    edosl0crgen = edosl0util.cli.crgen:main
     rdr2l0 = edosl0util.cli.rdr2l0:main
     """
 )
-- 
GitLab