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