Mercurial > p > roundup > code
diff roundup/cgi/actions.py @ 6938:075d8c6626b0
flake8 fixes
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Thu, 08 Sep 2022 14:23:35 -0400 |
| parents | fe0091279f50 |
| children | 9fe29682dca2 |
line wrap: on
line diff
--- a/roundup/cgi/actions.py Thu Sep 08 14:06:22 2022 -0400 +++ b/roundup/cgi/actions.py Thu Sep 08 14:23:35 2022 -0400 @@ -1,20 +1,21 @@ -import re, cgi, time, csv, codecs, sys +import cgi +import codecs +import csv +import re +import sys +from datetime import timedelta from roundup import hyperdb, token, date, password from roundup.actions import Action as BaseAction -from roundup.i18n import _ +from roundup.anypy import urllib_ +from roundup.anypy.html import html_escape +from roundup.anypy.strings import StringIO from roundup.cgi import exceptions, templating -from roundup.mailgw import uidFromAddress -from roundup.rate_limit import Gcra, RateLimit from roundup.cgi.timestamp import Timestamped from roundup.exceptions import Reject, RejectRaw -from roundup.anypy import urllib_ -from roundup.anypy.strings import StringIO - - -from roundup.anypy.html import html_escape - -from datetime import timedelta +from roundup.i18n import _ +from roundup.mailgw import uidFromAddress +from roundup.rate_limit import Gcra, RateLimit # Also add action to client.py::Client.actions property __all__ = ['Action', 'ShowAction', 'RetireAction', 'RestoreAction', @@ -23,6 +24,7 @@ 'ConfRegoAction', 'RegisterAction', 'LoginAction', 'LogoutAction', 'NewItemAction', 'ExportCSVAction', 'ExportCSVWithIdAction'] + class Action: def __init__(self, client): self.client = client @@ -135,11 +137,11 @@ allowed_pattern = re.compile(r'''^[A-Za-z0-9@:/?._~%!$&'()*+,;=-]*$''') if not allowed_pattern.match(parsed_url_tuple.path): - raise ValueError(self._("Path component (%(url_path)s) in %(url)s " - "is not properly escaped") % info) + raise ValueError(self._("Path component (%(url_path)s) in %(url)s " + "is not properly escaped") % info) if not allowed_pattern.match(parsed_url_tuple.params): - raise ValueError(self._("Params component (%(url_params)s) in %(url)s is not properly escaped") % info) + raise ValueError(self._("Params component (%(url_params)s) in %(url)s is not properly escaped") % info) if not allowed_pattern.match(parsed_url_tuple.query): raise ValueError(self._("Query component (%(url_query)s) in %(url)s is not properly escaped") % info) @@ -239,7 +241,7 @@ # check permission if not self.hasPermission('Retire', classname=self.classname, - itemid=itemid): + itemid=itemid): raise exceptions.Unauthorised(self._( 'You do not have permission to retire %(class)s' ) % {'class': self.classname}) @@ -351,9 +353,10 @@ if queryname != self.db.query.get(qid, 'name'): continue # whoops we found a duplicate; report error and return - message = _("You already own a query named '%s'. " - "Please choose another name.") % \ - (queryname) + message = _( + "You already own a query named '%s'. " + "Please choose another name.") % (queryname) + self.client.add_error_message(message) return @@ -374,7 +377,7 @@ continue if not self.hasPermission('Edit', 'query', itemid=qid): raise exceptions.Unauthorised(self._( - "You do not have permission to edit queries")) + "You do not have permission to edit queries")) self.db.query.set(qid, klass=self.classname, url=url, name=queryname) else: @@ -424,11 +427,11 @@ if isinstance(prop, hyperdb.String): v = self.form[key].value # If this ever has unbalanced quotes, hilarity will ensue - l = token.token_split(v) - if len(l) != 1 or l[0] != v: + tokens = token.token_split(v) + if len(tokens) != 1 or tokens[0] != v: self.form.value.remove(self.form[key]) # replace the single value with the split list - for v in l: + for v in tokens: self.form.value.append(cgi.MiniFieldStorage(key, v)) elif isinstance(prop, hyperdb.Number): try: @@ -505,7 +508,7 @@ line = 0 for values in reader: line += 1 - if line == 1: continue + if line == 1: continue # noqa: E701 # skip property names header if values == props: continue @@ -538,8 +541,8 @@ # confirm correct weight if len(props_without_id) != len(values): self.client.add_error_message( - self._('Not enough values on line %(line)s') % \ - {'line':line}) + self._('Not enough values on line %(line)s') % { + 'line': line}) return # extract the new values @@ -547,7 +550,8 @@ for name, value in zip(props_without_id, values): # check permission to edit this property on this item if exists and not self.hasPermission('Edit', itemid=itemid, - classname=self.classname, property=name): + classname=self.classname, + property=name): raise exceptions.Unauthorised(self._( 'You do not have permission to edit %(class)s' ) % {'class': self.classname}) @@ -812,9 +816,9 @@ message = self._( 'Edit Error: someone else has edited this %(klass)s (%(props)s). ' 'View <a target="_blank" href="%(klass)s%(id)s">their changes</a> ' - 'in a new window.') % { "klass": self.classname, - "props": ', '.join(props), - "id": self.nodeid} + 'in a new window.') % {"klass": self.classname, + "props": ', '.join(props), + "id": self.nodeid} self.client.add_error_message(message, escape=False) return @@ -1050,7 +1054,7 @@ <script nonce="%s" type="text/javascript"> window.setTimeout('window.location = "%s"', 1000); </script>''' % (message, url, message, - self.client.client_nonce, url) + self.client.client_nonce, url) class ConfRegoAction(RegoCommon): @@ -1101,7 +1105,8 @@ # handle the create now try: # when it hits the None element, it'll set self.nodeid - messages = self._editnodes(props, links) + # execute for side effect + messages = self._editnodes(props, links) # noqa: F841 except (ValueError, KeyError, IndexError, Reject) as message: escape = not isinstance(message, RejectRaw) # these errors might just be indicative of user dumbness @@ -1126,7 +1131,9 @@ check_user = self.db.config['WEB_REGISTRATION_PREVALIDATE_USERNAME'] if check_user: try: - user_found = self.db.user.lookup(user_props['username']) + # verify user exists + user_found = self.db.user.lookup(user_props['username']) \ + # noqa: F841 # if user is found reject the request. raise Reject( _("Username '%s' is already used.") % user_props['username']) @@ -1165,7 +1172,8 @@ %(url)s?@action=confrego&otk=%(otk)s """) % {'name': user_props['username'], 'tracker': tracker_name, - 'url': self.base, 'otk': otk, 'tracker_email': tracker_email} + 'url': self.base, 'otk': otk, 'tracker_email': tracker_email} \ + # noqa: E122 else: subject = _('Complete your registration to %s') % (tracker_name) body = _("""To complete your registration of the user "%(name)s" with @@ -1174,7 +1182,7 @@ %(url)s?@action=confrego&otk=%(otk)s """) % {'name': user_props['username'], 'tracker': tracker_name, - 'url': self.base, 'otk': otk} + 'url': self.base, 'otk': otk} # noqa: E122 if not self.client.standard_message([user_props['address']], subject, body, (tracker_name, tracker_email)): @@ -1278,13 +1286,13 @@ query = {} pass - redirect_url = urllib_.urlunparse((redirect_url_tuple.scheme, - redirect_url_tuple.netloc, - redirect_url_tuple.path, - redirect_url_tuple.params, - urllib_.urlencode(list(sorted(query.items())), doseq=True), - redirect_url_tuple.fragment) - ) + redirect_url = urllib_.urlunparse( + (redirect_url_tuple.scheme, + redirect_url_tuple.netloc, + redirect_url_tuple.path, + redirect_url_tuple.params, + urllib_.urlencode(list(sorted(query.items())), doseq=True), + redirect_url_tuple.fragment)) try: # Implement rate limiting of logins by login name. @@ -1326,13 +1334,13 @@ if '__came_from' in self.form: # set a new error query['@error_message'] = err.args - redirect_url = urllib_.urlunparse((redirect_url_tuple.scheme, - redirect_url_tuple.netloc, - redirect_url_tuple.path, - redirect_url_tuple.params, - urllib_.urlencode(list(sorted(query.items())), doseq=True), - redirect_url_tuple.fragment ) - ) + redirect_url = urllib_.urlunparse( + (redirect_url_tuple.scheme, + redirect_url_tuple.netloc, + redirect_url_tuple.path, + redirect_url_tuple.params, + urllib_.urlencode(list(sorted(query.items())), doseq=True), + redirect_url_tuple.fragment)) raise exceptions.Redirect(redirect_url) # if no __came_from, send back to base url with error return @@ -1347,7 +1355,9 @@ # If we came from someplace, go back there if '__came_from' in self.form: - query['@ok_message'] = _("Welcome %(username)s!") %{"username" : self.client.user, } # adds welcome message to user when logged in + # add welcome message to user when logged in + query['@ok_message'] = _("Welcome %(username)s!") % { + "username": self.client.user, } redirect_url = urllib_.urlunparse((redirect_url_tuple.scheme, redirect_url_tuple.netloc, redirect_url_tuple.path, @@ -1366,7 +1376,7 @@ # Prevents guessing of valid usernames by detecting # delay caused by checking password only on valid # users. - _discard = self.verifyPassword("2", password) + _discard = self.verifyPassword("2", password) # noqa: F841 raise exceptions.LoginError(self._('Invalid login')) # verify the password @@ -1502,7 +1512,7 @@ return "" else: if (arg.local(self.db.getUserTimezone()).pretty('%H:%M') == - '00:00'): + '00:00'): fmt = '%Y-%m-%d' else: fmt = '%Y-%m-%d %H:%M' @@ -1701,8 +1711,8 @@ # different Action interfaces, we have to look at the arguments to # figure out how to complete construction. if (len(args) == 1 and - hasattr(args[0], '__class__') and - args[0].__class__.__name__ == 'Client'): + hasattr(args[0], '__class__') and + args[0].__class__.__name__ == 'Client'): self.cgi = True self.execute = self.execute_cgi self.client = args[0]
