Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/documents/batching.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/documents/batching.py	(revision 12266)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/documents/batching.py	(revision 12267)
@@ -41,18 +41,18 @@
 
 
-class PDFDocumentProcessor(BatchProcessor):
-    """A batch processor for IPDFDocument objects.
+class DocumentProcessorBase(BatchProcessor):
+    """A base for batch processors for IDocument objects.
     """
     grok.implements(IBatchProcessor)
     grok.provides(IBatchProcessor)
     grok.context(Interface)
-    util_name = 'pdfdocumentprocessor'
-    grok.name(util_name)
+    grok.baseclass()
 
-    name = _('Public PDF Document Processor')
-    iface = IPDFDocument
+    util_name = None
+    name = None
+    iface = None
 
     location_fields = ['document_id',]
-    factory_name = 'waeup.PDFDocument'
+    factory_name = None
 
     additional_fields = ['class_name']
@@ -98,5 +98,5 @@
         """Update obj to the values given in row.
         """
-        items_changed = super(PDFDocumentProcessor, self).updateEntry(
+        items_changed = super(DocumentProcessorBase, self).updateEntry(
             obj, row, site, filename)
         # Log actions...
@@ -111,5 +111,5 @@
         """
         errs, inv_errs, conv_dict = super(
-            PDFDocumentProcessor, self).checkConversion(row, mode=mode)
+            DocumentProcessorBase, self).checkConversion(row, mode=mode)
         # We need to check if the class_name corresponds with the
         # processor chosen. This is to avoid accidentally wrong imports.
@@ -121,4 +121,14 @@
         return errs, inv_errs, conv_dict
 
+class PDFDocumentProcessor(DocumentProcessorBase):
+    """A batch processor for IPDFDocument objects.
+    """
+    util_name = 'pdfdocumentprocessor'
+    grok.name(util_name)
+
+    name = _('Public PDF Document Processor')
+    iface = IPDFDocument
+
+    factory_name = 'waeup.PDFDocument'
 
 class HTMLDocumentProcessor(PDFDocumentProcessor):
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/utils/tests/test_batching.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/utils/tests/test_batching.py	(revision 12266)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/utils/tests/test_batching.py	(revision 12267)
@@ -188,7 +188,7 @@
             ['name', 'dinoports', 'owner', 'taxpayer'],
             mode='create', user='Bob', logger=self.logger)
-        num_succ, num_fail, finished_path, failed_path = result
+        num, num_fail, finished_path, failed_path = result
         self.resultpath = [finished_path, failed_path]
-        assert num_succ == 4
+        assert num == 4
         assert num_fail == 0
         assert finished_path.endswith('/newcomers.finished.csv')
@@ -201,5 +201,5 @@
             ['name', 'dinoports', 'owner', 'taxpayer'],
             mode='create', user='Bob', logger=self.logger)
-        num_succ, num_fail, finished_path, failed_path = result
+        num, num_fail, finished_path, failed_path = result
         self.resultpath = [finished_path, failed_path]
         assert len(self.stoneville) == 4
@@ -215,5 +215,5 @@
             ['name', 'dinoports', 'owner', 'taxpayer'],
             mode='create', user='Bob', logger=self.logger)
-        num_succ, num_fail, finished_path, failed_path = result
+        num, num_fail, finished_path, failed_path = result
         self.resultpath = [finished_path, failed_path]
         assert isinstance(self.stoneville['Barneys Home'].dinoports, int)
@@ -231,5 +231,5 @@
             ['name', 'dinoports', 'owner', 'taxpayer'],
             mode='create', user='Bob', logger=self.logger)
-        num_succ, num_fail, finished_path, failed_path = result
+        num, num_fail, finished_path, failed_path = result
         self.resultpath = [finished_path, failed_path]
         log_contents = open(self.logfile, 'rb').read()
