From 2ec96cd00dddb619a0a4cf2dbf145951766c203d Mon Sep 17 00:00:00 2001 From: "Ilya (Marshal)" Date: Sat, 16 Sep 2023 03:26:39 +0200 Subject: [PATCH 1/2] Update lexicons fetched from 9879ca9 committed 2023-09-14T20:24:48Z --- atproto/xrpc_client/models/__init__.py | 8 +++ .../models/app/bsky/feed/get_list_feed.py | 31 ++++++++ .../models/app/bsky/feed/threadgate.py | 70 +++++++++++++++++++ .../graph/get_suggested_follows_by_actor.py | 26 +++++++ atproto/xrpc_client/models/type_conversion.py | 1 + atproto/xrpc_client/models/unknown_type.py | 2 + atproto/xrpc_client/namespaces/async_ns.py | 47 +++++++++++++ atproto/xrpc_client/namespaces/sync_ns.py | 47 +++++++++++++ ...ent.models.app.bsky.feed.get_list_feed.rst | 7 ++ ...client.models.app.bsky.feed.threadgate.rst | 7 ++ ...y.graph.get_suggested_follows_by_actor.rst | 7 ++ lexicons/app.bsky.feed.getListFeed.json | 42 +++++++++++ lexicons/app.bsky.feed.threadgate.json | 45 ++++++++++++ ...bsky.graph.getSuggestedFollowsByActor.json | 33 +++++++++ 14 files changed, 373 insertions(+) create mode 100644 atproto/xrpc_client/models/app/bsky/feed/get_list_feed.py create mode 100644 atproto/xrpc_client/models/app/bsky/feed/threadgate.py create mode 100644 atproto/xrpc_client/models/app/bsky/graph/get_suggested_follows_by_actor.py create mode 100644 docs/source/atproto/atproto.xrpc_client.models.app.bsky.feed.get_list_feed.rst create mode 100644 docs/source/atproto/atproto.xrpc_client.models.app.bsky.feed.threadgate.rst create mode 100644 docs/source/atproto/atproto.xrpc_client.models.app.bsky.graph.get_suggested_follows_by_actor.rst create mode 100644 lexicons/app.bsky.feed.getListFeed.json create mode 100644 lexicons/app.bsky.feed.threadgate.json create mode 100644 lexicons/app.bsky.graph.getSuggestedFollowsByActor.json diff --git a/atproto/xrpc_client/models/__init__.py b/atproto/xrpc_client/models/__init__.py index 4cd98a60..b29fc3f7 100644 --- a/atproto/xrpc_client/models/__init__.py +++ b/atproto/xrpc_client/models/__init__.py @@ -22,6 +22,7 @@ from atproto.xrpc_client.models.app.bsky.feed import get_feed_generators as AppBskyFeedGetFeedGenerators from atproto.xrpc_client.models.app.bsky.feed import get_feed_skeleton as AppBskyFeedGetFeedSkeleton from atproto.xrpc_client.models.app.bsky.feed import get_likes as AppBskyFeedGetLikes +from atproto.xrpc_client.models.app.bsky.feed import get_list_feed as AppBskyFeedGetListFeed from atproto.xrpc_client.models.app.bsky.feed import get_post_thread as AppBskyFeedGetPostThread from atproto.xrpc_client.models.app.bsky.feed import get_posts as AppBskyFeedGetPosts from atproto.xrpc_client.models.app.bsky.feed import get_reposted_by as AppBskyFeedGetRepostedBy @@ -30,6 +31,7 @@ from atproto.xrpc_client.models.app.bsky.feed import like as AppBskyFeedLike from atproto.xrpc_client.models.app.bsky.feed import post as AppBskyFeedPost from atproto.xrpc_client.models.app.bsky.feed import repost as AppBskyFeedRepost +from atproto.xrpc_client.models.app.bsky.feed import threadgate as AppBskyFeedThreadgate from atproto.xrpc_client.models.app.bsky.graph import block as AppBskyGraphBlock from atproto.xrpc_client.models.app.bsky.graph import defs as AppBskyGraphDefs from atproto.xrpc_client.models.app.bsky.graph import follow as AppBskyGraphFollow @@ -41,6 +43,9 @@ from atproto.xrpc_client.models.app.bsky.graph import get_list_mutes as AppBskyGraphGetListMutes from atproto.xrpc_client.models.app.bsky.graph import get_lists as AppBskyGraphGetLists from atproto.xrpc_client.models.app.bsky.graph import get_mutes as AppBskyGraphGetMutes +from atproto.xrpc_client.models.app.bsky.graph import ( + get_suggested_follows_by_actor as AppBskyGraphGetSuggestedFollowsByActor, +) from atproto.xrpc_client.models.app.bsky.graph import list as AppBskyGraphList from atproto.xrpc_client.models.app.bsky.graph import listblock as AppBskyGraphListblock from atproto.xrpc_client.models.app.bsky.graph import listitem as AppBskyGraphListitem @@ -165,6 +170,7 @@ class _Ids: AppBskyGraphListblock: str = 'app.bsky.graph.listblock' AppBskyGraphGetList: str = 'app.bsky.graph.getList' AppBskyGraphGetMutes: str = 'app.bsky.graph.getMutes' + AppBskyGraphGetSuggestedFollowsByActor: str = 'app.bsky.graph.getSuggestedFollowsByActor' AppBskyGraphGetFollows: str = 'app.bsky.graph.getFollows' AppBskyGraphMuteActorList: str = 'app.bsky.graph.muteActorList' AppBskyGraphBlock: str = 'app.bsky.graph.block' @@ -172,10 +178,12 @@ class _Ids: AppBskyFeedGetLikes: str = 'app.bsky.feed.getLikes' AppBskyFeedPost: str = 'app.bsky.feed.post' AppBskyFeedDefs: str = 'app.bsky.feed.defs' + AppBskyFeedGetListFeed: str = 'app.bsky.feed.getListFeed' AppBskyFeedGetActorFeeds: str = 'app.bsky.feed.getActorFeeds' AppBskyFeedGetFeedGenerators: str = 'app.bsky.feed.getFeedGenerators' AppBskyFeedGetPostThread: str = 'app.bsky.feed.getPostThread' AppBskyFeedGetAuthorFeed: str = 'app.bsky.feed.getAuthorFeed' + AppBskyFeedThreadgate: str = 'app.bsky.feed.threadgate' AppBskyFeedGetPosts: str = 'app.bsky.feed.getPosts' AppBskyFeedGetSuggestedFeeds: str = 'app.bsky.feed.getSuggestedFeeds' AppBskyFeedGetActorLikes: str = 'app.bsky.feed.getActorLikes' diff --git a/atproto/xrpc_client/models/app/bsky/feed/get_list_feed.py b/atproto/xrpc_client/models/app/bsky/feed/get_list_feed.py new file mode 100644 index 00000000..ccc32e41 --- /dev/null +++ b/atproto/xrpc_client/models/app/bsky/feed/get_list_feed.py @@ -0,0 +1,31 @@ +################################################################## +# THIS IS THE AUTO-GENERATED CODE. DON'T EDIT IT BY HANDS! +# Copyright (C) 2023 Ilya (Marshal) . +# This file is part of Python atproto SDK. Licenced under MIT. +################################################################## + + +import typing as t + +from pydantic import Field + +if t.TYPE_CHECKING: + from atproto.xrpc_client import models +from atproto.xrpc_client.models import base + + +class Params(base.ParamsModelBase): + + """Parameters model for :obj:`app.bsky.feed.getListFeed`.""" + + list: str #: List. + cursor: t.Optional[str] = None #: Cursor. + limit: t.Optional[int] = Field(default=50, ge=1, le=100) #: Limit. + + +class Response(base.ResponseModelBase): + + """Output data model for :obj:`app.bsky.feed.getListFeed`.""" + + feed: t.List['models.AppBskyFeedDefs.FeedViewPost'] #: Feed. + cursor: t.Optional[str] = None #: Cursor. diff --git a/atproto/xrpc_client/models/app/bsky/feed/threadgate.py b/atproto/xrpc_client/models/app/bsky/feed/threadgate.py new file mode 100644 index 00000000..bf29e098 --- /dev/null +++ b/atproto/xrpc_client/models/app/bsky/feed/threadgate.py @@ -0,0 +1,70 @@ +################################################################## +# THIS IS THE AUTO-GENERATED CODE. DON'T EDIT IT BY HANDS! +# Copyright (C) 2023 Ilya (Marshal) . +# This file is part of Python atproto SDK. Licenced under MIT. +################################################################## + + +import typing as t + +import typing_extensions as te +from pydantic import Field + +if t.TYPE_CHECKING: + from atproto.xrpc_client import models +from atproto.xrpc_client.models import base + + +class MentionRule(base.ModelBase): + + """Definition model for :obj:`app.bsky.feed.threadgate`. Allow replies from actors mentioned in your post.""" + + py_type: te.Literal['app.bsky.feed.threadgate#mentionRule'] = Field( + default='app.bsky.feed.threadgate#mentionRule', alias='$type', frozen=True + ) + + +class FollowingRule(base.ModelBase): + + """Definition model for :obj:`app.bsky.feed.threadgate`. Allow replies from actors you follow.""" + + py_type: te.Literal['app.bsky.feed.threadgate#followingRule'] = Field( + default='app.bsky.feed.threadgate#followingRule', alias='$type', frozen=True + ) + + +class ListRule(base.ModelBase): + + """Definition model for :obj:`app.bsky.feed.threadgate`. Allow replies from actors on a list.""" + + list: str #: List. + + py_type: te.Literal['app.bsky.feed.threadgate#listRule'] = Field( + default='app.bsky.feed.threadgate#listRule', alias='$type', frozen=True + ) + + +class Main(base.RecordModelBase): + + """Record model for :obj:`app.bsky.feed.threadgate`.""" + + created_at: str = Field(alias='createdAt') #: Created at. + post: str #: Post. + allow: t.Optional[ + t.List[ + te.Annotated[ + t.Union[ + 'models.AppBskyFeedThreadgate.MentionRule', + 'models.AppBskyFeedThreadgate.FollowingRule', + 'models.AppBskyFeedThreadgate.ListRule', + ], + Field(discriminator='py_type'), + ] + ] + ] = Field( + default=None, max_length=5 + ) #: Allow. + + py_type: te.Literal['app.bsky.feed.threadgate'] = Field( + default='app.bsky.feed.threadgate', alias='$type', frozen=True + ) diff --git a/atproto/xrpc_client/models/app/bsky/graph/get_suggested_follows_by_actor.py b/atproto/xrpc_client/models/app/bsky/graph/get_suggested_follows_by_actor.py new file mode 100644 index 00000000..42a81715 --- /dev/null +++ b/atproto/xrpc_client/models/app/bsky/graph/get_suggested_follows_by_actor.py @@ -0,0 +1,26 @@ +################################################################## +# THIS IS THE AUTO-GENERATED CODE. DON'T EDIT IT BY HANDS! +# Copyright (C) 2023 Ilya (Marshal) . +# This file is part of Python atproto SDK. Licenced under MIT. +################################################################## + + +import typing as t + +if t.TYPE_CHECKING: + from atproto.xrpc_client import models +from atproto.xrpc_client.models import base + + +class Params(base.ParamsModelBase): + + """Parameters model for :obj:`app.bsky.graph.getSuggestedFollowsByActor`.""" + + actor: str #: Actor. + + +class Response(base.ResponseModelBase): + + """Output data model for :obj:`app.bsky.graph.getSuggestedFollowsByActor`.""" + + suggestions: t.List['models.AppBskyActorDefs.ProfileView'] #: Suggestions. diff --git a/atproto/xrpc_client/models/type_conversion.py b/atproto/xrpc_client/models/type_conversion.py index c78b4a30..ff70b6c1 100644 --- a/atproto/xrpc_client/models/type_conversion.py +++ b/atproto/xrpc_client/models/type_conversion.py @@ -6,6 +6,7 @@ 'app.bsky.feed.repost': models.AppBskyFeedRepost.Main, 'app.bsky.graph.listitem': models.AppBskyGraphListitem.Main, 'app.bsky.feed.like': models.AppBskyFeedLike.Main, + 'app.bsky.feed.threadgate': models.AppBskyFeedThreadgate.Main, 'app.bsky.graph.follow': models.AppBskyGraphFollow.Main, 'app.bsky.graph.list': models.AppBskyGraphList.Main, 'app.bsky.graph.listblock': models.AppBskyGraphListblock.Main, diff --git a/atproto/xrpc_client/models/unknown_type.py b/atproto/xrpc_client/models/unknown_type.py index bd5d6b1a..0b4b9327 100644 --- a/atproto/xrpc_client/models/unknown_type.py +++ b/atproto/xrpc_client/models/unknown_type.py @@ -13,6 +13,7 @@ 'models.AppBskyFeedRepost.Main', 'models.AppBskyGraphListitem.Main', 'models.AppBskyFeedLike.Main', + 'models.AppBskyFeedThreadgate.Main', 'models.AppBskyGraphFollow.Main', 'models.AppBskyGraphList.Main', 'models.AppBskyGraphListblock.Main', @@ -26,6 +27,7 @@ 'models.AppBskyFeedRepost.Main', 'models.AppBskyGraphListitem.Main', 'models.AppBskyFeedLike.Main', + 'models.AppBskyFeedThreadgate.Main', 'models.AppBskyGraphFollow.Main', 'models.AppBskyGraphList.Main', 'models.AppBskyGraphListblock.Main', diff --git a/atproto/xrpc_client/namespaces/async_ns.py b/atproto/xrpc_client/namespaces/async_ns.py index 0796ad9b..c8c062b6 100644 --- a/atproto/xrpc_client/namespaces/async_ns.py +++ b/atproto/xrpc_client/namespaces/async_ns.py @@ -380,6 +380,28 @@ async def get_likes( ) return get_response_model(response, models.AppBskyFeedGetLikes.Response) + async def get_list_feed( + self, params: t.Union[dict, 'models.AppBskyFeedGetListFeed.Params'], **kwargs + ) -> 'models.AppBskyFeedGetListFeed.Response': + """A view of a recent posts from actors in a list. + + Args: + params: Parameters. + **kwargs: Arbitrary arguments to HTTP request. + + Returns: + :obj:`models.AppBskyFeedGetListFeed.Response`: Output model. + + Raises: + :class:`atproto.exceptions.AtProtocolError`: Base exception. + """ + + params_model = get_or_create(params, models.AppBskyFeedGetListFeed.Params) + response = await self._client.invoke_query( + 'app.bsky.feed.getListFeed', params=params_model, output_encoding='application/json', **kwargs + ) + return get_response_model(response, models.AppBskyFeedGetListFeed.Response) + async def get_post_thread( self, params: t.Union[dict, 'models.AppBskyFeedGetPostThread.Params'], **kwargs ) -> 'models.AppBskyFeedGetPostThread.Response': @@ -668,6 +690,31 @@ async def get_mutes( ) return get_response_model(response, models.AppBskyGraphGetMutes.Response) + async def get_suggested_follows_by_actor( + self, params: t.Union[dict, 'models.AppBskyGraphGetSuggestedFollowsByActor.Params'], **kwargs + ) -> 'models.AppBskyGraphGetSuggestedFollowsByActor.Response': + """Get suggested follows related to a given actor. + + Args: + params: Parameters. + **kwargs: Arbitrary arguments to HTTP request. + + Returns: + :obj:`models.AppBskyGraphGetSuggestedFollowsByActor.Response`: Output model. + + Raises: + :class:`atproto.exceptions.AtProtocolError`: Base exception. + """ + + params_model = get_or_create(params, models.AppBskyGraphGetSuggestedFollowsByActor.Params) + response = await self._client.invoke_query( + 'app.bsky.graph.getSuggestedFollowsByActor', + params=params_model, + output_encoding='application/json', + **kwargs, + ) + return get_response_model(response, models.AppBskyGraphGetSuggestedFollowsByActor.Response) + async def mute_actor(self, data: t.Union[dict, 'models.AppBskyGraphMuteActor.Data'], **kwargs) -> bool: """Mute an actor by did or handle. diff --git a/atproto/xrpc_client/namespaces/sync_ns.py b/atproto/xrpc_client/namespaces/sync_ns.py index 1d90b137..2e9c0772 100644 --- a/atproto/xrpc_client/namespaces/sync_ns.py +++ b/atproto/xrpc_client/namespaces/sync_ns.py @@ -380,6 +380,28 @@ def get_likes( ) return get_response_model(response, models.AppBskyFeedGetLikes.Response) + def get_list_feed( + self, params: t.Union[dict, 'models.AppBskyFeedGetListFeed.Params'], **kwargs + ) -> 'models.AppBskyFeedGetListFeed.Response': + """A view of a recent posts from actors in a list. + + Args: + params: Parameters. + **kwargs: Arbitrary arguments to HTTP request. + + Returns: + :obj:`models.AppBskyFeedGetListFeed.Response`: Output model. + + Raises: + :class:`atproto.exceptions.AtProtocolError`: Base exception. + """ + + params_model = get_or_create(params, models.AppBskyFeedGetListFeed.Params) + response = self._client.invoke_query( + 'app.bsky.feed.getListFeed', params=params_model, output_encoding='application/json', **kwargs + ) + return get_response_model(response, models.AppBskyFeedGetListFeed.Response) + def get_post_thread( self, params: t.Union[dict, 'models.AppBskyFeedGetPostThread.Params'], **kwargs ) -> 'models.AppBskyFeedGetPostThread.Response': @@ -668,6 +690,31 @@ def get_mutes( ) return get_response_model(response, models.AppBskyGraphGetMutes.Response) + def get_suggested_follows_by_actor( + self, params: t.Union[dict, 'models.AppBskyGraphGetSuggestedFollowsByActor.Params'], **kwargs + ) -> 'models.AppBskyGraphGetSuggestedFollowsByActor.Response': + """Get suggested follows related to a given actor. + + Args: + params: Parameters. + **kwargs: Arbitrary arguments to HTTP request. + + Returns: + :obj:`models.AppBskyGraphGetSuggestedFollowsByActor.Response`: Output model. + + Raises: + :class:`atproto.exceptions.AtProtocolError`: Base exception. + """ + + params_model = get_or_create(params, models.AppBskyGraphGetSuggestedFollowsByActor.Params) + response = self._client.invoke_query( + 'app.bsky.graph.getSuggestedFollowsByActor', + params=params_model, + output_encoding='application/json', + **kwargs, + ) + return get_response_model(response, models.AppBskyGraphGetSuggestedFollowsByActor.Response) + def mute_actor(self, data: t.Union[dict, 'models.AppBskyGraphMuteActor.Data'], **kwargs) -> bool: """Mute an actor by did or handle. diff --git a/docs/source/atproto/atproto.xrpc_client.models.app.bsky.feed.get_list_feed.rst b/docs/source/atproto/atproto.xrpc_client.models.app.bsky.feed.get_list_feed.rst new file mode 100644 index 00000000..fb23c757 --- /dev/null +++ b/docs/source/atproto/atproto.xrpc_client.models.app.bsky.feed.get_list_feed.rst @@ -0,0 +1,7 @@ +app.bsky.feed.get\_list\_feed +========================================================= + +.. automodule:: atproto.xrpc_client.models.app.bsky.feed.get_list_feed + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/docs/source/atproto/atproto.xrpc_client.models.app.bsky.feed.threadgate.rst b/docs/source/atproto/atproto.xrpc_client.models.app.bsky.feed.threadgate.rst new file mode 100644 index 00000000..4ecc870c --- /dev/null +++ b/docs/source/atproto/atproto.xrpc_client.models.app.bsky.feed.threadgate.rst @@ -0,0 +1,7 @@ +app.bsky.feed.threadgate +==================================================== + +.. automodule:: atproto.xrpc_client.models.app.bsky.feed.threadgate + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/docs/source/atproto/atproto.xrpc_client.models.app.bsky.graph.get_suggested_follows_by_actor.rst b/docs/source/atproto/atproto.xrpc_client.models.app.bsky.graph.get_suggested_follows_by_actor.rst new file mode 100644 index 00000000..a88f2d4f --- /dev/null +++ b/docs/source/atproto/atproto.xrpc_client.models.app.bsky.graph.get_suggested_follows_by_actor.rst @@ -0,0 +1,7 @@ +app.bsky.graph.get\_suggested\_follows\_by\_actor +============================================================================= + +.. automodule:: atproto.xrpc_client.models.app.bsky.graph.get_suggested_follows_by_actor + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/lexicons/app.bsky.feed.getListFeed.json b/lexicons/app.bsky.feed.getListFeed.json new file mode 100644 index 00000000..f7b778bd --- /dev/null +++ b/lexicons/app.bsky.feed.getListFeed.json @@ -0,0 +1,42 @@ +{ + "lexicon": 1, + "id": "app.bsky.feed.getListFeed", + "defs": { + "main": { + "type": "query", + "description": "A view of a recent posts from actors in a list", + "parameters": { + "type": "params", + "required": ["list"], + "properties": { + "list": { "type": "string", "format": "at-uri" }, + "limit": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "default": 50 + }, + "cursor": { "type": "string" } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["feed"], + "properties": { + "cursor": { "type": "string" }, + "feed": { + "type": "array", + "items": { + "type": "ref", + "ref": "app.bsky.feed.defs#feedViewPost" + } + } + } + } + }, + "errors": [{ "name": "UnknownList" }] + } + } +} diff --git a/lexicons/app.bsky.feed.threadgate.json b/lexicons/app.bsky.feed.threadgate.json new file mode 100644 index 00000000..7969b636 --- /dev/null +++ b/lexicons/app.bsky.feed.threadgate.json @@ -0,0 +1,45 @@ +{ + "lexicon": 1, + "id": "app.bsky.feed.threadgate", + "defs": { + "main": { + "type": "record", + "key": "tid", + "description": "Defines interaction gating rules for a thread. The rkey of the threadgate record should match the rkey of the thread's root post.", + "record": { + "type": "object", + "required": ["post", "createdAt"], + "properties": { + "post": { "type": "string", "format": "at-uri" }, + "allow": { + "type": "array", + "maxLength": 5, + "items": { + "type": "union", + "refs": ["#mentionRule", "#followingRule", "#listRule"] + } + }, + "createdAt": { "type": "string", "format": "datetime" } + } + } + }, + "mentionRule": { + "type": "object", + "description": "Allow replies from actors mentioned in your post.", + "properties": {} + }, + "followingRule": { + "type": "object", + "description": "Allow replies from actors you follow.", + "properties": {} + }, + "listRule": { + "type": "object", + "description": "Allow replies from actors on a list.", + "required": ["list"], + "properties": { + "list": { "type": "string", "format": "at-uri" } + } + } + } +} diff --git a/lexicons/app.bsky.graph.getSuggestedFollowsByActor.json b/lexicons/app.bsky.graph.getSuggestedFollowsByActor.json new file mode 100644 index 00000000..32873a53 --- /dev/null +++ b/lexicons/app.bsky.graph.getSuggestedFollowsByActor.json @@ -0,0 +1,33 @@ +{ + "lexicon": 1, + "id": "app.bsky.graph.getSuggestedFollowsByActor", + "defs": { + "main": { + "type": "query", + "description": "Get suggested follows related to a given actor.", + "parameters": { + "type": "params", + "required": ["actor"], + "properties": { + "actor": { "type": "string", "format": "at-identifier" } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["suggestions"], + "properties": { + "suggestions": { + "type": "array", + "items": { + "type": "ref", + "ref": "app.bsky.actor.defs#profileView" + } + } + } + } + } + } + } +} From 3f3c9b077462282442d4a06a08895e3f9bc67b8e Mon Sep 17 00:00:00 2001 From: "Ilya (Marshal)" Date: Sat, 16 Sep 2023 14:12:11 +0200 Subject: [PATCH 2/2] fix lexicon --- .../xrpc_client/models/app/bsky/feed/defs.py | 27 +++++++++++ .../xrpc_client/models/app/bsky/graph/defs.py | 6 ++- docs/source/aliases_db.py | 3 ++ ...proto.xrpc_client.models.app.bsky.feed.rst | 2 + ...roto.xrpc_client.models.app.bsky.graph.rst | 1 + lexicons/app.bsky.feed.defs.json | 24 +++++++++- lexicons/app.bsky.graph.defs.json | 9 +++- tests/models/test_data/get_follows.json | 46 +++++++------------ .../thread_view_post_with_embed_media.json | 7 ++- 9 files changed, 89 insertions(+), 36 deletions(-) diff --git a/atproto/xrpc_client/models/app/bsky/feed/defs.py b/atproto/xrpc_client/models/app/bsky/feed/defs.py index 3165f92d..c09d69e3 100644 --- a/atproto/xrpc_client/models/app/bsky/feed/defs.py +++ b/atproto/xrpc_client/models/app/bsky/feed/defs.py @@ -40,6 +40,7 @@ class PostView(base.ModelBase): like_count: t.Optional[int] = Field(default=None, alias='likeCount') #: Like count. reply_count: t.Optional[int] = Field(default=None, alias='replyCount') #: Reply count. repost_count: t.Optional[int] = Field(default=None, alias='repostCount') #: Repost count. + threadgate: t.Optional['models.AppBskyFeedDefs.ThreadgateView'] = None #: Threadgate. viewer: t.Optional['models.AppBskyFeedDefs.ViewerState'] = None #: Viewer. py_type: te.Literal['app.bsky.feed.defs#postView'] = Field( @@ -139,6 +140,7 @@ class ThreadViewPost(base.ModelBase): ] ] ] = None #: Replies. + viewer: t.Optional['models.AppBskyFeedDefs.ViewerThreadState'] = None #: Viewer. py_type: te.Literal['app.bsky.feed.defs#threadViewPost'] = Field( default='app.bsky.feed.defs#threadViewPost', alias='$type', frozen=True @@ -182,6 +184,17 @@ class BlockedAuthor(base.ModelBase): ) +class ViewerThreadState(base.ModelBase): + + """Definition model for :obj:`app.bsky.feed.defs`.""" + + can_reply: t.Optional[bool] = Field(default=None, alias='canReply') #: Can reply. + + py_type: te.Literal['app.bsky.feed.defs#viewerThreadState'] = Field( + default='app.bsky.feed.defs#viewerThreadState', alias='$type', frozen=True + ) + + class GeneratorView(base.ModelBase): """Definition model for :obj:`app.bsky.feed.defs`.""" @@ -241,3 +254,17 @@ class SkeletonReasonRepost(base.ModelBase): py_type: te.Literal['app.bsky.feed.defs#skeletonReasonRepost'] = Field( default='app.bsky.feed.defs#skeletonReasonRepost', alias='$type', frozen=True ) + + +class ThreadgateView(base.ModelBase): + + """Definition model for :obj:`app.bsky.feed.defs`.""" + + cid: t.Optional[str] = None #: Cid. + lists: t.Optional[t.List['models.AppBskyGraphDefs.ListViewBasic']] = None #: Lists. + record: t.Optional['UnknownType'] = None #: Record. + uri: t.Optional[str] = None #: Uri. + + py_type: te.Literal['app.bsky.feed.defs#threadgateView'] = Field( + default='app.bsky.feed.defs#threadgateView', alias='$type', frozen=True + ) diff --git a/atproto/xrpc_client/models/app/bsky/graph/defs.py b/atproto/xrpc_client/models/app/bsky/graph/defs.py index 353bf93b..9340aeeb 100644 --- a/atproto/xrpc_client/models/app/bsky/graph/defs.py +++ b/atproto/xrpc_client/models/app/bsky/graph/defs.py @@ -65,12 +65,16 @@ class ListItemView(base.ModelBase): ) -ListPurpose = t.Union['models.AppBskyGraphDefs.Modlist'] #: List purpose +ListPurpose = t.Union['models.AppBskyGraphDefs.Modlist', 'models.AppBskyGraphDefs.Curatelist'] #: List purpose Modlist = te.Literal[ 'app.bsky.graph.defs#modlist' ] #: A list of actors to apply an aggregate moderation action (mute/block) on +Curatelist = te.Literal[ + 'app.bsky.graph.defs#curatelist' +] #: A list of actors used for curation purposes such as list feeds or interaction gating + class ListViewerState(base.ModelBase): diff --git a/docs/source/aliases_db.py b/docs/source/aliases_db.py index e82d28e2..e385a3a1 100644 --- a/docs/source/aliases_db.py +++ b/docs/source/aliases_db.py @@ -23,6 +23,7 @@ 'models.AppBskyFeedGetFeedGenerators': 'atproto.xrpc_client.models.app.bsky.feed.get_feed_generators', 'models.AppBskyFeedGetFeedSkeleton': 'atproto.xrpc_client.models.app.bsky.feed.get_feed_skeleton', 'models.AppBskyFeedGetLikes': 'atproto.xrpc_client.models.app.bsky.feed.get_likes', + 'models.AppBskyFeedGetListFeed': 'atproto.xrpc_client.models.app.bsky.feed.get_list_feed', 'models.AppBskyFeedGetPostThread': 'atproto.xrpc_client.models.app.bsky.feed.get_post_thread', 'models.AppBskyFeedGetPosts': 'atproto.xrpc_client.models.app.bsky.feed.get_posts', 'models.AppBskyFeedGetRepostedBy': 'atproto.xrpc_client.models.app.bsky.feed.get_reposted_by', @@ -31,6 +32,7 @@ 'models.AppBskyFeedLike': 'atproto.xrpc_client.models.app.bsky.feed.like', 'models.AppBskyFeedPost': 'atproto.xrpc_client.models.app.bsky.feed.post', 'models.AppBskyFeedRepost': 'atproto.xrpc_client.models.app.bsky.feed.repost', + 'models.AppBskyFeedThreadgate': 'atproto.xrpc_client.models.app.bsky.feed.threadgate', 'models.AppBskyGraphBlock': 'atproto.xrpc_client.models.app.bsky.graph.block', 'models.AppBskyGraphDefs': 'atproto.xrpc_client.models.app.bsky.graph.defs', 'models.AppBskyGraphFollow': 'atproto.xrpc_client.models.app.bsky.graph.follow', @@ -42,6 +44,7 @@ 'models.AppBskyGraphGetListMutes': 'atproto.xrpc_client.models.app.bsky.graph.get_list_mutes', 'models.AppBskyGraphGetLists': 'atproto.xrpc_client.models.app.bsky.graph.get_lists', 'models.AppBskyGraphGetMutes': 'atproto.xrpc_client.models.app.bsky.graph.get_mutes', + 'models.AppBskyGraphGetSuggestedFollowsByActor': 'atproto.xrpc_client.models.app.bsky.graph.get_suggested_follows_by_actor', 'models.AppBskyGraphList': 'atproto.xrpc_client.models.app.bsky.graph.list', 'models.AppBskyGraphListblock': 'atproto.xrpc_client.models.app.bsky.graph.listblock', 'models.AppBskyGraphListitem': 'atproto.xrpc_client.models.app.bsky.graph.listitem', diff --git a/docs/source/atproto/atproto.xrpc_client.models.app.bsky.feed.rst b/docs/source/atproto/atproto.xrpc_client.models.app.bsky.feed.rst index 3723bb79..163545f2 100644 --- a/docs/source/atproto/atproto.xrpc_client.models.app.bsky.feed.rst +++ b/docs/source/atproto/atproto.xrpc_client.models.app.bsky.feed.rst @@ -23,6 +23,7 @@ Submodules atproto.xrpc_client.models.app.bsky.feed.get_feed_generators atproto.xrpc_client.models.app.bsky.feed.get_feed_skeleton atproto.xrpc_client.models.app.bsky.feed.get_likes + atproto.xrpc_client.models.app.bsky.feed.get_list_feed atproto.xrpc_client.models.app.bsky.feed.get_post_thread atproto.xrpc_client.models.app.bsky.feed.get_posts atproto.xrpc_client.models.app.bsky.feed.get_reposted_by @@ -31,3 +32,4 @@ Submodules atproto.xrpc_client.models.app.bsky.feed.like atproto.xrpc_client.models.app.bsky.feed.post atproto.xrpc_client.models.app.bsky.feed.repost + atproto.xrpc_client.models.app.bsky.feed.threadgate diff --git a/docs/source/atproto/atproto.xrpc_client.models.app.bsky.graph.rst b/docs/source/atproto/atproto.xrpc_client.models.app.bsky.graph.rst index 5cd09e21..654387a5 100644 --- a/docs/source/atproto/atproto.xrpc_client.models.app.bsky.graph.rst +++ b/docs/source/atproto/atproto.xrpc_client.models.app.bsky.graph.rst @@ -23,6 +23,7 @@ Submodules atproto.xrpc_client.models.app.bsky.graph.get_list_mutes atproto.xrpc_client.models.app.bsky.graph.get_lists atproto.xrpc_client.models.app.bsky.graph.get_mutes + atproto.xrpc_client.models.app.bsky.graph.get_suggested_follows_by_actor atproto.xrpc_client.models.app.bsky.graph.list atproto.xrpc_client.models.app.bsky.graph.listblock atproto.xrpc_client.models.app.bsky.graph.listitem diff --git a/lexicons/app.bsky.feed.defs.json b/lexicons/app.bsky.feed.defs.json index 7a9fcf5e..10f2812c 100644 --- a/lexicons/app.bsky.feed.defs.json +++ b/lexicons/app.bsky.feed.defs.json @@ -30,7 +30,8 @@ "labels": { "type": "array", "items": { "type": "ref", "ref": "com.atproto.label.defs#label" } - } + }, + "threadgate": { "type": "ref", "ref": "#threadgateView" } } }, "viewerState": { @@ -86,7 +87,8 @@ "type": "union", "refs": ["#threadViewPost", "#notFoundPost", "#blockedPost"] } - } + }, + "viewer": { "type": "ref", "ref": "#viewerThreadState" } } }, "notFoundPost": { @@ -114,6 +116,12 @@ "viewer": { "type": "ref", "ref": "app.bsky.actor.defs#viewerState" } } }, + "viewerThreadState": { + "type": "object", + "properties": { + "canReply": { "type": "boolean" } + } + }, "generatorView": { "type": "object", "required": ["uri", "cid", "did", "creator", "displayName", "indexedAt"], @@ -158,6 +166,18 @@ "properties": { "repost": { "type": "string", "format": "at-uri" } } + }, + "threadgateView": { + "type": "object", + "properties": { + "uri": { "type": "string", "format": "at-uri" }, + "cid": { "type": "string", "format": "cid" }, + "record": { "type": "unknown" }, + "lists": { + "type": "array", + "items": { "type": "ref", "ref": "app.bsky.graph.defs#listViewBasic" } + } + } } } } diff --git a/lexicons/app.bsky.graph.defs.json b/lexicons/app.bsky.graph.defs.json index 44cf5587..894cfadc 100644 --- a/lexicons/app.bsky.graph.defs.json +++ b/lexicons/app.bsky.graph.defs.json @@ -47,12 +47,19 @@ }, "listPurpose": { "type": "string", - "knownValues": ["app.bsky.graph.defs#modlist"] + "knownValues": [ + "app.bsky.graph.defs#modlist", + "app.bsky.graph.defs#curatelist" + ] }, "modlist": { "type": "token", "description": "A list of actors to apply an aggregate moderation action (mute/block) on" }, + "curatelist": { + "type": "token", + "description": "A list of actors used for curation purposes such as list feeds or interaction gating" + }, "listViewerState": { "type": "object", "properties": { diff --git a/tests/models/test_data/get_follows.json b/tests/models/test_data/get_follows.json index 61cc9395..c4f56d81 100644 --- a/tests/models/test_data/get_follows.json +++ b/tests/models/test_data/get_follows.json @@ -1,17 +1,4 @@ { - "subject": { - "did": "did:plc:kvwvcn5iqfooopmyzvb4qzba", - "handle": "test.marshal.dev", - "displayName": "I love Python 3", - "description": "test", - "avatar": "https://av-cdn.bsky.app/img/avatar/plain/did:plc:kvwvcn5iqfooopmyzvb4qzba/bafkreicwqcugdgubtawr6xv6jjifoju67eigwx2xgz4zs73nkzzn36oucy@jpeg", - "indexedAt": "2023-07-28T18:17:15.466Z", - "viewer": { - "muted": false, - "blockedBy": false - }, - "labels": [] - }, "follows": [ { "did": "did:plc:vpkhqolt662uhesyj6nxm7ys", @@ -41,7 +28,7 @@ "cid": "bafyreigk3kmjipz5emav5vqmvdtivwz757tfpg5lnsbfoscnqx7wpjjime", "name": "test mute list", "purpose": "app.bsky.graph.defs#modlist", - "indexedAt": "2023-08-31T22:20:16.322Z", + "indexedAt": "2023-08-28T10:08:27.442Z", "viewer": { "muted": true } @@ -107,27 +94,13 @@ }, "labels": [] }, - { - "did": "did:plc:6fktaamhhxdqb2ypum33kbkj", - "handle": "jack.bsky.social", - "displayName": "jack", - "description": "Dog, artist-reader, and avid lover.", - "avatar": "https://av-cdn.bsky.app/img/avatar/plain/did:plc:6fktaamhhxdqb2ypum33kbkj/bafkreiddtepilrl35fkksahtvieg5tnhfltcuafktvc6c44ppvkqcvowaa@jpeg", - "indexedAt": "2023-07-02T23:59:30.711Z", - "viewer": { - "muted": false, - "blockedBy": false, - "following": "at://did:plc:kvwvcn5iqfooopmyzvb4qzba/app.bsky.graph.follow/3jucc7isp2s2z" - }, - "labels": [] - }, { "did": "did:plc:s6jnht6koorxz7trghirytmf", "handle": "marshal.dev", "displayName": "Ilya (Marshal)", - "description": "Software Engineer\n\n\ud83d\udc0d The AT Protocol SDK for Python: https://atproto.blue/\n\ud83c\udf7f Custom Feed in Python: https://github.com/MarshalX/bluesky-feed-generator\n\nhttps://marshal.dev & https://github.com/MarshalX", + "description": "Software Engineer\n\n\ud83d\udc0d The AT Protocol SDK for Python: https://atproto.blue/\n\ud83c\udf7f Custom Feed in Python: https://github.com/MarshalX/bluesky-feed-generator\n\ud83c\udfce\ufe0f Fast DAG-CBOR decoder for Python: https://github.com/MarshalX/python-libipld\n\nhttps://marshal.dev", "avatar": "https://av-cdn.bsky.app/img/avatar/plain/did:plc:s6jnht6koorxz7trghirytmf/bafkreihyuxbogcsrarso2ulwvjzq2spezopsgnt26uface5zwyiy5yhyje@jpeg", - "indexedAt": "2023-07-07T16:47:11.813Z", + "indexedAt": "2023-09-07T23:54:36.539Z", "viewer": { "muted": false, "blockedBy": false, @@ -137,5 +110,18 @@ "labels": [] } ], + "subject": { + "did": "did:plc:kvwvcn5iqfooopmyzvb4qzba", + "handle": "test.marshal.dev", + "displayName": "I love Python 3", + "description": "test", + "avatar": "https://av-cdn.bsky.app/img/avatar/plain/did:plc:kvwvcn5iqfooopmyzvb4qzba/bafkreicwqcugdgubtawr6xv6jjifoju67eigwx2xgz4zs73nkzzn36oucy@jpeg", + "indexedAt": "2023-07-28T18:17:15.466Z", + "viewer": { + "muted": false, + "blockedBy": false + }, + "labels": [] + }, "cursor": "1682536253184::bafyreicbazjbm65mgbs2s25qmlqpe2betv7vssid32q5ckidy4js6dctve" } \ No newline at end of file diff --git a/tests/models/test_data/thread_view_post_with_embed_media.json b/tests/models/test_data/thread_view_post_with_embed_media.json index 79785bc9..5d52d966 100644 --- a/tests/models/test_data/thread_view_post_with_embed_media.json +++ b/tests/models/test_data/thread_view_post_with_embed_media.json @@ -8,7 +8,7 @@ "did": "did:plc:hbtuqflamm5j2i7yahtzsnue", "handle": "raven.corvids.club", "displayName": "raven", - "avatar": "https://av-cdn.bsky.app/img/avatar/plain/did:plc:hbtuqflamm5j2i7yahtzsnue/bafkreiflgjysr2jrq7a22iptzj56x7bkp5wsgqncs4oepvxnnunndzzrhe@jpeg", + "avatar": "https://av-cdn.bsky.app/img/avatar/plain/did:plc:hbtuqflamm5j2i7yahtzsnue/bafkreihuti6ufyyrhsozy42humvywvrfqtmz63whkfeavtsvhrfbz6rqr4@jpeg", "viewer": { "muted": false, "blockedBy": false @@ -125,6 +125,9 @@ "viewer": {}, "labels": [] }, - "replies": [] + "replies": [], + "viewer": { + "canReply": true + } } } \ No newline at end of file