diff --git a/.pylintrc b/.pylintrc index 2627ec0..c2db55d 100644 --- a/.pylintrc +++ b/.pylintrc @@ -3,25 +3,16 @@ [MESSAGES CONTROL] disable=fixme, abstract-method, - anomalous-backslash-in-string, arguments-differ, arguments-renamed, assignment-from-no-return, attribute-defined-outside-init, - bare-except, - broad-exception-caught, consider-using-dict-comprehension, consider-using-dict-items, consider-using-generator, consider-using-get, consider-using-set-comprehension, - cyclic-import, - dangerous-default-value, - deprecated-method, duplicate-code, - implicit-str-concat, - import-outside-toplevel, - invalid-name, isinstance-second-argument-not-valid-type, keyword-arg-before-vararg, missing-function-docstring, @@ -49,8 +40,5 @@ disable=fixme, unnecessary-lambda-assignment, unspecified-encoding, unused-argument, - unused-wildcard-import, use-a-generator, use-dict-literal, - wildcard-import, - wrong-import-order, diff --git a/src/wuttaweb/cli/webapp.py b/src/wuttaweb/cli/webapp.py index f319d3a..24695a4 100644 --- a/src/wuttaweb/cli/webapp.py +++ b/src/wuttaweb/cli/webapp.py @@ -63,7 +63,7 @@ def webapp( elif runner == "uvicorn": - import uvicorn # pylint: disable=import-error + import uvicorn # pylint: disable=import-error,import-outside-toplevel # need service details from config spec = config.require(f"{config.appname}.web.app.spec") diff --git a/src/wuttaweb/emails.py b/src/wuttaweb/emails.py index 43bc956..eb34bb3 100644 --- a/src/wuttaweb/emails.py +++ b/src/wuttaweb/emails.py @@ -27,7 +27,7 @@ from wuttjamaican.email import EmailSetting -class feedback(EmailSetting): +class feedback(EmailSetting): # pylint: disable=invalid-name """ Sent when user submits feedback via the web app. """ diff --git a/src/wuttaweb/forms/base.py b/src/wuttaweb/forms/base.py index 3a8af71..8eeed6f 100644 --- a/src/wuttaweb/forms/base.py +++ b/src/wuttaweb/forms/base.py @@ -274,14 +274,14 @@ class Form: # pylint: disable=too-many-instance-attributes schema=None, model_class=None, model_instance=None, - nodes={}, - widgets={}, - validators={}, - defaults={}, + nodes=None, + widgets=None, + validators=None, + defaults=None, readonly=False, - readonly_fields=[], - required_fields={}, - labels={}, + readonly_fields=None, + required_fields=None, + labels=None, action_method="post", action_url=None, reset_url=None, @@ -465,7 +465,9 @@ class Form: # pylint: disable=too-many-instance-attributes Node overrides are tracked via :attr:`nodes`. """ - from wuttaweb.forms.schema import ObjectNode + from wuttaweb.forms.schema import ( # pylint: disable=import-outside-toplevel + ObjectNode, + ) if isinstance(nodeinfo, colander.SchemaNode): # assume nodeinfo is a complete node @@ -494,7 +496,7 @@ class Form: # pylint: disable=too-many-instance-attributes :param widget: Either a :class:`deform:deform.widget.Widget` instance, or else a widget "type" name. - :param \**kwargs: Any remaining kwargs are passed along to + :param \\**kwargs: Any remaining kwargs are passed along to :meth:`make_widget()` - if applicable. Widget overrides are tracked via :attr:`widgets`. @@ -526,13 +528,13 @@ class Form: # pylint: disable=too-many-instance-attributes :param widget_type: Which of the above (or custom) widget type to create. - :param \**kwargs: Remaining kwargs are passed as-is to the + :param \\**kwargs: Remaining kwargs are passed as-is to the widget factory. :returns: New widget instance, or ``None`` if e.g. it could not determine how to create the widget. """ - from wuttaweb.forms import widgets + from wuttaweb.forms import widgets # pylint: disable=import-outside-toplevel if widget_type == "notes": return widgets.NotesWidget(**kwargs) @@ -556,7 +558,7 @@ class Form: # pylint: disable=too-many-instance-attributes * :class:`sqlalchemy:sqlalchemy.types.DateTime` -> :class:`~wuttaweb.forms.widgets.WuttaDateTimeWidget` """ - from wuttaweb.forms import widgets + from wuttaweb.forms import widgets # pylint: disable=import-outside-toplevel if not self.model_class: return @@ -586,7 +588,9 @@ class Form: # pylint: disable=too-many-instance-attributes :param widget: :class:`~wuttaweb.grids.base.Grid` instance, pre-configured and (usually) with data. """ - from wuttaweb.forms.widgets import GridWidget + from wuttaweb.forms.widgets import ( # pylint: disable=import-outside-toplevel + GridWidget, + ) widget = GridWidget(self.request, grid) self.set_widget(key, widget) @@ -599,7 +603,7 @@ class Form: # pylint: disable=too-many-instance-attributes if grid.key in self.grid_vue_context: log.warning( - "grid data with key '%s' already registered, " "but will be replaced", + "grid data with key '%s' already registered, but will be replaced", grid.key, ) diff --git a/src/wuttaweb/forms/schema.py b/src/wuttaweb/forms/schema.py index 222eb3a..f3384b1 100644 --- a/src/wuttaweb/forms/schema.py +++ b/src/wuttaweb/forms/schema.py @@ -63,7 +63,7 @@ class WuttaDateTime(colander.DateTime): for fmt in formats: try: return datetime.datetime.strptime(cstruct, fmt) - except: + except Exception: # pylint: disable=broad-exception-caught pass node.raise_invalid("Invalid date and/or time") diff --git a/src/wuttaweb/grids/base.py b/src/wuttaweb/grids/base.py index f21aacc..0468a6a 100644 --- a/src/wuttaweb/grids/base.py +++ b/src/wuttaweb/grids/base.py @@ -37,8 +37,8 @@ from paginate_sqlalchemy import SqlalchemyOrmPage from pyramid.renderers import render from webhelpers2.html import HTML -from wuttaweb.util import FieldList, get_model_fields, make_json_safe from wuttjamaican.db.util import UUID +from wuttaweb.util import FieldList, get_model_fields, make_json_safe from wuttaweb.grids.filters import default_sqlalchemy_filters, VerbNotSupported @@ -379,14 +379,14 @@ class Grid: # pylint: disable=too-many-instance-attributes key=None, columns=None, data=None, - labels={}, - renderers={}, - enums={}, + labels=None, + renderers=None, + enums=None, checkable=False, row_class=None, - actions=[], - linked_columns=[], - hidden_columns=[], + actions=None, + linked_columns=None, + hidden_columns=None, sortable=False, sort_multiple=True, sort_on_backend=True, @@ -467,7 +467,7 @@ class Grid: # pylint: disable=too-many-instance-attributes # enums self.enums = {} - for k in enums: + for k in enums or {}: self.set_enum(k, enums[k]) def get_columns(self): @@ -1853,7 +1853,7 @@ class Grid: # pylint: disable=too-many-instance-attributes data = filtr.apply_filter(data) except VerbNotSupported as error: log.warning("verb not supported for '%s' filter: %s", key, error.verb) - except: + except Exception: # pylint: disable=broad-exception-caught log.exception("filtering data by '%s' failed!", key) return data diff --git a/src/wuttaweb/grids/filters.py b/src/wuttaweb/grids/filters.py index 6e90d98..9bf2b9f 100644 --- a/src/wuttaweb/grids/filters.py +++ b/src/wuttaweb/grids/filters.py @@ -63,7 +63,7 @@ class GridFilter: # pylint: disable=too-many-instance-attributes column by which to filter. For instance, ``model.Person.full_name``. - :param \**kwargs: Any additional kwargs will be set as attributes + :param \\**kwargs: Any additional kwargs will be set as attributes on the filter instance. Filter instances have the following attributes: @@ -175,7 +175,7 @@ class GridFilter: # pylint: disable=too-many-instance-attributes key, label=None, verbs=None, - choices={}, + choices=None, default_active=False, default_verb=None, default_value=None, @@ -198,7 +198,7 @@ class GridFilter: # pylint: disable=too-many-instance-attributes self.default_verb = default_verb # choices - self.set_choices(choices) + self.set_choices(choices or {}) # value self.default_value = default_value @@ -358,7 +358,7 @@ class GridFilter: # pylint: disable=too-many-instance-attributes verb = self.verb if not verb: verb = self.get_default_verb() - log.warn( + log.warning( "missing verb for '%s' filter, will use default verb: %s", self.key, verb, @@ -582,7 +582,7 @@ class IntegerAlchemyFilter(NumericAlchemyFilter): if value: try: return int(value) - except: + except Exception: # pylint: disable=broad-exception-caught pass return None diff --git a/src/wuttaweb/handler.py b/src/wuttaweb/handler.py index 04deab2..e3520b5 100644 --- a/src/wuttaweb/handler.py +++ b/src/wuttaweb/handler.py @@ -187,8 +187,8 @@ class WebHandler(GenericHandler): # registered via entry points registered = [] - for Handler in load_entry_points(f"{self.appname}.web.menus").values(): - spec = Handler.get_spec() + for handler in load_entry_points(f"{self.appname}.web.menus").values(): + spec = handler.get_spec() if spec not in handlers: registered.append(spec) if registered: diff --git a/src/wuttaweb/helpers.py b/src/wuttaweb/helpers.py index 3319fa1..832c82e 100644 --- a/src/wuttaweb/helpers.py +++ b/src/wuttaweb/helpers.py @@ -51,8 +51,8 @@ This module contains the following references: """ -from webhelpers2.html import * -from webhelpers2.html.tags import * +from webhelpers2.html import * # pylint: disable=wildcard-import,unused-wildcard-import +from webhelpers2.html.tags import * # pylint: disable=wildcard-import,unused-wildcard-import from wuttaweb.util import ( # pylint: disable=unused-import get_liburl, diff --git a/src/wuttaweb/views/auth.py b/src/wuttaweb/views/auth.py index f3b162e..c2a52cb 100644 --- a/src/wuttaweb/views/auth.py +++ b/src/wuttaweb/views/auth.py @@ -314,7 +314,7 @@ class AuthView(View): def defaults(config, **kwargs): base = globals() - AuthView = kwargs.get("AuthView", base["AuthView"]) + AuthView = kwargs.get("AuthView", base["AuthView"]) # pylint: disable=invalid-name AuthView.defaults(config) diff --git a/src/wuttaweb/views/batch.py b/src/wuttaweb/views/batch.py index fd2ced9..77cc056 100644 --- a/src/wuttaweb/views/batch.py +++ b/src/wuttaweb/views/batch.py @@ -127,7 +127,7 @@ class BatchMasterView(MasterView): model = self.app.model # created_by - CreatedBy = orm.aliased(model.User) + CreatedBy = orm.aliased(model.User) # pylint: disable=invalid-name g.set_joiner( "created_by", lambda q: q.join( @@ -221,7 +221,7 @@ class BatchMasterView(MasterView): on the batch handler - when creating. Parent/default logic is used when updating. - :param \**kwargs: Additional kwargs will be passed as-is to + :param \\**kwargs: Additional kwargs will be passed as-is to the ``make_batch()`` call. """ if self.creating: @@ -329,7 +329,7 @@ class BatchMasterView(MasterView): self.batch_handler.do_populate(batch, progress=progress) session.flush() - except Exception as error: + except Exception as error: # pylint: disable=broad-exception-caught session.rollback() log.warning( "failed to populate %s: %s", @@ -367,7 +367,7 @@ class BatchMasterView(MasterView): try: self.batch_handler.do_execute(batch, self.request.user) - except Exception as error: + except Exception as error: # pylint: disable=broad-exception-caught log.warning("failed to execute batch: %s", batch, exc_info=True) self.request.session.flash(f"Execution failed!: {error}", "error") @@ -383,8 +383,8 @@ class BatchMasterView(MasterView): if hasattr(cls, "row_model_class"): return cls.row_model_class - Batch = cls.get_model_class() - return Batch.__row_class__ + model_class = cls.get_model_class() + return model_class.__row_class__ def get_row_grid_data(self, batch): """ @@ -392,8 +392,10 @@ class BatchMasterView(MasterView): :attr:`~wuttjamaican:wuttjamaican.db.model.batch.BatchMixin.rows` data. """ - BatchRow = self.get_row_model_class() - query = self.Session.query(BatchRow).filter(BatchRow.batch == batch) + row_model_class = self.get_row_model_class() + query = self.Session.query(row_model_class).filter( + row_model_class.batch == batch + ) return query def configure_row_grid(self, g): # pylint: disable=empty-docstring diff --git a/src/wuttaweb/views/common.py b/src/wuttaweb/views/common.py index 45d463b..71ef57e 100644 --- a/src/wuttaweb/views/common.py +++ b/src/wuttaweb/views/common.py @@ -109,7 +109,7 @@ class CommonView(View): # send email try: self.feedback_send(context) - except Exception as error: + except Exception as error: # pylint: disable=broad-exception-caught log.warning("failed to send feedback email", exc_info=True) return {"error": str(error) or error.__class__.__name__} @@ -287,7 +287,7 @@ class CommonView(View): if theme: try: set_app_theme(self.request, theme, session=Session()) - except Exception as error: + except Exception as error: # pylint: disable=broad-exception-caught error = self.app.render_error(error) self.request.session.flash(f"Failed to set theme: {error}", "error") referrer = self.request.params.get("referrer") or self.request.get_referrer() @@ -345,7 +345,9 @@ class CommonView(View): def defaults(config, **kwargs): base = globals() - CommonView = kwargs.get("CommonView", base["CommonView"]) + CommonView = kwargs.get( # pylint: disable=invalid-name + "CommonView", base["CommonView"] + ) CommonView.defaults(config) diff --git a/src/wuttaweb/views/email.py b/src/wuttaweb/views/email.py index 91ea49a..34e6a29 100644 --- a/src/wuttaweb/views/email.py +++ b/src/wuttaweb/views/email.py @@ -301,7 +301,9 @@ class EmailSettingView(MasterView): def defaults(config, **kwargs): base = globals() - EmailSettingView = kwargs.get("EmailSettingView", base["EmailSettingView"]) + EmailSettingView = kwargs.get( # pylint: disable=invalid-name + "EmailSettingView", base["EmailSettingView"] + ) EmailSettingView.defaults(config) diff --git a/src/wuttaweb/views/master.py b/src/wuttaweb/views/master.py index db234de..d2086ea 100644 --- a/src/wuttaweb/views/master.py +++ b/src/wuttaweb/views/master.py @@ -34,11 +34,11 @@ from sqlalchemy import orm from pyramid.renderers import render_to_response from webhelpers2.html import HTML -from wuttaweb.views import View +from wuttjamaican.util import get_class_hierarchy +from wuttaweb.views.base import View from wuttaweb.util import get_form_data, render_csrf_token from wuttaweb.db import Session from wuttaweb.progress import SessionProgress -from wuttjamaican.util import get_class_hierarchy log = logging.getLogger(__name__) @@ -826,7 +826,7 @@ class MasterView(View): try: self.delete_bulk_action(records, progress=progress) - except Exception as error: + except Exception as error: # pylint: disable=broad-exception-caught session.rollback() log.warning( "failed to delete %s results for %s", @@ -1128,7 +1128,7 @@ class MasterView(View): try: self.execute_instance(obj, user, progress=progress) - except Exception as error: + except Exception as error: # pylint: disable=broad-exception-caught session.rollback() log.warning("%s failed to execute: %s", model_title, obj, exc_info=True) if progress: @@ -1651,7 +1651,7 @@ class MasterView(View): button act like a link. This will yield something like: ```` - :param \**kwargs: All remaining kwargs are passed to the + :param \\**kwargs: All remaining kwargs are passed to the underlying ``HTML.tag()`` call, so will be rendered as attributes on the button tag. @@ -2260,7 +2260,7 @@ class MasterView(View): :param obj: Model instance object. - :param \**kwargs: Additional kwargs to be passed to + :param \\**kwargs: Additional kwargs to be passed to ``request.route_url()``, if needed. """ kw = self.get_action_route_kwargs(obj) diff --git a/src/wuttaweb/views/people.py b/src/wuttaweb/views/people.py index 74f58f9..f9de00e 100644 --- a/src/wuttaweb/views/people.py +++ b/src/wuttaweb/views/people.py @@ -210,7 +210,9 @@ class PersonView(MasterView): def defaults(config, **kwargs): base = globals() - PersonView = kwargs.get("PersonView", base["PersonView"]) + PersonView = kwargs.get( # pylint: disable=invalid-name + "PersonView", base["PersonView"] + ) PersonView.defaults(config) diff --git a/src/wuttaweb/views/reports.py b/src/wuttaweb/views/reports.py index aafde7e..a79b262 100644 --- a/src/wuttaweb/views/reports.py +++ b/src/wuttaweb/views/reports.py @@ -264,7 +264,9 @@ class ReportView(MasterView): def defaults(config, **kwargs): base = globals() - ReportView = kwargs.get("ReportView", base["ReportView"]) + ReportView = kwargs.get( # pylint: disable=invalid-name + "ReportView", base["ReportView"] + ) ReportView.defaults(config) diff --git a/src/wuttaweb/views/roles.py b/src/wuttaweb/views/roles.py index 0dc59c8..2d19ef1 100644 --- a/src/wuttaweb/views/roles.py +++ b/src/wuttaweb/views/roles.py @@ -374,10 +374,12 @@ class PermissionView(MasterView): def defaults(config, **kwargs): base = globals() - RoleView = kwargs.get("RoleView", base["RoleView"]) + RoleView = kwargs.get("RoleView", base["RoleView"]) # pylint: disable=invalid-name RoleView.defaults(config) - PermissionView = kwargs.get("PermissionView", base["PermissionView"]) + PermissionView = kwargs.get( # pylint: disable=invalid-name + "PermissionView", base["PermissionView"] + ) PermissionView.defaults(config) diff --git a/src/wuttaweb/views/settings.py b/src/wuttaweb/views/settings.py index 0c6b9bb..7cfd576 100644 --- a/src/wuttaweb/views/settings.py +++ b/src/wuttaweb/views/settings.py @@ -278,10 +278,14 @@ class SettingView(MasterView): def defaults(config, **kwargs): base = globals() - AppInfoView = kwargs.get("AppInfoView", base["AppInfoView"]) + AppInfoView = kwargs.get( # pylint: disable=invalid-name + "AppInfoView", base["AppInfoView"] + ) AppInfoView.defaults(config) - SettingView = kwargs.get("SettingView", base["SettingView"]) + SettingView = kwargs.get( # pylint: disable=invalid-name + "SettingView", base["SettingView"] + ) SettingView.defaults(config) diff --git a/src/wuttaweb/views/upgrades.py b/src/wuttaweb/views/upgrades.py index e86d617..a3bc205 100644 --- a/src/wuttaweb/views/upgrades.py +++ b/src/wuttaweb/views/upgrades.py @@ -86,7 +86,7 @@ class UpgradeView(MasterView): # created_by g.set_link("created_by") - Creator = orm.aliased(model.User) + Creator = orm.aliased(model.User) # pylint: disable=invalid-name g.set_joiner( "created_by", lambda q: q.join(Creator, Creator.uuid == model.Upgrade.created_by_uuid), @@ -101,7 +101,7 @@ class UpgradeView(MasterView): # executed_by g.set_link("executed_by") - Executor = orm.aliased(model.User) + Executor = orm.aliased(model.User) # pylint: disable=invalid-name g.set_joiner( "executed_by", lambda q: q.outerjoin( @@ -378,7 +378,9 @@ class UpgradeView(MasterView): def defaults(config, **kwargs): base = globals() - UpgradeView = kwargs.get("UpgradeView", base["UpgradeView"]) + UpgradeView = kwargs.get( # pylint: disable=invalid-name + "UpgradeView", base["UpgradeView"] + ) UpgradeView.defaults(config) diff --git a/src/wuttaweb/views/users.py b/src/wuttaweb/views/users.py index f8463b1..cd09c66 100644 --- a/src/wuttaweb/views/users.py +++ b/src/wuttaweb/views/users.py @@ -418,7 +418,7 @@ class UserView(MasterView): def defaults(config, **kwargs): base = globals() - UserView = kwargs.get("UserView", base["UserView"]) + UserView = kwargs.get("UserView", base["UserView"]) # pylint: disable=invalid-name UserView.defaults(config)