[geany/www.geany.org] a4b71f: More Pep8 and Pylint cleanup

Enrico Tröger git-noreply at xxxxx
Wed May 1 12:33:25 UTC 2019


Branch:      refs/heads/master
Author:      Enrico Tröger <enrico.troeger at uvena.de>
Committer:   Enrico Tröger <enrico.troeger at uvena.de>
Date:        Wed, 01 May 2019 12:33:25 UTC
Commit:      a4b71fa5f4cf475407b064d45df3872305e242a6
             https://github.com/geany/www.geany.org/commit/a4b71fa5f4cf475407b064d45df3872305e242a6

Log Message:
-----------
More Pep8 and Pylint cleanup


Modified Paths:
--------------
    geany/__init__.py
    geany/decorators.py
    geany/management/commands/dump_database.py
    geany/settings.py
    geany/sitemaps.py
    geany/templatetags/geany_tags.py
    geany/urls.py
    geany/urls_legacy.py
    latest_version/models.py
    latest_version/urls.py
    news/models.py
    news/urls.py
    news/views.py
    nightlybuilds/database_routers.py
    nightlybuilds/models.py
    nightlybuilds/templatetags/nightlybuilds_tags.py
    pastebin/api/create.py
    pastebin/forms.py
    pastebin/highlight.py
    pastebin/management/commands/generate_snippets_css.py
    pastebin/models.py
    pastebin/templatetags/pastebin_tags.py
    pastebin/urls.py
    pastebin/views.py
    static_docs/generate_i18n_statistics.py
    static_docs/github_client.py
    static_docs/urls.py
    static_docs/views.py

Modified: geany/__init__.py
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -1,2 +1,2 @@
 
-default_app_config = 'geany.apps.GeanyAppConfig'
+default_app_config = 'geany.apps.GeanyAppConfig'  # pylint: disable=invalid-name


Modified: geany/decorators.py
20 lines changed, 11 insertions(+), 9 deletions(-)
===================================================================
@@ -42,23 +42,25 @@ def myExpensiveMethod(parm1, parm2, parm3):
             ....
             return expensiveResult
     """
-    def do_cache(f):
-        def x(*args, **kwargs):
-            key = '%s.%s' % ((f.__module__, f.__name__))
+    def do_cache(function):
+        def wrapped(*args, **kwargs):
+            key = '%s.%s' % ((function.__module__, function.__name__))
             if args and not ignore_arguments:
                 cache_args = args
                 # don't include 'self' in arguments
-                arguments = inspect.getargspec(f)[0]
-                if arguments and arguments[0] == 'self':
+                arguments = inspect.getfullargspec(function)
+                if arguments and arguments.args[0] == 'self':
                     cache_args = args[1:]
                 if cache_args:
-                    key = '%s.args%s' % (key, hexlify(repr(cache_args)))
+                    cache_args_repr = repr(cache_args).encode('utf-8')
+                    key = '%s.args%s' % (key, hexlify(cache_args_repr))
             if kwargs and not ignore_arguments:
-                key = '%s.kwargs%s' % (key, hexlify(repr(kwargs)))
+                kwargs_repr = repr(kwargs).encode('utf-8')
+                key = '%s.kwargs%s' % (key, hexlify(kwargs_repr))
             result = _djcache.get(key)
             if result is None:
-                result = f(*args, **kwargs)
+                result = function(*args, **kwargs)
                 _djcache.set(key, result, timeout)
             return result
-        return x
+        return wrapped
     return do_cache


Modified: geany/management/commands/dump_database.py
10 lines changed, 10 insertions(+), 0 deletions(-)
===================================================================
@@ -28,6 +28,12 @@ class Command(BaseCommand):
 
     # ----------------------------------------------------------------------
     def handle(self, *args, **options):
+        self._dump_main_database()
+        self._remove_sensitive_information_from_dump()
+        self._dump_nightly_builds_database()
+
+    # ----------------------------------------------------------------------
+    def _dump_main_database(self):
         print('Dump main database')
         call_command(
             'dumpdata',
@@ -38,6 +44,8 @@ def handle(self, *args, **options):
             '--indent', '2',
             '--output', 'database.json')
 
+    # ----------------------------------------------------------------------
+    def _remove_sensitive_information_from_dump(self):
         # remove potential sensitive information
         with open('database.json') as data_input:
             data = load(data_input)
@@ -77,6 +85,8 @@ def handle(self, *args, **options):
         with open('database.json', 'w') as output:
             dump(data, output, indent=2)
 
+    # ----------------------------------------------------------------------
+    def _dump_nightly_builds_database(self):
         # dump nightly builds database but limit the data to the last week
         # to reduce dump size
         now_a_week_ago = timezone.now() - timedelta(days=7)


Modified: geany/settings.py
9 lines changed, 4 insertions(+), 5 deletions(-)
===================================================================
@@ -527,16 +527,15 @@
 
 # Instead of doing "from .local_settings import *", we use exec so that
 # local_settings has full access to everything defined in this module.
-
-filename = os.path.join(PROJECT_APP_PATH, 'local_settings.py')
+filename = os.path.join(PROJECT_APP_PATH, 'local_settings.py')  # pylint: disable=invalid-name
 if os.path.exists(filename):
     import sys
     import imp
-    module_name = '{}.local_settings'.format(PROJECT_APP)
-    module = imp.new_module(module_name)
+    module_name = '{}.local_settings'.format(PROJECT_APP)  # pylint: disable=invalid-name
+    module = imp.new_module(module_name)  # pylint: disable=invalid-name
     module.__file__ = filename
     sys.modules[module_name] = module
-    exec(open(filename, 'rb').read())
+    exec(open(filename, 'rb').read())  # pylint: disable=exec-used
 
 
 ####################


Modified: geany/sitemaps.py
36 lines changed, 17 insertions(+), 19 deletions(-)
===================================================================
@@ -19,20 +19,18 @@
 from mezzanine.core.sitemaps import DisplayableSitemap
 
 
-"""
-Sitemap generation
-GeanyMainSitemap is the main class which generates sitemap items
-for all Mezzaine pages, blog posts, News posts and various static
-items.
-
-Other apps might add their own sitemap generator classes to the
-"sitemap_registry" provided by this module. For performance reasons,
-static sitemap items (i.e. items generated from URLconf patterns) are
-generated already on module-level because they never changed during
-the whole application lifetime.
-In addition, dynamic items (such as Pages and news posts) are added to
-the static items at runtime as they may change at any time.
-"""
+# Sitemap generation
+# GeanyMainSitemap is the main class which generates sitemap items
+# for all Mezzaine pages, blog posts, News posts and various static
+# items.
+#
+# Other apps might add their own sitemap generator classes to the
+# "sitemap_registry" provided by this module. For performance reasons,
+# static sitemap items (i.e. items generated from URLconf patterns) are
+# generated already on module-level because they never changed during
+# the whole application lifetime.
+# In addition, dynamic items (such as Pages and news posts) are added to
+# the static items at runtime as they may change at any time.
 
 
 class GeanyMainSitemap(DisplayableSitemap):
@@ -59,7 +57,7 @@ def lastmod(self, obj):
         return getattr(obj, 'publish_date', None)
 
 
-class SitemapItem(object):
+class SitemapItem:
     """Simulate a model, mainly to provide get_absolute_url() for Sitemaps"""
 
     # ----------------------------------------------------------------------
@@ -134,11 +132,11 @@ def get_dynamic_items(self):
         return list()
 
     # ----------------------------------------------------------------------
-    def changefreq(self, obj):
+    def changefreq(self, obj):  # pylint: disable=unused-argument
         return 'monthly'
 
     # ----------------------------------------------------------------------
-    def location(self, obj):
+    def location(self, obj):  # pylint: disable=unused-argument
         return self._url_mapping[obj.name]
 
     # ----------------------------------------------------------------------
@@ -147,7 +145,7 @@ def get_urls(self, page=1, site=None, protocol=None):
         return super(StaticSitemap, self).get_urls(page, self._site, protocol)
 
 
-class SitemapRegistry(object):
+class SitemapRegistry:
 
     # ----------------------------------------------------------------------
     def __init__(self):
@@ -193,4 +191,4 @@ def _get_dynamic_items(self):
         return dynamic_items
 
 
-sitemap_registry = SitemapRegistry()
+sitemap_registry = SitemapRegistry()  # pylint: disable=invalid-name


Modified: geany/templatetags/geany_tags.py
12 lines changed, 6 insertions(+), 6 deletions(-)
===================================================================
@@ -20,7 +20,7 @@
 
 
 register = Library()
-logger = logging.getLogger(__name__)
+logger = logging.getLogger(__name__)  # pylint: disable=invalid-name
 
 
 class EvaluateNode(template.Node):
@@ -38,15 +38,15 @@ def render(self, context):
             content_template = template.Template(content)
             rendered_content = content_template.render(context)
             context[self._target_var_name] = rendered_content
-        except (template.VariableDoesNotExist, template.TemplateSyntaxError) as e:
-            return 'Error rendering: {}'.format(e)
+        except (template.VariableDoesNotExist, template.TemplateSyntaxError) as exc:
+            return 'Error rendering: {}'.format(exc)
 
         return ''
 
 
 # ----------------------------------------------------------------------
 @register.tag(name='evaluate')
-def do_evaluate(parser, token):
+def do_evaluate(parser, token):  # pylint: disable=unused-argument
     """
     tag usage {% evaluate object.textfield %}
     """
@@ -65,8 +65,8 @@ def get_irc_userlist():
     try:
         with open(settings.IRC_USER_LIST_FILE) as file_h:
             user_list = file_h.readlines()
-    except IOError as e:
-        logger.error('An error occurred reading IRC user list: {}'.format(e), exc_info=True)
+    except IOError as exc:
+        logger.error('An error occurred reading IRC user list: {}'.format(exc), exc_info=True)
 
     # remove newline characters
     user_list = [username.strip() for username in user_list]


Modified: geany/urls.py
4 lines changed, 3 insertions(+), 1 deletions(-)
===================================================================
@@ -27,6 +27,8 @@
 from nightlybuilds.views import NightlyBuildsView
 
 
+# pylint: disable=invalid-name
+
 sitemaps = {"sitemaps": {"all": GeanyMainSitemap}}
 
 
@@ -48,7 +50,7 @@
     # use our custom sitemap implementation
     url(r"^sitemap\.xml$", sitemap, sitemaps),
 
-    # TODO, NEWS, etc.
+    # Release Notes, NEWS, etc.
     url(r"^", include("static_docs.urls")),
 
     # nightly builds


Modified: geany/urls_legacy.py
8 lines changed, 5 insertions(+), 3 deletions(-)
===================================================================
@@ -64,7 +64,8 @@
     '/Support/I18N': '/contribute/translation/',
     '/Support/IRC': '/support/irc/',
     '/Support/MailingList': '/support/mailing-lists/',
-    '/Support/PluginWishlist': 'https://github.com/geany/geany-plugins/issues?q=is%%3Aissue+label%%3Afeature+',
+    '/Support/PluginWishlist':
+        'https://github.com/geany/geany-plugins/issues?q=is%%3Aissue+label%%3Afeature+',
     '/Support/Plugins': '/support/plugins/',
     '/Support/RunningOnWindows': 'https://wiki.geany.org/howtos/win32/running',
     '/Support/VerifyGPGSignature': '/support/verify-gpg-signature/',
@@ -78,7 +79,8 @@
     '/Main/20060519': '/news/geany-has-got-an-additional-developer/',
     '/Main/20060604': '/news/geany-07-released/',
     '/Main/20060608': '/news/windows-build-of-geany-07/',
-    '/Main/20060623': '/news/new-website-launched-with-some-new-content-and-new-layout-driven-by-a-wiki/',
+    '/Main/20060623':
+        '/news/new-website-launched-with-some-new-content-and-new-layout-driven-by-a-wiki/',
     '/Main/20060625': '/news/geany-071-released/',
     '/Main/20060809': '/news/geany-08-released/',
     '/Main/20060929': '/news/geany-09-released/',
@@ -150,7 +152,7 @@
 }
 
 
-urlpatterns = []
+urlpatterns = []  # pylint: disable=invalid-name
 for old_url, new_url in URL_MAPPING.items():
     if old_url.startswith('/'):
         old_url = old_url[1:]


Modified: latest_version/models.py
12 lines changed, 4 insertions(+), 8 deletions(-)
===================================================================
@@ -29,19 +29,15 @@ class Meta:
         verbose_name_plural = 'Latest Version'
 
     # ----------------------------------------------------------------------
-    def save(self):
+    def save(self, *args, **kwargs):  # pylint: disable=arguments-differ
         """Save but replace the existing row instead of adding a new one"""
-        self.id = 1
-        models.Model.save(self)
+        self.id = 1  # pylint: disable=invalid-name,attribute-defined-outside-init
+        super(LatestVersion, self).save(*args, **kwargs)
 
     # ----------------------------------------------------------------------
-    def delete(self):
+    def delete(self, using=None, keep_parents=False):
         """Never delete anything"""
 
-    # ----------------------------------------------------------------------
-    def __unicode__(self):
-        return str(self)
-
     # ----------------------------------------------------------------------
     def __str__(self):
         return 'Geany {}'.format(self.version)


Modified: latest_version/urls.py
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -18,7 +18,7 @@
 from geany.sitemaps import sitemap_registry, StaticSitemap
 
 
-urlpatterns = (
+urlpatterns = (  # pylint: disable=invalid-name
     # compat / special url for the UpdateChecker Geany plugin
     url(
         r'^service/version.php',


Modified: news/models.py
4 lines changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -85,7 +85,7 @@ class Meta:
         verbose_name_plural = _('News')
 
     # ----------------------------------------------------------------------
-    def save(self, *args, **kwargs):
+    def save(self, *args, **kwargs):  # pylint: disable=arguments-differ
         if not self.slug:
             self.slug = slugify(self.title)
         super(NewsPost, self).save(*args, **kwargs)
@@ -95,5 +95,5 @@ def get_absolute_url(self):
         return reverse('news_detail', kwargs={'newspost_slug': self.slug})
 
     # ----------------------------------------------------------------------
-    def __unicode__(self):
+    def __str__(self):
         return self.title


Modified: news/urls.py
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -20,7 +20,7 @@
 from news.views import NewsDetailView, NewsListView
 
 
-urlpatterns = (
+urlpatterns = (  # pylint: disable=invalid-name
     url(r'^$', NewsListView.as_view(), name='news_list'),
     url(r'^feed/$', LatestNewsPostsFeed(), name='news_feed'),
     url(r'^(?P<newspost_slug>.+)/$', NewsDetailView.as_view(), name='news_detail'),


Modified: news/views.py
16 lines changed, 5 insertions(+), 11 deletions(-)
===================================================================
@@ -17,13 +17,13 @@
 from django.template.defaultfilters import date, safe
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
-from django.views.generic import DetailView, ListView, View
+from django.views.generic import ListView, View
 from mezzanine.core.templatetags.mezzanine_tags import richtext_filters
 
 from news.models import NewsPost
 
 
-class NewsPostPublishedMixin(object):
+class NewsPostPublishedMixin:
 
     # ----------------------------------------------------------------------
     def get_queryset(self):
@@ -40,27 +40,21 @@ class NewsListView(NewsPostPublishedMixin, ListView):
     template_name = 'news/list.html'
 
 
-class NewsDetailView2(NewsPostPublishedMixin, DetailView):
-
-    model = NewsPost
-    template_name = 'news/detail.html'
-
-
 class NewsDetailView(NewsPostPublishedMixin, View):
     template_name = 'news/detail.html'
 
     # ----------------------------------------------------------------------
     @method_decorator(csrf_exempt)
-    def dispatch(self, *args, **kwargs):
-        return super(NewsDetailView, self).dispatch(*args, **kwargs)
+    def dispatch(self, request, *args, **kwargs):
+        return super(NewsDetailView, self).dispatch(request, *args, **kwargs)
 
     # ----------------------------------------------------------------------
     def get(self, request, newspost_slug):
         newspost = get_object_or_404(NewsPost, slug=newspost_slug)
         return render(request, self.template_name, {'newspost': newspost})
 
     # ----------------------------------------------------------------------
-    def post(self, request, *args, **kwargs):
+    def post(self, request, *args, **kwargs):  # pylint: disable=unused-argument
         newspost_slug = request.POST.get('newspost_slug')
         try:
             newspost = NewsPost.objects.get(slug=newspost_slug)


Modified: nightlybuilds/database_routers.py
10 lines changed, 6 insertions(+), 4 deletions(-)
===================================================================
@@ -12,8 +12,10 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+# pylint: disable=protected-access,unused-argument
 
-class NightlyBuildsRouter(object):
+
+class NightlyBuildsRouter:
     """
     A router to control all database operations on models in the
     nightlybuilds application.
@@ -47,6 +49,6 @@ def allow_relation(self, obj1, obj2, **hints):
         return None
 
     # ----------------------------------------------------------------------
-    def allow_migrate(self, db, app_label, model_name=None, **hints):
-        return (db != 'nightlybuilds' and app_label != 'nightlybuilds') \
-            or (db == 'nightlybuilds' and app_label == 'nightlybuilds')
+    def allow_migrate(self, database, app_label, model_name=None, **hints):
+        return (database != 'nightlybuilds' and app_label != 'nightlybuilds') \
+            or (database == 'nightlybuilds' and app_label == 'nightlybuilds')


Modified: nightlybuilds/models.py
8 lines changed, 4 insertions(+), 4 deletions(-)
===================================================================
@@ -35,8 +35,8 @@ class Meta:
         db_table = 'nightly_build_target'
 
     # ----------------------------------------------------------------------
-    def __unicode__(self):
-        return '%s %s' % (self.name, self.arch)
+    def __str__(self):
+        return '{} {}'.format(self.name, self.arch)
 
 
 class NightlyBuild(models.Model):
@@ -70,5 +70,5 @@ def get_status_text(self):
         return 'Build failed, see the logs for details'
 
     # ----------------------------------------------------------------------
-    def __unicode__(self):
-        return '%s %s' % (self.build_date, self.nightly_build_target)
+    def __str__(self):
+        return '{} {}'.format(self.build_date, self.nightly_build_target)


Modified: nightlybuilds/templatetags/nightlybuilds_tags.py
6 lines changed, 3 insertions(+), 3 deletions(-)
===================================================================
@@ -20,7 +20,7 @@
 
 
 register = template.Library()
-base_dir = settings.NIGHTLYBUILDS_BASE_DIR
+BASE_DIR = settings.NIGHTLYBUILDS_BASE_DIR
 
 
 # ----------------------------------------------------------------------
@@ -32,7 +32,7 @@ def get_build_log(nightly_build, log_type):
         log = nightly_build.log_stderr
 
     if log:
-        logfile_path = os.path.join(base_dir, nightly_build.nightly_build_target.folder, log)
+        logfile_path = os.path.join(BASE_DIR, nightly_build.nightly_build_target.folder, log)
         try:
             size = os.stat(logfile_path).st_size
         except (IOError, OSError):
@@ -50,7 +50,7 @@ def get_build_log(nightly_build, log_type):
 # ----------------------------------------------------------------------
 @register.simple_tag
 def get_details(nightly_build):
-    header_txt = os.path.join(base_dir, nightly_build.nightly_build_target.folder, 'HEADER.txt')
+    header_txt = os.path.join(BASE_DIR, nightly_build.nightly_build_target.folder, 'HEADER.txt')
     if os.path.exists(header_txt):
         return format_html(
             '<a href="/{}/">Details</a>',


Modified: pastebin/api/create.py
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -72,7 +72,7 @@ class SnippetValidationError(Exception):
     pass
 
 
-class CreateSnippetApiController(object):
+class CreateSnippetApiController:
 
     valid_fields = ('title', 'content', 'expires', 'author', 'lexer')
 


Modified: pastebin/forms.py
4 lines changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -68,7 +68,7 @@ def clean_content(self):
         return content
 
     # ----------------------------------------------------------------------
-    def save(self, *args, **kwargs):
+    def save(self, *args, **kwargs):  # pylint: disable=arguments-differ
         # Set parent snippet
         parent = kwargs.pop('parent', None)
         if parent:
@@ -79,7 +79,7 @@ def save(self, *args, **kwargs):
             timedelta(seconds=int(self.cleaned_data['expire_options']))
 
         # Save snippet in the db
-        forms.ModelForm.save(self, *args, **kwargs)
+        super(SnippetForm, self).save(self, *args, **kwargs)
 
         # Add snippet to the user's session
         if not self.request.session.get('snippet_list', False):


Modified: pastebin/highlight.py
9 lines changed, 5 insertions(+), 4 deletions(-)
===================================================================
@@ -14,8 +14,9 @@
 
 from django.utils.html import escape
 from pygments import highlight
-from pygments.formatters import HtmlFormatter
-from pygments.lexers import get_all_lexers, get_lexer_by_name, PythonLexer
+from pygments.formatters.html import HtmlFormatter
+from pygments.lexers import get_all_lexers, get_lexer_by_name
+from pygments.lexers.python import PythonLexer
 
 
 LEXER_LIST_ALL = sorted([(i[1][0], i[0]) for i in get_all_lexers()])
@@ -56,8 +57,8 @@ def wrap(self, source, outfile):
 
     # ----------------------------------------------------------------------
     def _wrap_code(self, source):
-        for j, t in source:
-            yield j, t
+        for code, text in source:
+            yield code, text
 
 
 # ----------------------------------------------------------------------


Modified: pastebin/management/commands/generate_snippets_css.py
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -13,7 +13,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from django.core.management.base import BaseCommand
-from pygments.formatters import HtmlFormatter
+from pygments.formatters.html import HtmlFormatter
 
 
 class Command(BaseCommand):


Modified: pastebin/models.py
16 lines changed, 8 insertions(+), 8 deletions(-)
===================================================================
@@ -25,12 +25,12 @@
 from pastebin.highlight import LEXER_DEFAULT
 
 
-t = 'abcdefghijkmnopqrstuvwwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ1234567890'
+CHARS = 'abcdefghijkmnopqrstuvwwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ1234567890'
 
 
 # ----------------------------------------------------------------------
 def generate_secret_id(length=5):
-    return ''.join([random.choice(t) for i in range(length)])  # pylint: disable=unused-variable
+    return ''.join([random.choice(CHARS) for i in range(length)])  # pylint: disable=unused-variable
 
 
 class Snippet(models.Model):
@@ -97,22 +97,22 @@ def content_splitted(self):
         return self.content_highlighted.splitlines()
 
     # ----------------------------------------------------------------------
-    def save(self, *args, **kwargs):
+    def save(self, *args, **kwargs):  # pylint: disable=arguments-differ
         if not self.pk and not self.secret_id:
             self.secret_id = generate_secret_id()
         if not self.published:
             self.published = timezone.now()
 
         self.content_highlighted = self.content
-        models.Model.save(self, *args, **kwargs)
+        super(Snippet, self).save(*args, **kwargs)
 
     # ----------------------------------------------------------------------
     def get_absolute_url(self):
         return reverse('snippet_details', kwargs={'snippet_id': self.secret_id})
 
     # ----------------------------------------------------------------------
-    def __unicode__(self):
-        return '%s' % self.secret_id
+    def __str__(self):
+        return '{}'.format(self.secret_id)
 
 
 class SpamwordManager(models.Manager):
@@ -129,5 +129,5 @@ class Spamword(models.Model):
     objects = SpamwordManager()
 
     # ----------------------------------------------------------------------
-    def __unicode__(self):
-        return self.word
+    def __str__(self):
+        return '{}'.format(self.word)


Modified: pastebin/templatetags/pastebin_tags.py
8 lines changed, 4 insertions(+), 4 deletions(-)
===================================================================
@@ -22,7 +22,7 @@
 NINETY_YEARS_IN_DAYS = 32850  # 90 * 365
 
 
-register = Library()  # pylint: disable=invalid-name
+register = Library()
 
 
 # ----------------------------------------------------------------------
@@ -46,9 +46,9 @@ def timeuntil_or_forever(snippet_expire):
 # ----------------------------------------------------------------------
 @register.filter
 def highlight(snippet, line_count=None):
-    h = pygmentize(snippet.content, snippet.lexer)
-    if h:
-        lines = h.splitlines()
+    highlighted = pygmentize(snippet.content, snippet.lexer)
+    if highlighted:
+        lines = highlighted.splitlines()
     else:
         lines = snippet.content.splitlines()
 


Modified: pastebin/urls.py
25 lines changed, 20 insertions(+), 5 deletions(-)
===================================================================
@@ -28,16 +28,31 @@
 
 
 urlpatterns = (  # pylint: disable=invalid-name
-    url(r'^help/$', TemplateView.as_view(template_name='pastebin/help.html'), name='snippet_help'),
-    url(r'^help/api/$', TemplateView.as_view(template_name='pastebin/api.html'), name='snippet_help_api'),
+    url(
+        r'^help/$',
+        TemplateView.as_view(template_name='pastebin/help.html'),
+        name='snippet_help'),
+    url(
+        r'^help/api/$',
+        TemplateView.as_view(template_name='pastebin/api.html'),
+        name='snippet_help_api'),
 
     url(r'^api/$', never_cache(SnippetAPIView.as_view()), name='snippet_api'),
 
     url(r'^$', never_cache(SnippetNewView.as_view()), name='snippet_new'),
     url(r'^latest/$', LatestSnippetsView.as_view(), name='snippet_list'),
-    url(r'^(?P<snippet_id>[a-zA-Z0-9]+)/$', SnippetDetailView.as_view(), name='snippet_details'),
-    url(r'^(?P<snippet_id>[a-zA-Z0-9]+)/delete/$', SnippetDeleteView.as_view(), name='snippet_delete'),
-    url(r'^(?P<snippet_id>[a-zA-Z0-9]+)/raw/$', SnippetDetailRawView.as_view(), name='snippet_details_raw'),
+    url(
+        r'^(?P<snippet_id>[a-zA-Z0-9]+)/$',
+        SnippetDetailView.as_view(),
+        name='snippet_details'),
+    url(
+        r'^(?P<snippet_id>[a-zA-Z0-9]+)/delete/$',
+        SnippetDeleteView.as_view(),
+        name='snippet_delete'),
+    url(
+        r'^(?P<snippet_id>[a-zA-Z0-9]+)/raw/$',
+        SnippetDetailRawView.as_view(),
+        name='snippet_details_raw'),
 )
 
 


Modified: pastebin/views.py
20 lines changed, 10 insertions(+), 10 deletions(-)
===================================================================
@@ -52,8 +52,8 @@ class SnippetNewView(View):
 
     # ----------------------------------------------------------------------
     @method_decorator(check_honeypot)
-    def dispatch(self, *args, **kwargs):
-        return super(SnippetNewView, self).dispatch(*args, **kwargs)
+    def dispatch(self, request, *args, **kwargs):
+        return super(SnippetNewView, self).dispatch(request, *args, **kwargs)
 
     # ----------------------------------------------------------------------
     def get(self, request):
@@ -85,8 +85,8 @@ class SnippetDetailView(View):
 
     # ----------------------------------------------------------------------
     @method_decorator(check_honeypot)
-    def dispatch(self, *args, **kwargs):
-        return super(SnippetDetailView, self).dispatch(*args, **kwargs)
+    def dispatch(self, request, *args, **kwargs):
+        return super(SnippetDetailView, self).dispatch(request, *args, **kwargs)
 
     # ----------------------------------------------------------------------
     def get(self, request, snippet_id):
@@ -95,9 +95,9 @@ def get(self, request, snippet_id):
         # load snippet
         try:
             snippet = self._fetch_snippet(snippet_id)
-        except SnippetNotFoundError as e:
+        except SnippetNotFoundError as exc:
             # 404 response with custom message
-            context = dict(message=e)
+            context = dict(message=exc)
             return TemplateResponse(request, 'errors/404.html', context=context, status=404)
 
         new_snippet_initial = dict(content=snippet.content, lexer=snippet.lexer)
@@ -187,16 +187,16 @@ class SnippetAPIView(View):
 
     # ----------------------------------------------------------------------
     @method_decorator(csrf_exempt)
-    def dispatch(self, *args, **kwargs):
-        return super(SnippetAPIView, self).dispatch(*args, **kwargs)
+    def dispatch(self, request, *args, **kwargs):
+        return super(SnippetAPIView, self).dispatch(request, *args, **kwargs)
 
     # ----------------------------------------------------------------------
     def post(self, request):
         try:
             controller = CreateSnippetApiController(request)
             snippet = controller.create()
-        except SnippetValidationError as e:
-            return HttpResponseBadRequest(str(e), content_type='text/plain')
+        except SnippetValidationError as exc:
+            return HttpResponseBadRequest(str(exc), content_type='text/plain')
 
         site = self._get_site(request)
         absolute_url = snippet.get_absolute_url()


Modified: static_docs/generate_i18n_statistics.py
14 lines changed, 7 insertions(+), 7 deletions(-)
===================================================================
@@ -27,7 +27,7 @@
 LAST_TRANSLATOR_REGEXP = re.compile(r'^"Last-Translator: (?P<name>[\w -]+)\s*<?.+')
 
 
-class TranslationStatistics(object):
+class TranslationStatistics:
 
     # ----------------------------------------------------------------------
     def __init__(
@@ -46,7 +46,7 @@ def __init__(
         self.percentage_untranslated = percentage_untranslated
 
 
-class MessageCatalog(object):
+class MessageCatalog:
 
     # ----------------------------------------------------------------------
     def __init__(self, filename, language_name, language_code, last_translator, statistics=None):
@@ -60,11 +60,11 @@ def __init__(self, filename, language_name, language_code, last_translator, stat
 class SimpleObjectToJSONEncoder(JSONEncoder):
 
     # ----------------------------------------------------------------------
-    def default(self, o):
+    def default(self, o):  # pylint: disable=method-hidden
         return o.__dict__
 
 
-class TranslationStatisticsGenerator(object):
+class TranslationStatisticsGenerator:
 
     # ----------------------------------------------------------------------
     def __init__(self, domain, source_path, destination_path, target_filename):
@@ -116,12 +116,12 @@ def _execute_command(self, command):
                 env=environment,
                 cwd=self._destination_path,
                 stderr=STDOUT)
-        except CalledProcessError as e:
+        except CalledProcessError as exc:
             raise ValueError(
                 'Command: "{}" exited with code {}: {}'.format(
                     command,
-                    e.returncode,
-                    e.output))
+                    exc.returncode,
+                    exc.output))
 
     # ----------------------------------------------------------------------
     def _fetch_pot_stats(self):


Modified: static_docs/github_client.py
4 lines changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -24,10 +24,10 @@
 GITHUB_REPOSITORY = 'geany'
 HTTP_REQUEST_TIMEOUT = 10
 
-logger = logging.getLogger(__name__)
+logger = logging.getLogger(__name__)  # pylint: disable=invalid-name
 
 
-class GitHubApiClient(object):
+class GitHubApiClient:
     """"""
 
     # ----------------------------------------------------------------------


Modified: static_docs/urls.py
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -17,7 +17,7 @@
 from static_docs.views import I18NStatisticsView, ReleaseNotesView, ToDoView
 
 
-urlpatterns = (
+urlpatterns = (  # pylint: disable=invalid-name
     url(r'^documentation/todo/$', ToDoView.as_view(), name='todo'),
 
     url(r'^documentation/releasenotes/$', ReleaseNotesView.as_view(), name='releasenotes'),


Modified: static_docs/views.py
11 lines changed, 6 insertions(+), 5 deletions(-)
===================================================================
@@ -29,10 +29,10 @@
 RELEASE_REGEXP = re.compile(r'^Geany (?P<version>[0-9\.]+) \((?P<date>.*)\)$')
 DATE_PATTERNS_TO_BE_IGNORED = ('TBD', 'TBA', 'unreleased')
 
-logger = logging.getLogger(__name__)
+logger = logging.getLogger(__name__)  # pylint: disable=invalid-name
 
 
-class ReleaseDto(object):
+class ReleaseDto:
     """Simple data holder"""
 
     # ----------------------------------------------------------------------
@@ -68,10 +68,11 @@ class ReleaseNotesView(StaticDocsView):
     template_name = 'pages/documentation/releasenotes.html'
 
     # ----------------------------------------------------------------------
-    def get_context_data(self, version=None, **kwargs):
+    def get_context_data(self, **kwargs):
         releases = self._get_release_notes()
         release = None
 
+        version = kwargs.get('version', None)
         if version is not None:
             # search for the requested release in the list (we could index the list into a
             # dictionary but we need the index only at this point)
@@ -129,8 +130,8 @@ def _parse_release_line(self, line):
         match = RELEASE_REGEXP.match(line)
         if match:
             return match.group('version'), match.group('date')
-        else:
-            logger.warn('Failed parsing NEWS file: release line "%s" invalid', line)
+
+        logger.warning('Failed parsing NEWS file: release line "%s" invalid', line)
         return None, None
 
 



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list