From 5c6ab3161422d10c7187da02720525f781c0c2ec Mon Sep 17 00:00:00 2001 From: David Read Date: Fri, 4 Sep 2015 16:37:42 +0100 Subject: [PATCH] PEP8, lint and log string substitution refinement. --- ckan/controllers/api.py | 70 +++++----- ckan/controllers/group.py | 42 +++--- ckan/controllers/package.py | 145 ++++++++++++--------- ckan/lib/helpers.py | 57 +++++--- ckan/tests/legacy/test_coding_standards.py | 4 - 5 files changed, 180 insertions(+), 138 deletions(-) diff --git a/ckan/controllers/api.py b/ckan/controllers/api.py index 2f7eab631f6..484d8b12188 100644 --- a/ckan/controllers/api.py +++ b/ckan/controllers/api.py @@ -85,7 +85,7 @@ def _finish(self, status_int, response_data=None, if content_type == 'json': response_msg = h.json.dumps( response_data, - for_json=True) # handle objects with for_json methods + for_json=True) # handle objects with for_json methods else: response_msg = response_data # Support "JSONP" callback. @@ -161,7 +161,7 @@ def action(self, logic_function, ver=None): try: function = get_action(logic_function) except KeyError: - log.info('Can\'t find logic function: %s' % logic_function) + log.info('Can\'t find logic function: %s', logic_function) return self._finish_bad_request( _('Action name not known: %s') % logic_function) @@ -183,12 +183,13 @@ def action(self, logic_function, ver=None): request_data = self._get_request_data(try_url_params= side_effect_free) except ValueError, inst: - log.info('Bad Action API request data: %s' % inst) + log.info('Bad Action API request data: %s', inst) return self._finish_bad_request( _('JSON Error: %s') % inst) if not isinstance(request_data, dict): # this occurs if request_data is blank - log.info('Bad Action API request data - not dict: %r' % request_data) + log.info('Bad Action API request data - not dict: %r', + request_data) return self._finish_bad_request( _('Bad request data: %s') % 'Request data JSON decoded to %r but ' @@ -201,7 +202,8 @@ def action(self, logic_function, ver=None): return_dict['success'] = True return_dict['result'] = result except DataError, e: - log.info('Format incorrect (Action API): %s - %s' % (e.error, request_data)) + log.info('Format incorrect (Action API): %s - %s', + e.error, request_data) return_dict['error'] = {'__type': 'Integrity Error', 'message': e.error, 'data': request_data} @@ -211,7 +213,7 @@ def action(self, logic_function, ver=None): return_dict['error'] = {'__type': 'Authorization Error', 'message': _('Access denied')} return_dict['success'] = False - + if unicode(e): return_dict['error']['message'] += u': %s' % e @@ -229,7 +231,7 @@ def action(self, logic_function, ver=None): return_dict['error'] = error_dict return_dict['success'] = False # CS nasty_string ignore - log.info('Validation error (Action API): %r' % str(e.error_dict)) + log.info('Validation error (Action API): %r', str(e.error_dict)) return self._finish(409, return_dict, content_type='json') except search.SearchQueryError, e: return_dict['error'] = {'__type': 'Search Query Error', @@ -243,9 +245,10 @@ def action(self, logic_function, ver=None): return_dict['success'] = False return self._finish(409, return_dict, content_type='json') except search.SearchIndexError, e: - return_dict['error'] = {'__type': 'Search Index Error', - 'message': 'Unable to add package to search index: %s' % - str(e)} + return_dict['error'] = { + '__type': 'Search Index Error', + 'message': 'Unable to add package to search index: %s' % + str(e)} return_dict['success'] = False return self._finish(500, return_dict, content_type='json') return self._finish_ok(return_dict) @@ -268,7 +271,7 @@ def list(self, ver=None, register=None, subregister=None, id=None): context = {'model': model, 'session': model.Session, 'user': c.user, 'api_version': ver, 'auth_user_obj': c.userobj} - log.debug('listing: %s' % context) + log.debug('listing: %s', context) action_map = { 'revision': 'revision_list', 'group': 'group_list', @@ -313,7 +316,7 @@ def show(self, ver=None, register=None, subregister=None, 'api_version': ver, 'auth_user_obj': c.userobj} data_dict = {'id': id, 'id2': id2, 'rel': subregister} - log.debug('show: %s' % context) + log.debug('show: %s', context) action = self._get_action_from_map(action_map, register, subregister) if not action: @@ -345,7 +348,7 @@ def create(self, ver=None, register=None, subregister=None, context = {'model': model, 'session': model.Session, 'user': c.user, 'api_version': ver, 'auth_user_obj': c.userobj} - log.debug('create: %s' % (context)) + log.debug('create: %s', (context)) try: request_data = self._get_request_data() data_dict = {'id': id, 'id2': id2, 'rel': subregister} @@ -375,10 +378,11 @@ def create(self, ver=None, register=None, subregister=None, return self._finish_not_found(unicode(e)) except ValidationError, e: # CS: nasty_string ignore - log.info('Validation error (REST create): %r' % str(e.error_dict)) + log.info('Validation error (REST create): %r', str(e.error_dict)) return self._finish(409, e.error_dict, content_type='json') except DataError, e: - log.info('Format incorrect (REST create): %s - %s' % (e.error, request_data)) + log.info('Format incorrect (REST create): %s - %s', + e.error, request_data) error_dict = { 'success': False, 'error': {'__type': 'Integrity Error', @@ -386,7 +390,7 @@ def create(self, ver=None, register=None, subregister=None, 'data': request_data}} return self._finish(400, error_dict, content_type='json') except search.SearchIndexError: - log.error('Unable to add package to search index: %s' % + log.error('Unable to add package to search index: %s', request_data) return self._finish(500, _(u'Unable to add package to search index') % @@ -407,7 +411,7 @@ def update(self, ver=None, register=None, subregister=None, context = {'model': model, 'session': model.Session, 'user': c.user, 'api_version': ver, 'id': id, 'auth_user_obj': c.userobj} - log.debug('update: %s' % (context)) + log.debug('update: %s', context) try: request_data = self._get_request_data() data_dict = {'id': id, 'id2': id2, 'rel': subregister} @@ -430,10 +434,11 @@ def update(self, ver=None, register=None, subregister=None, return self._finish_not_found(unicode(e)) except ValidationError, e: # CS: nasty_string ignore - log.info('Validation error (REST update): %r' % str(e.error_dict)) + log.info('Validation error (REST update): %r', str(e.error_dict)) return self._finish(409, e.error_dict, content_type='json') except DataError, e: - log.info('Format incorrect (REST update): %s - %s' % (e.error, request_data)) + log.info('Format incorrect (REST update): %s - %s', + e.error, request_data) error_dict = { 'success': False, 'error': {'__type': 'Integrity Error', @@ -441,7 +446,7 @@ def update(self, ver=None, register=None, subregister=None, 'data': request_data}} return self._finish(400, error_dict, content_type='json') except search.SearchIndexError: - log.error('Unable to update search index: %s' % request_data) + log.error('Unable to update search index: %s', request_data) return self._finish(500, _(u'Unable to update search index') % request_data) @@ -461,7 +466,7 @@ def delete(self, ver=None, register=None, subregister=None, data_dict = {'id': id, 'id2': id2, 'rel': subregister} - log.debug('delete %s/%s/%s/%s' % (register, id, subregister, id2)) + log.debug('delete %s/%s/%s/%s', register, id, subregister, id2) action = self._get_action_from_map(action_map, register, subregister) if not action: @@ -477,12 +482,12 @@ def delete(self, ver=None, register=None, subregister=None, return self._finish_not_found(unicode(e)) except ValidationError, e: # CS: nasty_string ignore - log.info('Validation error (REST delete): %r' % str(e.error_dict)) + log.info('Validation error (REST delete): %r', str(e.error_dict)) return self._finish(409, e.error_dict, content_type='json') def search(self, ver=None, register=None): - log.debug('search %s params: %r' % (register, request.params)) + log.debug('search %s params: %r', register, request.params) if register == 'revision': since_time = None if 'since_id' in request.params: @@ -504,10 +509,10 @@ def search(self, ver=None, register=None): else: return self._finish_bad_request( _("Missing search term ('since_id=UUID' or " + - " 'since_time=TIMESTAMP')")) + " 'since_time=TIMESTAMP')")) revs = model.Session.query(model.Revision).\ filter(model.Revision.timestamp > since_time) - return self._finish_ok([rev.id for rev in revs]) + return self._finish_ok([rev_.id for rev_ in revs]) elif register in ['dataset', 'package', 'resource']: try: params = MultiDict(self._get_search_params(request.params)) @@ -685,14 +690,15 @@ def organization_autocomplete(self): if q: context = {'user': c.user, 'model': model} data_dict = {'q': q, 'limit': limit} - organization_list = get_action('organization_autocomplete')(context, data_dict) + organization_list = \ + get_action('organization_autocomplete')(context, data_dict) return organization_list def is_slug_valid(self): def package_exists(val): if model.Session.query(model.Package) \ - .autoflush(False).filter_by(name=val).count(): + .autoflush(False).filter_by(name=val).count(): return True return False @@ -849,9 +855,9 @@ def make_unicode(entity): else: return entity - cls.log.debug('Retrieving request params: %r' % request.params) - cls.log.debug('Retrieving request POST: %r' % request.POST) - cls.log.debug('Retrieving request GET: %r' % request.GET) + cls.log.debug('Retrieving request params: %r', request.params) + cls.log.debug('Retrieving request POST: %r', request.POST) + cls.log.debug('Retrieving request GET: %r', request.GET) request_data = None if request.POST and request.content_type == 'multipart/form-data': request_data = dict(request.POST) @@ -882,7 +888,7 @@ def make_unicode(entity): msg = "Could not extract request body data: %s" % \ (inst) raise ValueError(msg) - cls.log.debug('Retrieved request body: %r' % request.body) + cls.log.debug('Retrieved request body: %r', request.body) if not request_data: if not try_url_params: msg = "No request body data" @@ -905,5 +911,5 @@ def make_unicode(entity): # if val is str then assume it is ascii, since json converts # utf8 encoded JSON to unicode request_data[key] = make_unicode(val) - cls.log.debug('Request data extracted: %r' % request_data) + cls.log.debug('Request data extracted: %r', request_data) return request_data diff --git a/ckan/controllers/group.py b/ckan/controllers/group.py index 7c5706b361d..515db88758f 100644 --- a/ckan/controllers/group.py +++ b/ckan/controllers/group.py @@ -212,7 +212,7 @@ def read(self, id, limit=20): data_dict = {'id': id} # unicode format (decoded from utf8) - q = c.q = request.params.get('q', '') + c.q = request.params.get('q', '') try: # Do not query for the group datasets when dictizing, as they will @@ -243,7 +243,8 @@ def _read(self, id, limit, group_type): else: q += ' groups:"%s"' % c.group_dict.get('name') - c.description_formatted = h.render_markdown(c.group_dict.get('description')) + c.description_formatted = \ + h.render_markdown(c.group_dict.get('description')) context['return_query'] = True @@ -339,7 +340,8 @@ def pager_url(q=None, page=None): 'extras': search_extras } - context_ = dict((k, v) for (k, v) in context.items() if k != 'schema') + context_ = dict((k, v) for (k, v) in context.items() + if k != 'schema') query = get_action('package_search')(context_, data_dict) c.page = h.Page( @@ -371,8 +373,8 @@ def pager_url(q=None, page=None): c.facets = {} c.page = h.Page(collection=[]) - self._setup_template_variables(context, {'id':id}, - group_type=group_type) + self._setup_template_variables(context, {'id': id}, + group_type=group_type) def _update_facet_titles(self, facets, group_type): for plugin in plugins.PluginImplementations(plugins.IFacets): @@ -523,7 +525,7 @@ def edit(self, id, data=None, errors=None, error_summary=None): try: self._check_access('group_update', context) - except NotAuthorized, e: + except NotAuthorized: abort(401, _('User %r not authorized to edit %s') % (c.user, id)) errors = errors or {} @@ -708,19 +710,21 @@ def member_new(self, id): 'role': data_dict['role'] } del data_dict['email'] - user_dict = self._action('user_invite')(context, - user_data_dict) + user_dict = self._action('user_invite')( + context, user_data_dict) data_dict['username'] = user_dict['name'] - c.group_dict = self._action('group_member_create')(context, data_dict) - + c.group_dict = self._action('group_member_create')( + context, data_dict) self._redirect_to_this_controller(action='members', id=id) else: user = request.params.get('user') if user: - c.user_dict = get_action('user_show')(context, {'id': user}) - c.user_role = authz.users_role_for_group_or_org(id, user) or 'member' + c.user_dict = \ + get_action('user_show')(context, {'id': user}) + c.user_role = \ + authz.users_role_for_group_or_org(id, user) or 'member' else: c.user_role = 'member' except NotAuthorized: @@ -748,7 +752,8 @@ def member_delete(self, id): try: user_id = request.params.get('user') if request.method == 'POST': - self._action('group_member_delete')(context, {'id': id, 'user_id': user_id}) + self._action('group_member_delete')( + context, {'id': id, 'user_id': user_id}) h.flash_notice(_('Group member has been deleted.')) self._redirect_to_this_controller(action='members', id=id) c.user_dict = self._action('user_show')(context, {'id': user_id}) @@ -758,7 +763,8 @@ def member_delete(self, id): abort(401, _('Unauthorized to delete group %s') % '') except NotFound: abort(404, _('Group not found')) - return self._render_template('group/confirm_delete_member.html', group_type) + return self._render_template('group/confirm_delete_member.html', + group_type) def history(self, id): group_type = self._ensure_controller_matches_group_type(id) @@ -768,7 +774,7 @@ def history(self, id): 'diff': request.params.getone('selected1'), 'oldid': request.params.getone('selected2'), } - except KeyError, e: + except KeyError: if 'group_name' in dict(request.params): id = request.params.getone('group_name') c.error = \ @@ -909,7 +915,8 @@ def followers(self, id): 'user': c.user or c.author} c.group_dict = self._get_group_dict(id) try: - c.followers = get_action('group_follower_list')(context, {'id': id}) + c.followers = \ + get_action('group_follower_list')(context, {'id': id}) except NotAuthorized: abort(401, _('Unauthorized to view followers %s') % '') return render('group/followers.html', @@ -940,7 +947,8 @@ def _get_group_dict(self, id): 'user': c.user or c.author, 'for_view': True} try: - return self._action('group_show')(context, {'id': id, 'include_datasets': False}) + return self._action('group_show')( + context, {'id': id, 'include_datasets': False}) except NotFound: abort(404, _('Group not found')) except NotAuthorized: diff --git a/ckan/controllers/package.py b/ckan/controllers/package.py index a70a268dfd4..3b26cc0a433 100644 --- a/ckan/controllers/package.py +++ b/ckan/controllers/package.py @@ -5,8 +5,6 @@ import cgi from pylons import config -from genshi.template import MarkupTemplate -from genshi.template.text import NewTextTemplate from paste.deploy.converters import asbool import paste.fileapp @@ -164,7 +162,7 @@ def drill_down_url(alternative_url=None, **by): def remove_field(key, value=None, replace=None): return h.remove_url_param(key, value=value, replace=replace, - controller='package', action='search') + controller='package', action='search') c.remove_field = remove_field @@ -232,18 +230,19 @@ def pager_url(q=None, page=None): else: # Unless changed via config options, don't show non standard # dataset types on the default search page - if not asbool(config.get('ckan.search.show_all_types', 'False')): + if not asbool( + config.get('ckan.search.show_all_types', 'False')): fq += ' +dataset_type:dataset' facets = OrderedDict() default_facet_titles = { - 'organization': _('Organizations'), - 'groups': _('Groups'), - 'tags': _('Tags'), - 'res_format': _('Formats'), - 'license_id': _('Licenses'), - } + 'organization': _('Organizations'), + 'groups': _('Groups'), + 'tags': _('Tags'), + 'res_format': _('Formats'), + 'license_id': _('Licenses'), + } for facet in g.facets: if facet in default_facet_titles: @@ -294,13 +293,12 @@ def pager_url(q=None, page=None): except ValueError: abort(400, _('Parameter "{parameter_name}" is not ' 'an integer').format( - parameter_name='_%s_limit' % facet - )) + parameter_name='_%s_limit' % facet)) c.search_facets_limits[facet] = limit maintain.deprecate_context_item( - 'facets', - 'Use `c.search_facets` instead.') + 'facets', + 'Use `c.search_facets` instead.') self._setup_template_variables(context, {}, package_type=package_type) @@ -334,7 +332,7 @@ def resources(self, id): check_access('package_update', context, data_dict) except NotFound: abort(404, _('Dataset not found')) - except NotAuthorized, e: + except NotAuthorized: abort(401, _('User %r not authorized to edit %s') % (c.user, id)) # check if package exists try: @@ -425,12 +423,12 @@ def read(self, id, format='html'): except ckan.lib.render.TemplateNotFound: msg = _("Viewing {package_type} datasets in {format} format is " "not supported (template file {file} not found).".format( - package_type=package_type, format=format, file=template)) + package_type=package_type, format=format, + file=template)) abort(404, msg) assert False, "We should never get here" - def history(self, id): if 'diff' in request.params or 'selected1' in request.params: @@ -439,7 +437,7 @@ def history(self, id): 'diff': request.params.getone('selected1'), 'oldid': request.params.getone('selected2'), } - except KeyError, e: + except KeyError: if 'pkg_name' in dict(request.params): id = request.params.getone('pkg_name') c.error = \ @@ -560,7 +558,7 @@ def new(self, data=None, errors=None, error_summary=None): 'error_summary': error_summary, 'action': 'new', 'stage': stage, 'dataset_type': package_type, - } + } c.errors_json = h.json.dumps(errors) self._setup_template_variables(context, {}, @@ -584,8 +582,9 @@ def resource_edit(self, id, resource_id, data=None, errors=None, error_summary=None): if request.method == 'POST' and not data: - data = data or clean_dict(dict_fns.unflatten(tuplize_dict(parse_params( - request.POST)))) + data = data or \ + clean_dict(dict_fns.unflatten(tuplize_dict(parse_params( + request.POST)))) # we don't want to include save as it is part of the form del data['save'] @@ -616,15 +615,18 @@ def resource_edit(self, id, resource_id, data=None, errors=None, pkg_dict = get_action('package_show')(context, {'id': id}) if pkg_dict['state'].startswith('draft'): # dataset has not yet been fully created - resource_dict = get_action('resource_show')(context, {'id': resource_id}) - fields = ['url', 'resource_type', 'format', 'name', 'description', 'id'] + resource_dict = get_action('resource_show')(context, + {'id': resource_id}) + fields = ['url', 'resource_type', 'format', 'name', 'description', + 'id'] data = {} for field in fields: data[field] = resource_dict[field] return self.new_resource(id, data=data) # resource is fully created try: - resource_dict = get_action('resource_show')(context, {'id': resource_id}) + resource_dict = get_action('resource_show')(context, + {'id': resource_id}) except NotFound: abort(404, _('Resource not found')) c.pkg_dict = pkg_dict @@ -644,7 +646,7 @@ def resource_edit(self, id, resource_id, data=None, errors=None, vars = {'data': data, 'errors': errors, 'error_summary': error_summary, 'action': 'new', 'resource_form_snippet': self._resource_form(package_type), - 'dataset_type':package_type} + 'dataset_type': package_type} return render('package/resource_edit.html', extra_vars=vars) def new_resource(self, id, data=None, errors=None, error_summary=None): @@ -652,8 +654,9 @@ def new_resource(self, id, data=None, errors=None, error_summary=None): forms. ''' if request.method == 'POST' and not data: save_action = request.params.get('save') - data = data or clean_dict(dict_fns.unflatten(tuplize_dict(parse_params( - request.POST)))) + data = data or \ + clean_dict(dict_fns.unflatten(tuplize_dict(parse_params( + request.POST)))) # we don't want to include save as it is part of the form del data['save'] resource_id = data['id'] @@ -666,7 +669,7 @@ def new_resource(self, id, data=None, errors=None, error_summary=None): data_provided = False for key, value in data.iteritems(): if ((value or isinstance(value, cgi.FieldStorage)) - and key != 'resource_type'): + and key != 'resource_type'): data_provided = True break @@ -681,8 +684,8 @@ def new_resource(self, id, data=None, errors=None, error_summary=None): except NotAuthorized: abort(401, _('Unauthorized to update dataset')) except NotFound: - abort(404, - _('The dataset {id} could not be found.').format(id=id)) + abort(404, _('The dataset {id} could not be found.' + ).format(id=id)) if not len(data_dict['resources']): # no data so keep on page msg = _('You must add at least one data resource') @@ -694,7 +697,8 @@ def new_resource(self, id, data=None, errors=None, error_summary=None): else: errors = {} error_summary = {_('Error'): msg} - return self.new_resource(id, data, errors, error_summary) + return self.new_resource(id, data, errors, + error_summary) # XXX race condition if another user edits/deletes data_dict = get_action('package_show')(context, {'id': id}) get_action('package_update')( @@ -717,8 +721,8 @@ def new_resource(self, id, data=None, errors=None, error_summary=None): except NotAuthorized: abort(401, _('Unauthorized to create a resource')) except NotFound: - abort(404, - _('The dataset {id} could not be found.').format(id=id)) + abort(404, _('The dataset {id} could not be found.' + ).format(id=id)) if save_action == 'go-metadata': # XXX race condition if another user edits/deletes data_dict = get_action('package_show')(context, {'id': id}) @@ -803,7 +807,7 @@ def edit(self, id, data=None, errors=None, error_summary=None): try: check_access('package_update', context) - except NotAuthorized, e: + except NotAuthorized: abort(401, _('User %r not authorized to edit %s') % (c.user, id)) # convert tags if not supplied in data if data and not data.get('tag_string'): @@ -814,7 +818,7 @@ def edit(self, id, data=None, errors=None, error_summary=None): form_vars = {'data': data, 'errors': errors, 'error_summary': error_summary, 'action': 'edit', 'dataset_type': package_type, - } + } c.errors_json = h.json.dumps(errors) self._setup_template_variables(context, {'id': id}, @@ -946,7 +950,8 @@ def _save_new(self, context, package_type=None): id=pkg_dict['name']) redirect(url) # Make sure we don't index this dataset - if request.params['save'] not in ['go-resource', 'go-metadata']: + if request.params['save'] not in ['go-resource', + 'go-metadata']: data_dict['state'] = 'draft' # allow the state to be changed context['allow_state_change'] = True @@ -962,7 +967,8 @@ def _save_new(self, context, package_type=None): id=pkg_dict['name']) redirect(url) - self._form_save_redirect(pkg_dict['name'], 'new', package_type=package_type) + self._form_save_redirect(pkg_dict['name'], 'new', + package_type=package_type) except NotAuthorized: abort(401, _('Unauthorized to read package %s') % '') except NotFound, e: @@ -1009,7 +1015,8 @@ def _save_edit(self, name_or_id, context, package_type=None): c.pkg = context['package'] c.pkg_dict = pkg - self._form_save_redirect(pkg['name'], 'edit', package_type=package_type) + self._form_save_redirect(pkg['name'], 'edit', + package_type=package_type) except NotAuthorized: abort(401, _('Unauthorized to read package %s') % id) except NotFound, e: @@ -1041,7 +1048,8 @@ def _form_save_redirect(self, pkgname, action, package_type=None): url = url.replace('', pkgname) else: if package_type is None or package_type == 'dataset': - url = h.url_for(controller='package', action='read', id=pkgname) + url = h.url_for(controller='package', action='read', + id=pkgname) else: url = h.url_for('{0}_read'.format(package_type), id=pkgname) redirect(url) @@ -1071,7 +1079,8 @@ def delete(self, id): def resource_delete(self, id, resource_id): if 'cancel' in request.params: - h.redirect_to(controller='package', action='resource_edit', resource_id=resource_id, id=id) + h.redirect_to(controller='package', action='resource_edit', + resource_id=resource_id, id=id) context = {'model': model, 'session': model.Session, 'user': c.user or c.author, 'auth_user_obj': c.userobj} @@ -1086,7 +1095,8 @@ def resource_delete(self, id, resource_id): get_action('resource_delete')(context, {'id': resource_id}) h.flash_notice(_('Resource has been deleted.')) h.redirect_to(controller='package', action='read', id=id) - c.resource_dict = get_action('resource_show')(context, {'id': resource_id}) + c.resource_dict = get_action('resource_show')( + context, {'id': resource_id}) c.pkg_id = id except NotAuthorized: abort(401, _('Unauthorized to delete resource %s') % '') @@ -1097,7 +1107,9 @@ def resource_delete(self, id, resource_id): def resource_read(self, id, resource_id): context = {'model': model, 'session': model.Session, - 'user': c.user or c.author, 'auth_user_obj': c.userobj, "for_view":True} + 'user': c.user or c.author, + 'auth_user_obj': c.userobj, + 'for_view': True} try: c.package = get_action('package_show')(context, {'id': id}) @@ -1127,7 +1139,8 @@ def resource_read(self, id, resource_id): c.package['isopen'] = False # TODO: find a nicer way of doing this - c.datastore_api = '%s/api/action' % config.get('ckan.site_url', '').rstrip('/') + c.datastore_api = '%s/api/action' % \ + config.get('ckan.site_url', '').rstrip('/') c.related_count = c.pkg.related_count @@ -1164,19 +1177,20 @@ def resource_read(self, id, resource_id): 'resource views') def _resource_preview(self, data_dict): '''Deprecated in 2.3''' - return bool(datapreview.get_preview_plugin(data_dict, return_first=True)) + return bool(datapreview.get_preview_plugin(data_dict, + return_first=True)) def resource_download(self, id, resource_id, filename=None): """ - Provides a direct download by either redirecting the user to the url stored - or downloading an uploaded file directly. + Provides a direct download by either redirecting the user to the url + stored or downloading an uploaded file directly. """ context = {'model': model, 'session': model.Session, 'user': c.user or c.author, 'auth_user_obj': c.userobj} try: rsc = get_action('resource_show')(context, {'id': resource_id}) - pkg = get_action('package_show')(context, {'id': id}) + get_action('package_show')(context, {'id': id}) except NotFound: abort(404, _('Resource not found')) except NotAuthorized: @@ -1187,11 +1201,12 @@ def resource_download(self, id, resource_id, filename=None): filepath = upload.get_path(rsc['id']) fileapp = paste.fileapp.FileApp(filepath) try: - status, headers, app_iter = request.call_application(fileapp) + status, headers, app_iter = request.call_application(fileapp) except OSError: - abort(404, _('Resource data not found')) + abort(404, _('Resource data not found')) response.headers.update(dict(headers)) - content_type, content_enc = mimetypes.guess_type(rsc.get('url','')) + content_type, content_enc = mimetypes.guess_type( + rsc.get('url', '')) if content_type: response.headers['Content-Type'] = content_type response.status = status @@ -1213,7 +1228,7 @@ def follow(self, id): package_dict['title'])) except ValidationError as e: error_message = (e.message or e.error_summary - or e.error_dict) + or e.error_dict) h.flash_error(error_message) except NotAuthorized as e: h.flash_error(e.message) @@ -1232,7 +1247,7 @@ def unfollow(self, id): package_dict['title'])) except ValidationError as e: error_message = (e.message or e.error_summary - or e.error_dict) + or e.error_dict) h.flash_error(error_message) except (NotFound, NotAuthorized) as e: error_message = e.message @@ -1248,8 +1263,8 @@ def followers(self, id=None): try: c.pkg_dict = get_action('package_show')(context, data_dict) c.pkg = context['package'] - c.followers = get_action('dataset_follower_list')(context, - {'id': c.pkg_dict['id']}) + c.followers = get_action('dataset_follower_list')( + context, {'id': c.pkg_dict['id']}) c.related_count = c.pkg.related_count dataset_type = c.pkg.type or 'dataset' @@ -1259,7 +1274,7 @@ def followers(self, id=None): abort(401, _('Unauthorized to read package %s') % id) return render('package/followers.html', - {'dataset_type': dataset_type}) + {'dataset_type': dataset_type}) def groups(self, id): context = {'model': model, 'session': model.Session, @@ -1303,19 +1318,17 @@ def groups(self, id): redirect(h.url_for(controller='package', action='groups', id=id)) - - context['is_member'] = True users_groups = get_action('group_list_authz')(context, data_dict) pkg_group_ids = set(group['id'] for group - in c.pkg_dict.get('groups', [])) + in c.pkg_dict.get('groups', [])) user_group_ids = set(group['id'] for group - in users_groups) + in users_groups) c.group_dropdown = [[group['id'], group['display_name']] - for group in users_groups if - group['id'] not in pkg_group_ids] + for group in users_groups if + group['id'] not in pkg_group_ids] for group in c.pkg_dict.get('groups', []): group['user_member'] = (group['id'] in user_group_ids) @@ -1334,8 +1347,8 @@ def activity(self, id): c.pkg_dict = get_action('package_show')(context, data_dict) c.pkg = context['package'] c.package_activity_stream = get_action( - 'package_activity_list_html')(context, - {'id': c.pkg_dict['id']}) + 'package_activity_list_html')(context, + {'id': c.pkg_dict['id']}) c.related_count = c.pkg.related_count dataset_type = c.pkg_dict['type'] or 'dataset' except NotFound: @@ -1409,8 +1422,10 @@ def _parse_recline_state(self, params): # previous versions of recline setup used elasticsearch_url attribute # for data api url - see http://trac.ckan.org/ticket/2639 # fix by relocating this to url attribute which is the default location - if 'dataset' in recline_state and 'elasticsearch_url' in recline_state['dataset']: - recline_state['dataset']['url'] = recline_state['dataset']['elasticsearch_url'] + if 'dataset' in recline_state and \ + 'elasticsearch_url' in recline_state['dataset']: + recline_state['dataset']['url'] = \ + recline_state['dataset']['elasticsearch_url'] # Ensure only the currentView is available # default to grid view if none specified diff --git a/ckan/lib/helpers.py b/ckan/lib/helpers.py index 1f172d003b1..8f79f2e851f 100644 --- a/ckan/lib/helpers.py +++ b/ckan/lib/helpers.py @@ -98,7 +98,7 @@ def _datestamp_to_datetime(datetime_): '`ckan.display_timezone` or leave the field empty. All valid ' 'values can be found in pytz.all_timezones. You can use the ' 'special value `server` to use the local timezone of the ' - 'server.' % timezone_name + 'server.', timezone_name ) return datetime_ @@ -146,7 +146,7 @@ def get_site_protocol_and_host(): If `ckan.site_url` is set like this:: ckan.site_url = http://example.com - + Then this function would return a tuple `('http', 'example.com')` If the setting is missing, `(None, None)` is returned instead. @@ -743,7 +743,8 @@ def unselected_facet_items(facet, limit=10): return get_facet_items_dict(facet, limit=limit, exclude_active=True) -@maintain.deprecated('h.get_facet_title is deprecated in 2.0 and will be removed.') +@maintain.deprecated('h.get_facet_title is deprecated in 2.0 and will be ' + 'removed.') def get_facet_title(name): '''Deprecated in ckan 2.0 ''' # if this is set in the config use this @@ -849,8 +850,9 @@ def linked_user(user, maxlength=0, avatar=20): displayname = user.display_name if maxlength and len(user.display_name) > maxlength: displayname = displayname[:maxlength] + '...' - return icon + u' ' + link_to(displayname, - url_for(controller='user', action='read', id=name)) + return icon + u' ' + \ + link_to(displayname, + url_for(controller='user', action='read', id=name)) def group_name_to_title(name): @@ -869,7 +871,8 @@ def markdown_extract(text, extract_length=190): plain = RE_MD_HTML_TAGS.sub('', markdown(text)) if not extract_length or len(plain) < extract_length: return literal(plain) - return literal(unicode(truncate(plain, length=extract_length, indicator='...', whole_word=True))) + return literal(unicode(truncate(plain, length=extract_length, + indicator='...', whole_word=True))) def icon_url(name): @@ -971,7 +974,8 @@ class Page(paginate.Page): def pager(self, *args, **kwargs): kwargs.update( - format=u"", + format=u"", symbol_previous=u'«', symbol_next=u'»', curpage_attr={'class': 'active'}, link_attr={} ) @@ -1226,7 +1230,8 @@ def group_link(group): def organization_link(organization): - url = url_for(controller='organization', action='read', id=organization['name']) + url = url_for(controller='organization', action='read', + id=organization['name']) return link_to(organization['name'], url) @@ -1480,7 +1485,8 @@ def debug_full_info_as_list(debug_info): ignored_keys = ['c', 'app_globals', 'g', 'h', 'request', 'tmpl_context', 'actions', 'translator', 'session', 'N_', 'ungettext', 'config', 'response', '_'] - ignored_context_keys = ['__class__', '__context', '__delattr__', '__dict__', + ignored_context_keys = ['__class__', '__context', '__delattr__', + '__dict__', '__doc__', '__format__', '__getattr__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', @@ -1511,10 +1517,12 @@ def popular(type_, number, min=1, title=None): if type_ == 'views': title = ungettext('{number} view', '{number} views', number) elif type_ == 'recent views': - title = ungettext('{number} recent view', '{number} recent views', number) + title = ungettext('{number} recent view', '{number} recent views', + number) elif not title: raise Exception('popular() did not recieve a valid type_ or title') - return snippet('snippets/popular.html', title=title, number=number, min=min) + return snippet('snippets/popular.html', + title=title, number=number, min=min) def groups_available(am_member=False): @@ -1773,13 +1781,14 @@ def resource_preview(resource, package): if not resource['url']: return False - format_lower = datapreview.res_format(resource) + datapreview.res_format(resource) directly = False data_dict = {'resource': resource, 'package': package} if datapreview.get_preview_plugin(data_dict, return_first=True): url = url_for(controller='package', action='resource_datapreview', - resource_id=resource['id'], id=package['id'], qualified=True) + resource_id=resource['id'], id=package['id'], + qualified=True) else: return False @@ -1921,7 +1930,8 @@ def SI_number_span(number): if number < 1000: output = literal('') else: - output = literal('') + output = literal('') return output + formatters.localised_SI_number(number) + literal('') # add some formatter functions @@ -2028,9 +2038,13 @@ def get_site_statistics(): def resource_formats(): - ''' Returns the resource formats as a dict, sourced from the resource format JSON file. - key: potential user input value - value: [canonical mimetype lowercased, canonical format (lowercase), human readable form] + ''' Returns the resource formats as a dict, sourced from the resource + format JSON file. + + :param key: potential user input value + :param value: [canonical mimetype lowercased, canonical format + (lowercase), human readable form] + Fuller description of the fields are described in `ckan/config/resource_formats.json`. ''' @@ -2046,8 +2060,10 @@ def resource_formats(): with open(format_file_path) as format_file: try: file_resource_formats = json.loads(format_file.read()) - except ValueError, e: # includes simplejson.decoder.JSONDecodeError - raise ValueError('Invalid JSON syntax in %s: %s' % (format_file_path, e)) + except ValueError, e: + # includes simplejson.decoder.JSONDecodeError + raise ValueError('Invalid JSON syntax in %s: %s' % + (format_file_path, e)) for format_line in file_resource_formats: if format_line[0] == '_comment': @@ -2085,7 +2101,8 @@ def get_organization(org=None, include_datasets=False): if org is None: return {} try: - return logic.get_action('organization_show')({}, {'id': org, 'include_datasets': include_datasets}) + return logic.get_action('organization_show')( + {}, {'id': org, 'include_datasets': include_datasets}) except (NotFound, ValidationError, NotAuthorized): return {} diff --git a/ckan/tests/legacy/test_coding_standards.py b/ckan/tests/legacy/test_coding_standards.py index ad587cc2b15..e04ae72d96d 100644 --- a/ckan/tests/legacy/test_coding_standards.py +++ b/ckan/tests/legacy/test_coding_standards.py @@ -377,9 +377,6 @@ class TestPep8(object): 'ckan/config/routing.py', 'ckan/config/sp_config.py', 'ckan/controllers/admin.py', - 'ckan/controllers/api.py', - 'ckan/controllers/group.py', - 'ckan/controllers/package.py', 'ckan/controllers/revision.py', 'ckan/exceptions.py', 'ckan/i18n/check_po_files.py', @@ -403,7 +400,6 @@ class TestPep8(object): 'ckan/lib/formatters.py', 'ckan/lib/hash.py', 'ckan/lib/help/flash_messages.py', - 'ckan/lib/helpers.py', 'ckan/lib/i18n.py', 'ckan/lib/jinja_extensions.py', 'ckan/lib/jsonp.py',