Index: main/waeup.ikoba/trunk/src/waeup/ikoba/customers/__init__.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/customers/__init__.py	(revision 11984)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/customers/__init__.py	(revision 11985)
@@ -2,3 +2,2 @@
 """
 # Make this a package.
-
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/customers/authentication.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/customers/authentication.py	(revision 11984)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/customers/authentication.py	(revision 11985)
@@ -1,4 +1,4 @@
 ## $Id: authentication.py 10055 2013-04-04 15:12:43Z uli $
-## 
+##
 ## Copyright (C) 2014 Uli Fouquet & Henrik Bettermann
 ## This program is free software; you can redistribute it and/or modify
@@ -6,10 +6,10 @@
 ## the Free Software Foundation; either version 2 of the License, or
 ## (at your option) any later version.
-## 
+##
 ## This program is distributed in the hope that it will be useful,
 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ## GNU General Public License for more details.
-## 
+##
 ## You should have received a copy of the GNU General Public License
 ## along with this program; if not, write to the Free Software
@@ -35,4 +35,5 @@
 from waeup.ikoba.customers.interfaces import ICustomer
 
+
 class CustomerAccount(grok.Adapter):
     """An adapter to turn customer objects into accounts on-the-fly.
@@ -126,4 +127,5 @@
         return passwordmanager.checkPassword(self.context.password, password)
 
+
 class CustomersAuthenticatorPlugin(grok.GlobalUtility):
     grok.implements(IAuthenticatorPlugin)
@@ -188,4 +190,5 @@
         return IUserAccount(customer)
 
+
 class PasswordChangeCredentialsPlugin(grok.GlobalUtility,
                                       SessionCredentialsPlugin):
@@ -279,4 +282,5 @@
         # Return old credentials for this one request only
         return old_credentials
+
 
 class CustomersAuthenticatorSetup(grok.GlobalUtility):
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/customers/batching.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/customers/batching.py	(revision 11984)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/customers/batching.py	(revision 11985)
@@ -25,5 +25,5 @@
 """
 import grok
-import unicodecsv as csv # XXX: csv ops should move to dedicated module.
+import unicodecsv as csv  # XXX: csv ops should move to dedicated module.
 from time import time
 from datetime import datetime
@@ -46,4 +46,5 @@
 from waeup.ikoba.utils.batching import BatchProcessor
 
+
 class CustomerProcessor(BatchProcessor):
     """A batch processor for ICustomer objects.
@@ -66,5 +67,5 @@
         fields = getFields(self.iface)
         return sorted(list(set(
-            ['customer_id','reg_number',
+            ['customer_id', 'reg_number',
             'password', 'state', 'transition'] + fields.keys())))
 
@@ -96,7 +97,7 @@
 
     def getLocator(self, row):
-        if row.get('customer_id',None) not in (None, IGNORE_MARKER):
+        if row.get('customer_id', None) not in (None, IGNORE_MARKER):
             return 'customer_id'
-        elif row.get('reg_number',None) not in (None, IGNORE_MARKER):
+        elif row.get('reg_number', None) not in (None, IGNORE_MARKER):
             return 'reg_number'
         else:
@@ -192,5 +193,5 @@
                 value = row['state']
                 IWorkflowState(obj).setState(value)
-                msg = _("State '${a}' set", mapping = {'a':value})
+                msg = _("State '${a}' set", mapping={'a': value})
                 history = IObjectHistory(obj)
                 history.addMessage(msg)
@@ -212,5 +213,5 @@
         # Log actions...
         parent = self.getParent(row, site)
-        if hasattr(obj,'customer_id'):
+        if hasattr(obj, 'customer_id'):
             # Update mode: the customer exists and we can get the customer_id.
             # Create mode: the record contains the customer_id
@@ -223,5 +224,5 @@
             # is always set.
             parent.logger.info(
-                '%s - %s - %s - imported: %s' 
+                '%s - %s - %s - imported: %s'
                 % (self.name, filename, obj.customer_id, items_changed))
         return items_changed
@@ -250,14 +251,14 @@
                 iface = self.iface_byregnumber
         converter = IObjectConverter(iface)
-        errs, inv_errs, conv_dict =  converter.fromStringDict(
+        errs, inv_errs, conv_dict = converter.fromStringDict(
             row, self.factory_name, mode=mode)
         if 'transition' in row:
             if row['transition'] not in IMPORTABLE_TRANSITIONS:
                 if row['transition'] not in (IGNORE_MARKER, ''):
-                    errs.append(('transition','not allowed'))
+                    errs.append(('transition', 'not allowed'))
         if 'state' in row:
             if row['state'] not in IMPORTABLE_STATES:
                 if row['state'] not in (IGNORE_MARKER, ''):
-                    errs.append(('state','not allowed'))
+                    errs.append(('state', 'not allowed'))
                 else:
                     # State is an attribute of Customer and must not
@@ -292,5 +293,5 @@
     @property
     def available_fields(self):
-        fields = ['customer_id','reg_number'] + self.additional_fields
+        fields = ['customer_id', 'reg_number'] + self.additional_fields
         return sorted(list(set(fields + getFields(
                 self.iface).keys())))
@@ -342,5 +343,5 @@
         """
         converter = IObjectConverter(self.iface)
-        errs, inv_errs, conv_dict =  converter.fromStringDict(
+        errs, inv_errs, conv_dict = converter.fromStringDict(
             row, self.factory_name, mode=mode)
         return errs, inv_errs, conv_dict
@@ -361,4 +362,2 @@
             result[raw_header[num]] = field
         return result
-
-
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/customers/browser.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/customers/browser.py	(revision 11984)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/customers/browser.py	(revision 11985)
@@ -51,4 +51,5 @@
 grok.context(IIkobaObject)
 
+
 class CustomersBreadcrumb(Breadcrumb):
     """A breadcrumb for the customers container.
@@ -72,4 +73,5 @@
     def title(self):
         return self.context.display_fullname
+
 
 class CustomersContainerPage(IkobaPage):
@@ -112,4 +114,5 @@
             self.flash(_('No customer found.'), type="warning")
         return
+
 
 class CustomersContainerManagePage(IkobaPage):
@@ -168,6 +171,7 @@
         if len(deleted):
             self.flash(_('Successfully removed: ${a}',
-                mapping = {'a':', '.join(deleted)}))
-        return
+                mapping={'a': ','.join(deleted)}))
+        return
+
 
 class CustomerAddFormPage(IkobaAddFormPage):
@@ -191,4 +195,5 @@
         return
 
+
 class LoginAsCustomerStep1(IkobaEditFormPage):
     """ View to temporarily set a customer password.
@@ -202,5 +207,5 @@
     def label(self):
         return _(u'Set temporary password for ${a}',
-            mapping = {'a':self.context.display_fullname})
+            mapping={'a': self.context.display_fullname})
 
     @action('Set password now', style='primary')
@@ -211,8 +216,9 @@
         self.context.writeLogMessage(
             self, 'temp_password generated: %s' % password)
-        args = {'password':password}
+        args = {'password': password}
         self.redirect(self.url(self.context) +
             '/loginasstep2?%s' % urlencode(args))
         return
+
 
 class LoginAsCustomerStep2(IkobaPage):
@@ -228,5 +234,5 @@
     def label(self):
         return _(u'Login as ${a}',
-            mapping = {'a':self.context.customer_id})
+            mapping={'a': self.context.customer_id})
 
     def update(self, SUBMIT=None, password=None):
@@ -237,4 +243,5 @@
         return
 
+
 class CustomerBaseDisplayFormPage(IkobaDisplayFormPage):
     """ Page to display customer base data
@@ -252,7 +259,7 @@
         if self.context.suspended:
             return _('${a}: Base Data (account deactivated)',
-                mapping = {'a':self.context.display_fullname})
+                mapping={'a': self.context.display_fullname})
         return  _('${a}: Base Data',
-            mapping = {'a':self.context.display_fullname})
+            mapping={'a': self.context.display_fullname})
 
     @property
@@ -262,4 +269,5 @@
         return _('unset')
 
+
 class ContactCustomerForm(ContactAdminForm):
     grok.context(ICustomer)
@@ -277,5 +285,5 @@
     def label(self):
         return _(u'Send message to ${a}',
-            mapping = {'a':self.context.display_fullname})
+            mapping={'a': self.context.display_fullname})
 
     @action('Send message now', style='primary')
@@ -289,9 +297,9 @@
         ikoba_utils = getUtility(IIkobaUtils)
         success = ikoba_utils.sendContactForm(
-                self.request.principal.title,email,
-                self.context.display_fullname,self.context.email,
+                self.request.principal.title, email,
+                self.context.display_fullname, self.context.email,
                 self.request.principal.id,usertype,
                 self.config.name,
-                data['body'],data['subject'])
+                data['body'], data['subject'])
         if success:
             self.flash(_('Your message has been sent.'))
@@ -299,4 +307,5 @@
             self.flash(_('An smtp server error occurred.'), type="danger")
         return
+
 
 class CustomerBaseManageFormPage(IkobaEditFormPage):
@@ -326,5 +335,5 @@
             errors = validator.validate_password(password, password_ctl)
             if errors:
-                self.flash( ' '.join(errors), type="danger")
+                self.flash(' '.join(errors), type="danger")
                 return
         changed_fields = self.applyData(self.context, **data)
@@ -344,4 +353,5 @@
         return
 
+
 class CustomerTriggerTransitionFormPage(IkobaEditFormPage):
     """ View to manage customer base data
@@ -375,4 +385,5 @@
         return
 
+
 class CustomerActivatePage(UtilityView, grok.View):
     """ Activate customer account
@@ -394,4 +405,5 @@
         return
 
+
 class CustomerDeactivatePage(UtilityView, grok.View):
     """ Deactivate customer account
@@ -413,4 +425,5 @@
         return
 
+
 class CustomerHistoryPage(IkobaPage):
     """ Page to display customer history
@@ -424,5 +437,6 @@
     @property
     def label(self):
-        return _('${a}: History', mapping = {'a':self.context.display_fullname})
+        return _('${a}: History', mapping={'a':self.context.display_fullname})
+
 
 class CustomerRequestPasswordPage(IkobaAddFormPage):
@@ -446,5 +460,5 @@
         # Forward only email to landing page in base package.
         self.redirect(self.url(self.context, 'requestpw_complete',
-            data = dict(email=email)))
+            data=dict(email=email)))
         return
 
@@ -513,4 +527,5 @@
         return
 
+
 class CustomerRequestPasswordEmailSent(IkobaPage):
     """Landing page after successful password request.
@@ -527,4 +542,5 @@
         self.customer_id = customer_id
         return
+
 
 class CustomerFilesUploadPage(IkobaPage):
@@ -548,4 +564,5 @@
 # Pages for customers only
 
+
 class CustomerBaseEditFormPage(IkobaEditFormPage):
     """ View to edit customer base data
@@ -563,4 +580,5 @@
         msave(self, **data)
         return
+
 
 class CustomerChangePasswordPage(IkobaEditFormPage):
@@ -587,5 +605,4 @@
                 self.flash(_('Password changed.'))
             else:
-                self.flash( ' '.join(errors), type="warning")
-        return
-
+                self.flash(' '.join(errors), type="warning")
+        return
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/customers/catalog.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/customers/catalog.py	(revision 11984)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/customers/catalog.py	(revision 11985)
@@ -29,4 +29,5 @@
 from waeup.ikoba.customers.interfaces import ICustomer
 
+
 class CustomersCatalog(grok.Indexes):
     """A catalog for customers.
@@ -41,4 +42,5 @@
     reg_number = index.Field(attribute='reg_number')
     state = index.Field(attribute='state')
+
 
 class CustomerQueryResultItem(object):
@@ -56,4 +58,5 @@
         self.state = context.state
         self.translated_state = context.translated_state
+
 
 def search(query=None, searchtype=None, view=None):
@@ -82,4 +85,5 @@
     return hitlist
 
+
 class SimpleFieldSearch(object):
     """A programmatic (no UI required) search.
@@ -93,4 +97,5 @@
     """
     catalog_name = 'customers_catalog'
+
     def __call__(self, **kw):
         """Search customers catalog programmatically.
@@ -106,7 +111,8 @@
 simple_search = SimpleFieldSearch()
 
+
 class CustomersQuery(FilteredCatalogQueryBase):
     """Query customers in a site. See waeup.ikoba.catalog for more info.
     """
     cat_name = 'customers_catalog'
-    defaults = dict(customer_id=None) # make sure we get all studs by default
+    defaults = dict(customer_id=None)  # make sure we get all studs by default
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/customers/container.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/customers/container.py	(revision 11984)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/customers/container.py	(revision 11985)
@@ -28,5 +28,6 @@
 from waeup.ikoba.utils.logger import Logger
 
-lock = allocate_lock() # a lock object to lock threads.
+lock = allocate_lock()  # a lock object to lock threads.
+
 
 class CustomersContainer(grok.Container, Logger):
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/customers/customer.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/customers/customer.py	(revision 11984)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/customers/customer.py	(revision 11985)
@@ -46,4 +46,5 @@
 RE_CUSTID_NON_NUM = re.compile('[^\d]+')
 
+
 class Customer(grok.Container):
     """This is a customer container for the various objects
@@ -76,9 +77,9 @@
             'password'] = passwordmanager.encodePassword(password)
         self.temp_password['user'] = user
-        self.temp_password['timestamp'] = datetime.utcnow() # offset-naive datetime
+        self.temp_password['timestamp'] = datetime.utcnow()  # offset-naive datetime
 
     def getTempPassword(self):
         """Check if a temporary password has been set and if it
-        is not expired. 
+        is not expired.
 
         Return the temporary password if valid,
@@ -147,4 +148,5 @@
 Customer = attrs_to_fields(Customer)
 
+
 class CustomerFactory(grok.GlobalUtility):
     """A factory for customers.
@@ -160,4 +162,5 @@
     def getInterfaces(self):
         return implementedBy(Customer)
+
 
 @grok.subscribe(ICustomer, grok.IObjectAddedEvent)
@@ -177,4 +180,5 @@
         IWorkflowInfo(customer).fireTransition('create')
     return
+
 
 def path_from_custid(customer_id):
@@ -215,4 +219,5 @@
     return folder_name
 
+
 def move_customer_files(customer, del_dir):
     """Move files belonging to `customer` to `del_dir`.
@@ -242,4 +247,5 @@
     return
 
+
 def update_customer_deletion_csvs(customer, del_dir):
     """Update deletion CSV files with data from customer.
@@ -262,5 +268,5 @@
 
         # append a deletion timestamp on each data row
-        timestamp = str(now().replace(microsecond=0)) # store UTC timestamp
+        timestamp = str(now().replace(microsecond=0))  # store UTC timestamp
         for num, row in enumerate(csv_data[1:-1]):
             csv_data[num+1] = csv_data[num+1] + ',' + timestamp
@@ -276,4 +282,5 @@
             open(csv_path, 'a').write('\r\n'.join(csv_data[1:]))
     return
+
 
 @grok.subscribe(ICustomer, grok.IObjectRemovedEvent)
@@ -320,4 +327,5 @@
 CUSTOMER_FILE_STORE_NAME = 'file-customer'
 
+
 class CustomerFileNameChooser(grok.Adapter):
     """A file id chooser for :class:`Customer` objects.
@@ -410,5 +418,5 @@
         # call super method to ensure that any old files with
         # different filename extension are deleted.
-        file, path, file_obj =  super(
+        file, path, file_obj = super(
             CustomerFileStoreHandler, self).createFile(
             store, root,  filename, file_id, file)
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/customers/export.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/customers/export.py	(revision 11984)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/customers/export.py	(revision 11985)
@@ -35,8 +35,10 @@
 EXPORTER_NAMES = ('customers', )
 
+
 def get_customers(site, cust_filter=CustomersQuery()):
     """Get all customers registered in catalog in `site`.
     """
     return cust_filter.query()
+
 
 class CustomerExporterBase(ExporterBase):
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/customers/files.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/customers/files.py	(revision 11984)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/customers/files.py	(revision 11985)
@@ -36,6 +36,7 @@
     CustomerFilesUploadPage)
 
-grok.context(IIkobaObject) # Make IIkobaObject the default context
+grok.context(IIkobaObject)  # Make IIkobaObject the default context
 grok.templatedir('browser_templates')
+
 
 def handle_file_delete(context, view, download_name):
@@ -46,6 +47,7 @@
     store.deleteFileByContext(context, attr=download_name)
     context.writeLogMessage(view, 'deleted: %s' % download_name)
-    view.flash(_('${a} deleted.', mapping = {'a':download_name}))
+    view.flash(_('${a} deleted.', mapping={'a': download_name}))
     return
+
 
 def handle_file_upload(upload, context, view, max_size, download_name=None):
@@ -62,5 +64,5 @@
         view.flash(_('Uploaded file is too big.'), type="danger")
         return False
-    upload.seek(0) # file pointer moved when determining size
+    upload.seek(0)  # file pointer moved when determining size
     dummy,ext = os.path.splitext(upload.filename)
     # fpm files are expected to be fingerprint minutiae, file
@@ -70,5 +72,5 @@
     else:
         file_format = get_fileformat(None, upload.read(512))
-        upload.seek(0) # same here
+        upload.seek(0)  # same here
     if file_format is None:
         view.flash(_('Could not determine file type.'), type="danger")
@@ -78,5 +80,5 @@
         if '.' + file_format != expected_ext:
             view.flash(_('${a} file extension expected.',
-                mapping = {'a':expected_ext[1:]}), type="danger")
+                mapping={'a': expected_ext[1:]}), type="danger")
             return False
     else:
@@ -84,5 +86,5 @@
             view.flash(
                 _('Only the following extensions are allowed: ${a}',
-                mapping = {'a':', '.join(ALLOWED_FILE_EXTENSIONS)}),
+                mapping={'a': ', '.join(ALLOWED_FILE_EXTENSIONS)}),
                 type="danger")
             return False
@@ -93,6 +95,7 @@
     context.writeLogMessage(view, 'uploaded: %s (%s)' % (
         download_name,upload.filename))
-    view.flash(_('File ${a} uploaded.', mapping = {'a':download_name}))
+    view.flash(_('File ${a} uploaded.', mapping={'a': download_name}))
     return True
+
 
 class FileManager(grok.ViewletManager):
@@ -100,4 +103,5 @@
     """
     grok.name('files')
+
 
 class FileDisplay(grok.Viewlet):
@@ -123,4 +127,5 @@
         else:
             return False
+
 
 class FileUpload(FileDisplay):
@@ -179,4 +184,5 @@
         return
 
+
 class PassportDisplay(FileDisplay):
     """Passport display viewlet.
@@ -188,4 +194,5 @@
     label = _(u'Passport Picture')
     download_name = u'passport.jpg'
+
 
 class PassportUploadManage(FileUpload):
@@ -201,4 +208,5 @@
     tab_redirect = '#tab2'
 
+
 class PassportUploadEdit(PassportUploadManage):
     """Passport upload viewlet for customers.
@@ -206,4 +214,5 @@
     grok.view(CustomerFilesUploadPage)
     grok.require('waeup.uploadCustomerFile')
+
 
 class Image(grok.View):
@@ -238,4 +247,5 @@
         return image
 
+
 class Passport(Image):
     """Renders jpeg passport picture.
@@ -244,3 +254,2 @@
     download_name = u'passport.jpg'
     grok.context(ICustomer)
-
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/customers/interfaces.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/customers/interfaces.py	(revision 11984)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/customers/interfaces.py	(revision 11985)
@@ -30,8 +30,10 @@
     contextual_reg_num_source, GenderSource, nats_vocab)
 
+
 class ICustomersUtils(Interface):
     """A collection of methods which are subject to customization.
 
     """
+
 
 class ICustomersContainer(IIkobaObject):
@@ -87,4 +89,5 @@
 
         """
+
 
 class ICustomer(IIkobaObject):
@@ -173,4 +176,5 @@
         """
 
+
 class ICustomerUpdateByRegNo(ICustomer):
     """Representation of a customer. Skip regular reg_number validation.
@@ -181,4 +185,5 @@
         required = False,
         )
+
 
 class ICSVCustomerExporter(ICSVExporter):
@@ -198,4 +203,5 @@
         """
 
+
 class ICustomerRequestPW(ICustomer):
     """Representation of an customer for first-time password request.
@@ -219,3 +225,2 @@
         constraint=validate_email,
         )
-
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/customers/permissions.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/customers/permissions.py	(revision 11984)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/customers/permissions.py	(revision 11985)
@@ -23,33 +23,44 @@
 # Customer section permissions
 
+
 class HandleCustomer(grok.Permission):
     grok.name('waeup.handleCustomer')
+
 
 class ViewCustomer(grok.Permission):
     grok.name('waeup.viewCustomer')
 
+
 class ViewCustomersTab(grok.Permission):
     grok.name('waeup.viewCustomersTab')
+
 
 class ViewMyCustomerDataTab(grok.Permission):
     grok.name('waeup.viewMyCustomerDataTab')
 
+
 class ViewCustomersContainer(grok.Permission):
     grok.name('waeup.viewCustomersContainer')
+
 
 class PayCustomer(grok.Permission):
     grok.name('waeup.payCustomer')
 
+
 class UploadCustomerFile(grok.Permission):
     grok.name('waeup.uploadCustomerFile')
+
 
 class ManageCustomer(grok.Permission):
     grok.name('waeup.manageCustomer')
 
+
 class LoginAsCustomer(grok.Permission):
     grok.name('waeup.loginAsCustomer')
 
+
 class TriggerTransition(grok.Permission):
     grok.name('waeup.triggerTransition')
+
 
 # Local role
@@ -60,4 +71,5 @@
                      'waeup.viewCustomer', 'waeup.payCustomer')
 
+
 # Site Roles
 class CustomerRole(grok.Role):
@@ -67,4 +79,5 @@
                      'waeup.Authenticated')
 
+
 class CustomersOfficer(grok.Role):
     grok.name('waeup.CustomersOfficer')
@@ -72,4 +85,5 @@
     grok.permissions('waeup.viewCustomer','waeup.viewCustomers',
           'waeup.viewCustomersTab', 'waeup.viewCustomersContainer')
+
 
 class CustomersManager(grok.Role):
@@ -81,4 +95,5 @@
                      'waeup.viewCustomersTab', 'waeup.triggerTransition')
 
+
 class CustomerImpersonator(grok.Role):
     grok.name('waeup.CustomerImpersonator')
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/customers/utils.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/customers/utils.py	(revision 11984)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/customers/utils.py	(revision 11985)
@@ -22,8 +22,10 @@
 from waeup.ikoba.customers.interfaces import ICustomersUtils
 
+
 def generate_customer_id():
     customers = grok.getSite()['customers']
     new_id = customers.unique_customer_id
     return new_id
+
 
 class CustomersUtils(grok.GlobalUtility):
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/customers/viewlets.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/customers/viewlets.py	(revision 11984)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/customers/viewlets.py	(revision 11985)
@@ -1,3 +1,3 @@
-3## $Id: viewlets.py 11772 2014-07-31 04:38:23Z henrik $
+## $Id: viewlets.py 11772 2014-07-31 04:38:23Z henrik $
 ##
 ## Copyright (C) 2014 Uli Fouquet & Henrik Bettermann
@@ -33,6 +33,7 @@
     CustomerBaseDisplayFormPage)
 
-grok.context(IIkobaObject) # Make IIkobaObject the default context
+grok.context(IIkobaObject)  # Make IIkobaObject the default context
 grok.templatedir('browser_templates')
+
 
 class CustomersTab(PrimaryNavTab):
@@ -52,8 +53,10 @@
         return self.view.application_url('customers')
 
+
 class PrimaryCustomerNavManager(grok.ViewletManager):
     """Viewlet manager for the primary navigation tab.
     """
     grok.name('primary_nav_customer')
+
 
 class PrimaryCustomerNavTab(grok.Viewlet):
@@ -78,4 +81,5 @@
             return 'active'
         return ''
+
 
 class MyCustomerDataTab(PrimaryCustomerNavTab):
@@ -107,6 +111,8 @@
         return targets
 
+
 class CustomerManageSidebar(grok.ViewletManager):
     grok.name('left_customermanage')
+
 
 class CustomerManageLink(grok.Viewlet):
@@ -135,4 +141,5 @@
                 url, text)
 
+
 class CustomerManageBaseLink(CustomerManageLink):
     grok.order(2)
@@ -140,4 +147,5 @@
     text = _(u'Base Data')
 
+
 class CustomerManageHistoryLink(CustomerManageLink):
     grok.order(8)
@@ -145,4 +153,5 @@
     text = _(u'History')
 
+
 class CustomersContainerManageActionButton(ManageActionButton):
     grok.order(1)
@@ -152,4 +161,5 @@
     text = _('Manage customer section')
 
+
 class CustomersContainerAddActionButton(AddActionButton):
     grok.order(1)
@@ -159,4 +169,5 @@
     text = _('Add customer')
     target = 'addcustomer'
+
 
 class ContactActionButton(ManageActionButton):
@@ -169,4 +180,5 @@
     target = 'contactcustomer'
 
+
 class CustomerBaseManageActionButton(ManageActionButton):
     grok.order(1)
@@ -176,4 +188,5 @@
     text = _('Manage')
     target = 'manage_base'
+
 
 class CustomerTrigTransActionButton(ManageActionButton):
@@ -186,4 +199,5 @@
     target = 'trigtrans'
 
+
 class CustomerLoginAsActionButton(ManageActionButton):
     grok.order(3)
@@ -195,4 +209,5 @@
     target = 'loginasstep1'
 
+
 class CustomerDeactivateActionButton(ManageActionButton):
     grok.order(7)
@@ -215,4 +230,5 @@
             "'A history message will be added. Are you sure?'")
 
+
 class CustomerActivateActionButton(ManageActionButton):
     grok.order(7)
@@ -235,4 +251,5 @@
             "'A history message will be added. Are you sure?'")
 
+
 class CustomerPasswordActionButton(ManageActionButton):
     grok.order(2)
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/customers/vocabularies.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/customers/vocabularies.py	(revision 11984)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/customers/vocabularies.py	(revision 11985)
@@ -56,4 +56,5 @@
             return _('female')
 
+
 class RegNumNotInSource(ValidationError):
     """Registration number exists already
@@ -62,4 +63,5 @@
     # by zope.formlib.
     pass
+
 
 class RegNumberSource(object):
@@ -79,4 +81,5 @@
     validation_error = RegNumNotInSource
     comp_field = 'customer_id'
+
     def __init__(self, context):
         self.context = context
@@ -107,6 +110,8 @@
         return True
 
+
 def contextual_reg_num_source(context):
     source = RegNumberSource(context)
     return source
+
 directlyProvides(contextual_reg_num_source, IContextSourceBinder)
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/customers/workflow.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/customers/workflow.py	(revision 11984)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/customers/workflow.py	(revision 11985)
@@ -100,4 +100,5 @@
 registration_workflow = IkobaWorkflow(REGISTRATION_TRANSITIONS)
 
+
 class RegistrationWorkflowState(WorkflowState, grok.Adapter):
     """An adapter to adapt Customer objects to workflow states.
@@ -108,4 +109,5 @@
     state_key = 'wf.registration.state'
     state_id = 'wf.registration.id'
+
 
 class RegistrationWorkflowInfo(IkobaWorkflowInfo, grok.Adapter):
@@ -118,4 +120,5 @@
         self.context = context
         self.wf = registration_workflow
+
 
 @grok.subscribe(ICustomer, IWorkflowTransitionEvent)
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/mandates/__init__.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/mandates/__init__.py	(revision 11984)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/mandates/__init__.py	(revision 11985)
