add type to api url path

This commit is contained in:
Henri Dickson 2024-05-24 09:51:31 -04:00
parent 024b01a144
commit c41e38e809
7 changed files with 72 additions and 70 deletions

View file

@ -32,20 +32,20 @@ urlpatterns = [
path("v1/accounts/familiar_followers", accounts.familiar_followers), path("v1/accounts/familiar_followers", accounts.familiar_followers),
path("v1/accounts/search", accounts.accounts_search), path("v1/accounts/search", accounts.accounts_search),
path("v1/accounts/lookup", accounts.lookup), path("v1/accounts/lookup", accounts.lookup),
path("v1/accounts/<id>", accounts.account), path("v1/accounts/<int:id>", accounts.account),
path("v1/accounts/<id>/statuses", accounts.account_statuses), path("v1/accounts/<int:id>/statuses", accounts.account_statuses),
path("v1/accounts/<id>/follow", accounts.account_follow), path("v1/accounts/<int:id>/follow", accounts.account_follow),
path("v1/accounts/<id>/unfollow", accounts.account_unfollow), path("v1/accounts/<int:id>/unfollow", accounts.account_unfollow),
path("v1/accounts/<id>/block", accounts.account_block), path("v1/accounts/<int:id>/block", accounts.account_block),
path("v1/accounts/<id>/unblock", accounts.account_unblock), path("v1/accounts/<int:id>/unblock", accounts.account_unblock),
path("v1/accounts/<id>/mute", accounts.account_mute), path("v1/accounts/<int:id>/mute", accounts.account_mute),
path("v1/accounts/<id>/unmute", accounts.account_unmute), path("v1/accounts/<int:id>/unmute", accounts.account_unmute),
path("v1/accounts/<id>/following", accounts.account_following), path("v1/accounts/<int:id>/following", accounts.account_following),
path("v1/accounts/<id>/followers", accounts.account_followers), path("v1/accounts/<int:id>/followers", accounts.account_followers),
path("v1/accounts/<id>/featured_tags", accounts.account_featured_tags), path("v1/accounts/<int:id>/featured_tags", accounts.account_featured_tags),
# Announcements # Announcements
path("v1/announcements", announcements.announcement_list), path("v1/announcements", announcements.announcement_list),
path("v1/announcements/<pk>/dismiss", announcements.announcement_dismiss), path("v1/announcements/<int:pk>/dismiss", announcements.announcement_dismiss),
# Apps # Apps
path("v1/apps", apps.add_app), path("v1/apps", apps.add_app),
path("v1/apps/verify_credentials", apps.verify_credentials), path("v1/apps/verify_credentials", apps.verify_credentials),
@ -58,8 +58,10 @@ urlpatterns = [
path("v1/filters", filters.list_filters), path("v1/filters", filters.list_filters),
# Follow requests # Follow requests
path("v1/follow_requests", follow_requests.follow_requests), path("v1/follow_requests", follow_requests.follow_requests),
path("v1/follow_requests/<id>/authorize", follow_requests.accept_follow_request), path(
path("v1/follow_requests/<id>/reject", follow_requests.reject_follow_request), "v1/follow_requests/<int:id>/authorize", follow_requests.accept_follow_request
),
path("v1/follow_requests/<int:id>/reject", follow_requests.reject_follow_request),
# Instance # Instance
path("v1/instance", instance.instance_info_v1), path("v1/instance", instance.instance_info_v1),
path("v1/instance/activity", instance.activity), path("v1/instance/activity", instance.activity),
@ -70,24 +72,24 @@ urlpatterns = [
# Media # Media
path("v1/media", media.upload_media), path("v1/media", media.upload_media),
path("v2/media", media.upload_media), path("v2/media", media.upload_media),
path("v1/media/<id>", methods(get=media.get_media, put=media.update_media)), path("v1/media/<int:id>", methods(get=media.get_media, put=media.update_media)),
path( path(
"v1/statuses/<id>", "v1/statuses/<int:id>",
methods( methods(
get=statuses.status, get=statuses.status,
put=statuses.edit_status, put=statuses.edit_status,
delete=statuses.delete_status, delete=statuses.delete_status,
), ),
), ),
path("v1/statuses/<id>/source", statuses.status_source), path("v1/statuses/<int:id>/source", statuses.status_source),
# Notifications # Notifications
path("v1/notifications", notifications.notifications), path("v1/notifications", notifications.notifications),
path("v1/notifications/clear", notifications.dismiss_notifications), path("v1/notifications/clear", notifications.dismiss_notifications),
path("v1/notifications/<id>", notifications.get_notification), path("v1/notifications/<int:id>", notifications.get_notification),
path("v1/notifications/<id>/dismiss", notifications.dismiss_notification), path("v1/notifications/<int:id>/dismiss", notifications.dismiss_notification),
# Polls # Polls
path("v1/polls/<id>", polls.get_poll), path("v1/polls/<int:id>", polls.get_poll),
path("v1/polls/<id>/votes", polls.vote_poll), path("v1/polls/<int:id>/votes", polls.vote_poll),
# Preferences # Preferences
path("v1/preferences", preferences.preferences), path("v1/preferences", preferences.preferences),
# Push # Push
@ -105,26 +107,26 @@ urlpatterns = [
path("v2/search", search.search), path("v2/search", search.search),
# Statuses # Statuses
path("v1/statuses", statuses.post_status), path("v1/statuses", statuses.post_status),
path("v1/statuses/<id>/context", statuses.status_context), path("v1/statuses/<int:id>/context", statuses.status_context),
path("v1/statuses/<id>/favourite", statuses.favourite_status), path("v1/statuses/<int:id>/favourite", statuses.favourite_status),
path("v1/statuses/<id>/unfavourite", statuses.unfavourite_status), path("v1/statuses/<int:id>/unfavourite", statuses.unfavourite_status),
path("v1/statuses/<id>/favourited_by", statuses.favourited_by), path("v1/statuses/<int:id>/favourited_by", statuses.favourited_by),
path("v1/statuses/<id>/reblog", statuses.reblog_status), path("v1/statuses/<int:id>/reblog", statuses.reblog_status),
path("v1/statuses/<id>/unreblog", statuses.unreblog_status), path("v1/statuses/<int:id>/unreblog", statuses.unreblog_status),
path("v1/statuses/<id>/reblogged_by", statuses.reblogged_by), path("v1/statuses/<int:id>/reblogged_by", statuses.reblogged_by),
path("v1/statuses/<id>/bookmark", statuses.bookmark_status), path("v1/statuses/<int:id>/bookmark", statuses.bookmark_status),
path("v1/statuses/<id>/unbookmark", statuses.unbookmark_status), path("v1/statuses/<int:id>/unbookmark", statuses.unbookmark_status),
path("v1/statuses/<id>/pin", statuses.pin_status), path("v1/statuses/<int:id>/pin", statuses.pin_status),
path("v1/statuses/<id>/unpin", statuses.unpin_status), path("v1/statuses/<int:id>/unpin", statuses.unpin_status),
# Tags # Tags
path("v1/followed_tags", tags.followed_tags), path("v1/followed_tags", tags.followed_tags),
path("v1/tags/<hashtag>", tags.hashtag), path("v1/tags/<str:hashtag>", tags.hashtag),
path("v1/tags/<id>/follow", tags.follow), path("v1/tags/<str:id>/follow", tags.follow),
path("v1/tags/<id>/unfollow", tags.unfollow), path("v1/tags/<str:id>/unfollow", tags.unfollow),
# Timelines # Timelines
path("v1/timelines/home", timelines.home), path("v1/timelines/home", timelines.home),
path("v1/timelines/public", timelines.public), path("v1/timelines/public", timelines.public),
path("v1/timelines/tag/<hashtag>", timelines.hashtag), path("v1/timelines/tag/<str:hashtag>", timelines.hashtag),
path("v1/conversations", timelines.conversations), path("v1/conversations", timelines.conversations),
path("v1/favourites", timelines.favourites), path("v1/favourites", timelines.favourites),
# Trends # Trends

View file

@ -163,7 +163,7 @@ def lookup(request: HttpRequest, acct: str) -> schemas.Account:
@scope_required("read:accounts") @scope_required("read:accounts")
@api_view.get @api_view.get
def account(request, id: str) -> schemas.Account: def account(request, id: int) -> schemas.Account:
identity = get_object_or_404( identity = get_object_or_404(
Identity.objects.exclude(restriction=Identity.Restriction.blocked), Identity.objects.exclude(restriction=Identity.Restriction.blocked),
pk=id, pk=id,
@ -175,7 +175,7 @@ def account(request, id: str) -> schemas.Account:
@api_view.get @api_view.get
def account_statuses( def account_statuses(
request: HttpRequest, request: HttpRequest,
id: str, id: int,
exclude_reblogs: bool = False, exclude_reblogs: bool = False,
exclude_replies: bool = False, exclude_replies: bool = False,
only_media: bool = False, only_media: bool = False,
@ -238,7 +238,7 @@ def account_statuses(
@scope_required("write:follows") @scope_required("write:follows")
@api_view.post @api_view.post
def account_follow(request, id: str, reblogs: bool = True) -> schemas.Relationship: def account_follow(request, id: int, reblogs: bool = True) -> schemas.Relationship:
identity = get_object_or_404( identity = get_object_or_404(
Identity.objects.exclude(restriction=Identity.Restriction.blocked), pk=id Identity.objects.exclude(restriction=Identity.Restriction.blocked), pk=id
) )
@ -249,7 +249,7 @@ def account_follow(request, id: str, reblogs: bool = True) -> schemas.Relationsh
@scope_required("write:follows") @scope_required("write:follows")
@api_view.post @api_view.post
def account_unfollow(request, id: str) -> schemas.Relationship: def account_unfollow(request, id: int) -> schemas.Relationship:
identity = get_object_or_404( identity = get_object_or_404(
Identity.objects.exclude(restriction=Identity.Restriction.blocked), pk=id Identity.objects.exclude(restriction=Identity.Restriction.blocked), pk=id
) )
@ -260,7 +260,7 @@ def account_unfollow(request, id: str) -> schemas.Relationship:
@scope_required("write:blocks") @scope_required("write:blocks")
@api_view.post @api_view.post
def account_block(request, id: str) -> schemas.Relationship: def account_block(request, id: int) -> schemas.Relationship:
identity = get_object_or_404(Identity, pk=id) identity = get_object_or_404(Identity, pk=id)
service = IdentityService(request.identity) service = IdentityService(request.identity)
service.block(identity) service.block(identity)
@ -269,7 +269,7 @@ def account_block(request, id: str) -> schemas.Relationship:
@scope_required("write:blocks") @scope_required("write:blocks")
@api_view.post @api_view.post
def account_unblock(request, id: str) -> schemas.Relationship: def account_unblock(request, id: int) -> schemas.Relationship:
identity = get_object_or_404(Identity, pk=id) identity = get_object_or_404(Identity, pk=id)
service = IdentityService(request.identity) service = IdentityService(request.identity)
service.unblock(identity) service.unblock(identity)
@ -280,7 +280,7 @@ def account_unblock(request, id: str) -> schemas.Relationship:
@api_view.post @api_view.post
def account_mute( def account_mute(
request, request,
id: str, id: int,
notifications: QueryOrBody[bool] = True, notifications: QueryOrBody[bool] = True,
duration: QueryOrBody[int] = 0, duration: QueryOrBody[int] = 0,
) -> schemas.Relationship: ) -> schemas.Relationship:
@ -296,7 +296,7 @@ def account_mute(
@scope_required("write:blocks") @scope_required("write:blocks")
@api_view.post @api_view.post
def account_unmute(request, id: str) -> schemas.Relationship: def account_unmute(request, id: int) -> schemas.Relationship:
identity = get_object_or_404(Identity, pk=id) identity = get_object_or_404(Identity, pk=id)
service = IdentityService(request.identity) service = IdentityService(request.identity)
service.unmute(identity) service.unmute(identity)
@ -306,7 +306,7 @@ def account_unmute(request, id: str) -> schemas.Relationship:
@api_view.get @api_view.get
def account_following( def account_following(
request: HttpRequest, request: HttpRequest,
id: str, id: int,
max_id: str | None = None, max_id: str | None = None,
since_id: str | None = None, since_id: str | None = None,
min_id: str | None = None, min_id: str | None = None,
@ -339,7 +339,7 @@ def account_following(
@api_view.get @api_view.get
def account_followers( def account_followers(
request: HttpRequest, request: HttpRequest,
id: str, id: int,
max_id: str | None = None, max_id: str | None = None,
since_id: str | None = None, since_id: str | None = None,
min_id: str | None = None, min_id: str | None = None,
@ -370,6 +370,6 @@ def account_followers(
@api_view.get @api_view.get
def account_featured_tags(request: HttpRequest, id: str) -> list[schemas.FeaturedTag]: def account_featured_tags(request: HttpRequest, id: int) -> list[schemas.FeaturedTag]:
# Not implemented yet # Not implemented yet
return [] return []

View file

@ -18,6 +18,6 @@ def announcement_list(request) -> list[schemas.Announcement]:
@scope_required("write:notifications") @scope_required("write:notifications")
@api_view.post @api_view.post
def announcement_dismiss(request, pk: str): def announcement_dismiss(request, pk: int):
announcement = get_object_or_404(Announcement, pk=pk) announcement = get_object_or_404(Announcement, pk=pk)
AnnouncementService(request.user).mark_seen(announcement) AnnouncementService(request.user).mark_seen(announcement)

View file

@ -38,7 +38,7 @@ def follow_requests(
@api_view.post @api_view.post
def accept_follow_request( def accept_follow_request(
request: HttpRequest, request: HttpRequest,
id: str | None = None, id: int | None = None,
) -> schemas.Relationship: ) -> schemas.Relationship:
source_identity = get_object_or_404( source_identity = get_object_or_404(
Identity.objects.exclude(restriction=Identity.Restriction.blocked), pk=id Identity.objects.exclude(restriction=Identity.Restriction.blocked), pk=id
@ -51,7 +51,7 @@ def accept_follow_request(
@api_view.post @api_view.post
def reject_follow_request( def reject_follow_request(
request: HttpRequest, request: HttpRequest,
id: str | None = None, id: int | None = None,
) -> schemas.Relationship: ) -> schemas.Relationship:
source_identity = get_object_or_404( source_identity = get_object_or_404(
Identity.objects.exclude(restriction=Identity.Restriction.blocked), pk=id Identity.objects.exclude(restriction=Identity.Restriction.blocked), pk=id

View file

@ -52,7 +52,7 @@ def upload_media(
@api_view.get @api_view.get
def get_media( def get_media(
request, request,
id: str, id: int,
) -> schemas.MediaAttachment: ) -> schemas.MediaAttachment:
attachment = get_object_or_404(PostAttachment, pk=id) attachment = get_object_or_404(PostAttachment, pk=id)
if attachment.post: if attachment.post:
@ -67,7 +67,7 @@ def get_media(
@api_view.put @api_view.put
def update_media( def update_media(
request, request,
id: str, id: int,
description: QueryOrBody[str] = "", description: QueryOrBody[str] = "",
focus: QueryOrBody[str] = "0,0", focus: QueryOrBody[str] = "0,0",
) -> schemas.MediaAttachment: ) -> schemas.MediaAttachment:

View file

@ -12,14 +12,14 @@ class PostVoteSchema(Schema):
@scope_required("read:statuses") @scope_required("read:statuses")
@api_view.get @api_view.get
def get_poll(request, id: str) -> schemas.Poll: def get_poll(request, id: int) -> schemas.Poll:
post = get_object_or_404(Post, pk=id, type=Post.Types.question) post = get_object_or_404(Post, pk=id, type=Post.Types.question)
return schemas.Poll.from_post(post, identity=request.identity) return schemas.Poll.from_post(post, identity=request.identity)
@scope_required("write:statuses") @scope_required("write:statuses")
@api_view.post @api_view.post
def vote_poll(request, id: str, details: PostVoteSchema) -> schemas.Poll: def vote_poll(request, id: int, details: PostVoteSchema) -> schemas.Poll:
post = get_object_or_404(Post, pk=id, type=Post.Types.question) post = get_object_or_404(Post, pk=id, type=Post.Types.question)
PostInteraction.create_votes(post, request.identity, details.choices) PostInteraction.create_votes(post, request.identity, details.choices)
post.refresh_from_db() post.refresh_from_db()

View file

@ -64,7 +64,7 @@ class EditStatusSchema(Schema):
media_attributes: list[MediaAttributesSchema] = [] media_attributes: list[MediaAttributesSchema] = []
def post_for_id(request: HttpRequest, id: str) -> Post: def post_for_id(request: HttpRequest, id: int) -> Post:
""" """
Common logic to get a Post object for an ID, taking visibility into Common logic to get a Post object for an ID, taking visibility into
account. account.
@ -118,7 +118,7 @@ def post_status(request, details: PostStatusSchema) -> schemas.Status:
@scope_required("read:statuses") @scope_required("read:statuses")
@api_view.get @api_view.get
def status(request, id: str) -> schemas.Status: def status(request, id: int) -> schemas.Status:
post = post_for_id(request, id) post = post_for_id(request, id)
interactions = PostInteraction.get_post_interactions([post], request.identity) interactions = PostInteraction.get_post_interactions([post], request.identity)
return schemas.Status.from_post( return schemas.Status.from_post(
@ -128,7 +128,7 @@ def status(request, id: str) -> schemas.Status:
@scope_required("write:statuses") @scope_required("write:statuses")
@api_view.put @api_view.put
def edit_status(request, id: str, details: EditStatusSchema) -> schemas.Status: def edit_status(request, id: int, details: EditStatusSchema) -> schemas.Status:
post = post_for_id(request, id) post = post_for_id(request, id)
if post.author != request.identity: if post.author != request.identity:
raise ApiError(401, "Not the author of this status") raise ApiError(401, "Not the author of this status")
@ -147,7 +147,7 @@ def edit_status(request, id: str, details: EditStatusSchema) -> schemas.Status:
@scope_required("write:statuses") @scope_required("write:statuses")
@api_view.delete @api_view.delete
def delete_status(request, id: str) -> schemas.Status: def delete_status(request, id: int) -> schemas.Status:
post = post_for_id(request, id) post = post_for_id(request, id)
if post.author != request.identity: if post.author != request.identity:
raise ApiError(401, "Not the author of this status") raise ApiError(401, "Not the author of this status")
@ -157,14 +157,14 @@ def delete_status(request, id: str) -> schemas.Status:
@scope_required("read:statuses") @scope_required("read:statuses")
@api_view.get @api_view.get
def status_source(request, id: str) -> schemas.StatusSource: def status_source(request, id: int) -> schemas.StatusSource:
post = post_for_id(request, id) post = post_for_id(request, id)
return schemas.StatusSource.from_post(post) return schemas.StatusSource.from_post(post)
@scope_required("read:statuses") @scope_required("read:statuses")
@api_view.get @api_view.get
def status_context(request, id: str) -> schemas.Context: def status_context(request, id: int) -> schemas.Context:
post = post_for_id(request, id) post = post_for_id(request, id)
service = PostService(post) service = PostService(post)
ancestors, descendants = service.context(request.identity) ancestors, descendants = service.context(request.identity)
@ -189,7 +189,7 @@ def status_context(request, id: str) -> schemas.Context:
@scope_required("write:favourites") @scope_required("write:favourites")
@api_view.post @api_view.post
def favourite_status(request, id: str) -> schemas.Status: def favourite_status(request, id: int) -> schemas.Status:
post = post_for_id(request, id) post = post_for_id(request, id)
service = PostService(post) service = PostService(post)
service.like_as(request.identity) service.like_as(request.identity)
@ -201,7 +201,7 @@ def favourite_status(request, id: str) -> schemas.Status:
@scope_required("write:favourites") @scope_required("write:favourites")
@api_view.post @api_view.post
def unfavourite_status(request, id: str) -> schemas.Status: def unfavourite_status(request, id: int) -> schemas.Status:
post = post_for_id(request, id) post = post_for_id(request, id)
service = PostService(post) service = PostService(post)
service.unlike_as(request.identity) service.unlike_as(request.identity)
@ -214,7 +214,7 @@ def unfavourite_status(request, id: str) -> schemas.Status:
@api_view.get @api_view.get
def favourited_by( def favourited_by(
request: HttpRequest, request: HttpRequest,
id: str, id: int,
max_id: str | None = None, max_id: str | None = None,
since_id: str | None = None, since_id: str | None = None,
min_id: str | None = None, min_id: str | None = None,
@ -256,7 +256,7 @@ def favourited_by(
@api_view.get @api_view.get
def reblogged_by( def reblogged_by(
request: HttpRequest, request: HttpRequest,
id: str, id: int,
max_id: str | None = None, max_id: str | None = None,
since_id: str | None = None, since_id: str | None = None,
min_id: str | None = None, min_id: str | None = None,
@ -297,7 +297,7 @@ def reblogged_by(
@scope_required("write:favourites") @scope_required("write:favourites")
@api_view.post @api_view.post
def reblog_status(request, id: str) -> schemas.Status: def reblog_status(request, id: int) -> schemas.Status:
post = post_for_id(request, id) post = post_for_id(request, id)
service = PostService(post) service = PostService(post)
service.boost_as(request.identity) service.boost_as(request.identity)
@ -309,7 +309,7 @@ def reblog_status(request, id: str) -> schemas.Status:
@scope_required("write:favourites") @scope_required("write:favourites")
@api_view.post @api_view.post
def unreblog_status(request, id: str) -> schemas.Status: def unreblog_status(request, id: int) -> schemas.Status:
post = post_for_id(request, id) post = post_for_id(request, id)
service = PostService(post) service = PostService(post)
service.unboost_as(request.identity) service.unboost_as(request.identity)
@ -321,7 +321,7 @@ def unreblog_status(request, id: str) -> schemas.Status:
@scope_required("write:bookmarks") @scope_required("write:bookmarks")
@api_view.post @api_view.post
def bookmark_status(request, id: str) -> schemas.Status: def bookmark_status(request, id: int) -> schemas.Status:
post = post_for_id(request, id) post = post_for_id(request, id)
request.identity.bookmarks.get_or_create(post=post) request.identity.bookmarks.get_or_create(post=post)
interactions = PostInteraction.get_post_interactions([post], request.identity) interactions = PostInteraction.get_post_interactions([post], request.identity)
@ -332,7 +332,7 @@ def bookmark_status(request, id: str) -> schemas.Status:
@scope_required("write:bookmarks") @scope_required("write:bookmarks")
@api_view.post @api_view.post
def unbookmark_status(request, id: str) -> schemas.Status: def unbookmark_status(request, id: int) -> schemas.Status:
post = post_for_id(request, id) post = post_for_id(request, id)
request.identity.bookmarks.filter(post=post).delete() request.identity.bookmarks.filter(post=post).delete()
interactions = PostInteraction.get_post_interactions([post], request.identity) interactions = PostInteraction.get_post_interactions([post], request.identity)
@ -343,7 +343,7 @@ def unbookmark_status(request, id: str) -> schemas.Status:
@scope_required("write:accounts") @scope_required("write:accounts")
@api_view.post @api_view.post
def pin_status(request, id: str) -> schemas.Status: def pin_status(request, id: int) -> schemas.Status:
post = post_for_id(request, id) post = post_for_id(request, id)
try: try:
PostService(post).pin_as(request.identity) PostService(post).pin_as(request.identity)
@ -357,7 +357,7 @@ def pin_status(request, id: str) -> schemas.Status:
@scope_required("write:accounts") @scope_required("write:accounts")
@api_view.post @api_view.post
def unpin_status(request, id: str) -> schemas.Status: def unpin_status(request, id: int) -> schemas.Status:
post = post_for_id(request, id) post = post_for_id(request, id)
PostService(post).unpin_as(request.identity) PostService(post).unpin_as(request.identity)
interactions = PostInteraction.get_post_interactions([post], request.identity) interactions = PostInteraction.get_post_interactions([post], request.identity)