Browse Source

Thanks Flake8. It's not over, though...

I should really learn to follow PEP8
Gu1 11 years ago
parent
commit
eda88591f1
5 changed files with 130 additions and 123 deletions
  1. 17 17
      ffdnispdb/models.py
  2. 11 11
      ffdnispdb/sessions.py
  3. 1 0
      ffdnispdb/static/css/style.css
  4. 92 87
      ffdnispdb/views.py
  5. 9 8
      ffdnispdb/views_api.py

+ 17 - 17
ffdnispdb/models.py

@@ -84,7 +84,7 @@ class ISP(db.Model):
 
     def __init__(self, *args, **kwargs):
         super(ISP, self).__init__(*args, **kwargs)
-        self.json={}
+        self.json = {}
 
     def pre_save(self, *args):
         if 'name' in self.json:
@@ -106,17 +106,17 @@ class ISP(db.Model):
         RegisteredOffice.query.filter_by(isp_id=self.id).delete()
 
         for ca_js in self.json.get('coveredAreas', []):
-            ca=CoveredArea()
-            ca.name=ca_js['name']
-            area=ca_js.get('area')
-            ca.area=db.func.CastToMultiPolygon(
+            ca = CoveredArea()
+            ca.name = ca_js['name']
+            area = ca_js.get('area')
+            ca.area = db.func.CastToMultiPolygon(
                 db.func.GeomFromGeoJSON(dict_to_geojson(area))
             ) if area else None
             self.covered_areas.append(ca)
 
-        coords=self.json.get('coordinates')
+        coords = self.json.get('coordinates')
         if coords:
-            self.registered_office=RegisteredOffice(
+            self.registered_office = RegisteredOffice(
                 point=db.func.MakePoint(coords['longitude'], coords['latitude'], 4326)
             )
 
@@ -137,15 +137,15 @@ class ISP(db.Model):
 
     @staticmethod
     def str2date(_str):
-        d=None
+        d = None
         try:
-            d=datetime.strptime(_str, '%Y-%m-%d')
+            d = datetime.strptime(_str, '%Y-%m-%d')
         except ValueError:
             pass
 
         if d is None:
             try:
-                d=datetime.strptime(_str, '%Y-%m')
+                d = datetime.strptime(_str, '%Y-%m')
             except ValueError:
                 pass
         return d
@@ -220,7 +220,7 @@ class ISPWhoosh(object):
 
     @classmethod
     def get_index(cls):
-        idxdir=cls.get_index_dir()
+        idxdir = cls.get_index_dir()
         if index.exists_in(idxdir):
             idx = index.open_dir(idxdir)
         else:
@@ -239,21 +239,21 @@ class ISPWhoosh(object):
     @classmethod
     def search(cls, terms):
         with ISPWhoosh.get_index().searcher() as s:
-            sres=cls._search(s, terms)
-            ranks={}
+            sres = cls._search(s, terms)
+            ranks = {}
             for rank, r in enumerate(sres):
-                ranks[r['id']]=rank
+                ranks[r['id']] = rank
 
             if not len(ranks):
                 return []
 
-            _res=ISP.query.filter(ISP.id.in_(ranks.keys()))
+            _res = ISP.query.filter(ISP.id.in_(ranks.keys()))
 
         return sorted(_res, key=lambda r: ranks[r.id])
 
     @classmethod
     def update_document(cls, writer, model):
-        kw={
+        kw = {
             'id': unicode(model.id),
             '_stored_id': model.id,
             'is_ffdn_member': model.is_ffdn_member,
@@ -277,7 +277,7 @@ class ISPWhoosh(object):
         if not len(changes):
             return
 
-        idx=cls.get_index()
+        idx = cls.get_index()
         with idx.writer() as writer:
             for update, model in isp_changes:
                 if update:

+ 11 - 11
ffdnispdb/sessions.py

@@ -11,19 +11,19 @@ import string
 from datetime import datetime, timedelta
 import cPickle
 
-random=SystemRandom()
+random = SystemRandom()
 
 
 class SQLSession(CallbackDict, SessionMixin):
 
     def __init__(self, sid, db, table, new=False, initial=None):
-        self.sid=sid
-        self.db=db
-        self.table=table
-        self.modified=False
-        self.new=new
+        self.sid = sid
+        self.db = db
+        self.table = table
+        self.modified = False
+        self.new = new
         def _on_update(self):
-            self.modified=True
+            self.modified = True
         super(SQLSession, self).__init__(initial, _on_update)
 
     def save(self):
@@ -33,7 +33,7 @@ class SQLSession(CallbackDict, SessionMixin):
                 'expire': datetime.utcnow()+timedelta(hours=1),
                 'value': cPickle.dumps(dict(self), -1)
             }))
-            self.new=False
+            self.new = False
         else:
             self.db.execute(self.table.update(
                 self.table.c.session_id == self.sid,
@@ -57,14 +57,14 @@ class MySessionInterface(SessionInterface):
     def open_session(self, app, request):
         sid = request.cookies.get(app.session_cookie_name)
         if sid:
-            res=self.db.engine.execute(select([self.table.c.value], (self.table.c.session_id == sid) &
+            res = self.db.engine.execute(select([self.table.c.value], (self.table.c.session_id == sid) &
                                                                  (self.table.c.expire > datetime.utcnow()))).first()
             if res:
                 return SQLSession(sid, self.db.engine, self.table, False, cPickle.loads(res[0]))
 
         while True:
-            sid=''.join(random.choice(string.ascii_letters+string.digits) for i in range(32))
-            res=self.db.engine.execute(select([self.table.c.value], self.table.c.session_id == sid)).first()
+            sid = ''.join(random.choice(string.ascii_letters+string.digits) for i in range(32))
+            res = self.db.engine.execute(select([self.table.c.value], self.table.c.session_id == sid)).first()
             if not res:
                 break
 

+ 1 - 0
ffdnispdb/static/css/style.css

@@ -258,6 +258,7 @@ footer .bracket:before {
     margin: 11px 0 0 22px;
     color: #cccccc;
     transition-duration: 300ms;
+    cursor: default;
 }
 
 footer:hover .bracket:before {

+ 92 - 87
ffdnispdb/views.py

@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-from flask import request, g, redirect, url_for, abort, \
+from flask import request, redirect, url_for, abort, \
     render_template, flash, json, session, Response, Markup, \
     stream_with_context, current_app, Blueprint
 from flask.ext.babel import gettext as _, get_locale
@@ -9,7 +9,7 @@ import itsdangerous
 import docutils.core
 import ispformat.specs
 
-from datetime import date, time, timedelta, datetime
+from datetime import datetime
 from urlparse import urlunsplit
 import locale
 locale.setlocale(locale.LC_ALL, '')
@@ -17,7 +17,7 @@ from time import time
 import os.path
 
 from . import forms
-from .constants import *
+from .constants import STEPS, STEPS_LABELS, LOCALES_FLAGS
 from . import db, cache, mail
 from .models import ISP, ISPWhoosh, CoveredArea, RegisteredOffice
 from .crawler import WebValidator, PrettyValidator
@@ -42,24 +42,24 @@ def page_not_found(e):
 
 
 @ispdb.app_errorhandler(500)
-def page_not_found(e):
+def internal_error(e):
     return render_template('500.html'), 500
 
 
 # this needs to be cached
 @ispdb.route('/isp/map_data.json', methods=['GET'])
 def isp_map_data():
-    isps=ISP.query.filter_by(is_disabled=False)
-    data=[]
+    isps = ISP.query.filter_by(is_disabled=False)
+    data = []
     for isp in isps:
-        d=dict(isp.json)
+        d = dict(isp.json)
         for k in d.keys():
             if k not in ('name', 'shortname', 'coordinates'):
                 del d[k]
 
-        d['id']=isp.id
-        d['ffdn_member']=isp.is_ffdn_member
-        d['popup']=render_template('map_popup.html', isp=isp)
+        d['id'] = isp.id
+        d['ffdn_member'] = isp.is_ffdn_member
+        d['popup'] = render_template('map_popup.html', isp=isp)
         data.append(d)
 
     return Response(json.dumps(data), mimetype='application/json')
@@ -67,17 +67,17 @@ def isp_map_data():
 
 @ispdb.route('/isp/find_near.json', methods=['GET'])
 def isp_find_near():
-    lat=request.args.get('lat')
-    lon=request.args.get('lon')
+    lat = request.args.get('lat')
+    lon = request.args.get('lon')
     try:
-        lat=float(lat)
-        lon=float(lon)
+        lat = float(lat)
+        lon = float(lon)
     except (ValueError, TypeError):
         abort(400)
 
-    q=CoveredArea.containing((lat,lon))\
-                 .options(db.joinedload('isp'))
-    res=[[{
+    q = CoveredArea.containing((lat, lon))\
+                   .options(db.joinedload('isp'))
+    res = [[{
         'isp_id': ca.isp_id,
         'area': {
             'id': ca.id,
@@ -85,11 +85,11 @@ def isp_find_near():
         }
     } for ca in q]]
 
-    d=RegisteredOffice.point.distance(db.func.MakePoint(lon, lat), 1).label('distance')
-    q=db.session.query(RegisteredOffice, d)\
-                .options(db.joinedload('isp'))\
-                .order_by('distance ASC')\
-                .limit(2)
+    dst = RegisteredOffice.point.distance(db.func.MakePoint(lon, lat), 1).label('distance')
+    q = db.session.query(RegisteredOffice, dst)\
+                  .options(db.joinedload('isp'))\
+                  .order_by('distance ASC')\
+                  .limit(2)
 
     res.append([{
         'distance': d,
@@ -101,14 +101,14 @@ def isp_find_near():
 
 @ispdb.route('/isp/<projectid>/covered_areas.json', methods=['GET'])
 def isp_covered_areas(projectid):
-    p=ISP.query.filter_by(id=projectid, is_disabled=False)\
-               .options(db.joinedload('covered_areas'),
-                        db.defer('covered_areas.area'),
-                        db.undefer('covered_areas.area_geojson'))\
-               .scalar()
+    p = ISP.query.filter_by(id=projectid, is_disabled=False)\
+                 .options(db.joinedload('covered_areas'),
+                          db.defer('covered_areas.area'),
+                          db.undefer('covered_areas.area_geojson'))\
+                 .scalar()
     if not p:
         abort(404)
-    cas=[]
+    cas = []
     for ca in p.covered_areas:
         cas.append({
             'id': ca.id,
@@ -120,7 +120,7 @@ def isp_covered_areas(projectid):
 
 @ispdb.route('/isp/<projectid>/')
 def project(projectid):
-    p=ISP.query.filter_by(id=projectid, is_disabled=False).first()
+    p = ISP.query.filter_by(id=projectid, is_disabled=False).first()
     if not p:
         abort(404)
     return render_template('project_detail.html', project_row=p, project=p.json)
@@ -128,9 +128,9 @@ def project(projectid):
 
 @ispdb.route('/isp/<projectid>/edit', methods=['GET', 'POST'])
 def edit_project(projectid):
-    MAX_TOKEN_AGE=3600
-    isp=ISP.query.filter_by(id=projectid, is_disabled=False).first_or_404()
-    sess_token=session.get('edit_tokens', {}).get(isp.id)
+    MAX_TOKEN_AGE = 3600
+    isp = ISP.query.filter_by(id=projectid, is_disabled=False).first_or_404()
+    sess_token = session.get('edit_tokens', {}).get(isp.id)
 
     if 'token' in request.args:
         s = itsdangerous.URLSafeTimedSerializer(current_app.secret_key, salt='edit')
@@ -144,7 +144,7 @@ def edit_project(projectid):
             abort(403)
 
         tokens = session.setdefault('edit_tokens', {})
-        session.modified = True # ITS A TARP
+        session.modified = True  # ITS A TARP
         tokens[r[0]] = r[1]
         # refresh page, without the token in the url
         return redirect(url_for('.edit_project', projectid=r[0]))
@@ -169,8 +169,8 @@ def edit_project(projectid):
         if form.validate_on_submit():
             isp.tech_email = form.tech_email.data
             u = list(form.json_url.data)
-            u[2]='/isp.json' # new path
-            url=urlunsplit(u)
+            u[2] = '/isp.json'  # new path
+            url = urlunsplit(u)
             isp.json_url = url
 
             db.session.add(isp)
@@ -182,14 +182,14 @@ def edit_project(projectid):
 
 @ispdb.route('/isp/<projectid>/gen_edit_token', methods=['GET', 'POST'])
 def gen_edit_token(projectid):
-    isp=ISP.query.filter_by(id=projectid, is_disabled=False).first_or_404()
+    isp = ISP.query.filter_by(id=projectid, is_disabled=False).first_or_404()
     form = forms.RequestEditToken()
-    if form.validate_on_submit(): # validated
+    if form.validate_on_submit():  # validated
         if form.tech_email.data == isp.tech_email:
-            s = itsdangerous.URLSafeTimedSerializer(app.secret_key, salt='edit')
+            s = itsdangerous.URLSafeTimedSerializer(current_app.secret_key, salt='edit')
             token = s.dumps(isp.id)
             msg = Message("Edit request of your ISP", sender=current_app.config['EMAIL_SENDER'])
-            msg.body="""
+            msg.body = """
 Hello,
 You are receiving this message because your are listed as technical contact for "%s" on the FFDN ISP database.
 
@@ -211,7 +211,7 @@ https://db.ffdn.org
 
         # if the email provided is not the correct one, we still redirect
         flash(_(u'If you provided the correct email adress, '
-                 'you must will receive a message shortly (check your spam folder)'), 'info')
+                'you must will receive a message shortly (check your spam folder)'), 'info')
         return redirect(url_for('.project', projectid=isp.id))
 
     return render_template('gen_edit_token.html', form=form)
@@ -226,11 +226,11 @@ def add_project():
 def create_project_form():
     form = forms.ProjectForm()
     if form.validate_on_submit():
-        isp=ISP()
+        isp = ISP()
         isp.name = form.name.data
         isp.shortname = form.shortname.data or None
         isp.tech_email = form.tech_email.data
-        isp.json=form.to_json(isp.json)
+        isp.json = form.to_json(isp.json)
 
         db.session.add(isp)
         db.session.commit()
@@ -245,15 +245,15 @@ def json_url_validator():
        session['form_json'].get('validated', False):
         abort(403)
 
-    v=session['form_json'].get('validator')
+    v = session['form_json'].get('validator')
 
     if v is not None:
         if v > time()-5:
             abort(429)
     else:
-        session['form_json']['validator']=time()
+        session['form_json']['validator'] = time()
 
-    validator=WebValidator(session._get_current_object(), 'form_json')
+    validator = WebValidator(session._get_current_object(), 'form_json')
     return Response(stream_with_context(
         validator(session['form_json']['url'])
     ), mimetype="text/event-stream")
@@ -263,9 +263,9 @@ def json_url_validator():
 def create_project_json():
     form = forms.ProjectJSONForm()
     if form.validate_on_submit():
-        u=list(form.json_url.data)
-        u[2]='/isp.json' # new path
-        url=urlunsplit(u)
+        u = list(form.json_url.data)
+        u[2] = '/isp.json'  # new path
+        url = urlunsplit(u)
         session['form_json'] = {'url': url, 'tech_email': form.tech_email.data}
         return render_template('project_json_validator.html')
     return render_template('add_project_json_form.html', form=form)
@@ -276,18 +276,18 @@ def create_project_json_confirm():
     if 'form_json' in session and session['form_json'].get('validated', False):
         if not forms.is_url_unique(session['form_json']['url']):
             abort(409)
-        jdict=session['form_json']['jdict']
-        isp=ISP()
-        isp.name=jdict['name']
+        jdict = session['form_json']['jdict']
+        isp = ISP()
+        isp.name = jdict['name']
         if 'shortname' in jdict:
-            isp.shortname=jdict['shortname']
-        isp.json_url=session['form_json']['url']
-        isp.json=jdict
-        isp.tech_email=session['form_json']['tech_email']
-        isp.last_update_attempt=session['form_json']['last_update']
-        isp.last_update_success=session['form_json']['last_update']
-        isp.next_update=session['form_json']['next_update']
-        isp.cache_info=session['form_json']['cache_info']
+            isp.shortname = jdict['shortname']
+        isp.json_url = session['form_json']['url']
+        isp.json = jdict
+        isp.tech_email = session['form_json']['tech_email']
+        isp.last_update_attempt = session['form_json']['last_update']
+        isp.last_update_success = session['form_json']['last_update']
+        isp.next_update = session['form_json']['next_update']
+        isp.cache_info = session['form_json']['cache_info']
         del session['form_json']
 
         db.session.add(isp)
@@ -304,19 +304,19 @@ def reactivate_validator():
        session['form_reactivate'].get('validated', False):
         abort(403)
 
-    p=ISP.query.get(session['form_reactivate']['isp_id'])
+    p = ISP.query.get(session['form_reactivate']['isp_id'])
     if not p:
         abort(403)
 
-    v=session['form_reactivate'].get('validator')
+    v = session['form_reactivate'].get('validator')
 
     if v is not None:
         if v > time()-5:
             abort(429)
     else:
-        session['form_reactivate']['validator']=time()
+        session['form_reactivate']['validator'] = time()
 
-    validator=PrettyValidator(session._get_current_object(), 'form_reactivate')
+    validator = PrettyValidator(session._get_current_object(), 'form_reactivate')
     return Response(stream_with_context(
         validator(p.json_url, p.cache_info or {})
     ), mimetype="text/event-stream")
@@ -328,19 +328,18 @@ def reactivate_isp(projectid):
     Allow to reactivate an ISP after it has been disabled
     because of problems with the JSON file.
     """
-    p=ISP.query.filter(ISP.id==projectid, ISP.is_disabled==False,
-                       ISP.update_error_strike>=3).first_or_404()
+    p = ISP.query.filter(ISP.id == projectid, ISP.is_disabled == False,
+                         ISP.update_error_strike >= 3).first_or_404()
     if request.method == 'GET':
         key = request.args.get('key')
         try:
-            s=itsdangerous.URLSafeSerializer(current_app.secret_key,
-                                             salt='reactivate')
-            d=s.loads(key)
-        except Exception as e:
+            s = itsdangerous.URLSafeSerializer(current_app.secret_key,
+                                               salt='reactivate')
+            d = s.loads(key)
+        except Exception:
             abort(403)
 
-        if (len(d) != 2 or d[0] != p.id or
-            d[1] != str(p.last_update_attempt)):
+        if (len(d) != 2 or d[0] != p.id or d[1] != str(p.last_update_attempt)):
             abort(403)
 
         session['form_reactivate'] = {'isp_id': p.id}
@@ -350,11 +349,11 @@ def reactivate_isp(projectid):
            not session['form_reactivate'].get('validated', False):
             abort(409)
 
-        p=ISP.query.get(session['form_reactivate']['isp_id'])
-        p.json=session['form_reactivate']['jdict']
-        p.cache_info=session['form_reactivate']['cache_info']
-        p.last_update_attempt=session['form_form_reactivate']['last_update']
-        p.last_update_success=p.last_update_attempt
+        p = ISP.query.get(session['form_reactivate']['isp_id'])
+        p.json = session['form_reactivate']['jdict']
+        p.cache_info = session['form_reactivate']['cache_info']
+        p.last_update_attempt = session['form_form_reactivate']['last_update']
+        p.last_update_success = p.last_update_attempt
 
         db.session.add(p)
         db.session.commit()
@@ -365,11 +364,11 @@ def reactivate_isp(projectid):
 
 @ispdb.route('/search', methods=['GET', 'POST'])
 def search():
-    terms=request.args.get('q')
+    terms = request.args.get('q')
     if not terms:
         return redirect(url_for('.home'))
 
-    res=ISPWhoosh.search(terms)
+    res = ISPWhoosh.search(terms)
     return render_template('search_results.html', results=res, search_terms=terms)
 
 
@@ -377,14 +376,16 @@ def search():
 def format():
     parts = cache.get('format-spec')
     if parts is None:
-        spec=open(ispformat.specs.versions[0.1]).read()
+        spec = open(ispformat.specs.versions[0.1]).read()
         overrides = {
-            'initial_header_level' : 3,
+            'initial_header_level': 3,
         }
-        parts = docutils.core.publish_parts(spec,
-                    source_path=os.path.dirname(ispformat.specs.versions[0.1]),
-                    destination_path=None, writer_name='html',
-                    settings_overrides=overrides)
+        parts = docutils.core.publish_parts(
+            spec,
+            source_path=os.path.dirname(ispformat.specs.versions[0.1]),
+            destination_path=None, writer_name='html',
+            settings_overrides=overrides
+        )
         cache.set('format-spec', parts, timeout=60*60*24)
     return render_template('format_spec.html', spec=Markup(parts['html_body']))
 
@@ -397,17 +398,17 @@ def api():
 @ispdb.route('/humans.txt', methods=['GET'])
 def humans():
     import os.path
-    authors_file=os.path.join(os.path.dirname(__file__), '../AUTHORS')
+    authors_file = os.path.join(os.path.dirname(__file__), '../AUTHORS')
     return Response(open(authors_file), mimetype='text/plain; charset=utf-8')
 
 
 @ispdb.route('/site.js', methods=['GET'])
 def site_js():
     l = get_locale()
-    js_i18n = cache.get('site_js_%s'%(l,))
+    js_i18n = cache.get('site_js_%s' % (l,))
     if not js_i18n:
         js_i18n = render_template('site.js')
-        cache.set('site_js_%s'%(l,), js_i18n, timeout=60*60)
+        cache.set('site_js_%s' % (l,), js_i18n, timeout=60*60)
     r = Response(js_i18n, headers={
         'Content-type': 'application/javascript',
         'Cache-control': 'private, max-age=3600'
@@ -441,18 +442,22 @@ def step_to_label(step):
     else:
         return u'-'
 
+
 @ispdb.app_template_filter('stepname')
 def stepname(step):
     return STEPS[step]
 
+
 @ispdb.app_template_filter('js_str')
 def json_filter(v):
     return Markup(json.dumps(unicode(v)))
 
+
 @ispdb.app_template_filter('locale_flag')
 def locale_flag(l):
     return LOCALES_FLAGS.get(str(l), '_unknown')
 
+
 @ispdb.app_template_global('current_locale')
 def current_locale():
     return get_locale()

+ 9 - 8
ffdnispdb/views_api.py

@@ -41,9 +41,9 @@ class REST(object):
 
     @classmethod
     def accepted_mimetypes(cls, default_mime=DEFAULT_MIMETYPE):
-        am=[m for m, q in request.accept_mimetypes]
+        am = [m for m, q in request.accept_mimetypes]
         if default_mime:
-            am+=[default_mime]
+            am += [default_mime]
         return am
 
     @classmethod
@@ -176,7 +176,7 @@ class ISPResource(Resource):
         GET - return ISP with the given id
     """
     def isp_to_dict(self, isp):
-        r=OrderedDict()
+        r = OrderedDict()
         r['id'] = isp.id
         r['is_ffdn_member'] = isp.is_ffdn_member
         r['json_url'] = isp.json_url
@@ -211,7 +211,7 @@ class CoveredAreaResource(Resource):
         GET - return covered areas for the given ISP
     """
     def ca_to_dict(self, ca):
-        r=OrderedDict()
+        r = OrderedDict()
         r['id'] = ca.id
         if not self.isp_id:
             r['isp'] = OrderedDict()
@@ -230,7 +230,7 @@ class CoveredAreaResource(Resource):
             s = CoveredArea.query.get_or_404(area_id)
             return self.ca_to_dict(s)
         else:
-            s = CoveredArea.query.filter(ISP.is_disabled==False)\
+            s = CoveredArea.query.filter(ISP.is_disabled == False)\
                                  .options(db.joinedload('isp'),
                                           db.defer('isp.json'),
                                           db.defer('area'),
@@ -238,7 +238,7 @@ class CoveredAreaResource(Resource):
             if isp_id:
                 if not ISP.query.filter_by(id=isp_id, is_disabled=False).scalar():
                     raise ObjectNotFound
-                s = s.filter(CoveredArea.isp_id==isp_id)
+                s = s.filter(CoveredArea.isp_id == isp_id)
             return self.handle_list(s, self.ca_to_dict, out_var='covered_areas')
 
 
@@ -267,10 +267,11 @@ def handle_generic_exception(e):
 
 isp_view = ISPResource.as_view('isp_api')
 ispdbapi.add_url_rule('/v1/isp/', defaults={'isp_id': None},
-                      view_func=isp_view, methods=['GET',])
+                      view_func=isp_view, methods=['GET'])
 ispdbapi.add_url_rule('/v1/isp/<int:isp_id>/', view_func=isp_view,
                       methods=['GET'])
 
+
 @ispdbapi.route('/v1/isp/export_urls/')
 @ispdbapi.route('/v1/isp/all_your_urls_are_belong_to_us/')
 def all_urls():
@@ -286,7 +287,7 @@ def all_urls():
 
 ca_view = CoveredAreaResource.as_view('covered_area_api')
 ispdbapi.add_url_rule('/v1/covered_area/', defaults={'area_id': None},
-                      view_func=ca_view, methods=['GET',])
+                      view_func=ca_view, methods=['GET'])
 ispdbapi.add_url_rule('/v1/covered_area/<int:area_id>/', view_func=ca_view,
                       methods=['GET'])
 ispdbapi.add_url_rule('/v1/isp/<int:isp_id>/covered_areas/', view_func=ca_view,