Compare commits
10 commits
7fcca23071
...
dc941bdb31
Author | SHA1 | Date | |
---|---|---|---|
dc941bdb31 | |||
d362a1cbd5 | |||
7e532e2472 | |||
0934c64809 | |||
6c8a0f6d10 | |||
50f8f99909 | |||
055864eb4e | |||
0f66d24dd4 | |||
f989f41e86 | |||
019d30d8a0 |
20 changed files with 86 additions and 76 deletions
12
.pylintrc
12
.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,
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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.
|
||||
"""
|
||||
|
|
|
@ -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,
|
||||
)
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -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:
|
||||
``<b-button tag="a" href="{url}">``
|
||||
|
||||
: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)
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue