Browse Source

Fix BaseTildesSchema bugs and lint errors

merge-requests/171/head
Andrew Shu 4 weeks ago
parent
commit
9459216a96
  1. 1
      tildes/tildes/resources/group.py
  2. 20
      tildes/tildes/schemas/base.py
  3. 1
      tildes/tildes/schemas/group.py
  4. 1
      tildes/tildes/schemas/user.py
  5. 3
      tildes/tildes/views/decorators.py
  6. 1
      tildes/tildes/views/login.py

1
tildes/tildes/resources/group.py

@ -10,7 +10,6 @@ from sqlalchemy_utils import Ltree
from tildes.models.group import Group, GroupWikiPage
from tildes.resources import get_resource
from tildes.schemas.context import TildesSchemaContext, TildesSchemaContextDict
from tildes.schemas.group import GroupSchema
from tildes.views.decorators import use_kwargs

20
tildes/tildes/schemas/base.py

@ -4,7 +4,7 @@
"""Base Marshmallow schema."""
from typing import Any
from typing import Any, Optional
from marshmallow import Schema
from tildes.schemas.context import TildesSchemaContext, TildesSchemaContextDict
@ -17,9 +17,21 @@ class BaseTildesSchema(Schema):
context: TildesSchemaContextDict
def __init__(self, context: TildesSchemaContextDict = {}, **kwargs: Any):
def __init__(
self, context: Optional[TildesSchemaContextDict] = None, **kwargs: Any
):
"""Pass an optional context, and forward Schema arguments to superclass."""
super().__init__(**kwargs)
self.context = context
self.context = context if context else {}
def get_context_value(self, key: str) -> Any:
return TildesSchemaContext.get(default=self.context).get(key)
"""Get a value from the context dict.
Any active TildesSchemaContext, e.g. set using a "with" statement,
takes precedence. If there is no active TildesSchemaContext, then
it takes the value from the dict passed in __init__ instead.
"""
result = TildesSchemaContext.get(default=self.context).get(key)
if result:
return result
return self.context.get(key)

1
tildes/tildes/schemas/group.py

@ -13,7 +13,6 @@ from marshmallow.fields import DateTime
from marshmallow.types import UnknownOption
from tildes.schemas.base import BaseTildesSchema
from tildes.schemas.context import TildesSchemaContext, TildesSchemaContextDict
from tildes.schemas.fields import Ltree, Markdown, SimpleString

1
tildes/tildes/schemas/user.py

@ -14,7 +14,6 @@ from marshmallow.validate import Length, Regexp
from tildes.lib.password import is_breached_password
from tildes.schemas.base import BaseTildesSchema
from tildes.schemas.context import TildesSchemaContext, TildesSchemaContextDict
from tildes.schemas.fields import Markdown

3
tildes/tildes/views/decorators.py

@ -7,7 +7,6 @@ from collections.abc import Callable
from typing import Any
from marshmallow import EXCLUDE
from marshmallow.experimental.context import Context
from marshmallow.fields import Field
from marshmallow.schema import Schema
from pyramid.httpexceptions import HTTPFound
@ -15,8 +14,6 @@ from pyramid.request import Request
from pyramid.view import view_config
from webargs import pyramidparser
from tildes.schemas.context import TildesSchemaContext, TildesSchemaContextDict
def use_kwargs(
argmap: Schema | dict[str, Field], location: str = "query", **kwargs: Any

1
tildes/tildes/views/login.py

@ -19,7 +19,6 @@ from tildes.enums import LogEventType
from tildes.metrics import incr_counter
from tildes.models.log import Log
from tildes.models.user import User
from tildes.schemas.context import TildesSchemaContext, TildesSchemaContextDict
from tildes.schemas.user import UserSchema
from tildes.views.decorators import not_logged_in, rate_limit_view, use_kwargs

Loading…
Cancel
Save