From 57ab6f19e66d8e5ba6ca87a8dfd8afade7231cc0 Mon Sep 17 00:00:00 2001 From: James Turk Date: Thu, 6 Dec 2012 14:42:33 -0500 Subject: [PATCH] flake8 everything but tests --- .pep8 | 4 + billy/bin/update.py | 20 ++-- billy/commands/download_photos.py | 2 +- billy/commands/dump.py | 32 +++--- billy/commands/sync_versions.py | 7 +- billy/commands/textextract.py | 4 +- billy/commands/update_external_ids.py | 14 +-- billy/commands/validate_api.py | 8 +- billy/core/__init__.py | 4 +- billy/ext/ansistrm.py | 4 +- billy/importers/bills.py | 9 +- billy/importers/committees.py | 13 ++- billy/importers/legislators.py | 33 +++--- billy/importers/names.py | 36 +++---- billy/models/bills.py | 18 ++-- billy/models/legislators.py | 6 +- billy/models/metadata.py | 5 +- billy/models/utils.py | 2 +- billy/reports/bills.py | 8 +- billy/reports/legislators.py | 2 +- billy/reports/votes.py | 16 +-- billy/scrape/__init__.py | 14 +-- billy/scrape/bills.py | 7 +- billy/scrape/utils.py | 2 +- billy/scrape/votes.py | 5 +- billy/utils/popularity.py | 13 +-- billy/web/admin/urls.py | 8 +- billy/web/admin/views/__init__.py | 108 +++++++++----------- billy/web/admin/views/matching.py | 12 +-- billy/web/api/handlers.py | 4 +- billy/web/api/tests/__init__.py | 1 + billy/web/api/tests/base.py | 2 +- billy/web/api/tests/bills.py | 2 +- billy/web/api/tests/boundaries.py | 3 - billy/web/api/tests/legislators.py | 1 - billy/web/api/urls.py | 8 +- billy/web/public/forms.py | 29 +++--- billy/web/public/templatetags/customtags.py | 10 +- billy/web/public/urls.py | 47 ++++++--- billy/web/public/views/bills.py | 36 ++++--- billy/web/public/views/committees.py | 21 ++-- billy/web/public/views/favorites.py | 6 +- billy/web/public/views/legislators.py | 81 +++++++-------- billy/web/public/views/misc.py | 2 +- billy/web/public/views/region.py | 3 +- billy/web/public/views/utils.py | 6 +- billy/web/urls.py | 3 +- 47 files changed, 340 insertions(+), 341 deletions(-) create mode 100644 .pep8 diff --git a/.pep8 b/.pep8 new file mode 100644 index 00000000..9eeaedce --- /dev/null +++ b/.pep8 @@ -0,0 +1,4 @@ +[pep8] +ignore=E124 +# ignore warning about alignment of last brace, it is nicer to have it +# matching the first brace than indented an extra level diff --git a/billy/bin/update.py b/billy/bin/update.py index abf972e6..fdf972c3 100755 --- a/billy/bin/update.py +++ b/billy/bin/update.py @@ -38,7 +38,7 @@ def _get_configured_scraper(scraper_type, options, metadata): except ScrapeError as e: # silence error only when alldata is present if ('alldata' in options.types and - str(e.orig_exception) == 'No module named %s' % scraper_type): + str(e.orig_exception) == 'No module named %s' % scraper_type): return None else: raise e @@ -159,14 +159,14 @@ def _do_imports(abbrev, args): if 'legislators' in args.types: report['legislators'] = \ - import_legislators(abbrev, settings.BILLY_DATA_DIR) + import_legislators(abbrev, settings.BILLY_DATA_DIR) if 'bills' in args.types: report['bills'] = import_bills(abbrev, settings.BILLY_DATA_DIR) if 'committees' in args.types: report['committees'] = \ - import_committees(abbrev, settings.BILLY_DATA_DIR) + import_committees(abbrev, settings.BILLY_DATA_DIR) if 'events' in args.types or 'speeches' in args.types: report['events'] = import_events(abbrev, settings.BILLY_DATA_DIR) @@ -205,21 +205,21 @@ def _do_reports(abbrev, args): def main(): try: parser = argparse.ArgumentParser( - description='update billy data', - parents=[base_arg_parser], + description='update billy data', + parents=[base_arg_parser], ) - what = parser.add_argument_group('what to scrape', - 'flags that help select what data to scrape') + what = parser.add_argument_group( + 'what to scrape', 'flags that help select what data to scrape') scrape = parser.add_argument_group('scraper config', - 'settings for the scraper') + 'settings for the scraper') parser.add_argument('module', type=str, help='scraper module (eg. nc)') what.add_argument('-s', '--session', action='append', - dest='sessions', default=[], + dest='sessions', default=[], help='session(s) to scrape') what.add_argument('-t', '--term', action='append', dest='terms', - help='term(s) to scrape', default=[]) + help='term(s) to scrape', default=[]) for arg in ('upper', 'lower'): what.add_argument('--' + arg, action='append_const', diff --git a/billy/commands/download_photos.py b/billy/commands/download_photos.py index 082f145d..dd96678d 100644 --- a/billy/commands/download_photos.py +++ b/billy/commands/download_photos.py @@ -22,7 +22,7 @@ def _upload(fname, bucket): headers = {'Cache-Control': 'max-age=2592000'} # optimize JPEG - subprocess.check_call(['jpegoptim', '--strip-all', fname]) + subprocess.check_call(['jpegoptim', '--strip-all', fname]) k = Key(bucket) k.key = fname diff --git a/billy/commands/dump.py b/billy/commands/dump.py index d633eb6e..48f532d9 100644 --- a/billy/commands/dump.py +++ b/billy/commands/dump.py @@ -90,7 +90,7 @@ def dump_legislator_csvs(abbr): leg_fields = ('leg_id', 'full_name', 'first_name', 'middle_name', 'last_name', 'suffixes', 'nickname', 'active', settings.LEVEL_FIELD, 'chamber', 'district', 'party', - 'transparencydata_id', 'photo_url', 'created_at', + 'transparencydata_id', 'photo_url', 'created_at', 'updated_at') leg_csv_fname, leg_csv = _make_csv(abbr, 'legislators.csv', leg_fields) @@ -155,8 +155,8 @@ def dump_bill_csvs(abbr): for bill in db.bills.find({settings.LEVEL_FIELD: abbr}): bill_csv.writerow(extract_fields(bill, bill_fields)) - bill_info = extract_fields(bill, - ('bill_id', settings.LEVEL_FIELD, 'session', 'chamber')) + bill_info = extract_fields( + bill, ('bill_id', settings.LEVEL_FIELD, 'session', 'chamber')) _bill_info[bill['_id']] = bill_info # basically same behavior for actions, sponsors and votes: @@ -181,9 +181,9 @@ def dump_bill_csvs(abbr): for vtype in ('yes', 'no', 'other'): for leg_vote in vote[vtype + '_votes']: legvote_csv.writerow({'vote_id': vote['vote_id'], - 'leg_id': leg_vote['leg_id'], - 'name': leg_vote['name'].encode('utf8'), - 'vote': vtype}) + 'leg_id': leg_vote['leg_id'], + 'name': leg_vote['name'].encode('utf8'), + 'vote': vtype}) return (bill_csv_fname, action_csv_fname, sponsor_csv_fname, vote_csv_fname, legvote_csv_fname) @@ -195,11 +195,12 @@ class DumpCSV(BaseCommand): def add_args(self): self.add_argument('abbrs', metavar='ABBR', type=str, nargs='+', - help='the two-letter abbreviation for the data to export') + help='the abbreviation for the data to export') self.add_argument('--file', '-f', - help='filename to output to (defaults to .zip)') + help='filename to output to (defaults to .zip)' + ) self.add_argument('--upload', '-u', action='store_true', default=False, - help='upload the created archives to S3') + help='upload the created archives to S3') def handle(self, args): for abbr in args.abbrs: @@ -227,17 +228,18 @@ class DumpJSON(BaseCommand): def add_args(self): self.add_argument('abbrs', metavar='ABBR', type=str, nargs='+', - help='the two-letter abbreviation for the data to export') + help='the abbreviation for the data to export') self.add_argument('--file', '-f', - help='filename to output to (defaults to .zip)') + help='filename to output to (defaults to .zip)' + ) self.add_argument('--upload', '-u', action='store_true', default=False, - help='upload the created archives to S3') + help='upload the created archives to S3') self.add_argument('--apikey', dest='API_KEY', - help='the API key to use') + help='the API key to use') self.add_argument('--schema_dir', default=None, - help='directory to use for API schemas (optional)') + help='directory to use for API schemas (optional)') self.add_argument('--novalidate', action='store_true', default=False, - help="don't run validation") + help="don't run validation") def handle(self, args): for abbr in args.abbrs: diff --git a/billy/commands/sync_versions.py b/billy/commands/sync_versions.py index feef4599..8d2facb5 100644 --- a/billy/commands/sync_versions.py +++ b/billy/commands/sync_versions.py @@ -30,10 +30,9 @@ def handle(self, args): documents = db.tracked_versions.find(spec, timeout=False) doc_count = documents.count() - print 'starting {0} for {1} documents ({2})'.format(task.__name__, - doc_count, - 'immediate' if args.immediate else 'queued' - ) + print 'starting {0} for {1} documents ({2})'.format( + task.__name__, doc_count, + 'immediate' if args.immediate else 'queued') for doc in documents: if args.immediate: diff --git a/billy/commands/textextract.py b/billy/commands/textextract.py index a05d5af3..b3860d6f 100644 --- a/billy/commands/textextract.py +++ b/billy/commands/textextract.py @@ -23,8 +23,8 @@ def handle(self, args): extract_text = module.extract_text if (args.filename.startswith('http://') or - args.filename.startswith('https://') or - args.filename.startswith('ftp://')): + args.filename.startswith('https://') or + args.filename.startswith('ftp://')): filedata = urllib2.urlopen(args.filename).read() else: filedata = open(args.filename).read() diff --git a/billy/commands/update_external_ids.py b/billy/commands/update_external_ids.py index 6cf9789c..6c9054dd 100644 --- a/billy/commands/update_external_ids.py +++ b/billy/commands/update_external_ids.py @@ -46,8 +46,10 @@ def handle(self, args): abbrev = meta['_id'].upper() for leg in db.legislators.find(query): - query = urllib.urlencode({'apikey': settings.API_KEY, - 'search': leg['full_name'].encode('utf8')}) + query = urllib.urlencode({ + 'apikey': settings.API_KEY, + 'search': leg['full_name'].encode('utf8') + }) url = ('http://transparencydata.com/api/1.0/entities.json?' + query) data = urllib2.urlopen(url).read() @@ -55,8 +57,8 @@ def handle(self, args): matches = [] for result in results: if (result['state'] == abbrev and - result['seat'][6:] == leg['chamber'] and - result['type'] == 'politician'): + result['seat'][6:] == leg['chamber'] and + result['type'] == 'politician'): matches.append(result) if len(matches) == 1: @@ -64,7 +66,7 @@ def handle(self, args): db.legislators.save(leg, safe=True) updated += 1 - print 'Updated %s of %s missing transparencydata ids' % (updated, - initial_count) + print 'Updated %s of %s missing transparencydata ids' % ( + updated, initial_count) time.sleep(30) diff --git a/billy/commands/validate_api.py b/billy/commands/validate_api.py index 42e0346d..9a267c33 100644 --- a/billy/commands/validate_api.py +++ b/billy/commands/validate_api.py @@ -17,10 +17,10 @@ class ValidateApi(BaseCommand): help = 'validate data from the API' def add_args(self): - self.add_argument('--apikey', dest='API_KEY', - help='the API key to use') + self.add_argument('--apikey', dest='API_KEY', help='the API key to use' + ) self.add_argument('--schema_dir', default=None, - help='directory to use for API schemas (optional)') + help='directory to use for API schemas (optional)') def handle(self, args): for meta in db.metadata.find(): @@ -66,7 +66,7 @@ def validate_api(abbr, schema_dir=None): json_response = scrapelib.urlopen(url) validictory.validate(json.loads(json_response), bill_schema, - validator_cls=APIValidator) + validator_cls=APIValidator) legislator_schema = get_json_schema("legislator", schema_dir) for legislator in db.legislators.find(spec): diff --git a/billy/core/__init__.py b/billy/core/__init__.py index 53ab8ea4..cb8efb3f 100644 --- a/billy/core/__init__.py +++ b/billy/core/__init__.py @@ -14,8 +14,8 @@ base_arg_parser = argparse.ArgumentParser(add_help=False) -global_group = base_arg_parser.add_argument_group('global settings', - 'settings that apply to all billy commands') +global_group = base_arg_parser.add_argument_group( + 'global settings', 'settings that apply to all billy commands') global_group.add_argument('--mongo_host', help='mongo host', dest='MONGO_HOST') global_group.add_argument('--mongo_port', help='mongo port', dest='MONGO_PORT') diff --git a/billy/ext/ansistrm.py b/billy/ext/ansistrm.py index f8bd330b..e79f1994 100644 --- a/billy/ext/ansistrm.py +++ b/billy/ext/ansistrm.py @@ -64,7 +64,7 @@ def emit(self, record): self.handleError(record) if os.name != 'nt': - def output_colorized(self, message): + def output_colorized(self, message): # NOQA self.stream.write(message) else: import re @@ -81,7 +81,7 @@ def output_colorized(self, message): 7: 0x07, # white } - def output_colorized(self, message): + def output_colorized(self, message): # NOQA parts = self.ansi_esc.split(message) write = self.stream.write h = None diff --git a/billy/importers/bills.py b/billy/importers/bills.py index f6750b9c..ab10743d 100644 --- a/billy/importers/bills.py +++ b/billy/importers/bills.py @@ -230,8 +230,7 @@ def track_version(bill, version): 'chamber': bill['chamber'], 'bill_id': bill['bill_id'], 'subjects': bill.get('subjects', []), - 'sponsors': [s['leg_id'] for s in bill['sponsors'] if s['leg_id']] - } + 'sponsors': [s['leg_id'] for s in bill['sponsors'] if s['leg_id']]} # insert or update this document db.tracked_versions.update({'_id': version['doc_id']}, {'$set': doc}, upsert=True) @@ -378,10 +377,10 @@ def _match_legislator(name): # passed & signed dates if (not dates['passed_upper'] and action['actor'] == 'upper' - and 'bill:passed' in action['type']): + and 'bill:passed' in action['type']): dates['passed_upper'] = adate elif (not dates['passed_lower'] and action['actor'] == 'lower' - and 'bill:passed' in action['type']): + and 'bill:passed' in action['type']): dates['passed_lower'] = adate elif (not dates['signed'] and 'governor:signed' in action['type']): dates['signed'] = adate @@ -397,7 +396,7 @@ def _match_legislator(name): delta = abs(vote['date'] - action['date']) if (delta < datetime.timedelta(hours=20) and - vote['chamber'] == action['actor']): + vote['chamber'] == action['actor']): if action_attached: # multiple votes match, we can't guess action.pop('related_votes', None) diff --git a/billy/importers/committees.py b/billy/importers/committees.py index 6dcefe5b..bc3c1dfd 100644 --- a/billy/importers/committees.py +++ b/billy/importers/committees.py @@ -27,12 +27,12 @@ def import_committees_from_legislators(current_term, abbr): # for all current legislators for legislator in db.legislators.find({'roles': {'$elemMatch': { - 'term': current_term, settings.LEVEL_FIELD: abbr}}}): + 'term': current_term, settings.LEVEL_FIELD: abbr}}}): # for all committee roles for role in legislator['roles']: if (role['type'] == 'committee member' and - 'committee_id' not in role): + 'committee_id' not in role): spec = {settings.LEVEL_FIELD: abbr, 'chamber': role['chamber'], @@ -47,7 +47,7 @@ def import_committees_from_legislators(current_term, abbr): committee['_type'] = 'committee' # copy LEVEL_FIELD from legislator to committee committee[settings.LEVEL_FIELD] = \ - legislator[settings.LEVEL_FIELD] + legislator[settings.LEVEL_FIELD] committee['members'] = [] committee['sources'] = [] if 'subcommittee' not in committee: @@ -118,8 +118,8 @@ def import_committee(data, current_session, current_term): for role in legislator['roles']: if (role['type'] == 'committee member' and - role['term'] == current_term and - role.get('committee_id') == committee['_id']): + role['term'] == current_term and + role.get('committee_id') == committee['_id']): # if the position hadn't been copied over before, copy it now if role.get('position') != member['role']: role['position'] = member['role'] @@ -131,8 +131,7 @@ def import_committee(data, current_session, current_term): 'term': current_term, 'chamber': committee['chamber'], 'committee_id': committee['_id'], - 'position': member['role'] - } + 'position': member['role']} # copy over all necessary fields from committee new_role[settings.LEVEL_FIELD] = committee[settings.LEVEL_FIELD] diff --git a/billy/importers/legislators.py b/billy/importers/legislators.py index 00205a8f..af28f9dc 100644 --- a/billy/importers/legislators.py +++ b/billy/importers/legislators.py @@ -31,8 +31,7 @@ def ensure_indexes(): name='role_and_name_parts') db.legislators.ensure_index([(settings.LEVEL_FIELD, pymongo.ASCENDING), ('active', pymongo.ASCENDING), - ('chamber', pymongo.ASCENDING), - ]) + ('chamber', pymongo.ASCENDING), ]) def import_legislators(abbr, data_dir): @@ -70,8 +69,9 @@ def activate_legislators(current_term, abbr): Sets the 'active' flag on legislators and populates top-level district/chamber/party fields for currently serving legislators. """ - for legislator in db.legislators.find({'roles': {'$elemMatch': - {settings.LEVEL_FIELD: abbr, 'term': current_term}}}): + for legislator in db.legislators.find( + {'roles': {'$elemMatch': + {settings.LEVEL_FIELD: abbr, 'term': current_term}}}): active_role = legislator['roles'][0] if not active_role.get('end_date'): @@ -88,21 +88,16 @@ def deactivate_legislators(current_term, abbr): # legislators without a current term role or with an end_date for leg in db.legislators.find( - {'$or': [ - {'roles': {'$elemMatch': - {'term': {'$ne': current_term}, - 'type': 'member', - settings.LEVEL_FIELD: abbr, - }}, - }, - {'roles': {'$elemMatch': - {'term': current_term, - 'type': 'member', - settings.LEVEL_FIELD: abbr, - 'end_date': {'$ne':None}}}, - }, - - ]}): + {'$or': [ + {'roles': {'$elemMatch': { + 'term': {'$ne': current_term}, + 'type': 'member', settings.LEVEL_FIELD: abbr}}}, + {'roles': {'$elemMatch': { + 'term': current_term, + 'type': 'member', + settings.LEVEL_FIELD: abbr, + 'end_date': {'$ne':None}}}} + ]}): if 'old_roles' not in leg: leg['old_roles'] = {} diff --git a/billy/importers/names.py b/billy/importers/names.py index f8be385a..9d18e19a 100644 --- a/billy/importers/names.py +++ b/billy/importers/names.py @@ -107,7 +107,7 @@ def _learn_manual_matches(self): for row in rows: (term, chamber, name, obj_id) = ( - row['term'], row['chamber'], row['name'], row['obj_id']) + row['term'], row['chamber'], row['name'], row['obj_id']) if (term == self._term or not term) and obj_id: self._manual[chamber][name] = obj_id @@ -142,7 +142,7 @@ def _learn(self, legislator): name, obj = legislator, legislator['_id'] if (legislator['roles'] and legislator['roles'][0]['term'] == - self._term and legislator['roles'][0]['type'] == 'member'): + self._term and legislator['roles'][0]['type'] == 'member'): chamber = legislator['roles'][0]['chamber'] else: try: @@ -150,7 +150,7 @@ def _learn(self, legislator): except KeyError: raise ValueError("no role in legislator %s [%s] for term %s" % (legislator['full_name'], legislator['_id'], - self._term)) + self._term)) if '_code' in name: code = name['_code'] @@ -182,25 +182,25 @@ def add_form(form): if name['middle_name']: add_form("%s, %s %s" % (name['last_name'], name['first_name'], - name['middle_name'])) + name['middle_name'])) add_form("%s, %s %s" % (name['last_name'], - name['first_name'][0], - name['middle_name'])) + name['first_name'][0], + name['middle_name'])) add_form("%s %s %s" % (name['first_name'], - name['middle_name'], - name['last_name'])) + name['middle_name'], + name['last_name'])) add_form("%s, %s %s" % (name['last_name'], - name['first_name'][0], - name['middle_name'][0])) + name['first_name'][0], + name['middle_name'][0])) add_form("%s %s %s" % (name['first_name'], - name['middle_name'][0], - name['last_name'])) + name['middle_name'][0], + name['last_name'])) add_form("%s, %s %s" % (name['last_name'], - name['first_name'], - name['middle_name'][0])) + name['first_name'], + name['middle_name'][0])) add_form("%s, %s.%s." % (name['last_name'], - name['first_name'][0], - name['middle_name'][0])) + name['first_name'][0], + name['middle_name'][0])) for form in forms: form = self._normalize(form) @@ -260,8 +260,8 @@ def _learn_manual_matches(self): }) for row in rows: - (term, chamber, name, obj_id) = ( - row['term'], row['chamber'], row['name'], row['obj_id']) + (term, chamber, name, obj_id) = (row['term'], row['chamber'], + row['name'], row['obj_id']) row['chamber'] = None # In case the DB has gone wonky on us. if (term == self._term or not term or not self._term) and obj_id: diff --git a/billy/models/bills.py b/billy/models/bills.py index 8501251f..a85f9967 100644 --- a/billy/models/bills.py +++ b/billy/models/bills.py @@ -439,9 +439,9 @@ def search(query=None, abbr=None, chamber=None, subjects=None, status=None, type_=None, session=None): _filter = {} for key, value in [(settings.LEVEL_FIELD, abbr), - ('chamber', chamber), - ('subjects', subjects), - ('bill_id', bill_id), + ('chamber', chamber), + ('subjects', subjects), + ('bill_id', bill_id), ]: if value is not None: _filter[key] = value @@ -501,8 +501,8 @@ def search(query=None, abbr=None, chamber=None, subjects=None, # take terms from mongo query es_terms = [] if settings.LEVEL_FIELD in _filter: - es_terms.append(pyes.TermFilter(settings.LEVEL_FIELD, - _filter.pop(settings.LEVEL_FIELD))) + es_terms.append(pyes.TermFilter( + settings.LEVEL_FIELD, _filter.pop(settings.LEVEL_FIELD))) if 'session' in _filter: es_terms.append(pyes.TermFilter('session', _filter.pop('session'))) @@ -510,11 +510,11 @@ def search(query=None, abbr=None, chamber=None, subjects=None, es_terms.append(pyes.TermFilter('chamber', _filter.pop('chamber'))) if 'subjects' in _filter: - es_terms.append(pyes.TermFilter('subjects', - _filter.pop('subjects')['$all'])) + es_terms.append(pyes.TermFilter( + 'subjects', _filter.pop('subjects')['$all'])) if 'sponsors.leg_id' in _filter: - es_terms.append(pyes.TermFilter('sponsors', - _filter.pop('sponsors.leg_id'))) + es_terms.append(pyes.TermFilter( + 'sponsors', _filter.pop('sponsors.leg_id'))) # add terms if es_terms: diff --git a/billy/models/legislators.py b/billy/models/legislators.py index a97b3c72..df113b7d 100644 --- a/billy/models/legislators.py +++ b/billy/models/legislators.py @@ -37,7 +37,7 @@ def type_display(self): ignored_role_types = [ 'member', 'committee member', - ] + ] if self['type'] in ignored_role_types: return '' else: @@ -111,8 +111,8 @@ def get_sponsored_bills_url(self): def votes_5_sorted(self): _id = self['_id'] - votes = self.votes_manager(limit=5, - sort=[('date', pymongo.DESCENDING)]) + votes = self.votes_manager( + limit=5, sort=[('date', pymongo.DESCENDING)]) for vote in votes: vote_value = 'other' for obj in vote['yes_votes']: diff --git a/billy/models/metadata.py b/billy/models/metadata.py index 61fc9844..6df99c23 100644 --- a/billy/models/metadata.py +++ b/billy/models/metadata.py @@ -150,7 +150,7 @@ def term_dict(self): return self._term_dict except AttributeError: term_dict = itertools.groupby(self['terms'], - operator.itemgetter('name')) + operator.itemgetter('name')) term_dict = dict((name, list(data)) for (name, data) in term_dict) self._term_dict = term_dict return term_dict @@ -171,7 +171,8 @@ def committees_legislators(self, *args, **kwargs): ''' committees = list(self.committees(*args, **kwargs)) legislators = self.legislators({'active': True}, - fields=['full_name', settings.LEVEL_FIELD]) + fields=['full_name', + settings.LEVEL_FIELD]) _legislators = {} # This will be a cache of legislator objects used in diff --git a/billy/models/utils.py b/billy/models/utils.py index 2fa8f587..e6490f4c 100644 --- a/billy/models/utils.py +++ b/billy/models/utils.py @@ -10,7 +10,7 @@ def mongoid_2_url(abbr, _id): 'C': 'committee', 'V': 'vote', 'L': 'legislator_noslug', - }[letter] + }[letter] return urlresolvers.reverse(viewname, args=[abbr, _id]) diff --git a/billy/reports/bills.py b/billy/reports/bills.py index a448cda4..af1db02a 100644 --- a/billy/reports/bills.py +++ b/billy/reports/bills.py @@ -34,7 +34,7 @@ def _bill_report_dict(): 'version_count': 0, 'unmatched_sponsors': set(), 'progress_meter_gaps': set(), - } + } def scan_bills(abbr): @@ -90,7 +90,7 @@ def scan_bills(abbr): # keep list of unmatched sponsors session_d['unmatched_sponsors'].add( (term_for_session(abbr, bill['session']), bill['chamber'], - sponsor['name']) + sponsor['name']) ) session_d['sponsors_per_type'][sponsor['type']] += 1 @@ -172,7 +172,7 @@ def scan_bills(abbr): 'other_actions': other_actions.items(), 'uncategorized_subjects': uncategorized_subjects.items(), 'sessions': sessions, - 'progress_meter_gaps': [], + 'progress_meter_gaps': [] } @@ -210,7 +210,7 @@ def calculate_percentages(report): def bill_report(abbr): report = scan_bills(abbr) combined_report = combine_reports(report['sessions'], - _bill_report_dict()) + _bill_report_dict()) for session in report['sessions'].itervalues(): calculate_percentages(session) calculate_percentages(combined_report) diff --git a/billy/reports/legislators.py b/billy/reports/legislators.py index ab6af90d..f9835502 100644 --- a/billy/reports/legislators.py +++ b/billy/reports/legislators.py @@ -24,7 +24,7 @@ def scan_legislators(abbr): district_seats = {'upper': defaultdict(int), 'lower': defaultdict(int)} for district in db.districts.find({'abbr': abbr}): district_seats[district['chamber']][district['name']] = \ - district['num_seats'] + district['num_seats'] for leg in db.legislators.find({settings.LEVEL_FIELD: abbr}): diff --git a/billy/reports/votes.py b/billy/reports/votes.py index 3dbd6576..6b965aa5 100644 --- a/billy/reports/votes.py +++ b/billy/reports/votes.py @@ -17,7 +17,7 @@ def _vote_report_dict(): 'bad_vote_counts': set(), '_rollcall_count': 0, '_rollcalls_with_leg_id_count': 0, - 'unmatched_voters': set(), + 'unmatched_voters': set() } @@ -56,22 +56,22 @@ def scan_votes(abbr): session_d['unmatched_voters'].add( (term_for_session(abbr, vote['session']), vote['chamber'], - rc['name']) + rc['name']) ) # check counts if any rollcalls are present if has_rollcalls: if (len(vote['yes_votes']) != vote['yes_count'] and - vote['vote_id'] not in - quality_exceptions['votes:bad_yes_count']): + vote['vote_id'] not in + quality_exceptions['votes:bad_yes_count']): session_d['bad_vote_counts'].add(vote['vote_id']) if (len(vote['no_votes']) != vote['no_count'] and - vote['vote_id'] not in - quality_exceptions['votes:bad_no_count']): + vote['vote_id'] not in + quality_exceptions['votes:bad_no_count']): session_d['bad_vote_counts'].add(vote['vote_id']) if (len(vote['other_votes']) != vote['other_count'] and - vote['vote_id'] not in - quality_exceptions['votes:bad_other_count']): + vote['vote_id'] not in + quality_exceptions['votes:bad_other_count']): session_d['bad_vote_counts'].add(vote['vote_id']) # do logging of unnecessary exceptions diff --git a/billy/scrape/__init__.py b/billy/scrape/__init__.py index 5fb4e4a0..0792fcc8 100644 --- a/billy/scrape/__init__.py +++ b/billy/scrape/__init__.py @@ -22,7 +22,7 @@ def __init__(self, msg, orig_exception=None): def __str__(self): if self.orig_exception: return '%s\nOriginal Exception: %s' % (self.msg, - self.orig_exception) + self.orig_exception) else: return self.msg @@ -129,14 +129,14 @@ def _load_schemas(self): # bills & votes self._schema['bill']['properties']['session']['enum'] = \ - self.all_sessions() + self.all_sessions() self._schema['vote']['properties']['session']['enum'] = \ - self.all_sessions() + self.all_sessions() # legislators terms = [t['name'] for t in self.metadata['terms']] self._schema['person']['properties']['roles']['items'] \ - ['properties']['term']['enum'] = terms + ['properties']['term']['enum'] = terms @property def object_count(self): @@ -261,14 +261,14 @@ def get_scraper(mod_path, scraper_type): try: ScraperClass = _scraper_registry[scraper_type] except KeyError as e: - raise ScrapeError("no %s scraper found in module %s" % - (scraper_type, mod_path)) + raise ScrapeError("no %s scraper found in module %s" % ( + scraper_type, mod_path)) return ScraperClass def check_sessions(metadata, sessions): all_sessions_in_terms = list(reduce(lambda x, y: x + y, - [x['sessions'] for x in metadata['terms']])) + [x['sessions'] for x in metadata['terms']])) # copy the list to avoid modifying it metadata_session_details = list(metadata.get('_ignored_scraped_sessions', [])) diff --git a/billy/scrape/bills.py b/billy/scrape/bills.py index e4bc75bb..e222c623 100644 --- a/billy/scrape/bills.py +++ b/billy/scrape/bills.py @@ -130,11 +130,8 @@ def add_version(self, name, url, mimetype=None, on_duplicate='error', d = dict(name=name, url=url, mimetype=mimetype, **kwargs) self['versions'].append(d) - def add_action(self, actor, action, date, - type=None, - committees=None, - legislators=None, - **kwargs): + def add_action(self, actor, action, date, type=None, committees=None, + legislators=None, **kwargs): """ Add an action that was performed on this bill. diff --git a/billy/scrape/utils.py b/billy/scrape/utils.py index 8edf4e64..477f7cc0 100644 --- a/billy/scrape/utils.py +++ b/billy/scrape/utils.py @@ -12,7 +12,7 @@ def url_xpath(url, path): def convert_pdf(filename, type='xml'): commands = {'text': ['pdftotext', '-layout', filename, '-'], 'text-nolayout': ['pdftotext', filename, '-'], - 'xml': ['pdftohtml', '-xml', '-stdout', filename], + 'xml': ['pdftohtml', '-xml', '-stdout', filename], 'html': ['pdftohtml', '-stdout', filename]} try: pipe = subprocess.Popen(commands[type], stdout=subprocess.PIPE, diff --git a/billy/scrape/votes.py b/billy/scrape/votes.py index c8740a4d..49528318 100644 --- a/billy/scrape/votes.py +++ b/billy/scrape/votes.py @@ -99,8 +99,9 @@ def validate(self): if votes != count: raise ValueError('bad %s vote count for %s %s votes=%s' ' count=%s %r' % - (type, self.get('bill_id', ''), self['motion'], - votes, count, self[type + '_votes'])) + (type, self.get('bill_id', ''), + self['motion'], votes, count, + self[type + '_votes'])) def get_filename(self): filename = '%s_%s_%s_seq%s.json' % (self['session'], diff --git a/billy/utils/popularity.py b/billy/utils/popularity.py index 403ad40e..73e7311b 100644 --- a/billy/utils/popularity.py +++ b/billy/utils/popularity.py @@ -8,10 +8,11 @@ def __init__(self, db, collection_name='popularity_counts'): self.counts = getattr(db, collection_name) def inc(self, type_name, obj_id, **kwargs): - self.counts.update({'type': type_name, 'obj_id': obj_id, - 'date': datetime.datetime.utcnow().date().toordinal()}, - {'$inc': {'count': 1}, '$set': kwargs}, - upsert=True, safe=False) + self.counts.update({ + 'type': type_name, 'obj_id': obj_id, + 'date': datetime.datetime.utcnow().date().toordinal()}, + {'$inc': {'count': 1}, '$set': kwargs}, + upsert=True, safe=False) def top(self, type_name, n=1, days=None, with_counts=False, **kwargs): kwargs['type'] = type_name @@ -23,8 +24,8 @@ def top(self, type_name, n=1, days=None, with_counts=False, **kwargs): extract = lambda o: (o['obj_id'], o['count']) else: extract = lambda o: o['obj_id'] - return [extract(o) for o in self.counts.find(kwargs, - {'_id': 0, 'obj_id': 1, 'count': 1}) + return [extract(o) for o in + self.counts.find(kwargs, {'_id': 0, 'obj_id': 1, 'count': 1}) .sort([('count', -1)]).limit(n)] diff --git a/billy/web/admin/urls.py b/billy/web/admin/urls.py index e6a2751b..7254dac5 100644 --- a/billy/web/admin/urls.py +++ b/billy/web/admin/urls.py @@ -1,6 +1,8 @@ from django.conf.urls.defaults import patterns, url -urlpatterns = patterns('billy.web.admin.views', +urlpatterns = patterns( + 'billy.web.admin.views', + url(r'^$', 'browse_index', name='admin_index'), # Quality exceptions (need to be above loose-matching bill view rule) @@ -43,9 +45,9 @@ url(r'^legislators/(?P[\w-]+)/retire/$', 'retire_legislator', name='retire_legislator'), url(r'^legislators-edit/(?P[\w-]+)/$', 'legislator_edit', - name='admin_legislator_edit'), + name='admin_legislator_edit'), url(r'^legislators-edit-commit/$', 'legislator_edit_commit', - name='admin_legislator_edit_commit'), + name='admin_legislator_edit_commit'), # bills diff --git a/billy/web/admin/views/__init__.py b/billy/web/admin/views/__init__.py index 5b4c7d05..3dfbaa71 100644 --- a/billy/web/admin/views/__init__.py +++ b/billy/web/admin/views/__init__.py @@ -50,7 +50,7 @@ def keyfunc(obj): if django_settings.DEBUG: - def login_required(f): + def login_required(f): # NOQA return f @@ -95,8 +95,8 @@ def browse_index(request, template='billy/index.html'): report['chambers'] = meta['chambers'].keys() report['influence_explorer'] = ('influenceexplorer' in meta['feature_flags']) - report['bills']['typed_actions'] = (100 - - report['bills']['actions_per_type'].get('other', 100)) + report['bills']['typed_actions'] = ( + 100 - report['bills']['actions_per_type'].get('other', 100)) rows.append(report) rows.sort(key=lambda x: x['name']) @@ -116,7 +116,8 @@ def overview(request, abbr): def _add_time_delta(runlog): time_delta = runlog['scraped']['ended'] - runlog['scraped']['started'] runlog['scraped']['time_delta'] = datetime.timedelta(time_delta.days, - time_delta.seconds) + time_delta.seconds + ) try: runlog = db.billy_runs.find({"abbr": abbr}).sort( "scraped.started", direction=pymongo.DESCENDING)[0] @@ -143,9 +144,8 @@ def rolling_average(oldAverage, newItem, oldAverageCount): to factor the oldAverageCount back in, it's because new values will have as much weight as the last sum combined if you put it over 2. """ - return float( - (newItem + (oldAverageCount * (oldAverage))) / - (oldAverageCount + 1)) + return float((newItem + (oldAverageCount * (oldAverage))) / + (oldAverageCount + 1)) def _do_pie(runs): excs = {} @@ -215,10 +215,10 @@ def _do_digest(runs): speck = { "default-stacked": {"run": _do_stacked, - "title": "Last %s runs" % (history_count), - "type": "stacked", - "spec": {} - }, + "title": "Last %s runs" % (history_count), + "type": "stacked", + "spec": {} + }, #"default": {"run": _do_digest, # "title": "Last %s runs" % (history_count), # "type": "lines", @@ -239,12 +239,10 @@ def _do_digest(runs): # } #}, "falure-pie": {"run": _do_pie, - "title": "Digest of what exceptions have been thrown", - "type": "pies", - "spec": { - "failure": {"$exists": True} - } - }, + "title": "Digest of what exceptions have been thrown", + "type": "pies", + "spec": {"failure": {"$exists": True}} + }, } for line in speck: @@ -268,7 +266,7 @@ def run_detail(request, obj=None): except IndexError as e: return render(request, 'billy/run_detail.html', { "warning": "No records exist. Fetch returned a(n) %s" % ( - e.__class__.__name__)}) + e.__class__.__name__)}) return render(request, 'billy/run_detail.html', { "run": run, "metadata": {"abbreviation": run['abbr'], "name": run['abbr']} @@ -284,7 +282,7 @@ def run_detail_list(request, abbr): except IndexError as e: return render(request, 'billy/run_detail.html', { "warning": "No records exist. Fetch returned a(n) %s" % ( - e.__class__.__name__)}) + e.__class__.__name__)}) # pre-process goodies for the template runlog['scraped']['t_delta'] = ( @@ -338,42 +336,32 @@ def decimal_format(value, TWOPLACES=decimal.Decimal(100) ** -1): 'version_count']}), ('Bill Types', { - 'keypath': ['bill_types'], - 'summary': { - 'object_type': 'bills', - 'key': 'type', - }, - }), + 'keypath': ['bill_types'], 'summary': { + 'object_type': 'bills', 'key': 'type', + }, + }), ('Actions by Type', { - 'keypath': ['actions_per_type'], - 'summary': { + 'keypath': ['actions_per_type'], 'summary': { 'object_type': 'actions', 'key': 'type', - }, - }), + }, + }), ('Actions by Actor', { - 'keypath': ['actions_per_actor'], - 'summary': { + 'keypath': ['actions_per_actor'], 'summary': { 'object_type': 'actions', 'key': 'actor', - }, - }), - - ('Quality Issues', {'rownames': [ - 'sponsorless_count', 'actionless_count', - 'actions_unsorted', 'bad_vote_counts', - 'version_count', 'versionless_count', - - 'sponsors_with_id', - 'rollcalls_with_leg_id', - 'have_subjects', - 'updated_this_year', - 'updated_this_month', - 'updated_today', - 'vote_passed']}), - ] + }, + }), + + ('Quality Issues', {'rownames': [ + 'sponsorless_count', 'actionless_count', 'actions_unsorted', + 'bad_vote_counts', 'version_count', 'versionless_count', + 'sponsors_with_id', 'rollcalls_with_leg_id', 'have_subjects', + 'updated_this_year', 'updated_this_month', 'updated_today', + 'vote_passed']}), + ] format_as_percent = [ 'sponsors_with_id', @@ -419,7 +407,7 @@ def decimal_format(value, TWOPLACES=decimal.Decimal(100) ** -1): use_percent = any([ r in format_as_percent, name in ['Actions by Actor', 'Actions by Type'], - ]) + ]) if use_percent and (val != 0): val = decimal_format(val) @@ -540,8 +528,9 @@ def get_objects(objs): @login_required -def summary_object_key_vals(request, abbr, urlencode=urllib.urlencode, - collections=("bills", "legislators", "committees")): +def summary_object_key_vals( + request, abbr, urlencode=urllib.urlencode, + collections=("bills", "legislators", "committees")): meta = metadata(abbr) session = request.GET['session'] object_type = request.GET['object_type'] @@ -572,7 +561,7 @@ def summary_object_key_vals(request, abbr, urlencode=urllib.urlencode, objects=objects, spec=spec, meta=meta - )) + )) @login_required @@ -1104,10 +1093,10 @@ def mom_commit(request, abbr): merged[attr] = _mom_mangle(merged[attr]) return render(request, 'billy/mom_commit.html', { - "merged": merged, - "actions": actions, - "abbr": abbr - }) + "merged": merged, + "actions": actions, + "abbr": abbr + }) def _mom_attr_diff(merge, leg1, leg2): @@ -1244,7 +1233,8 @@ def newsblogs(request): spec.update(abbr=abbr) entries = db.feed_entries.find(spec, skip=skip, limit=limit, - sort=[('published_parsed', pymongo.DESCENDING)]) + sort=[('published_parsed', + pymongo.DESCENDING)]) _entries = [] entity_types = {'L': 'legislators', 'C': 'committees', @@ -1272,8 +1262,8 @@ def newsblogs(request): args=[entity_type, _id]) _entity_urls.append(url) summary = summary.replace(entity_string, - '%s' % (url, - entity_string)) + '%s' % ( + url, entity_string)) entity_data = zip(_entity_strings, _entity_ids, _entity_urls) entry['summary'] = summary entry['entity_data'] = entity_data @@ -1308,7 +1298,7 @@ def newsblogs(request): 'next_': next_, 'pagination_truncated': pagination_truncated, 'page': page, - }) + }) @login_required diff --git a/billy/web/admin/views/matching.py b/billy/web/admin/views/matching.py index e96f8670..2e411251 100644 --- a/billy/web/admin/views/matching.py +++ b/billy/web/admin/views/matching.py @@ -11,7 +11,7 @@ if django_settings.DEBUG: - def login_required(f): + def login_required(f): # NOQA return f @@ -43,7 +43,7 @@ def edit(request, abbr): vote_unmatched = set(tuple(i + ['vote']) for i in report['votes']['unmatched_voters']) com_unmatched = set(tuple(i + ['committee']) for i in - report['committees']['unmatched_leg_ids']) + report['committees']['unmatched_leg_ids']) combined_sets = bill_unmatched | vote_unmatched | com_unmatched unmatched_ids = [] @@ -81,9 +81,9 @@ def commit(request, abbr): db.manual.name_matchers.update({"name": name, "term": term, "abbr": abbr, "chamber": chamber}, - {"name": name, "term": term, "abbr": abbr, - "obj_id": value, "chamber": chamber, - "type": typ}, - upsert=True, safe=True) + {"name": name, "term": term, + "abbr": abbr, "obj_id": value, + "chamber": chamber, "type": typ}, + upsert=True, safe=True) return redirect('admin_matching', abbr) diff --git a/billy/web/api/handlers.py b/billy/web/api/handlers.py index 42e9e526..730994d0 100644 --- a/billy/web/api/handlers.py +++ b/billy/web/api/handlers.py @@ -116,7 +116,7 @@ def _metadata_backwards_shim(metadata): for field in ('name', 'title', 'term'): if field in chamber: metadata[chamber_type + '_chamber_' + field] = \ - chamber[field] + chamber[field] return metadata @@ -165,7 +165,7 @@ def read(self, request, abbr=None, session=None, bill_id=None, # if subfields are specified if not fields or 'votes' in fields or vote_fields: bill['votes'] = list(db.votes.find({'bill_id': bill['_id']}, - fields=vote_fields)) + fields=vote_fields)) return bill diff --git a/billy/web/api/tests/__init__.py b/billy/web/api/tests/__init__.py index 4075253f..d16f9b71 100644 --- a/billy/web/api/tests/__init__.py +++ b/billy/web/api/tests/__init__.py @@ -1,3 +1,4 @@ +# flake8: noqa (because we import * for a decent reason) ''' The django test runner looks for unittest.TestCase subclasses defined in this file, so import any testcases here. diff --git a/billy/web/api/tests/base.py b/billy/web/api/tests/base.py index d437b544..fa9ef872 100644 --- a/billy/web/api/tests/base.py +++ b/billy/web/api/tests/base.py @@ -6,7 +6,7 @@ import billy.tests from billy.tests import fixtures -from billy.core import settings, db +from billy.core import db class BaseTestCase(unittest.TestCase): diff --git a/billy/web/api/tests/bills.py b/billy/web/api/tests/bills.py index cd2b4e7e..8ecbe86b 100644 --- a/billy/web/api/tests/bills.py +++ b/billy/web/api/tests/bills.py @@ -13,7 +13,7 @@ def test_count(self): def test_correct_keys_present(self): expected_keys = set([u'chamber', u'state', u'session', u'title', - u'type', u'id', u'bill_id', 'subjects']) + u'type', u'id', u'bill_id', 'subjects']) self.assertEquals(set(self.json[0]), expected_keys) def test_status(self): diff --git a/billy/web/api/tests/boundaries.py b/billy/web/api/tests/boundaries.py index bf531cec..73f327bf 100644 --- a/billy/web/api/tests/boundaries.py +++ b/billy/web/api/tests/boundaries.py @@ -12,6 +12,3 @@ def test_boundary(self): u'name', u'region', u'chamber', u'shape', u'abbr', u'boundary_id', u'num_seats', u'id', u'bbox']) self.assertEquals(set(self.json), expected_keys) - - - diff --git a/billy/web/api/tests/legislators.py b/billy/web/api/tests/legislators.py index 63baa8f1..8d307923 100644 --- a/billy/web/api/tests/legislators.py +++ b/billy/web/api/tests/legislators.py @@ -62,4 +62,3 @@ def test_correct_keys_present(self): def test_status(self): self.assert_200() - diff --git a/billy/web/api/urls.py b/billy/web/api/urls.py index f6570cf0..9b268e1c 100644 --- a/billy/web/api/urls.py +++ b/billy/web/api/urls.py @@ -17,7 +17,8 @@ class Authorizer(PistonKeyAuthentication): def challenge(self): resp = HttpResponse("Authorization Required: \n" - "obtain a key at http://services.sunlightlabs.com/accounts/register/") + "obtain a key at http://services." + "sunlightlabs.com/accounts/register/") resp.status_code = 401 return resp @@ -70,13 +71,14 @@ def __call__(self, request, *args, **kwargs): subject_list_handler = Resource(handlers.SubjectListHandler, authentication=authorizer) legislator_geo_handler = Resource(handlers.LegislatorGeoHandler, - authentication=authorizer) + authentication=authorizer) district_handler = Resource(handlers.DistrictHandler, authentication=authorizer) boundary_handler = Resource(handlers.BoundaryHandler, authentication=authorizer) -urlpatterns = patterns('', +urlpatterns = patterns( + '', # metadata url(r'^v1/metadata/$', all_metadata_handler), url(r'^v1/metadata/(?P[a-zA-Z-]+)/$', metadata_handler), diff --git a/billy/web/public/forms.py b/billy/web/public/forms.py index 62479d82..30d23555 100644 --- a/billy/web/public/forms.py +++ b/billy/web/public/forms.py @@ -51,9 +51,9 @@ class FilterBillsForm(forms.Form): if len(_status_choices) == 4: chamber = forms.MultipleChoiceField( - choices=_chamber_choices, - widget=forms.CheckboxSelectMultiple(), - required=False) + choices=_chamber_choices, + widget=forms.CheckboxSelectMultiple(), + required=False) status = forms.ChoiceField(choices=_status_choices, required=False) @@ -70,25 +70,20 @@ class FilterBillsForm(forms.Form): BILL_SUBJECTS = [('', '')] + zip(_bill_subjects, _bill_subjects) chamber = forms.MultipleChoiceField( - choices=(('upper', 'upper'), - ('lower', 'lower')), - widget=forms.CheckboxSelectMultiple(), - required=False) + choices=(('upper', 'upper'), ('lower', 'lower')), + widget=forms.CheckboxSelectMultiple(), required=False) status = forms.ChoiceField( - choices=( - ('', ''), - ('passed_lower', 'Passed lower'), - ('passed_upper', 'Passed upper'), - ('signed', 'Signed'), - ), required=False) + choices=( + ('', ''), + ('passed_lower', 'Passed lower'), + ('passed_upper', 'Passed upper'), + ('signed', 'Signed') + ), required=False) type = forms.ChoiceField(choices=BILL_TYPES, required=False) subjects = forms.MultipleChoiceField(choices=BILL_SUBJECTS, - required=False, - #widget=forms.CheckboxSelectMultiple() - #widget=FilteredSelectMultiple("Subjects", is_stacked=False) - ) + required=False) return FilterBillsForm diff --git a/billy/web/public/templatetags/customtags.py b/billy/web/public/templatetags/customtags.py index f319caa2..4dbbc050 100644 --- a/billy/web/public/templatetags/customtags.py +++ b/billy/web/public/templatetags/customtags.py @@ -17,7 +17,7 @@ @register.inclusion_tag(templatename('region_select_form')) def region_select_form(abbr=None): - return {'form': get_region_select_form({'abbr': abbr})} + return {'form': get_region_select_form({'abbr': abbr})} @register.inclusion_tag(templatename('sources')) @@ -148,10 +148,10 @@ def favorite(context, obj_id, obj_type, abbr=None, _is_favorite=None, abbr = abbr or context.get('abbr', 'all') return dict(extra_spec, - obj_type=obj_type, obj_id=obj_id, - is_favorite=_is_favorite, request=request, - abbr=abbr or context['abbr'], - params=params or urllib.urlencode(request.GET)) + obj_type=obj_type, obj_id=obj_id, + is_favorite=_is_favorite, request=request, + abbr=abbr or context['abbr'], + params=params or urllib.urlencode(request.GET)) @register.inclusion_tag(templatename('_notification_preference')) diff --git a/billy/web/public/urls.py b/billy/web/public/urls.py index db56cef9..29fd7d9c 100644 --- a/billy/web/public/urls.py +++ b/billy/web/public/urls.py @@ -7,7 +7,9 @@ from billy.web.public.feeds import VotesListFeed, NewsListFeed, EventsFeed # misc. views -urlpatterns = patterns('billy.web.public.views.misc', +urlpatterns = patterns( + 'billy.web.public.views.misc', + url(r'^$', 'homepage', name='homepage'), url(r'^downloads/$', 'downloads', name='downloads'), url(r'^find_your_legislator/$', 'find_your_legislator', @@ -22,8 +24,8 @@ url(r'^(?P[a-z-]+)/(?P[\w-]+)/(?P<_id>[\w-]+)/' '(?P[^/]+)/news/rss/$', NewsListFeed(), name='news_list_rss'), - url(r'^(?P[a-z-]+)/(?P[\w-]+)/(?P<_id>[\w-]+)/votes/$', - VotesList.as_view(), name='votes_list'), + url(r'^(?P[a-z-]+)/(?P[\w-]+)' + '/(?P<_id>[\w-]+)/votes/$', VotesList.as_view(), name='votes_list'), url(r'^(?P[a-z-]+)/(?P[\w-]+)/(?P<_id>[\w-]+)/' 'votes/rss/$', VotesListFeed(), name='votes_list_rss'), @@ -31,13 +33,12 @@ ) # user-related views -urlpatterns += patterns('', - ( - r'^login/$', - 'django.contrib.auth.views.login', - { - 'template_name': 'billy/web/public/login.html' - } +urlpatterns += patterns( + '', + + # delete this once real login lands + (r'^login/$', 'django.contrib.auth.views.login', + {'template_name': 'billy/web/public/login.html'} ), url(r'^profile/$', 'billy.web.public.views.misc.user_profile', @@ -55,7 +56,9 @@ ) # region specific -urlpatterns += patterns('billy.web.public.views.region', +urlpatterns += patterns( + 'billy.web.public.views.region', + url(r'^(?P[a-z-]+)/search/$', 'search', name='search'), url(r'^(?P[a-z-]+)/search/show_more_legislators/$', ShowMoreLegislators.as_view(), name='show_more_legislators'), @@ -64,7 +67,9 @@ ) # events -urlpatterns += patterns('billy.web.public.views.events', +urlpatterns += patterns( + 'billy.web.public.views.events', + url(r'^(?P[a-z-]+)/events/$', EventsList.as_view(), name='events'), url(r'^(?P[a-z-]+)/events/rss/$', EventsFeed(), @@ -76,14 +81,17 @@ ) # committees -urlpatterns += patterns('billy.web.public.views.committees', +urlpatterns += patterns( + 'billy.web.public.views.committees', + url(r'^(?P[a-z-]+)/committees/$', 'committees', name='committees'), url(r'^(?P[a-z-]+)/committees/(?P[A-Z]{3}\d+)/', 'committee', name='committee'), ) # legislators -urlpatterns += patterns('billy.web.public.views.legislators', +urlpatterns += patterns( + 'billy.web.public.views.legislators', url(r'^(?P[a-z-]+)/legislators/$', 'legislators', name='legislators'), @@ -94,7 +102,9 @@ ) # speeches -urlpatterns += patterns('billy.web.public.views.speeches', +urlpatterns += patterns( + 'billy.web.public.views.speeches', + url(r'^(?P[a-z-]+)/speeches/$', 'speeches', name='speeches'), url(r'^(?P[a-z-]+)/speeches/(?P[\w-]+)/', @@ -102,7 +112,9 @@ ) # bills -urlpatterns += patterns('billy.web.public.views.bills', +urlpatterns += patterns( + 'billy.web.public.views.bills', + url(r'^(?P[a-z-]+)/bills/$', BillList.as_view(), name='bills'), url(r'^(?P[a-z-]+)/bills/feed/$', BillFeed.as_view(), name='bills_feed'), @@ -120,5 +132,6 @@ url(r'^(?P[a-z-]+)/bills/(?P[^/]+)/' r'(?P[^/]+)/(?Pversions)/$', 'all_versions', name='bill_all_versions'), - url(r'^(?P[a-z-]+)/votes/(?P[\w-]+)/$', 'vote', name='vote'), + url(r'^(?P[a-z-]+)/votes/(?P[\w-]+)/$', + 'vote', name='vote'), ) diff --git a/billy/web/public/views/bills.py b/billy/web/public/views/bills.py index cb211e7e..ad4339a8 100644 --- a/billy/web/public/views/bills.py +++ b/billy/web/public/views/bills.py @@ -43,8 +43,8 @@ def get_context_data(self, *args, **kwargs): Templates: - Are specified in subclasses. ''' - context = super(RelatedBillsList, self).get_context_data( - *args, **kwargs) + context = super(RelatedBillsList, self).get_context_data(*args, + **kwargs) metadata = context['metadata'] FilterBillsForm = get_filter_bills_form(metadata) @@ -74,19 +74,21 @@ def get_context_data(self, *args, **kwargs): description.extend([chamber[0].title(), 'Chamber']) description.append((type or 'Bill') + 's') if session: - description.append('(%s)' % - metadata['session_details'][session]['display_name']) + description.append( + '(%s)' % + metadata['session_details'][session]['display_name'] + ) if status == 'passed_lower': long_description.append('which have passed the ' + - metadata['chambers']['lower']['name']) + metadata['chambers']['lower']['name']) elif status == 'passed_upper': long_description.append('which have passed the ' + - metadata['chambers']['upper']['name']) + metadata['chambers']['upper']['name']) elif status == 'signed': long_description.append('which have been signed into law') if sponsor: leg = db.legislators.find_one({'_all_ids': sponsor}, - fields=('full_name', '_id')) + fields=('full_name', '_id')) leg = leg['full_name'] long_description.append('sponsored by ' + leg) if search_text: @@ -242,11 +244,12 @@ def get(self, request, *args, **kwargs): context = self.get_context_data(*args, **kwargs) queryset = self.get_queryset() link = 'http://%s%s?%s' % (request.META['SERVER_NAME'], - reverse('bills', args=args, kwargs=kwargs), - request.META['QUERY_STRING']) + reverse('bills', args=args, kwargs=kwargs), + request.META['QUERY_STRING']) feed_url = 'http://%s%s?%s' % (request.META['SERVER_NAME'], - reverse('bills_feed', args=args, kwargs=kwargs), - request.META['QUERY_STRING']) + reverse('bills_feed', args=args, + kwargs=kwargs), + request.META['QUERY_STRING']) feed = Rss201rev2Feed(title=context['description'], link=link, feed_url=feed_url, ttl=360, description=context['description'] + @@ -316,7 +319,8 @@ def bill(request, abbr, session, bill_id): else: sponsors = bill.sponsors_manager.first_fifteen - return render(request, templatename('bill'), + return render( + request, templatename('bill'), dict(vote_preview_row_template=templatename('vote_preview_row'), abbr=abbr, metadata=Metadata.get_object(abbr), @@ -418,11 +422,9 @@ def func(request, abbr, session, bill_id, key): raise Http404('no bill found {0} {1} {2}'.format(abbr, session, bill_id)) return render(request, templatename('bill_all_%s' % key), - dict(abbr=abbr, - metadata=Metadata.get_object(abbr), - bill=bill, - sources=bill['sources'], - nav_active='bills')) + dict(abbr=abbr, metadata=Metadata.get_object(abbr), + bill=bill, sources=bill['sources'], + nav_active='bills')) return func all_documents = show_all('documents') diff --git a/billy/web/public/views/committees.py b/billy/web/public/views/committees.py index 2f471348..bb3937f2 100644 --- a/billy/web/public/views/committees.py +++ b/billy/web/public/views/committees.py @@ -71,19 +71,20 @@ def committees(request, abbr): sort_order = int(request.GET.get('order', 1)) committees = meta.committees_legislators(spec, fields=fields, - sort=[(sort_key, sort_order)]) + sort=[(sort_key, sort_order)]) sort_order = -sort_order - return TemplateResponse(request, templatename('committees'), - dict(chamber=chamber, committees=committees, abbr=abbr, - metadata=meta, chamber_name=chamber_name, - chamber_select_template=templatename('chamber_select_form'), - chamber_select_collection='committees', - chamber_select_chambers=chambers, - committees_table_template=templatename('committees_table'), - show_chamber_column=show_chamber_column, - sort_order=sort_order, nav_active='committees')) + return TemplateResponse( + request, templatename('committees'), + dict(chamber=chamber, committees=committees, abbr=abbr, metadata=meta, + chamber_name=chamber_name, + chamber_select_template=templatename('chamber_select_form'), + chamber_select_collection='committees', + chamber_select_chambers=chambers, + committees_table_template=templatename('committees_table'), + show_chamber_column=show_chamber_column, sort_order=sort_order, + nav_active='committees')) def committee(request, abbr, committee_id): diff --git a/billy/web/public/views/favorites.py b/billy/web/public/views/favorites.py index f8230320..af73a9d9 100644 --- a/billy/web/public/views/favorites.py +++ b/billy/web/public/views/favorites.py @@ -103,7 +103,7 @@ def _get_favorite_object(favorite): 'bill': 'bills', 'committee': 'committees', 'legislator': 'legislators', - }.get(favorite['obj_type']) + }.get(favorite['obj_type']) if collection_name is not None: return getattr(mdb, collection_name).find_one(favorite['obj_id']) @@ -188,7 +188,7 @@ def set_favorite(request): obj_type=request.POST['obj_type'], obj_id=request.POST['obj_id'], user_id=request.user.id - ) + ) if request.POST['obj_type'] == 'search': # Add the search text into the spec. @@ -208,7 +208,7 @@ def set_favorite(request): doc = dict( is_favorite=is_favorite, timestamp=datetime.datetime.utcnow(), - ) + ) doc.update(spec) # Create the doc if missing, else update based on the spec. user_db.favorites.update(spec, doc, upsert=True) diff --git a/billy/web/public/views/legislators.py b/billy/web/public/views/legislators.py index 016f02ac..d5b6e263 100644 --- a/billy/web/public/views/legislators.py +++ b/billy/web/public/views/legislators.py @@ -93,20 +93,17 @@ def sort_by_district(obj): sort_order = {1: -1, -1: 1}[sort_order] legislators = list(legislators) - return TemplateResponse(request, templatename('legislators'), - dict(metadata=meta, - chamber=chamber, - chamber_title=chamber_title, - chamber_select_template=templatename('chamber_select_form'), - chamber_select_collection='legislators', - chamber_select_chambers=chambers, - show_chamber_column=True, - abbr=abbr, - legislators=legislators, - sort_order=sort_order, - sort_key=sort_key, - legislator_table=templatename('legislator_table'), - nav_active='legislators')) + return TemplateResponse( + request, templatename('legislators'), + dict(metadata=meta, chamber=chamber, + chamber_title=chamber_title, + chamber_select_template=templatename('chamber_select_form'), + chamber_select_collection='legislators', + chamber_select_chambers=chambers, show_chamber_column=True, + abbr=abbr, legislators=legislators, sort_order=sort_order, + sort_key=sort_key, + legislator_table=templatename('legislator_table'), + nav_active='legislators')) def legislator(request, abbr, _id, slug=None): @@ -186,24 +183,21 @@ def legislator(request, abbr, _id, slug=None): has_votes = bool(legislator_votes) feed_entries = legislator.feed_entries() feed_entries_list = list(feed_entries.limit(5)) - return render(request, templatename('legislator'), - dict( - feed_entry_template=templatename('feed_entry'), - vote_preview_row_template=templatename('vote_preview_row'), - roles=legislator.roles_manager, - abbr=abbr, - district_id=district_id, - metadata=meta, - legislator=legislator, - sources=legislator['sources'], - sponsored_bills=sponsored_bills, - legislator_votes=list(legislator_votes), - has_feed_entries=bool(feed_entries_list), - feed_entries=feed_entries_list[:4], - feed_entries_count=len(feed_entries_list), - feed_entries_more_count=max([0, feed_entries.count() - 5]), - has_votes=has_votes, - nav_active='legislators')) + return render( + request, templatename('legislator'), + dict(feed_entry_template=templatename('feed_entry'), + vote_preview_row_template=templatename('vote_preview_row'), + roles=legislator.roles_manager, abbr=abbr, + district_id=district_id, metadata=meta, legislator=legislator, + sources=legislator['sources'], + sponsored_bills=sponsored_bills, + legislator_votes=list(legislator_votes), + has_feed_entries=bool(feed_entries_list), + feed_entries=feed_entries_list[:4], + feed_entries_count=len(feed_entries_list), + feed_entries_more_count=max([0, feed_entries.count() - 5]), + has_votes=has_votes, + nav_active='legislators')) def legislator_inactive(request, abbr, legislator): @@ -232,15 +226,16 @@ def legislator_inactive(request, abbr, legislator): legislator_votes = legislator.votes_5_sorted() has_votes = bool(legislator_votes) - return render(request, templatename('legislator'), + return render( + request, templatename('legislator'), dict(feed_entry_template=templatename('feed_entry'), - vote_preview_row_template=templatename('vote_preview_row'), - old_roles=legislator.old_roles_manager, - abbr=abbr, - metadata=legislator.metadata, - legislator=legislator, - sources=legislator['sources'], - sponsored_bills=sponsored_bills, - legislator_votes=legislator_votes, - has_votes=has_votes, - nav_active='legislators')) + vote_preview_row_template=templatename('vote_preview_row'), + old_roles=legislator.old_roles_manager, + abbr=abbr, + metadata=legislator.metadata, + legislator=legislator, + sources=legislator['sources'], + sponsored_bills=sponsored_bills, + legislator_votes=legislator_votes, + has_votes=has_votes, + nav_active='legislators')) diff --git a/billy/web/public/views/misc.py b/billy/web/public/views/misc.py index 48390f0b..4aa5bd52 100644 --- a/billy/web/public/views/misc.py +++ b/billy/web/public/views/misc.py @@ -221,7 +221,7 @@ def get(self, request, abbr, collection_name, _id, slug): return redirect('news_list', abbr, collection_name, leg['_id'], slug) return super(NewsList, self).get(request, abbr, collection_name, _id, - slug) + slug) @login_required diff --git a/billy/web/public/views/region.py b/billy/web/public/views/region.py index 25af91cf..597b8831 100644 --- a/billy/web/public/views/region.py +++ b/billy/web/public/views/region.py @@ -157,7 +157,8 @@ def search(request, abbr): else: metadata = None - return render(request, templatename('search_results_bills_legislators'), + return render( + request, templatename('search_results_bills_legislators'), dict(search_text=search_text, abbr=abbr, metadata=metadata, diff --git a/billy/web/public/views/utils.py b/billy/web/public/views/utils.py index dfd66f6e..91a4e4a9 100644 --- a/billy/web/public/views/utils.py +++ b/billy/web/public/views/utils.py @@ -74,7 +74,7 @@ def get_context_data(self, *args, **kwargs): for attr in ('title', 'description'): if attr not in context: context[attr] = self._render(attr, context, - request=self.request) + request=self.request) # Add the correct path to paginated links. Yuck. if self.request.GET: @@ -114,8 +114,8 @@ class RelatedObjectsList(ListViewBase): defer_rendering_title = True def get_context_data(self, *args, **kwargs): - context = super(RelatedObjectsList, self).get_context_data( - *args, **kwargs) + context = super(RelatedObjectsList, self).get_context_data(*args, + **kwargs) context.update( obj=self.get_object(), collection_name=self.collection_name) diff --git a/billy/web/urls.py b/billy/web/urls.py index 4f0417f0..3c727527 100644 --- a/billy/web/urls.py +++ b/billy/web/urls.py @@ -1,7 +1,8 @@ from django.conf import settings from django.conf.urls.defaults import patterns, include, url -urlpatterns = patterns('', +urlpatterns = patterns( + '', (r'^api/', include('billy.web.api.urls')), (r'^admin/', include('billy.web.admin.urls')), (r'^public/', include('billy.web.public.urls')),