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.group import Group
from tildes.models.topic import Topic from tildes.models.topic import Topic
from tildes.models.user import User 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: 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: def serialize_topic(topic: Topic, request: Request) -> dict:
"""Return serializable data for a Topic.""" """Return serializable data for a Topic."""
context: TildesContext = {}
context: TildesSchemaContextDict = {}
if not request.has_permission("view_author", topic): if not request.has_permission("view_author", topic):
context["hide_username"] = True 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.models.group import Group, GroupWikiPage
from tildes.resources import get_resource 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.schemas.group import GroupSchema
from tildes.views.decorators import use_kwargs from tildes.views.decorators import use_kwargs
@use_kwargs( @use_kwargs(
GroupSchema(only=("path",)), GroupSchema(only=("path",)),
context=TildesSchemaContext(TildesContext(fix_path_capitalization=True)),
context=TildesSchemaContext(TildesSchemaContextDict(fix_path_capitalization=True)),
location="matchdict", location="matchdict",
) )
def group_by_path(request: Request, path: str) -> Group: 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 from marshmallow.experimental.context import Context
class TildesContext(typing.TypedDict, total=False):
class TildesSchemaContextDict(typing.TypedDict, total=False):
"""Context for Tildes Marshmallow schemas. """Context for Tildes Marshmallow schemas.
For convenience, we use one unified class instead of one per schema, 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 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.fields import DateTime
from marshmallow.types import UnknownOption 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 from tildes.schemas.fields import Ltree, Markdown, SimpleString
@ -48,7 +48,7 @@ class GroupSchema(Schema):
) -> dict: ) -> dict:
"""Prepare the path value before it's validated.""" """Prepare the path value before it's validated."""
# pylint: disable=unused-argument # pylint: disable=unused-argument
if not TildesSchemaContext.get(default=TildesContext()).get(
if not TildesSchemaContext.get(default=TildesSchemaContextDict()).get(
"fix_path_capitalization" "fix_path_capitalization"
): ):
return data return data

10
tildes/tildes/schemas/user.py

@ -13,7 +13,7 @@ from marshmallow.types import UnknownOption
from marshmallow.validate import Length, Regexp from marshmallow.validate import Length, Regexp
from tildes.lib.password import is_breached_password 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 from tildes.schemas.fields import Markdown
@ -65,7 +65,9 @@ class UserSchema(Schema):
def anonymize_username(self, data: dict, many: bool) -> dict: def anonymize_username(self, data: dict, many: bool) -> dict:
"""Hide the username if the dumping context specifies to do so.""" """Hide the username if the dumping context specifies to do so."""
# pylint: disable=unused-argument # pylint: disable=unused-argument
if not TildesSchemaContext.get(default=TildesContext()).get("hide_username"):
if not TildesSchemaContext.get(default=TildesSchemaContextDict()).get(
"hide_username"
):
return data return data
if "username" not in data: if "username" not in data:
@ -104,7 +106,7 @@ class UserSchema(Schema):
Requires check_breached_passwords be True in the schema's context. Requires check_breached_passwords be True in the schema's context.
""" """
# pylint: disable=unused-argument # pylint: disable=unused-argument
if not TildesSchemaContext.get(default=TildesContext()).get(
if not TildesSchemaContext.get(default=TildesSchemaContextDict()).get(
"check_breached_passwords" "check_breached_passwords"
): ):
return return
@ -124,7 +126,7 @@ class UserSchema(Schema):
Requires username_trim_whitespace be True in the schema's context. Requires username_trim_whitespace be True in the schema's context.
""" """
# pylint: disable=unused-argument # pylint: disable=unused-argument
if not TildesSchemaContext.get(default=TildesContext()).get(
if not TildesSchemaContext.get(default=TildesSchemaContextDict()).get(
"username_trim_whitespace" "username_trim_whitespace"
): ):
return data 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.lib.string import separate_string
from tildes.models.log import Log from tildes.models.log import Log
from tildes.models.user import User, UserInviteCode 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.fields import Enum, ShortTimePeriod
from tildes.schemas.topic import TopicSchema from tildes.schemas.topic import TopicSchema
from tildes.schemas.user import UserSchema from tildes.schemas.user import UserSchema
@ -55,7 +55,7 @@ def patch_change_password(
user = request.context user = request.context
# enable checking the new password against the breached-passwords list # 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: if new_password != new_password_confirm:
raise HTTPUnprocessableEntity("New password and confirmation do not match.") 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 pyramid.view import view_config
from webargs import pyramidparser from webargs import pyramidparser
from tildes.schemas.context import TildesSchemaContext, TildesContext
from tildes.schemas.context import TildesSchemaContext, TildesSchemaContextDict
def use_kwargs( def use_kwargs(
@ -35,7 +35,7 @@ def use_kwargs(
almost always is, especially because of Intercooler). almost always is, especially because of Intercooler).
""" """
if context is None: if context is None:
context = TildesSchemaContext(TildesContext())
context = TildesSchemaContext(TildesSchemaContextDict())
with context: with context:
# convert a dict argmap to a Schema (the same way webargs would on its own) # 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.metrics import incr_counter
from tildes.models.log import Log from tildes.models.log import Log
from tildes.models.user import User 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.schemas.user import UserSchema
from tildes.views.decorators import not_logged_in, rate_limit_view, use_kwargs 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( @use_kwargs(
UserSchema(only=("username", "password")), UserSchema(only=("username", "password")),
context=TildesSchemaContext(TildesContext(username_trim_whitespace=True)),
context=TildesSchemaContext(TildesSchemaContextDict(username_trim_whitespace=True)),
location="form", location="form",
) )
@use_kwargs({"from_url": String(load_default="")}, 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.group import Group, GroupSubscription
from tildes.models.log import Log from tildes.models.log import Log
from tildes.models.user import User, UserInviteCode 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.schemas.user import UserSchema
from tildes.views.decorators import not_logged_in, rate_limit_view, use_kwargs 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( @use_kwargs(
UserSchema(only=("username", "password")), UserSchema(only=("username", "password")),
context=TildesSchemaContext(TildesContext(check_breached_passwords=True)),
context=TildesSchemaContext(TildesSchemaContextDict(check_breached_passwords=True)),
location="form", location="form",
) )
@use_kwargs( @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.group import Group
from tildes.models.topic import Topic from tildes.models.topic import Topic
from tildes.models.user import User 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 ( from tildes.schemas.user import (
BIO_MAX_LENGTH, BIO_MAX_LENGTH,
EMAIL_ADDRESS_NOTE_MAX_LENGTH, EMAIL_ADDRESS_NOTE_MAX_LENGTH,
@ -152,7 +152,7 @@ def post_settings_password_change(
) -> Response: ) -> Response:
"""Change the logged-in user's password.""" """Change the logged-in user's password."""
# enable checking the new password against the breached-passwords list # 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: if new_password != new_password_confirm:
raise HTTPUnprocessableEntity("New password and confirmation do not match.") raise HTTPUnprocessableEntity("New password and confirmation do not match.")

Loading…
Cancel
Save