Browse Source

Rename TildesContext to TildesSchemaContextDict for clarity

merge-requests/171/head
Andrew Shu 4 weeks ago
parent
commit
22e0e2c60d
  1. 4
      tildes/tildes/json.py
  2. 4
      tildes/tildes/resources/group.py
  3. 4
      tildes/tildes/schemas/context.py
  4. 4
      tildes/tildes/schemas/group.py
  5. 10
      tildes/tildes/schemas/user.py
  6. 4
      tildes/tildes/views/api/web/user.py
  7. 4
      tildes/tildes/views/decorators.py
  8. 4
      tildes/tildes/views/login.py
  9. 4
      tildes/tildes/views/register.py
  10. 4
      tildes/tildes/views/settings.py

4
tildes/tildes/json.py

@ -11,7 +11,7 @@ from tildes.models import DatabaseModel
from tildes.models.group import Group
from tildes.models.topic import Topic
from tildes.models.user import User
from tildes.schemas.context import TildesSchemaContext, TildesContext
from tildes.schemas.context import TildesSchemaContext, TildesSchemaContextDict
def serialize_model(model_item: DatabaseModel, request: Request) -> dict:
@ -26,7 +26,7 @@ def serialize_model(model_item: DatabaseModel, request: Request) -> dict:
def serialize_topic(topic: Topic, request: Request) -> dict:
"""Return serializable data for a Topic."""
context: TildesContext = {}
context: TildesSchemaContextDict = {}
if not request.has_permission("view_author", topic):
context["hide_username"] = True

4
tildes/tildes/resources/group.py

@ -10,14 +10,14 @@ from sqlalchemy_utils import Ltree
from tildes.models.group import Group, GroupWikiPage
from tildes.resources import get_resource
from tildes.schemas.context import TildesSchemaContext, TildesContext
from tildes.schemas.context import TildesSchemaContext, TildesSchemaContextDict
from tildes.schemas.group import GroupSchema
from tildes.views.decorators import use_kwargs
@use_kwargs(
GroupSchema(only=("path",)),
context=TildesSchemaContext(TildesContext(fix_path_capitalization=True)),
context=TildesSchemaContext(TildesSchemaContextDict(fix_path_capitalization=True)),
location="matchdict",
)
def group_by_path(request: Request, path: str) -> Group:

4
tildes/tildes/schemas/context.py

@ -7,7 +7,7 @@ import typing
from marshmallow.experimental.context import Context
class TildesContext(typing.TypedDict, total=False):
class TildesSchemaContextDict(typing.TypedDict, total=False):
"""Context for Tildes Marshmallow schemas.
For convenience, we use one unified class instead of one per schema,
@ -27,4 +27,4 @@ class TildesContext(typing.TypedDict, total=False):
fix_path_capitalization: bool
TildesSchemaContext = Context[TildesContext]
TildesSchemaContext = Context[TildesSchemaContextDict]

4
tildes/tildes/schemas/group.py

@ -12,7 +12,7 @@ from marshmallow.exceptions import ValidationError
from marshmallow.fields import DateTime
from marshmallow.types import UnknownOption
from tildes.schemas.context import TildesSchemaContext, TildesContext
from tildes.schemas.context import TildesSchemaContext, TildesSchemaContextDict
from tildes.schemas.fields import Ltree, Markdown, SimpleString
@ -48,7 +48,7 @@ class GroupSchema(Schema):
) -> dict:
"""Prepare the path value before it's validated."""
# pylint: disable=unused-argument
if not TildesSchemaContext.get(default=TildesContext()).get(
if not TildesSchemaContext.get(default=TildesSchemaContextDict()).get(
"fix_path_capitalization"
):
return data

10
tildes/tildes/schemas/user.py

@ -13,7 +13,7 @@ from marshmallow.types import UnknownOption
from marshmallow.validate import Length, Regexp
from tildes.lib.password import is_breached_password
from tildes.schemas.context import TildesSchemaContext, TildesContext
from tildes.schemas.context import TildesSchemaContext, TildesSchemaContextDict
from tildes.schemas.fields import Markdown
@ -65,7 +65,9 @@ class UserSchema(Schema):
def anonymize_username(self, data: dict, many: bool) -> dict:
"""Hide the username if the dumping context specifies to do so."""
# pylint: disable=unused-argument
if not TildesSchemaContext.get(default=TildesContext()).get("hide_username"):
if not TildesSchemaContext.get(default=TildesSchemaContextDict()).get(
"hide_username"
):
return data
if "username" not in data:
@ -104,7 +106,7 @@ class UserSchema(Schema):
Requires check_breached_passwords be True in the schema's context.
"""
# pylint: disable=unused-argument
if not TildesSchemaContext.get(default=TildesContext()).get(
if not TildesSchemaContext.get(default=TildesSchemaContextDict()).get(
"check_breached_passwords"
):
return
@ -124,7 +126,7 @@ class UserSchema(Schema):
Requires username_trim_whitespace be True in the schema's context.
"""
# pylint: disable=unused-argument
if not TildesSchemaContext.get(default=TildesContext()).get(
if not TildesSchemaContext.get(default=TildesSchemaContextDict()).get(
"username_trim_whitespace"
):
return data

4
tildes/tildes/views/api/web/user.py

@ -23,7 +23,7 @@ from tildes.lib.datetime import SimpleHoursPeriod
from tildes.lib.string import separate_string
from tildes.models.log import Log
from tildes.models.user import User, UserInviteCode
from tildes.schemas.context import TildesSchemaContext, TildesContext
from tildes.schemas.context import TildesSchemaContext, TildesSchemaContextDict
from tildes.schemas.fields import Enum, ShortTimePeriod
from tildes.schemas.topic import TopicSchema
from tildes.schemas.user import UserSchema
@ -55,7 +55,7 @@ def patch_change_password(
user = request.context
# enable checking the new password against the breached-passwords list
context: TildesContext = {"check_breached_passwords": True}
context: TildesSchemaContextDict = {"check_breached_passwords": True}
if new_password != new_password_confirm:
raise HTTPUnprocessableEntity("New password and confirmation do not match.")

4
tildes/tildes/views/decorators.py

@ -15,7 +15,7 @@ from pyramid.request import Request
from pyramid.view import view_config
from webargs import pyramidparser
from tildes.schemas.context import TildesSchemaContext, TildesContext
from tildes.schemas.context import TildesSchemaContext, TildesSchemaContextDict
def use_kwargs(
@ -35,7 +35,7 @@ def use_kwargs(
almost always is, especially because of Intercooler).
"""
if context is None:
context = TildesSchemaContext(TildesContext())
context = TildesSchemaContext(TildesSchemaContextDict())
with context:
# convert a dict argmap to a Schema (the same way webargs would on its own)

4
tildes/tildes/views/login.py

@ -19,7 +19,7 @@ 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, TildesContext
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
@ -62,7 +62,7 @@ def finish_login(request: Request, user: User, redirect_url: str) -> HTTPFound:
)
@use_kwargs(
UserSchema(only=("username", "password")),
context=TildesSchemaContext(TildesContext(username_trim_whitespace=True)),
context=TildesSchemaContext(TildesSchemaContextDict(username_trim_whitespace=True)),
location="form",
)
@use_kwargs({"from_url": String(load_default="")}, location="form")

4
tildes/tildes/views/register.py

@ -15,7 +15,7 @@ from tildes.metrics import incr_counter
from tildes.models.group import Group, GroupSubscription
from tildes.models.log import Log
from tildes.models.user import User, UserInviteCode
from tildes.schemas.context import TildesSchemaContext, TildesContext
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
@ -36,7 +36,7 @@ def get_register(request: Request, code: str) -> dict:
)
@use_kwargs(
UserSchema(only=("username", "password")),
context=TildesSchemaContext(TildesContext(check_breached_passwords=True)),
context=TildesSchemaContext(TildesSchemaContextDict(check_breached_passwords=True)),
location="form",
)
@use_kwargs(

4
tildes/tildes/views/settings.py

@ -22,7 +22,7 @@ from tildes.models.comment import Comment, CommentLabel, CommentTree
from tildes.models.group import Group
from tildes.models.topic import Topic
from tildes.models.user import User
from tildes.schemas.context import TildesContext, TildesSchemaContext
from tildes.schemas.context import TildesSchemaContextDict, TildesSchemaContext
from tildes.schemas.user import (
BIO_MAX_LENGTH,
EMAIL_ADDRESS_NOTE_MAX_LENGTH,
@ -152,7 +152,7 @@ def post_settings_password_change(
) -> Response:
"""Change the logged-in user's password."""
# enable checking the new password against the breached-passwords list
context: TildesContext = {"check_breached_passwords": True}
context: TildesSchemaContextDict = {"check_breached_passwords": True}
if new_password != new_password_confirm:
raise HTTPUnprocessableEntity("New password and confirmation do not match.")

Loading…
Cancel
Save