You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by jo...@apache.org on 2014/01/10 22:23:00 UTC

[04/36] PEP8 cleanup

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeTracker/forgetracker/widgets/admin_custom_fields.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/widgets/admin_custom_fields.py b/ForgeTracker/forgetracker/widgets/admin_custom_fields.py
index 52af881..2938685 100644
--- a/ForgeTracker/forgetracker/widgets/admin_custom_fields.py
+++ b/ForgeTracker/forgetracker/widgets/admin_custom_fields.py
@@ -25,32 +25,34 @@ from pylons import tmpl_context as c
 from forgetracker import model
 from formencode import validators as fev
 
+
 class MilestonesAdmin(ffw.SortableTable):
-    defaults=dict(
+    defaults = dict(
         ffw.SortableTable.defaults,
         button=ffw.AdminField(field=ew.InputField(
-                css_class='add', field_type='button',
-                value='New Milestone')),
+            css_class='add', field_type='button',
+            value='New Milestone')),
         empty_msg='No milestones have been created.',
         nonempty_msg='Drag and drop the milestones to reorder.',
         repetitions=0)
     fields = [
         ew.HiddenField(name='old_name'),
-        ffw.Radio(name='default', label='Default', css_class='default-milestone'),
+        ffw.Radio(name='default', label='Default',
+                  css_class='default-milestone'),
         ew.Checkbox(name='complete', show_label=True, suppress_label=True),
         ew.TextField(name='name',
-        attrs={'style':'width: 80px'}),
+                     attrs={'style': 'width: 80px'}),
         ffw.DateField(name='due_date',
-        attrs={'style':'width: 80px'}),
+                      attrs={'style': 'width: 80px'}),
         ffw.AutoResizeTextarea(
             name='description',
-            attrs={'style':'height:1em; width: 150px'}),
+            attrs={'style': 'height:1em; width: 150px'}),
         ew.InputField(
             label='Delete',
             field_type='button',
-            attrs={'class':'delete', 'value':'Delete'}),
-        ]
-    button =  ew.InputField(
+            attrs={'class': 'delete', 'value': 'Delete'}),
+    ]
+    button = ew.InputField(
         css_class='add', field_type='button', value='New Milestone')
 
     def prepare_context(self, context):
@@ -62,38 +64,41 @@ class MilestonesAdmin(ffw.SortableTable):
         return response
 
     def resources(self):
-        for r in super(MilestonesAdmin, self).resources(): yield r
+        for r in super(MilestonesAdmin, self).resources():
+            yield r
         yield ew.CSSScript('''div.state-field table{ width: 700px; }''')
 
+
 class CustomFieldAdminDetail(ffw.StateField):
-    template='jinja:forgetracker:templates/tracker_widgets/custom_field_admin_detail.html'
-    defaults=dict(
+    template = 'jinja:forgetracker:templates/tracker_widgets/custom_field_admin_detail.html'
+    defaults = dict(
         ffw.StateField.defaults,
         selector=ffw.AdminField(field=ew.SingleSelectField(
-                name='type',
-                options=[
-                    ew.Option(py_value='string', label='Text'),
-                    ew.Option(py_value='number', label='Number'),
-                    ew.Option(py_value='boolean', label='Boolean'),
-                    ew.Option(py_value='select', label='Select'),
-                    ew.Option(py_value='milestone', label='Milestone'),
-                    ew.Option(py_value='user', label='User'),
-                    ],
-                )),
+            name='type',
+            options=[
+                ew.Option(py_value='string', label='Text'),
+                ew.Option(py_value='number', label='Number'),
+                ew.Option(py_value='boolean', label='Boolean'),
+                ew.Option(py_value='select', label='Select'),
+                ew.Option(py_value='milestone', label='Milestone'),
+                ew.Option(py_value='user', label='User'),
+            ],
+        )),
         states=dict(
             select=ffw.FieldCluster(
                 fields=[
                     ffw.AdminField(field=ew.TextField(name='options',
-                        label='Options (separate with spaces; quote if containing spaces; prefix with * to set a default)',
-                        )) ],
+                                                      label='Options (separate with spaces; quote if containing spaces; prefix with * to set a default)',
+                                                      ))],
                 show_labels=False),
             milestone=ffw.FieldCluster(
                 # name='milestones',
-                fields=[ MilestonesAdmin(name='milestones') ])
-            ))
+                fields=[MilestonesAdmin(name='milestones')])
+        ))
+
 
 class CustomFieldAdmin(ew.CompoundField):
-    template='jinja:forgetracker:templates/tracker_widgets/custom_field_admin.html'
+    template = 'jinja:forgetracker:templates/tracker_widgets/custom_field_admin.html'
 
     def resources(self):
         for r in super(CustomFieldAdmin, self).resources():
@@ -108,14 +113,17 @@ class CustomFieldAdmin(ew.CompoundField):
             label='Show in list view',
             show_label=True,
             suppress_label=True),
-        CustomFieldAdminDetail() ]
+        CustomFieldAdminDetail()]
+
 
 class TrackerFieldAdmin(f.ForgeForm):
-    submit_text=None
+    submit_text = None
+
     class fields(ew_core.NameList):
         open_status_names = ew.TextField(label='Open Statuses')
         closed_status_names = ew.TextField(label='Closed Statuses')
         custom_fields = ffw.SortableRepeatedField(field=CustomFieldAdmin())
+
     class buttons(ew_core.NameList):
         save = ew.SubmitButton(label='Save')
         cancel = ew.SubmitButton(
@@ -127,18 +135,23 @@ class TrackerFieldAdmin(f.ForgeForm):
         for rr in self.fields['custom_fields'].resources():
             yield rr
 
+
 class CustomFieldDisplay(ew.CompoundField):
-    template='jinja:forgetracker:templates/tracker_widgets/custom_field_display.html'
+    template = 'jinja:forgetracker:templates/tracker_widgets/custom_field_display.html'
+
 
 class CustomFieldsDisplay(ew.RepeatedField):
-    template='jinja:forgetracker:templates/tracker_widgets/custom_fields_display.html'
+    template = 'jinja:forgetracker:templates/tracker_widgets/custom_fields_display.html'
+
 
 class TrackerFieldDisplay(f.ForgeForm):
+
     class fields(ew_core.NameList):
         milestone_names = ew.TextField()
         open_status_names = ew.TextField(label='Open Statuses')
         closed_status_names = ew.TextField(label='Open Statuses')
         custom_fields = CustomFieldsDisplay()
+
     def resources(self):
         for rr in self.fields['custom_fields'].resources():
             yield rr

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeTracker/forgetracker/widgets/bin_form.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/widgets/bin_form.py b/ForgeTracker/forgetracker/widgets/bin_form.py
index 9777dcf..a62026e 100644
--- a/ForgeTracker/forgetracker/widgets/bin_form.py
+++ b/ForgeTracker/forgetracker/widgets/bin_form.py
@@ -22,19 +22,21 @@ from allura.lib import validators as V
 from forgetracker import model
 from formencode import validators as fev
 
+
 class BinForm(ew.SimpleForm):
-    template='jinja:forgetracker:templates/tracker_widgets/bin_form.html'
-    defaults=dict(
+    template = 'jinja:forgetracker:templates/tracker_widgets/bin_form.html'
+    defaults = dict(
         ew.SimpleForm.defaults,
-        submit_text = "Save Bin")
+        submit_text="Save Bin")
 
     class hidden_fields(ew.NameList):
-        _id=jinja2_ew.HiddenField(validator=V.Ming(model.Bin), if_missing=None)
+        _id = jinja2_ew.HiddenField(
+            validator=V.Ming(model.Bin), if_missing=None)
 
     class fields(ew.NameList):
-        summary=jinja2_ew.TextField(
+        summary = jinja2_ew.TextField(
             label='Bin Name',
             validator=fev.UnicodeString(not_empty=True))
-        terms=jinja2_ew.TextField(
+        terms = jinja2_ew.TextField(
             label='Search Terms',
             validator=fev.UnicodeString(not_empty=True))

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeTracker/forgetracker/widgets/ticket_form.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/widgets/ticket_form.py b/ForgeTracker/forgetracker/widgets/ticket_form.py
index 2bdf61b..0a0d816 100644
--- a/ForgeTracker/forgetracker/widgets/ticket_form.py
+++ b/ForgeTracker/forgetracker/widgets/ticket_form.py
@@ -25,8 +25,9 @@ from allura import model as M
 from allura.lib.widgets import form_fields as ffw
 from allura.lib import helpers as h
 
+
 class TicketCustomFields(ew.CompoundField):
-    template='jinja:forgetracker:templates/tracker_widgets/ticket_custom_fields.html'
+    template = 'jinja:forgetracker:templates/tracker_widgets/ticket_custom_fields.html'
 
     def __init__(self, *args, **kwargs):
         super(TicketCustomFields, self).__init__(*args, **kwargs)
@@ -49,8 +50,9 @@ class TicketCustomFields(ew.CompoundField):
                     self._fields.append(TicketCustomField.make(cf))
         return self._fields
 
+
 class GenericTicketForm(ew.SimpleForm):
-    defaults=dict(
+    defaults = dict(
         ew.SimpleForm.defaults,
         name="ticket_form",
         submit_text='Save',
@@ -74,7 +76,8 @@ class GenericTicketForm(ew.SimpleForm):
 
         display = field.display(**ctx)
         if ctx['errors'] and field.show_errors and not ignore_errors:
-            display = "%s<div class='error'>%s</div>" % (display, ctx['errors'])
+            display = "%s<div class='error'>%s</div>" % (display,
+                                                         ctx['errors'])
         return display
 
     def _add_current_value_to_user_field(self, field, user):
@@ -97,21 +100,30 @@ class GenericTicketForm(ew.SimpleForm):
     def fields(self):
         fields = [
             ew.TextField(name='summary', label='Title',
-                attrs={'style':'width: 425px','placeholder':'Title'},
-                validator=fev.UnicodeString(not_empty=True, messages={'empty':"You must provide a Title"})),
-            ffw.MarkdownEdit(label='Description',name='description',
-                    attrs={'style':'width: 95%'}),
+                         attrs={'style': 'width: 425px',
+                                'placeholder': 'Title'},
+                         validator=fev.UnicodeString(
+                             not_empty=True, messages={
+                                 'empty': "You must provide a Title"})),
+            ffw.MarkdownEdit(label='Description', name='description',
+                             attrs={'style': 'width: 95%'}),
             ew.SingleSelectField(name='status', label='Status',
-                options=lambda: c.app.globals.all_status_names.split()),
+                                 options=lambda: c.app.globals.all_status_names.split(
+                                 )),
             ffw.ProjectUserCombo(name='assigned_to', label='Owner'),
-            ffw.LabelEdit(label='Labels',name='labels', className='ticket_form_tags'),
-            ew.Checkbox(name='private', label='Mark as Private', attrs={'class':'unlabeled'}),
-            ew.InputField(name='attachment', label='Attachment', field_type='file', attrs={'multiple': 'True'}, validator=fev.FieldStorageUploadConverter(if_missing=None)),
+            ffw.LabelEdit(label='Labels', name='labels',
+                          className='ticket_form_tags'),
+            ew.Checkbox(name='private', label='Mark as Private',
+                        attrs={'class': 'unlabeled'}),
+            ew.InputField(name='attachment', label='Attachment', field_type='file', attrs={
+                          'multiple': 'True'}, validator=fev.FieldStorageUploadConverter(if_missing=None)),
             ffw.MarkdownEdit(name='comment', label='Comment',
-                        attrs={'style':'min-height:7em; width:97%'}),
-            ew.SubmitButton(label=self.submit_text,name='submit',
-                attrs={'class':"ui-button ui-widget ui-state-default ui-button-text-only"}),
-            ew.HiddenField(name='ticket_num', validator=fev.Int(if_missing=None)),
+                             attrs={'style': 'min-height:7em; width:97%'}),
+            ew.SubmitButton(label=self.submit_text, name='submit',
+                            attrs={
+                                'class': "ui-button ui-widget ui-state-default ui-button-text-only"}),
+            ew.HiddenField(name='ticket_num',
+                           validator=fev.Int(if_missing=None)),
         ]
         # milestone is kind of special because of the layout
         # add it to the main form rather than handle with the other customs
@@ -122,8 +134,10 @@ class GenericTicketForm(ew.SimpleForm):
                     break
         return ew_core.NameList(fields)
 
+
 class TicketForm(GenericTicketForm):
-    template='jinja:forgetracker:templates/tracker_widgets/ticket_form.html'
+    template = 'jinja:forgetracker:templates/tracker_widgets/ticket_form.html'
+
     @property
     def fields(self):
         fields = ew_core.NameList(super(TicketForm, self).fields)
@@ -132,7 +146,8 @@ class TicketForm(GenericTicketForm):
         return fields
 
     def resources(self):
-        for r in super(TicketForm, self).resources(): yield r
+        for r in super(TicketForm, self).resources():
+            yield r
         yield ew.JSScript('''
         $(function(){
             $('#show_attach').click(function(evt) {
@@ -153,18 +168,21 @@ class TicketForm(GenericTicketForm):
             });
         });''')
 
+
 class TicketCustomField(object):
 
     def _select(field):
         options = []
-        field_options = h.split_select_field_options(h.really_unicode(field.options))
+        field_options = h.split_select_field_options(
+            h.really_unicode(field.options))
 
         for opt in field_options:
             selected = False
             if opt.startswith('*'):
                 opt = opt[1:]
                 selected = True
-            options.append(ew.Option(label=opt,html_value=opt,py_value=opt,selected=selected))
+            options.append(
+                ew.Option(label=opt, html_value=opt, py_value=opt, selected=selected))
         return ew.SingleSelectField(label=field.label, name=str(field.name), options=options)
 
     def _milestone(field):
@@ -206,8 +224,9 @@ class TicketCustomField(object):
         factory = cls.SELECTOR.get(field.get('type'), cls._default)
         return factory(field)
 
+
 class MilestoneField(ew.SingleSelectField):
-    template=ew.Snippet('''<select {{widget.j2_attrs({
+    template = ew.Snippet('''<select {{widget.j2_attrs({
                'id':id,
                'name':rendered_name,
                'multiple':multiple,
@@ -229,8 +248,10 @@ class MilestoneField(ew.SingleSelectField):
         context = super(MilestoneField, self).prepare_context(context)
 
         # group open / closed milestones
-        context['open_milestones'] = [opt for opt in self.options if not opt.complete]
-        context['closed_milestones'] = [opt for opt in self.options if opt.complete]
+        context['open_milestones'] = [
+            opt for opt in self.options if not opt.complete]
+        context['closed_milestones'] = [
+            opt for opt in self.options if opt.complete]
 
         # filter closed milestones entirely
         #value = context['value']

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeTracker/forgetracker/widgets/ticket_search.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/widgets/ticket_search.py b/ForgeTracker/forgetracker/widgets/ticket_search.py
index 2369512..453ed68 100644
--- a/ForgeTracker/forgetracker/widgets/ticket_search.py
+++ b/ForgeTracker/forgetracker/widgets/ticket_search.py
@@ -25,9 +25,10 @@ import ew.jinja2_ew as ew
 from allura.lib.widgets import form_fields as ffw
 from allura.lib.widgets import forms
 
+
 class TicketSearchResults(ew_core.SimpleForm):
-    template='jinja:forgetracker:templates/tracker_widgets/ticket_search_results.html'
-    defaults=dict(
+    template = 'jinja:forgetracker:templates/tracker_widgets/ticket_search_results.html'
+    defaults = dict(
         ew_core.SimpleForm.defaults,
         solr_error=None,
         count=None,
@@ -40,9 +41,9 @@ class TicketSearchResults(ew_core.SimpleForm):
         columns=None)
 
     class fields(ew_core.NameList):
-        page_list=ffw.PageList()
-        page_size=ffw.PageSize()
-        lightbox=ffw.Lightbox(name='col_list',trigger='#col_menu')
+        page_list = ffw.PageList()
+        page_size = ffw.PageSize()
+        lightbox = ffw.Lightbox(name='col_list', trigger='#col_menu')
 
     def resources(self):
         yield ew.JSLink('tracker_js/ticket-list.js')
@@ -50,9 +51,10 @@ class TicketSearchResults(ew_core.SimpleForm):
         for r in super(TicketSearchResults, self).resources():
             yield r
 
+
 class MassEdit(ew_core.SimpleForm):
-    template='jinja:forgetracker:templates/tracker_widgets/mass_edit.html'
-    defaults=dict(
+    template = 'jinja:forgetracker:templates/tracker_widgets/mass_edit.html'
+    defaults = dict(
         ew_core.SimpleForm.defaults,
         count=None,
         limit=None,
@@ -62,9 +64,9 @@ class MassEdit(ew_core.SimpleForm):
         sort=None)
 
     class fields(ew_core.NameList):
-        page_list=ffw.PageList()
-        page_size=ffw.PageSize()
-        lightbox=ffw.Lightbox(name='col_list',trigger='#col_menu')
+        page_list = ffw.PageList()
+        page_size = ffw.PageSize()
+        lightbox = ffw.Lightbox(name='col_list', trigger='#col_menu')
 
     def resources(self):
         yield ew.JSLink('tracker_js/ticket-list.js')
@@ -72,9 +74,10 @@ class MassEdit(ew_core.SimpleForm):
         for r in super(MassEdit, self).resources():
             yield r
 
+
 class MassEditForm(ew_core.Widget):
-    template='jinja:forgetracker:templates/tracker_widgets/mass_edit_form.html'
-    defaults=dict(
+    template = 'jinja:forgetracker:templates/tracker_widgets/mass_edit_form.html'
+    defaults = dict(
         ew_core.Widget.defaults,
         globals=None,
         query=None,
@@ -85,8 +88,9 @@ class MassEditForm(ew_core.Widget):
     def resources(self):
         yield ew.JSLink('tracker_js/mass-edit.js')
 
+
 class MassMoveForm(forms.MoveTicketForm):
-    defaults=dict(
+    defaults = dict(
         forms.MoveTicketForm.defaults,
         action='.')
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeTracker/setup.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/setup.py b/ForgeTracker/setup.py
index 1934cc2..71b069c 100644
--- a/ForgeTracker/setup.py
+++ b/ForgeTracker/setup.py
@@ -16,7 +16,8 @@
 #       under the License.
 
 from setuptools import setup, find_packages
-import sys, os
+import sys
+import os
 
 from forgetracker.version import __version__
 
@@ -25,7 +26,8 @@ setup(name='ForgeTracker',
       description="",
       long_description="""\
 """,
-      classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers
+      # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers
+      classifiers=[],
       keywords='',
       author='',
       author_email='',

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeUserStats/forgeuserstats/__init__.py
----------------------------------------------------------------------
diff --git a/ForgeUserStats/forgeuserstats/__init__.py b/ForgeUserStats/forgeuserstats/__init__.py
index 77505f1..144e298 100644
--- a/ForgeUserStats/forgeuserstats/__init__.py
+++ b/ForgeUserStats/forgeuserstats/__init__.py
@@ -14,4 +14,3 @@
 #       KIND, either express or implied.  See the License for the
 #       specific language governing permissions and limitations
 #       under the License.
-

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeUserStats/forgeuserstats/controllers/__init__.py
----------------------------------------------------------------------
diff --git a/ForgeUserStats/forgeuserstats/controllers/__init__.py b/ForgeUserStats/forgeuserstats/controllers/__init__.py
index 77505f1..144e298 100644
--- a/ForgeUserStats/forgeuserstats/controllers/__init__.py
+++ b/ForgeUserStats/forgeuserstats/controllers/__init__.py
@@ -14,4 +14,3 @@
 #       KIND, either express or implied.  See the License for the
 #       specific language governing permissions and limitations
 #       under the License.
-

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeUserStats/forgeuserstats/controllers/userstats.py
----------------------------------------------------------------------
diff --git a/ForgeUserStats/forgeuserstats/controllers/userstats.py b/ForgeUserStats/forgeuserstats/controllers/userstats.py
index 0624a31..c0ecfc3 100644
--- a/ForgeUserStats/forgeuserstats/controllers/userstats.py
+++ b/ForgeUserStats/forgeuserstats/controllers/userstats.py
@@ -29,14 +29,15 @@ from allura.lib import validators as V
 
 stats_preferences_form = StatsPreferencesForm()
 
+
 class ForgeUserStatsCatController(BaseController):
 
     @expose()
     def _lookup(self, category, *remainder):
         cat = M.TroveCategory.query.get(shortname=category)
-        return ForgeUserStatsCatController(category = cat), remainder
+        return ForgeUserStatsCatController(category=cat), remainder
 
-    def __init__(self, category = None):
+    def __init__(self, category=None):
         self.category = category
         super(ForgeUserStatsCatController, self).__init__()
 
@@ -59,6 +60,7 @@ class ForgeUserStatsCatController(BaseController):
         ret_dict['category'] = self.category
         return ret_dict
 
+
 class ForgeUserStatsController(BaseController):
 
     category = ForgeUserStatsCatController()
@@ -74,9 +76,9 @@ class ForgeUserStatsController(BaseController):
         if not self.user.stats:
             UserStats.create(self.user)
         return dict(
-            user = self.user,
-            form = StatsPreferencesForm(
-                action = c.project.url() + 'userstats/change_settings'))
+            user=self.user,
+            form=StatsPreferencesForm(
+                action=c.project.url() + 'userstats/change_settings'))
 
     @expose()
     @require_post()
@@ -115,30 +117,30 @@ class ForgeUserStatsController(BaseController):
         ret_dict['last_login'] = stats.last_login
         if stats.last_login:
             ret_dict['last_login_days'] = \
-                (datetime.utcnow()-stats.last_login).days
+                (datetime.utcnow() - stats.last_login).days
 
         categories = {}
         for p in self.user.my_projects():
             for cat in p.trove_topic:
-                cat = M.TroveCategory.query.get(_id = cat)
+                cat = M.TroveCategory.query.get(_id=cat)
                 if categories.get(cat):
                     categories[cat] += 1
                 else:
                     categories[cat] = 1
-        categories = sorted(categories.items(), key=lambda (x,y): y,reverse=True)
+        categories = sorted(categories.items(),
+                            key=lambda (x, y): y, reverse=True)
 
         ret_dict['lastmonth_logins'] = stats.getLastMonthLogins()
         ret_dict['categories'] = categories
         days = ret_dict['days']
         if days >= 30:
             ret_dict['permonthlogins'] = \
-                round(stats.tot_logins_count*30.0/days,2)
+                round(stats.tot_logins_count * 30.0 / days, 2)
         else:
             ret_dict['permonthlogins'] = 'n/a'
 
         return ret_dict
 
-
     @expose('jinja:forgeuserstats:templates/commits.html')
     @with_trailing_slash
     def commits(self, **kw):
@@ -154,8 +156,8 @@ class ForgeUserStatsController(BaseController):
 
         commits = stats.getCommitsByCategory()
         return dict(
-            user = self.user,
-            data = commits)
+            user=self.user,
+            data=commits)
 
     @expose('jinja:forgeuserstats:templates/artifacts.html')
     @with_trailing_slash
@@ -173,8 +175,8 @@ class ForgeUserStatsController(BaseController):
         stats = self.user.stats
         artifacts = stats.getArtifactsByCategory(detailed=True)
         return dict(
-            user = self.user,
-            data = artifacts)
+            user=self.user,
+            data=artifacts)
 
     @expose('jinja:forgeuserstats:templates/tickets.html')
     @with_trailing_slash
@@ -215,22 +217,22 @@ def _getDataForCategory(category, stats):
     days = (datetime.utcnow() - stats.start_date).days
     if days >= 30:
         pmartifacts = dict(
-            created = round(totartifacts['created']*30.0/days,2),
-            modified=round(totartifacts['modified']*30.0/days,2))
+            created=round(totartifacts['created'] * 30.0 / days, 2),
+            modified=round(totartifacts['modified'] * 30.0 / days, 2))
         pmcommits = dict(
-            number=round(totcommits['number']*30.0/days,2),
-            lines=round(totcommits['lines']*30.0/days,2))
+            number=round(totcommits['number'] * 30.0 / days, 2),
+            lines=round(totcommits['lines'] * 30.0 / days, 2))
         pmtickets = dict(
-            assigned=round(tottickets['assigned']*30.0/days,2),
-            revoked=round(tottickets['revoked']*30.0/days,2),
-            solved=round(tottickets['solved']*30.0/days,2),
+            assigned=round(tottickets['assigned'] * 30.0 / days, 2),
+            revoked=round(tottickets['revoked'] * 30.0 / days, 2),
+            solved=round(tottickets['solved'] * 30.0 / days, 2),
             averagesolvingtime='n/a')
         for key in artifacts_by_type:
             value = artifacts_by_type[key]
             artifacts_by_type[key]['pmcreated'] = \
-                round(value['created']*30.0/days,2)
-            artifacts_by_type[key]['pmmodified']= \
-                round(value['modified']*30.0/days,2)
+                round(value['created'] * 30.0 / days, 2)
+            artifacts_by_type[key]['pmmodified'] = \
+                round(value['modified'] * 30.0 / days, 2)
     else:
         pmartifacts = dict(created='n/a', modified='n/a')
         pmcommits = dict(number='n/a', lines='n/a')
@@ -241,18 +243,18 @@ def _getDataForCategory(category, stats):
             averagesolvingtime='n/a')
         for key in artifacts_by_type:
             artifacts_by_type[key]['pmcreated'] = 'n/a'
-            artifacts_by_type[key]['pmmodified']= 'n/a'
+            artifacts_by_type[key]['pmmodified'] = 'n/a'
 
     return dict(
-        days = days,
-        totcommits = totcommits,
-        lastmonthcommits = lmcommits,
-        lastmonthtickets = lm_tickets,
-        tottickets = tottickets,
-        permonthcommits = pmcommits,
-        totartifacts = totartifacts,
-        lastmonthartifacts = lm_totartifacts,
-        permonthartifacts = pmartifacts,
-        artifacts_by_type = artifacts_by_type,
-        lastmonth_artifacts_by_type = lm_artifacts_by_type,
-        permonthtickets = pmtickets)
+        days=days,
+        totcommits=totcommits,
+        lastmonthcommits=lmcommits,
+        lastmonthtickets=lm_tickets,
+        tottickets=tottickets,
+        permonthcommits=pmcommits,
+        totartifacts=totartifacts,
+        lastmonthartifacts=lm_totartifacts,
+        permonthartifacts=pmartifacts,
+        artifacts_by_type=artifacts_by_type,
+        lastmonth_artifacts_by_type=lm_artifacts_by_type,
+        permonthtickets=pmtickets)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeUserStats/forgeuserstats/main.py
----------------------------------------------------------------------
diff --git a/ForgeUserStats/forgeuserstats/main.py b/ForgeUserStats/forgeuserstats/main.py
index 62aba4b..44e606b 100644
--- a/ForgeUserStats/forgeuserstats/main.py
+++ b/ForgeUserStats/forgeuserstats/main.py
@@ -38,7 +38,9 @@ from ming.orm import session
 
 log = logging.getLogger(__name__)
 
+
 class UserStatsListener(EventsListener):
+
     def newArtifact(self, art_type, art_datetime, project, user):
         stats = user.stats
         if not stats:
@@ -67,7 +69,8 @@ class UserStatsListener(EventsListener):
         elif event_type == "revoked":
             stats.addRevokedTicket(ticket.mod_date, project)
         elif event_type == "closed":
-            stats.addClosedTicket(ticket.created_date,ticket.mod_date,project)
+            stats.addClosedTicket(
+                ticket.created_date, ticket.mod_date, project)
 
     def newCommit(self, newcommit, project, user):
         stats = user.stats
@@ -86,25 +89,26 @@ class UserStatsListener(EventsListener):
     def newOrganization(self, organization):
         pass
 
+
 class ForgeUserStatsApp(Application):
     __version__ = version.__version__
-    tool_label='UserStats'
-    default_mount_label='Stats'
-    default_mount_point='stats'
+    tool_label = 'UserStats'
+    default_mount_label = 'Stats'
+    default_mount_point = 'stats'
     permissions = ['configure', 'read', 'write',
-                    'unmoderated_post', 'post', 'moderate', 'admin']
+                   'unmoderated_post', 'post', 'moderate', 'admin']
     permissions_desc = {
         'read': 'View user stats.',
         'admin': 'Toggle stats visibility.',
     }
     max_instances = 0
-    ordinal=15
+    ordinal = 15
     config_options = Application.config_options
     default_external_feeds = []
-    icons={
-        24:'userstats/images/stats_24.png',
-        32:'userstats/images/stats_32.png',
-        48:'userstats/images/stats_48.png'
+    icons = {
+        24: 'userstats/images/stats_24.png',
+        32: 'userstats/images/stats_32.png',
+        48: 'userstats/images/stats_48.png'
     }
     root = ForgeUserStatsController()
 
@@ -129,7 +133,7 @@ class ForgeUserStatsApp(Application):
         menu_id = self.config.options.mount_label
         with h.push_config(c, app=self):
             return [
-                SitemapEntry(menu_id, '.')[self.sidebar_menu()] ]
+                SitemapEntry(menu_id, '.')[self.sidebar_menu()]]
 
     @property
     def show_discussion(self):
@@ -149,16 +153,16 @@ class ForgeUserStatsApp(Application):
 
     def admin_menu(self):
         links = [SitemapEntry(
-                     'Settings', c.project.url() + 'userstats/settings')]
+            'Settings', c.project.url() + 'userstats/settings')]
         return links
 
     def install(self, project):
-        #It doesn't make any sense to install the tool twice on the same
-        #project therefore, if it already exists, it doesn't install it
-        #a second time.
+        # It doesn't make any sense to install the tool twice on the same
+        # project therefore, if it already exists, it doesn't install it
+        # a second time.
         for tool in project.app_configs:
             if tool.tool_name == 'userstats':
-                if self.config.options.mount_point!=tool.options.mount_point:
+                if self.config.options.mount_point != tool.options.mount_point:
                     project.uninstall_app(self.config.options.mount_point)
                     return
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeUserStats/forgeuserstats/model/__init__.py
----------------------------------------------------------------------
diff --git a/ForgeUserStats/forgeuserstats/model/__init__.py b/ForgeUserStats/forgeuserstats/model/__init__.py
index 77505f1..144e298 100644
--- a/ForgeUserStats/forgeuserstats/model/__init__.py
+++ b/ForgeUserStats/forgeuserstats/model/__init__.py
@@ -14,4 +14,3 @@
 #       KIND, either express or implied.  See the License for the
 #       specific language governing permissions and limitations
 #       under the License.
-

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeUserStats/forgeuserstats/model/stats.py
----------------------------------------------------------------------
diff --git a/ForgeUserStats/forgeuserstats/model/stats.py b/ForgeUserStats/forgeuserstats/model/stats.py
index 493b1c3..03d6e83 100644
--- a/ForgeUserStats/forgeuserstats/model/stats.py
+++ b/ForgeUserStats/forgeuserstats/model/stats.py
@@ -25,25 +25,27 @@ from allura.lib import plugin
 from allura.model.session import main_orm_session
 from allura.model import Stats
 
+
 class UserStats(Stats):
+
     class __mongometa__:
-        name='userstats'
+        name = 'userstats'
         session = main_orm_session
-        unique_indexes = [ '_id', 'user_id']
+        unique_indexes = ['_id', 'user_id']
 
-    tot_logins_count = FieldProperty(int, if_missing = 0)
+    tot_logins_count = FieldProperty(int, if_missing=0)
     last_login = FieldProperty(datetime)
-    lastmonthlogins=FieldProperty([datetime])
+    lastmonthlogins = FieldProperty([datetime])
     user_id = FieldProperty(S.ObjectId)
 
     @classmethod
     def create(cls, user):
         auth_provider = plugin.AuthenticationProvider.get(request)
         reg_date = auth_provider.user_registration_date(user)
-        stats = cls.query.get(user_id = user._id)
+        stats = cls.query.get(user_id=user._id)
         if stats:
             return stats
-        stats = cls(user_id=user._id, registration_date = reg_date)
+        stats = cls(user_id=user._id, registration_date=reg_date)
         user.stats_id = stats._id
         return stats
 
@@ -64,5 +66,5 @@ class UserStats(Stats):
         self.tot_logins_count += 1
         self.lastmonthlogins.append(login_datetime)
         self.checkOldArtifacts()
-        
+
 Mapper.compile_all()

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeUserStats/forgeuserstats/tests/__init__.py
----------------------------------------------------------------------
diff --git a/ForgeUserStats/forgeuserstats/tests/__init__.py b/ForgeUserStats/forgeuserstats/tests/__init__.py
index 77505f1..144e298 100644
--- a/ForgeUserStats/forgeuserstats/tests/__init__.py
+++ b/ForgeUserStats/forgeuserstats/tests/__init__.py
@@ -14,4 +14,3 @@
 #       KIND, either express or implied.  See the License for the
 #       specific language governing permissions and limitations
 #       under the License.
-

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeUserStats/forgeuserstats/tests/test_model.py
----------------------------------------------------------------------
diff --git a/ForgeUserStats/forgeuserstats/tests/test_model.py b/ForgeUserStats/forgeuserstats/tests/test_model.py
index 6940385..aef4db7 100644
--- a/ForgeUserStats/forgeuserstats/tests/test_model.py
+++ b/ForgeUserStats/forgeuserstats/tests/test_model.py
@@ -31,8 +31,12 @@ from allura import model as M
 
 from forgeuserstats.model import stats as USM
 
-test_project_with_repo = 'test2'  # important to be distinct from 'test' which ForgeGit uses, so that the tests can run in parallel and not clobber each other
-with_git = td.with_tool(test_project_with_repo, 'Git', 'src-git', 'Git', type='git')
+# important to be distinct from 'test' which ForgeGit uses, so that the
+# tests can run in parallel and not clobber each other
+test_project_with_repo = 'test2'
+with_git = td.with_tool(test_project_with_repo, 'Git',
+                        'src-git', 'Git', type='git')
+
 
 class TestUserStats(unittest.TestCase):
 
@@ -96,12 +100,16 @@ class TestUserStats(unittest.TestCase):
         assert artifacts['modified'] == init_art['modified']
         assert art_wiki['created'] == init_art_wiki['created'] + 1
         assert art_wiki['modified'] == init_art_wiki['modified']
-        assert art_by_type['Wiki']['created'] == init_art_by_type['Wiki']['created'] + 1
-        assert art_by_type['Wiki']['modified'] == init_art_by_type['Wiki']['modified']
-        assert lm_art_by_type['Wiki']['created'] == init_lm_art_by_type['Wiki']['created'] + 1
-        assert lm_art_by_type['Wiki']['modified'] == init_lm_art_by_type['Wiki']['modified']
-
-        #In that case, last month stats should not be changed
+        assert art_by_type['Wiki'][
+            'created'] == init_art_by_type['Wiki']['created'] + 1
+        assert art_by_type['Wiki'][
+            'modified'] == init_art_by_type['Wiki']['modified']
+        assert lm_art_by_type['Wiki'][
+            'created'] == init_lm_art_by_type['Wiki']['created'] + 1
+        assert lm_art_by_type['Wiki'][
+            'modified'] == init_lm_art_by_type['Wiki']['modified']
+
+        # In that case, last month stats should not be changed
         new_date = datetime.utcnow() + timedelta(-32)
         self.user.stats.addNewArtifact('Wiki', new_date, p)
         lm_art = self.user.stats.getLastMonthArtifacts()
@@ -116,10 +124,14 @@ class TestUserStats(unittest.TestCase):
         assert artifacts['modified'] == init_art['modified']
         assert art_wiki['created'] == init_art_wiki['created'] + 2
         assert art_wiki['modified'] == init_art_wiki['modified']
-        assert art_by_type['Wiki']['created'] == init_art_by_type['Wiki']['created'] + 2
-        assert art_by_type['Wiki']['modified'] == init_art_by_type['Wiki']['modified']
-        assert lm_art_by_type['Wiki']['created'] == init_lm_art_by_type['Wiki']['created'] + 1
-        assert lm_art_by_type['Wiki']['modified'] == init_lm_art_by_type['Wiki']['modified']
+        assert art_by_type['Wiki'][
+            'created'] == init_art_by_type['Wiki']['created'] + 2
+        assert art_by_type['Wiki'][
+            'modified'] == init_art_by_type['Wiki']['modified']
+        assert lm_art_by_type['Wiki'][
+            'created'] == init_lm_art_by_type['Wiki']['created'] + 1
+        assert lm_art_by_type['Wiki'][
+            'modified'] == init_lm_art_by_type['Wiki']['modified']
 
         p.trove_topic = [topic._id]
 
@@ -138,15 +150,21 @@ class TestUserStats(unittest.TestCase):
         assert artifacts['modified'] == init_art['modified']
         assert art_wiki['created'] == init_art_wiki['created'] + 3
         assert art_wiki['modified'] == init_art_wiki['modified']
-        assert art_by_type['Wiki']['created'] == init_art_by_type['Wiki']['created'] + 3
-        assert art_by_type['Wiki']['modified'] == init_art_by_type['Wiki']['modified']
-        assert lm_art_by_type['Wiki']['created'] == init_lm_art_by_type['Wiki']['created'] + 2
-        assert lm_art_by_type['Wiki']['modified'] == init_lm_art_by_type['Wiki']['modified']
+        assert art_by_type['Wiki'][
+            'created'] == init_art_by_type['Wiki']['created'] + 3
+        assert art_by_type['Wiki'][
+            'modified'] == init_art_by_type['Wiki']['modified']
+        assert lm_art_by_type['Wiki'][
+            'created'] == init_lm_art_by_type['Wiki']['created'] + 2
+        assert lm_art_by_type['Wiki'][
+            'modified'] == init_lm_art_by_type['Wiki']['modified']
         assert art_sci['created'] == init_art_sci['created'] + 1
         assert art_sci['modified'] == init_art_sci['modified']
-        assert dict(messagetype='Wiki', created= 1, modified = 0) in art_by_cat[topic]
+        assert dict(messagetype='Wiki', created=1,
+                    modified=0) in art_by_cat[topic]
         art_by_cat = self.user.stats.getArtifactsByCategory(detailed=False)
-        assert art_by_cat[topic]['created'] == 1 and art_by_cat[topic]['modified'] == 0
+        assert art_by_cat[topic]['created'] == 1 and art_by_cat[
+            topic]['modified'] == 0
 
     @td.with_user_project('test-user-2')
     def test_modify_artifact_stats(self):
@@ -173,12 +191,16 @@ class TestUserStats(unittest.TestCase):
         assert artifacts['modified'] == init_art['modified'] + 1
         assert art_wiki['created'] == init_art_wiki['created']
         assert art_wiki['modified'] == init_art_wiki['modified'] + 1
-        assert art_by_type['Wiki']['created'] == init_art_by_type['Wiki']['created']
-        assert art_by_type['Wiki']['modified'] == init_art_by_type['Wiki']['modified'] + 1
-        assert lm_art_by_type['Wiki']['created'] == init_lm_art_by_type['Wiki']['created']
-        assert lm_art_by_type['Wiki']['modified'] == init_lm_art_by_type['Wiki']['modified'] + 1
-
-        #In that case, last month stats should not be changed
+        assert art_by_type['Wiki'][
+            'created'] == init_art_by_type['Wiki']['created']
+        assert art_by_type['Wiki'][
+            'modified'] == init_art_by_type['Wiki']['modified'] + 1
+        assert lm_art_by_type['Wiki'][
+            'created'] == init_lm_art_by_type['Wiki']['created']
+        assert lm_art_by_type['Wiki'][
+            'modified'] == init_lm_art_by_type['Wiki']['modified'] + 1
+
+        # In that case, last month stats should not be changed
         new_date = datetime.utcnow() + timedelta(-32)
         self.user.stats.addModifiedArtifact('Wiki', new_date, p)
         lm_art = self.user.stats.getLastMonthArtifacts()
@@ -193,10 +215,14 @@ class TestUserStats(unittest.TestCase):
         assert artifacts['modified'] == init_art['modified'] + 2
         assert art_wiki['created'] == init_art_wiki['created']
         assert art_wiki['modified'] == init_art_wiki['modified'] + 2
-        assert art_by_type['Wiki']['created'] == init_art_by_type['Wiki']['created']
-        assert art_by_type['Wiki']['modified'] == init_art_by_type['Wiki']['modified'] + 2
-        assert lm_art_by_type['Wiki']['created'] == init_lm_art_by_type['Wiki']['created']
-        assert lm_art_by_type['Wiki']['modified'] == init_lm_art_by_type['Wiki']['modified'] + 1
+        assert art_by_type['Wiki'][
+            'created'] == init_art_by_type['Wiki']['created']
+        assert art_by_type['Wiki'][
+            'modified'] == init_art_by_type['Wiki']['modified'] + 2
+        assert lm_art_by_type['Wiki'][
+            'created'] == init_lm_art_by_type['Wiki']['created']
+        assert lm_art_by_type['Wiki'][
+            'modified'] == init_lm_art_by_type['Wiki']['modified'] + 1
 
         p.trove_topic = [topic._id]
 
@@ -215,15 +241,21 @@ class TestUserStats(unittest.TestCase):
         assert artifacts['modified'] == init_art['modified'] + 3
         assert art_wiki['created'] == init_art_wiki['created']
         assert art_wiki['modified'] == init_art_wiki['modified'] + 3
-        assert art_by_type['Wiki']['created'] == init_art_by_type['Wiki']['created']
-        assert art_by_type['Wiki']['modified'] == init_art_by_type['Wiki']['modified'] + 3
-        assert lm_art_by_type['Wiki']['created'] == init_lm_art_by_type['Wiki']['created']
-        assert lm_art_by_type['Wiki']['modified'] == init_lm_art_by_type['Wiki']['modified'] +2
+        assert art_by_type['Wiki'][
+            'created'] == init_art_by_type['Wiki']['created']
+        assert art_by_type['Wiki'][
+            'modified'] == init_art_by_type['Wiki']['modified'] + 3
+        assert lm_art_by_type['Wiki'][
+            'created'] == init_lm_art_by_type['Wiki']['created']
+        assert lm_art_by_type['Wiki'][
+            'modified'] == init_lm_art_by_type['Wiki']['modified'] + 2
         assert art_sci['created'] == init_art_sci['created']
         assert art_sci['modified'] == init_art_sci['modified'] + 1
-        assert dict(messagetype='Wiki', created=0, modified=1) in art_by_cat[topic]
+        assert dict(messagetype='Wiki', created=0,
+                    modified=1) in art_by_cat[topic]
         art_by_cat = self.user.stats.getArtifactsByCategory(detailed=False)
-        assert art_by_cat[topic]['created'] == 0 and art_by_cat[topic]['modified'] == 1
+        assert art_by_cat[topic]['created'] == 0 and art_by_cat[
+            topic]['modified'] == 1
 
     @td.with_user_project('test-user-2')
     def test_ticket_stats(self):
@@ -231,14 +263,16 @@ class TestUserStats(unittest.TestCase):
         topic = TroveCategory.query.get(shortname='scientific')
         create_time = datetime.utcnow() + timedelta(-5)
 
-        init_lm_tickets_art = self.user.stats.getLastMonthArtifacts(art_type='Ticket')
+        init_lm_tickets_art = self.user.stats.getLastMonthArtifacts(
+            art_type='Ticket')
         init_tickets_art = self.user.stats.getArtifacts(art_type='Ticket')
         init_tickets_sci_art = self.user.stats.getArtifacts(category=topic._id)
         init_tickets = self.user.stats.getTickets()
         init_lm_tickets = self.user.stats.getLastMonthTickets()
 
         self.user.stats.addNewArtifact('Ticket', create_time, p)
-        lm_tickets_art = self.user.stats.getLastMonthArtifacts(art_type='Ticket')
+        lm_tickets_art = self.user.stats.getLastMonthArtifacts(
+            art_type='Ticket')
         tickets_art = self.user.stats.getArtifacts(art_type='Ticket')
         tickets_sci_art = self.user.stats.getArtifacts(category=topic._id)
 
@@ -276,7 +310,8 @@ class TestUserStats(unittest.TestCase):
         assert lm_tickets['solved'] == init_lm_tickets['solved']
         assert lm_tickets['averagesolvingtime'] is None
 
-        self.user.stats.addClosedTicket(create_time, create_time + timedelta(1), p)
+        self.user.stats.addClosedTicket(
+            create_time, create_time + timedelta(1), p)
         tickets = self.user.stats.getTickets()
         lm_tickets = self.user.stats.getLastMonthTickets()
 
@@ -284,7 +319,7 @@ class TestUserStats(unittest.TestCase):
         assert tickets['revoked'] == init_tickets['revoked'] + 1
         assert tickets['solved'] == init_tickets['solved'] + 1
 
-        solving_time = dict(seconds=0,minutes=0,days=1,hours=0)
+        solving_time = dict(seconds=0, minutes=0, days=1, hours=0)
         assert tickets['averagesolvingtime'] == solving_time
         assert lm_tickets['assigned'] == init_lm_tickets['assigned'] + 1
         assert lm_tickets['revoked'] == init_lm_tickets['revoked']
@@ -292,11 +327,12 @@ class TestUserStats(unittest.TestCase):
         assert lm_tickets['averagesolvingtime'] == solving_time
 
         p.trove_topic = []
-        self.user.stats.addClosedTicket(create_time, create_time + timedelta(3), p)
+        self.user.stats.addClosedTicket(
+            create_time, create_time + timedelta(3), p)
         tickets = self.user.stats.getTickets()
         lm_tickets = self.user.stats.getLastMonthTickets()
 
-        solving_time = dict(seconds=0,minutes=0,days=2,hours=0)
+        solving_time = dict(seconds=0, minutes=0, days=2, hours=0)
 
         assert tickets['assigned'] == init_tickets['assigned'] + 1
         assert tickets['revoked'] == init_tickets['revoked'] + 1
@@ -309,7 +345,7 @@ class TestUserStats(unittest.TestCase):
 
         by_cat = self.user.stats.getTicketsByCategory()
         lm_by_cat = self.user.stats.getLastMonthTicketsByCategory()
-        solving_time=dict(days=1,hours=0,minutes=0,seconds=0)
+        solving_time = dict(days=1, hours=0, minutes=0, seconds=0)
 
         assert by_cat[topic]['assigned'] == 1
         assert by_cat[topic]['revoked'] == 1
@@ -360,7 +396,8 @@ class TestUserStats(unittest.TestCase):
         assert lm_by_cat[topic]['number'] == 1
         assert lm_by_cat[topic]['lines'] == 1
 
-        self.user.stats.addCommit(commit, datetime.utcnow() + timedelta(-40), p)
+        self.user.stats.addCommit(
+            commit, datetime.utcnow() + timedelta(-40), p)
         commits = self.user.stats.getCommits()
         assert commits['number'] == init_commits['number'] + 2
         assert commits['lines'] == init_commits['lines'] + 2
@@ -385,48 +422,55 @@ class TestUserStats(unittest.TestCase):
         lm_logins = self.user.stats.getLastMonthLogins()
         assert logins == init_logins + 1
         assert lm_logins == init_lm_logins + 1
-        assert abs(self.user.stats.last_login - login_datetime) < timedelta(seconds=1)
+        assert abs(self.user.stats.last_login -
+                   login_datetime) < timedelta(seconds=1)
 
         self.user.stats.addLogin(datetime.utcnow() + timedelta(-32))
         logins = self.user.stats.tot_logins_count
         lm_logins = self.user.stats.getLastMonthLogins()
         assert logins == init_logins + 2
         assert lm_logins == init_lm_logins + 1
-        assert abs(self.user.stats.last_login - login_datetime) < timedelta(seconds=1)
+        assert abs(self.user.stats.last_login -
+                   login_datetime) < timedelta(seconds=1)
 
     def test_start_date(self):
-        stats = USM.UserStats(registration_date=datetime(2012,04,01))
-        self.assertEqual(stats.start_date, datetime(2012,04,01))
+        stats = USM.UserStats(registration_date=datetime(2012, 04, 01))
+        self.assertEqual(stats.start_date, datetime(2012, 04, 01))
         with h.push_config(config, **{'userstats.start_date': '2013-04-01'}):
-            self.assertEqual(stats.start_date, datetime(2013,04,01))
+            self.assertEqual(stats.start_date, datetime(2013, 04, 01))
         with h.push_config(config, **{'userstats.start_date': '2011-04-01'}):
-            self.assertEqual(stats.start_date, datetime(2012,04,01))
+            self.assertEqual(stats.start_date, datetime(2012, 04, 01))
 
     @mock.patch('allura.model.stats.difflib.unified_diff')
     def test_count_loc(self, unified_diff):
         stats = USM.UserStats()
         newcommit = mock.Mock(
-                parent_ids=['deadbeef'],
-                diffs=mock.Mock(
-                    changed=[mock.MagicMock()],
-                    copied=[mock.MagicMock()],
-                    added=[mock.MagicMock()],
-                ),
-            )
-        unified_diff.return_value = ['+++','---','+line']
+            parent_ids=['deadbeef'],
+            diffs=mock.Mock(
+                changed=[mock.MagicMock()],
+                copied=[mock.MagicMock()],
+                added=[mock.MagicMock()],
+            ),
+        )
+        unified_diff.return_value = ['+++', '---', '+line']
         newcommit.tree.get_blob_by_path.return_value = mock.MagicMock()
-        newcommit.tree.get_blob_by_path.return_value.__iter__.return_value = ['one']
-        newcommit.repo.commit().tree.get_blob_by_path.return_value = mock.MagicMock()
-        newcommit.repo.commit().tree.get_blob_by_path.return_value.__iter__.return_value = ['two']
+        newcommit.tree.get_blob_by_path.return_value.__iter__.return_value = [
+            'one']
+        newcommit.repo.commit(
+        ).tree.get_blob_by_path.return_value = mock.MagicMock()
+        newcommit.repo.commit().tree.get_blob_by_path.return_value.__iter__.return_value = [
+            'two']
         commit_datetime = datetime.utcnow()
         project = mock.Mock(
-                trove_topic=[],
-                trove_language=[],
-            )
+            trove_topic=[],
+            trove_language=[],
+        )
         stats.addCommit(newcommit, commit_datetime, project)
-        self.assertEqual(stats.general[0].commits[0], {'lines': 3, 'number': 1, 'language': None})
+        self.assertEqual(stats.general[0].commits[0],
+                         {'lines': 3, 'number': 1, 'language': None})
         unified_diff.reset_mock()
         with h.push_config(config, **{'userstats.count_lines_of_code': 'false'}):
             stats.addCommit(newcommit, commit_datetime, project)
-        self.assertEqual(stats.general[0].commits[0], {'lines': 3, 'number': 2, 'language': None})
+        self.assertEqual(stats.general[0].commits[0],
+                         {'lines': 3, 'number': 2, 'language': None})
         unified_diff.assert_not_called()

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeUserStats/forgeuserstats/tests/test_stats.py
----------------------------------------------------------------------
diff --git a/ForgeUserStats/forgeuserstats/tests/test_stats.py b/ForgeUserStats/forgeuserstats/tests/test_stats.py
index 0f8efa9..20fbc3b 100644
--- a/ForgeUserStats/forgeuserstats/tests/test_stats.py
+++ b/ForgeUserStats/forgeuserstats/tests/test_stats.py
@@ -31,8 +31,11 @@ from forgewiki import model as WM
 from forgetracker import model as TM
 
 
-test_project_with_repo = 'test2'  # important to be distinct from 'test' which ForgeGit uses, so that the tests can run in parallel and not clobber each other
-with_git = td.with_tool(test_project_with_repo, 'Git', 'src-git', 'Git', type='git')
+# important to be distinct from 'test' which ForgeGit uses, so that the
+# tests can run in parallel and not clobber each other
+test_project_with_repo = 'test2'
+with_git = td.with_tool(test_project_with_repo, 'Git',
+                        'src-git', 'Git', type='git')
 
 
 class TestStats(TestController):
@@ -46,7 +49,7 @@ class TestStats(TestController):
         user = User.by_username('test-user')
         init_logins = user.stats.tot_logins_count
         r = self.app.post('/auth/do_login', params=dict(
-                username=user.username, password='foo'))
+            username=user.username, password='foo'))
 
         assert user.stats.tot_logins_count == 1 + init_logins
         assert user.stats.getLastMonthLogins() == 1 + init_logins
@@ -57,8 +60,8 @@ class TestStats(TestController):
         initial_artifacts = c.user.stats.getArtifacts()
         initial_wiki = c.user.stats.getArtifacts(art_type="Wiki")
         self.app.post('/wiki/TestPage/update',
-            params=dict(title='TestPage', text='some text'),
-            extra_environ=dict(username=str(c.user.username)))
+                      params=dict(title='TestPage', text='some text'),
+                      extra_environ=dict(username=str(c.user.username)))
 
         artifacts = c.user.stats.getArtifacts()
         wiki = c.user.stats.getArtifacts(art_type="Wiki")
@@ -69,8 +72,8 @@ class TestStats(TestController):
         assert wiki['modified'] == initial_wiki['modified']
 
         self.app.post('/wiki/TestPage2/update',
-            params=dict(title='TestPage2', text='some text'),
-            extra_environ=dict(username=str(c.user.username)))
+                      params=dict(title='TestPage2', text='some text'),
+                      extra_environ=dict(username=str(c.user.username)))
 
         artifacts = c.user.stats.getArtifacts()
         wiki = c.user.stats.getArtifacts(art_type="Wiki")
@@ -81,8 +84,9 @@ class TestStats(TestController):
         assert wiki['modified'] == initial_wiki['modified']
 
         self.app.post('/wiki/TestPage2/update',
-            params=dict(title='TestPage2', text='some modified text'),
-            extra_environ=dict(username=str(c.user.username)))
+                      params=dict(title='TestPage2',
+                                  text='some modified text'),
+                      extra_environ=dict(username=str(c.user.username)))
 
         artifacts = c.user.stats.getArtifacts()
         wiki = c.user.stats.getArtifacts(art_type="Wiki")
@@ -95,12 +99,13 @@ class TestStats(TestController):
     @td.with_tool('test', 'tickets', mount_point='tickets', mount_label='tickets', username='test-admin')
     def test_tracker_stats(self):
         initial_tickets = c.user.stats.getTickets()
-        initial_tickets_artifacts = c.user.stats.getArtifacts(art_type="Ticket")
+        initial_tickets_artifacts = c.user.stats.getArtifacts(
+            art_type="Ticket")
 
         r = self.app.post('/tickets/save_ticket',
-            params={'ticket_form.summary':'test',
-                    'ticket_form.assigned_to' : str(c.user.username)},
-            extra_environ=dict(username=str(c.user.username)))
+                          params={'ticket_form.summary': 'test',
+                                  'ticket_form.assigned_to': str(c.user.username)},
+                          extra_environ=dict(username=str(c.user.username)))
 
         ticketnum = str(TM.Ticket.query.get(summary='test').ticket_num)
 
@@ -110,14 +115,16 @@ class TestStats(TestController):
         assert tickets['assigned'] == initial_tickets['assigned'] + 1
         assert tickets['solved'] == initial_tickets['solved']
         assert tickets['revoked'] == initial_tickets['revoked']
-        assert tickets_artifacts['created'] == initial_tickets_artifacts['created'] + 1
-        assert tickets_artifacts['modified'] == initial_tickets_artifacts['modified']
+        assert tickets_artifacts[
+            'created'] == initial_tickets_artifacts['created'] + 1
+        assert tickets_artifacts[
+            'modified'] == initial_tickets_artifacts['modified']
 
         r = self.app.post('/tickets/%s/update_ticket_from_widget' % ticketnum,
-            params={'ticket_form.ticket_num' : ticketnum,
-                    'ticket_form.summary':'footext3',
-                    'ticket_form.status' : 'closed'},
-            extra_environ=dict(username=str(c.user.username)))
+                          params={'ticket_form.ticket_num': ticketnum,
+                                  'ticket_form.summary': 'footext3',
+                                  'ticket_form.status': 'closed'},
+                          extra_environ=dict(username=str(c.user.username)))
 
         tickets = c.user.stats.getTickets()
         tickets_artifacts = c.user.stats.getArtifacts(art_type="Ticket")
@@ -125,12 +132,14 @@ class TestStats(TestController):
         assert tickets['assigned'] == initial_tickets['assigned'] + 1
         assert tickets['solved'] == initial_tickets['solved'] + 1
         assert tickets['revoked'] == initial_tickets['revoked']
-        assert tickets_artifacts['created'] == initial_tickets_artifacts['created'] + 1
-        assert tickets_artifacts['modified'] == initial_tickets_artifacts['modified'] + 1
+        assert tickets_artifacts[
+            'created'] == initial_tickets_artifacts['created'] + 1
+        assert tickets_artifacts[
+            'modified'] == initial_tickets_artifacts['modified'] + 1
 
         r = self.app.post('/tickets/save_ticket',
-            params={'ticket_form.summary':'test2'},
-            extra_environ=dict(username=str(c.user.username)))
+                          params={'ticket_form.summary': 'test2'},
+                          extra_environ=dict(username=str(c.user.username)))
 
         ticketnum = str(TM.Ticket.query.get(summary='test2').ticket_num)
 
@@ -140,14 +149,16 @@ class TestStats(TestController):
         assert tickets['assigned'] == initial_tickets['assigned'] + 1
         assert tickets['solved'] == initial_tickets['solved'] + 1
         assert tickets['revoked'] == initial_tickets['revoked']
-        assert tickets_artifacts['created'] == initial_tickets_artifacts['created'] + 2
-        assert tickets_artifacts['modified'] == initial_tickets_artifacts['modified'] + 1
+        assert tickets_artifacts[
+            'created'] == initial_tickets_artifacts['created'] + 2
+        assert tickets_artifacts[
+            'modified'] == initial_tickets_artifacts['modified'] + 1
 
         r = self.app.post('/tickets/%s/update_ticket_from_widget' % ticketnum,
-            params={'ticket_form.ticket_num' : ticketnum,
-                    'ticket_form.summary':'test2',
-                    'ticket_form.assigned_to' : str(c.user.username)},
-            extra_environ=dict(username=str(c.user.username)))
+                          params={'ticket_form.ticket_num': ticketnum,
+                                  'ticket_form.summary': 'test2',
+                                  'ticket_form.assigned_to': str(c.user.username)},
+                          extra_environ=dict(username=str(c.user.username)))
 
         tickets = c.user.stats.getTickets()
         tickets_artifacts = c.user.stats.getArtifacts(art_type="Ticket")
@@ -155,14 +166,16 @@ class TestStats(TestController):
         assert tickets['assigned'] == initial_tickets['assigned'] + 2
         assert tickets['solved'] == initial_tickets['solved'] + 1
         assert tickets['revoked'] == initial_tickets['revoked']
-        assert tickets_artifacts['created'] == initial_tickets_artifacts['created'] + 2
-        assert tickets_artifacts['modified'] == initial_tickets_artifacts['modified'] + 2
+        assert tickets_artifacts[
+            'created'] == initial_tickets_artifacts['created'] + 2
+        assert tickets_artifacts[
+            'modified'] == initial_tickets_artifacts['modified'] + 2
 
         r = self.app.post('/tickets/%s/update_ticket_from_widget' % ticketnum,
-            params={'ticket_form.ticket_num' : ticketnum,
-                    'ticket_form.summary':'test2',
-                    'ticket_form.assigned_to' : 'test-user'},
-            extra_environ=dict(username=str(c.user.username)))
+                          params={'ticket_form.ticket_num': ticketnum,
+                                  'ticket_form.summary': 'test2',
+                                  'ticket_form.assigned_to': 'test-user'},
+                          extra_environ=dict(username=str(c.user.username)))
 
         tickets = c.user.stats.getTickets()
         tickets_artifacts = c.user.stats.getArtifacts(art_type="Ticket")
@@ -170,8 +183,11 @@ class TestStats(TestController):
         assert tickets['assigned'] == initial_tickets['assigned'] + 2
         assert tickets['solved'] == initial_tickets['solved'] + 1
         assert tickets['revoked'] == initial_tickets['revoked'] + 1
-        assert tickets_artifacts['created'] == initial_tickets_artifacts['created'] + 2
-        assert tickets_artifacts['modified'] == initial_tickets_artifacts['modified'] + 3
+        assert tickets_artifacts[
+            'created'] == initial_tickets_artifacts['created'] + 2
+        assert tickets_artifacts[
+            'modified'] == initial_tickets_artifacts['modified'] + 3
+
 
 class TestGitCommit(TestController, unittest.TestCase):
 
@@ -189,7 +205,8 @@ class TestGitCommit(TestController, unittest.TestCase):
     @td.with_wiki
     def setup_with_tools(self):
         setup_global_objects()
-        h.set_context(test_project_with_repo, 'src-git', neighborhood='Projects')
+        h.set_context(test_project_with_repo, 'src-git',
+                      neighborhood='Projects')
         repo_dir = pkg_resources.resource_filename(
             'forgeuserstats', 'tests/data')
         c.app.repo.fs_path = repo_dir

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeUserStats/forgeuserstats/widgets/__init__.py
----------------------------------------------------------------------
diff --git a/ForgeUserStats/forgeuserstats/widgets/__init__.py b/ForgeUserStats/forgeuserstats/widgets/__init__.py
index 77505f1..144e298 100644
--- a/ForgeUserStats/forgeuserstats/widgets/__init__.py
+++ b/ForgeUserStats/forgeuserstats/widgets/__init__.py
@@ -14,4 +14,3 @@
 #       KIND, either express or implied.  See the License for the
 #       specific language governing permissions and limitations
 #       under the License.
-

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeUserStats/forgeuserstats/widgets/forms.py
----------------------------------------------------------------------
diff --git a/ForgeUserStats/forgeuserstats/widgets/forms.py b/ForgeUserStats/forgeuserstats/widgets/forms.py
index 0ea3a20..c7b987f 100644
--- a/ForgeUserStats/forgeuserstats/widgets/forms.py
+++ b/ForgeUserStats/forgeuserstats/widgets/forms.py
@@ -23,17 +23,17 @@ from formencode import validators as fev
 import ew as ew_core
 import ew.jinja2_ew as ew
 
+
 class StatsPreferencesForm(ForgeForm):
-    defaults=dict(ForgeForm.defaults)
+    defaults = dict(ForgeForm.defaults)
 
     class fields(ew_core.NameList):
         visible = ew.Checkbox(
             label='Make my personal statistics visible to other users.')
-            
+
     def display(self, **kw):
         if kw.get('user').stats.visible:
-            self.fields['visible'].attrs = {'checked':'true'}      
+            self.fields['visible'].attrs = {'checked': 'true'}
         else:
-            self.fields['visible'].attrs = {}    
+            self.fields['visible'].attrs = {}
         return super(ForgeForm, self).display(**kw)
-

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeUserStats/setup.py
----------------------------------------------------------------------
diff --git a/ForgeUserStats/setup.py b/ForgeUserStats/setup.py
index c8cb39b..ab57945 100644
--- a/ForgeUserStats/setup.py
+++ b/ForgeUserStats/setup.py
@@ -16,7 +16,8 @@
 #       under the License.
 
 from setuptools import setup, find_packages
-import sys, os
+import sys
+import os
 
 from forgeuserstats.version import __version__
 
@@ -25,7 +26,8 @@ setup(name='ForgeUserStats',
       description="",
       long_description="""\
 """,
-      classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers
+      # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers
+      classifiers=[],
       keywords='',
       author='',
       author_email='',

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeWiki/forgewiki/converters.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/converters.py b/ForgeWiki/forgewiki/converters.py
index 4439d08..95b88f7 100644
--- a/ForgeWiki/forgewiki/converters.py
+++ b/ForgeWiki/forgewiki/converters.py
@@ -64,9 +64,9 @@ def mediawiki2markdown(source):
         raise ImportError("""This operation requires GPL libraries:
         "mediawiki" (https://github.com/zikzakmedia/python-mediawiki.git)
         "html2text" (https://github.com/aaronsw/html2text.git)""")
-    
+
     html2text.BODY_WIDTH = 0
-    
+
     wiki_content = wiki2html(source, True)
     wiki_content = _convert_toc(wiki_content)
     markdown_text = html2text.html2text(wiki_content)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeWiki/forgewiki/model/wiki.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/model/wiki.py b/ForgeWiki/forgewiki/model/wiki.py
index 11ad589..18bfb85 100644
--- a/ForgeWiki/forgewiki/model/wiki.py
+++ b/ForgeWiki/forgewiki/model/wiki.py
@@ -17,7 +17,8 @@
 
 from datetime import datetime
 import difflib
-from pylons import app_globals as g #g is a namespace for globally accessable app helpers
+# g is a namespace for globally accessable app helpers
+from pylons import app_globals as g
 from pylons import tmpl_context as context
 
 from ming import schema
@@ -25,16 +26,16 @@ from ming.orm import FieldProperty, ForeignIdProperty, Mapper, session
 from ming.orm.declarative import MappedClass
 
 from allura.model import (
-        VersionedArtifact,
-        Snapshot,
-        Feed,
-        Thread,
-        Post,
-        User,
-        BaseAttachment,
-        Notification,
-        project_orm_session,
-        Shortlink,
+    VersionedArtifact,
+    Snapshot,
+    Feed,
+    Thread,
+    Post,
+    User,
+    BaseAttachment,
+    Notification,
+    project_orm_session,
+    Shortlink,
 )
 from allura.model.timeline import ActivityObject
 from allura.model.types import MarkdownCache
@@ -45,22 +46,25 @@ from allura.lib import utils
 config = utils.ConfigProxy(
     common_suffix='forgemail.domain')
 
+
 class Globals(MappedClass):
 
     class __mongometa__:
         name = 'wiki-globals'
         session = project_orm_session
-        indexes = [ 'app_config_id' ]
+        indexes = ['app_config_id']
 
     type_s = 'WikiGlobals'
     _id = FieldProperty(schema.ObjectId)
-    app_config_id = ForeignIdProperty('AppConfig', if_missing=lambda:context.app.config._id)
+    app_config_id = ForeignIdProperty(
+        'AppConfig', if_missing=lambda: context.app.config._id)
     root = FieldProperty(str)
 
 
 class PageHistory(Snapshot):
+
     class __mongometa__:
-        name='page_history'
+        name = 'page_history'
 
     def original(self):
         return Page.query.get(_id=self.artifact_id)
@@ -92,17 +96,18 @@ class PageHistory(Snapshot):
     def email_address(self):
         return self.original().email_address
 
+
 class Page(VersionedArtifact, ActivityObject):
+
     class __mongometa__:
-        name='page'
+        name = 'page'
         history_class = PageHistory
         unique_indexes = [('app_config_id', 'title')]
 
-
-    title=FieldProperty(str)
-    text=FieldProperty(schema.String, if_missing='')
+    title = FieldProperty(str)
+    text = FieldProperty(schema.String, if_missing='')
     text_cache = FieldProperty(MarkdownCache)
-    viewable_by=FieldProperty([str])
+    viewable_by = FieldProperty([str])
     type_s = 'Wiki'
 
     @property
@@ -127,14 +132,14 @@ class Page(VersionedArtifact, ActivityObject):
         ss = VersionedArtifact.commit(self)
         session(self).flush()
         if self.version > 1:
-            v1 = self.get_version(self.version-1)
+            v1 = self.get_version(self.version - 1)
             v2 = self
-            la = [ line + '\n'  for line in v1.text.splitlines() ]
-            lb = [ line + '\n'  for line in v2.text.splitlines() ]
+            la = [line + '\n' for line in v1.text.splitlines()]
+            lb = [line + '\n' for line in v2.text.splitlines()]
             diff = ''.join(difflib.unified_diff(
-                    la, lb,
-                    'v%d' % v1.version,
-                    'v%d' % v2.version))
+                la, lb,
+                'v%d' % v1.version,
+                'v%d' % v2.version))
             description = '<pre>' + diff + '</pre>'
             if v1.title != v2.title:
                 subject = '%s renamed page %s to %s' % (
@@ -153,7 +158,8 @@ class Page(VersionedArtifact, ActivityObject):
 
     @property
     def email_address(self):
-        domain = '.'.join(reversed(self.app.url[1:-1].split('/'))).replace('_', '-')
+        domain = '.'.join(
+            reversed(self.app.url[1:-1].split('/'))).replace('_', '-')
         return '%s@%s%s' % (self.title.replace('/', '.'), domain, config.common_suffix)
 
     @property
@@ -161,7 +167,8 @@ class Page(VersionedArtifact, ActivityObject):
         return 'Discussion for %s page' % self.title
 
     def url(self):
-        s = self.app_config.url() + h.urlquote(self.title.encode('utf-8')) + '/'
+        s = self.app_config.url() + \
+            h.urlquote(self.title.encode('utf-8')) + '/'
         if self.deleted:
             s += '?deleted=True'
         return s
@@ -182,7 +189,7 @@ class Page(VersionedArtifact, ActivityObject):
     def upsert(cls, title, version=None):
         """Update page with `title` or insert new page with that name"""
         if version is None:
-            #Check for existing page object
+            # Check for existing page object
             obj = cls.query.get(
                 app_config_id=context.app.config._id,
                 title=title)
@@ -190,14 +197,15 @@ class Page(VersionedArtifact, ActivityObject):
                 obj = cls(
                     title=title,
                     app_config_id=context.app.config._id,
-                    )
+                )
                 Thread.new(discussion_id=obj.app_config.discussion_id,
                            ref_id=obj.index_id())
             return obj
         else:
             pg = cls.upsert(title)
             HC = cls.__mongometa__.history_class
-            ss = HC.query.find({'artifact_id':pg._id, 'version':int(version)}).one()
+            ss = HC.query.find(
+                {'artifact_id': pg._id, 'version': int(version)}).one()
             return ss
 
     @classmethod
@@ -226,7 +234,7 @@ class Page(VersionedArtifact, ActivityObject):
                 t[user.username] = user.id
             return t.values()
         user_ids = uniq([r.author for r in self.history().all()])
-        return User.query.find({'_id':{'$in':user_ids}}).all()
+        return User.query.find({'_id': {'$in': user_ids}}).all()
 
     def delete(self):
         Shortlink.query.remove(dict(ref_id=self.index_id()))
@@ -234,10 +242,12 @@ class Page(VersionedArtifact, ActivityObject):
         suffix = " {:%Y-%m-%d %H:%M:%S.%f}".format(datetime.utcnow())
         self.title += suffix
 
+
 class WikiAttachment(BaseAttachment):
-    ArtifactType=Page
+    ArtifactType = Page
+
     class __mongometa__:
-        polymorphic_identity='WikiAttachment'
-    attachment_type=FieldProperty(str, if_missing='WikiAttachment')
+        polymorphic_identity = 'WikiAttachment'
+    attachment_type = FieldProperty(str, if_missing='WikiAttachment')
 
 Mapper.compile_all()

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeWiki/forgewiki/scripts/wiki2markdown/extractors.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/scripts/wiki2markdown/extractors.py b/ForgeWiki/forgewiki/scripts/wiki2markdown/extractors.py
index 7815ba9..b70672c 100644
--- a/ForgeWiki/forgewiki/scripts/wiki2markdown/extractors.py
+++ b/ForgeWiki/forgewiki/scripts/wiki2markdown/extractors.py
@@ -25,6 +25,7 @@ log = logging.getLogger(__name__)
 
 
 class MediawikiExtractor(object):
+
     """Base class for MediaWiki data provider"""
 
     def __init__(self, options):
@@ -40,6 +41,7 @@ class MediawikiExtractor(object):
 
 
 class MySQLExtractor(MediawikiExtractor):
+
     """Extract MediaWiki data to json.
 
     Use connection to MySQL database as a data source.
@@ -60,7 +62,8 @@ class MySQLExtractor(MediawikiExtractor):
         try:
             import MySQLdb
         except ImportError:
-            raise ImportError('GPL library MySQL-python is required for this operation')
+            raise ImportError(
+                'GPL library MySQL-python is required for this operation')
 
         if not self._connection:
             self._connection = MySQLdb.connect(**self.db_options)
@@ -147,7 +150,7 @@ class MySQLExtractor(MediawikiExtractor):
             # so we need to build path to file as follows
             md5 = hashlib.md5(name).hexdigest()
             path = os.path.join(self.options.attachments_dir,
-                               md5[:1], md5[:2], name)
+                                md5[:1], md5[:2], name)
             if os.path.isfile(path):
                 yield path
 
@@ -185,4 +188,5 @@ class MySQLExtractor(MediawikiExtractor):
         for filepath in self._attachments(page_id):
             self._save_attachment(filepath, 'pages', str(page_id),
                                   'attachments')
-        log.info('Extracted attachments for page %s (%s)', page_id, page['title'])
+        log.info('Extracted attachments for page %s (%s)',
+                 page_id, page['title'])

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeWiki/forgewiki/scripts/wiki2markdown/loaders.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/scripts/wiki2markdown/loaders.py b/ForgeWiki/forgewiki/scripts/wiki2markdown/loaders.py
index 588fa64..a3e1e29 100644
--- a/ForgeWiki/forgewiki/scripts/wiki2markdown/loaders.py
+++ b/ForgeWiki/forgewiki/scripts/wiki2markdown/loaders.py
@@ -34,6 +34,7 @@ log = logging.getLogger(__name__)
 
 
 class MediawikiLoader(object):
+
     """Load MediaWiki data from json to Allura wiki tool"""
     TIMESTAMP_FMT = '%Y%m%d%H%M%S'
 
@@ -42,13 +43,13 @@ class MediawikiLoader(object):
         self.nbhd = M.Neighborhood.query.get(name=options.nbhd)
         if not self.nbhd:
             raise ValueError("Can't find neighborhood with name %s"
-                                  % options.nbhd)
+                             % options.nbhd)
         self.project = M.Project.query.get(shortname=options.project,
                                            neighborhood_id=self.nbhd._id)
         if not self.project:
             raise ValueError("Can't find project with shortname %s "
-                                  "and neighborhood_id %s"
-                                  % (options.project, self.nbhd._id))
+                             "and neighborhood_id %s"
+                             % (options.project, self.nbhd._id))
 
         self.wiki = self.project.app_instance('wiki')
         if not self.wiki:
@@ -132,10 +133,10 @@ class MediawikiLoader(object):
                 p = WM.Page.upsert(page['title'])
                 p.viewable_by = ['all']
                 p.text = mediawiki_internal_links2markdown(
-                            mediawiki2markdown(page['text']),
-                            page['title'])
+                    mediawiki2markdown(page['text']),
+                    page['title'])
                 timestamp = datetime.datetime.strptime(page['timestamp'],
-                                                        self.TIMESTAMP_FMT)
+                                                       self.TIMESTAMP_FMT)
                 p.mod_date = timestamp
                 c.user = (M.User.query.get(username=page['username'].lower())
                           or M.User.anonymous())
@@ -147,7 +148,8 @@ class MediawikiLoader(object):
                 gl = WM.Globals.query.get(app_config_id=self.wiki.config._id)
                 if gl is not None:
                     gl.root = page['title']
-            log.info('Loaded history of page %s (%s)', page['page_id'], page['title'])
+            log.info('Loaded history of page %s (%s)',
+                     page['page_id'], page['title'])
 
             self.load_talk(page_dir, page['title'])
             self.load_attachments(page_dir, page['title'])

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeWiki/forgewiki/scripts/wiki2markdown/wiki2markdown.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/scripts/wiki2markdown/wiki2markdown.py b/ForgeWiki/forgewiki/scripts/wiki2markdown/wiki2markdown.py
index 7d5b2b4..8a6e79e 100644
--- a/ForgeWiki/forgewiki/scripts/wiki2markdown/wiki2markdown.py
+++ b/ForgeWiki/forgewiki/scripts/wiki2markdown/wiki2markdown.py
@@ -32,43 +32,46 @@ log = logging.getLogger(__name__)
 
 
 class Wiki2Markdown(ScriptTask):
+
     """Import MediaWiki to Allura Wiki tool"""
     @classmethod
     def parser(cls):
         parser = argparse.ArgumentParser(description='Import wiki from'
-            'mediawiki-dump to allura wiki')
+                                         'mediawiki-dump to allura wiki')
         parser.add_argument('-e', '--extract-only', action='store_true',
-                          dest='extract',
-                          help='Store data from the mediawiki-dump '
-                          'on the local filesystem; not load into Allura')
-        parser.add_argument('-l', '--load-only', action='store_true', dest='load',
-                    help='Load into Allura previously-extracted data')
+                            dest='extract',
+                            help='Store data from the mediawiki-dump '
+                            'on the local filesystem; not load into Allura')
+        parser.add_argument(
+            '-l', '--load-only', action='store_true', dest='load',
+            help='Load into Allura previously-extracted data')
         parser.add_argument('-d', '--dump-dir', dest='dump_dir', default='',
-                    help='Directory for dump files')
+                            help='Directory for dump files')
         parser.add_argument('-n', '--neighborhood', dest='nbhd', default='',
-                    help='Neighborhood name to load data')
+                            help='Neighborhood name to load data')
         parser.add_argument('-p', '--project', dest='project', default='',
-                    help='Project shortname to load data into')
+                            help='Project shortname to load data into')
         parser.add_argument('-a', '--attachments-dir', dest='attachments_dir',
-                    help='Path to directory with mediawiki attachments dump',
-                    default='')
+                            help='Path to directory with mediawiki attachments dump',
+                            default='')
         parser.add_argument('--db_config_prefix', dest='db_config_prefix',
-                          help='Key prefix (e.g. "legacy.") in ini file to '
-                          'use instead of commandline db params')
+                            help='Key prefix (e.g. "legacy.") in ini file to '
+                            'use instead of commandline db params')
         parser.add_argument('-s', '--source', dest='source', default='mysql',
-                    help='Database type to extract from (only mysql for now)')
+                            help='Database type to extract from (only mysql for now)')
         parser.add_argument('--db_name', dest='db_name', default='mediawiki',
-                    help='Database name')
+                            help='Database name')
         parser.add_argument('--host', dest='host', default='localhost',
-                    help='Database host')
+                            help='Database host')
         parser.add_argument('--port', dest='port', type=int, default=0,
-                    help='Database port')
+                            help='Database port')
         parser.add_argument('--user', dest='user', default='',
-                    help='User for database connection')
+                            help='User for database connection')
         parser.add_argument('--password', dest='password', default='',
-                    help='Password for database connection')
-        parser.add_argument('--keep-dumps', action='store_true', dest='keep_dumps',
-                    help='Leave dump files on disk after run')
+                            help='Password for database connection')
+        parser.add_argument(
+            '--keep-dumps', action='store_true', dest='keep_dumps',
+            help='Leave dump files on disk after run')
         return parser
 
     @classmethod
@@ -93,14 +96,15 @@ class Wiki2Markdown(ScriptTask):
 
         if not options.dump_dir:
             if options.load and not options.extract:
-                raise ValueError('You must specify directory containing dump files')
+                raise ValueError(
+                    'You must specify directory containing dump files')
             else:
                 options.dump_dir = tempfile.mkdtemp()
                 log.info("Writing temp files to %s", options.dump_dir)
 
         if options.load and (not options.project or not options.nbhd):
             raise ValueError('You must specify neighborhood and project '
-                                  'to load data')
+                             'to load data')
 
         if options.extract:
             if options.db_config_prefix:
@@ -112,12 +116,14 @@ class Wiki2Markdown(ScriptTask):
             if options.source == 'mysql':
                 pass
             elif options.source in ('sqlite', 'postgres', 'sql-dump'):
-                raise ValueError('This source not implemented yet. Only mysql for now')
+                raise ValueError(
+                    'This source not implemented yet. Only mysql for now')
             else:
                 raise ValueError('You must specify a valid data source')
 
             if not options.attachments_dir:
-                raise ValueError('You must specify path to directory with mediawiki attachmets dump.')
+                raise ValueError(
+                    'You must specify path to directory with mediawiki attachmets dump.')
 
         return options
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeWiki/forgewiki/scripts/wiki_from_trac/__init__.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/scripts/wiki_from_trac/__init__.py b/ForgeWiki/forgewiki/scripts/wiki_from_trac/__init__.py
index 8d3f8b7..625362c 100644
--- a/ForgeWiki/forgewiki/scripts/wiki_from_trac/__init__.py
+++ b/ForgeWiki/forgewiki/scripts/wiki_from_trac/__init__.py
@@ -15,4 +15,4 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-from .wiki_from_trac import WikiFromTrac
\ No newline at end of file
+from .wiki_from_trac import WikiFromTrac

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeWiki/forgewiki/scripts/wiki_from_trac/extractors.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/scripts/wiki_from_trac/extractors.py b/ForgeWiki/forgewiki/scripts/wiki_from_trac/extractors.py
index 6415bbf..7f146e6 100644
--- a/ForgeWiki/forgewiki/scripts/wiki_from_trac/extractors.py
+++ b/ForgeWiki/forgewiki/scripts/wiki_from_trac/extractors.py
@@ -129,7 +129,7 @@ class WikiExporter(object):
         if type is None:
             return url
         glue = '&' if '?' in suburl else '?'
-        return  url + glue + 'format=' + type
+        return url + glue + 'format=' + type
 
     def fetch(self, url):
         return urlopen(url)
@@ -201,6 +201,7 @@ class WikiExporter(object):
         internal_url = urlsplit(self.base_url).path + 'wiki/'
         internal_link_re = r'\[([^]]+)\]\(%s([^)]*)\)' % internal_url
         internal_link = re.compile(internal_link_re, re.UNICODE)
+
         def sub(match):
             caption = match.group(1)
             page = self.convert_title(match.group(2))
@@ -232,8 +233,10 @@ class WikiExporter(object):
         a = []
         for line in text.split('\n'):
             if not line.startswith('    '):
-                line = re.sub(r'\[(https?://[^\s\[\]]+)\s([^\[\]]+)\]', r'[\2](\1)', line)
-                line = re.sub(r'\[(wiki:[^\s\[\]]+)\s([^\[\]]+)\]', r'[\2](/\1/)', line)
+                line = re.sub(
+                    r'\[(https?://[^\s\[\]]+)\s([^\[\]]+)\]', r'[\2](\1)', line)
+                line = re.sub(r'\[(wiki:[^\s\[\]]+)\s([^\[\]]+)\]',
+                              r'[\2](/\1/)', line)
                 line = re.sub(r'\!(([A-Z][a-z0-9]+){2,})', r'\1', line)
                 line = re.sub(r'\'\'\'(.*?)\'\'\'', r'*\1*', line)
                 line = re.sub(r'\'\'(.*?)\'\'', r'_\1_', line)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c93733ac/ForgeWiki/forgewiki/scripts/wiki_from_trac/loaders.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/scripts/wiki_from_trac/loaders.py b/ForgeWiki/forgewiki/scripts/wiki_from_trac/loaders.py
index 55e4480..45d056c 100644
--- a/ForgeWiki/forgewiki/scripts/wiki_from_trac/loaders.py
+++ b/ForgeWiki/forgewiki/scripts/wiki_from_trac/loaders.py
@@ -41,13 +41,15 @@ def load_data(doc_file_name=None, optparser=None, options=None):
                 if not isinstance(k, basestring) or not isinstance(v, basestring):
                     raise ValueError
         except ValueError:
-            optparser.error('--user-map should specify JSON file with format {"original_user": "sf_user", ...}')
+            optparser.error(
+                '--user-map should specify JSON file with format {"original_user": "sf_user", ...}')
         finally:
             f.close()
 
     import_options['user_map'] = user_map
 
-    cli = AlluraImportApiClient(options.base_url, options.api_key, options.secret_key, options.verbose)
+    cli = AlluraImportApiClient(
+        options.base_url, options.api_key, options.secret_key, options.verbose)
     doc_txt = open(doc_file_name).read()
 
     if options.wiki: