You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@creadur.apache.org by rd...@apache.org on 2008/06/28 12:16:20 UTC

svn commit: r672488 - in /incubator/rat/main/trunk/scan/src/main/org/apache/rat/scan: scanner.py tests.py

Author: rdonkin
Date: Sat Jun 28 03:16:19 2008
New Revision: 672488

URL: http://svn.apache.org/viewvc?rev=672488&view=rev
Log:
Refactor into separate document class

Modified:
    incubator/rat/main/trunk/scan/src/main/org/apache/rat/scan/scanner.py
    incubator/rat/main/trunk/scan/src/main/org/apache/rat/scan/tests.py

Modified: incubator/rat/main/trunk/scan/src/main/org/apache/rat/scan/scanner.py
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/scan/src/main/org/apache/rat/scan/scanner.py?rev=672488&r1=672487&r2=672488&view=diff
==============================================================================
--- incubator/rat/main/trunk/scan/src/main/org/apache/rat/scan/scanner.py (original)
+++ incubator/rat/main/trunk/scan/src/main/org/apache/rat/scan/scanner.py Sat Jun 28 03:16:19 2008
@@ -17,46 +17,87 @@
 import datetime
 from os.path import join, splitext
 
+class Document:
+    '''
+    A document scanned
+    '''
+    def __init__(self, dir, name, uri=dir):
+        self.dir = dir
+        self.name = name
+        self.loaded = False
+        self.uri = uri
+    
+    def __load(self):
+        if not self.loaded:
+            path = join(self.dir, self.name)
+            file = open(path, mode='rb')
+            try:
+                md5 = hashlib.md5()
+                sha = hashlib.sha512()
+                ripe = hashlib.new('ripemd160')
+                        
+                more = True
+                while more:
+                    content = file.read(4048)
+                    if content == '':
+                        more = False
+                    else:
+                        md5.update(content)
+                        sha.update(content)
+                        ripe.update(content)
+                        
+                self.__md5 = md5.hexdigest()
+                self.__sha = sha.hexdigest()
+                self.__ripe = ripe.hexdigest()
+            finally:
+                file.close()
+            self.loaded = True
+
+    def md5(self):
+        self.__load()
+        return self.__md5
+
+    def ripe(self):
+        self.__load()
+        return self.__ripe
+
+    def sha(self):
+        self.__load()
+        return self.__sha
+    
+    def writeXml(self, result):
+        result = result + " <document dir='" + self.dir + "' name='" + self.name + "' >\n"
+        result = result + "  <md5>" + self.md5() + "</md5>\n"
+        result = result + "  <sha512>" + self.sha() + "</sha512>\n"
+        result = result + "  <ripemd160>" + self.ripe() + "</ripemd160>\n"
+        result = result + " </document>\n"
+        return result
+    
 class Scanner:
     '''
     Scans a directory tree.
     Calculates sums.
     Outputs xml to stdout.
     '''
-    def __init__(self, basedir):
+    def __init__(self, basedir, at=None):
         self.basedir = basedir
+        self.at = at
         
     def scan(self):
         result = "<?xml version='1.0'?>\n<documents basedir='" + self.basedir + "' at='"
-        result = result + datetime.datetime.utcnow().isoformat() + "'>\n"
+        if self.at == None:
+            result = result + datetime.datetime.utcnow().isoformat() 
+        else:
+            result = result + self.at
+        result = result + "'>\n"
         for root, dirs, files in os.walk(self.basedir):
             for name in files:
-                path = join(root, name)
                 ext = splitext(name)[1]
                 if name == 'KEYS':
                     pass
                 elif not (ext == '.sha1' or ext == '.md5' or ext=='.sha' or ext == '.asc'):
-                    file = open(path, mode='rb')
-                    md5 = hashlib.md5()
-                    sha = hashlib.sha512()
-                    ripe = hashlib.new('ripemd160')
-                    
-                    more = True
-                    while more:
-                        content = file.read(4048)
-                        if content == '':
-                            more = False
-                        else:
-                            md5.update(content)
-                            sha.update(content)
-                            ripe.update(content)
-                    
-                    file.close()
-                    result = result + " <document dir='" + root + "' name='" + name + "' >\n"
-                    result = result + "  <md5>" + md5.hexdigest() + "</md5>\n"
-                    result = result + "  <sha512>" + sha.hexdigest() + "</sha512>\n"
-                    result = result + "  <ripemd160>" + ripe.hexdigest() + "</ripemd160>\n"
-                    result = result + " </document>\n"
+                    document = Document(root, name)
+                    result = document.writeXml(result);
             if '.svn' in dirs:
                 dirs.remove('.svn')
         result = result + "</documents>"

Modified: incubator/rat/main/trunk/scan/src/main/org/apache/rat/scan/tests.py
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/scan/src/main/org/apache/rat/scan/tests.py?rev=672488&r1=672487&r2=672488&view=diff
==============================================================================
--- incubator/rat/main/trunk/scan/src/main/org/apache/rat/scan/tests.py (original)
+++ incubator/rat/main/trunk/scan/src/main/org/apache/rat/scan/tests.py Sat Jun 28 03:16:19 2008
@@ -17,6 +17,8 @@
 import diff
 import xml.parsers.expat
 
+TEST_BASE_DIR="../../../../../test/org/apache/rat/scan/"
+
 class ReadXmlTestCase(unittest.TestCase):
     
     def testReadOne(self):
@@ -143,4 +145,24 @@
         self.assertEquals(1, len(removed))
         self.assertEquals(modifiedDocument, modified[0])
         self.assertEquals(newDocument, added[0])
-        self.assertEquals(self.document2, removed[0])
\ No newline at end of file
+        self.assertEquals(self.document2, removed[0])
+        
+class ScanDocumentTest(unittest.TestCase):
+    def setUp(self):
+        self.document = scanner.Document(TEST_BASE_DIR, "Sample.txt", "uri")
+    
+    def testSums(self):
+        self.assertEquals("c81f4cd3b2203ae869b8c6acea6bf73c", self.document.md5())
+        self.assertEquals("4b0a5f9317e0d3165ea4982f90e7266a553d8353", self.document.ripe())
+        self.assertEquals("2ae73f5cfe7943a7d51b46e653948af7f067a6b01e61c827201c8e17b9231956f48b3e8e0da64e822ca9fdeb7a62f5af623406e2dbb9b39a8dabf569d2046402", self.document.sha())
+
+    def testXml(self):
+        self.assertEquals(" <document dir='../../../../../test/org/apache/rat/scan/' name='Sample.txt' >\n  <md5>c81f4cd3b2203ae869b8c6acea6bf73c</md5>\n  <sha512>2ae73f5cfe7943a7d51b46e653948af7f067a6b01e61c827201c8e17b9231956f48b3e8e0da64e822ca9fdeb7a62f5af623406e2dbb9b39a8dabf569d2046402</sha512>\n  <ripemd160>4b0a5f9317e0d3165ea4982f90e7266a553d8353</ripemd160>\n </document>\n", self.document.writeXml(""))
+        
+        
+class ScanScannerTest(unittest.TestCase):
+    def setUp(self):
+        self.scanner = scanner.Scanner(TEST_BASE_DIR + "scanner/", "NOW")
+        
+    def testScan(self):
+        self.assertEquals("<?xml version='1.0'?>\n<documents basedir='../../../../../test/org/apache/rat/scan/scanner/' at='NOW'>\n <document dir='../../../../../test/org/apache/rat/scan/scanner/' name='HenryV.txt' >\n  <md5>c81f4cd3b2203ae869b8c6acea6bf73c</md5>\n  <sha512>2ae73f5cfe7943a7d51b46e653948af7f067a6b01e61c827201c8e17b9231956f48b3e8e0da64e822ca9fdeb7a62f5af623406e2dbb9b39a8dabf569d2046402</sha512>\n  <ripemd160>4b0a5f9317e0d3165ea4982f90e7266a553d8353</ripemd160>\n </document>\n</documents>", self.scanner.scan())
\ No newline at end of file