Doc and docstring updates for consistency

pull/257/head
Andy Piper 2022-11-13 21:42:29 +00:00
rodzic 1088d6a0d0
commit cf25f69446
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 8FBF7373AC449A7F
3 zmienionych plików z 977 dodań i 859 usunięć

Wyświetl plik

@ -43,25 +43,25 @@ To post, create an actual API instance:
access_token = 'pytooter_usercred.secret',
api_base_url = 'https://mastodon.social'
)
mastodon.toot('Tooting from python using #mastodonpy !')
mastodon.toot('Tooting from Python using #mastodonpy !')
`Mastodon`_ is an ActivityPub and OStatus based twitter-like federated social
`Mastodon`_ is an ActivityPub-based Twitter-like federated social
network node. It has an API that allows you to interact with its
every aspect. This is a simple python wrapper for that api, provided
as a single python module. By default, it talks to the
every aspect. This is a simple Python wrapper for that API, provided
as a single Python module. By default, it talks to the
`Mastodon flagship instance`_, but it can be set to talk to any
node running Mastodon by setting `api_base_url` when creating the
api object (or creating an app).
API object (or creating an app).
Mastodon.py aims to implement the complete public Mastodon API. As
of this time, it is feature complete for Mastodon version 3.0.1. Pleromas
of this time, it is feature complete for Mastodon version 3.0.1. Pleroma's
Mastodon API layer, while not an official target, should also be basically
compatible, and Mastodon.py does make some allowances for behaviour that isn't
strictly like Mastodons.
strictly like that of Mastodon.
A note about rate limits
------------------------
Mastodons API rate limits per user account. By default, the limit is 300 requests
Mastodon's API rate limits per user account. By default, the limit is 300 requests
per 5 minute time slot. This can differ from instance to instance and is subject to change.
Mastodon.py has three modes for dealing with rate limiting that you can pass to
the constructor, "throw", "wait" and "pace", "wait" being the default.
@ -95,7 +95,7 @@ modes are not thread safe).
In "wait" mode, once a request hits the rate limit, Mastodon.py will wait until
the rate limit resets and then try again, until the request succeeds or an error
is encountered. This mode is for applications that would rather just not worry about rate limits
much, don't poll the api all that often, and are okay with a call sometimes just taking
much, don't poll the API all that often, and are okay with a call sometimes just taking
a while.
In "pace" mode, Mastodon.py will delay each new request after the first one such that,
@ -117,7 +117,7 @@ in, do consider using Mastodon.py without authenticating to get the full per-IP
A note about pagination
-----------------------
Many of Mastodons API endpoints are paginated. What this means is that if you request
Many of Mastodon's API endpoints are paginated. What this means is that if you request
data from them, you might not get all the data at once - instead, you might only get the
first few results.
@ -139,7 +139,7 @@ compatible.
`limit` allows you to specify how many results you would like returned. Note that an
instance may choose to return less results than you requested - by default, Mastodon
will return no more than 40 statues and no more than 80 accounts no matter how high
will return no more than 40 statuses and no more than 80 accounts no matter how high
you set the limit.
The responses returned by paginated endpoints contain a "link" header that specifies
@ -155,9 +155,9 @@ a paginated request as well as for fetching all pages starting from a first page
Two notes about IDs
-------------------
Mastodons API uses IDs in several places: User IDs, Toot IDs, ...
Mastodon's API uses IDs in several places: User IDs, Toot IDs, ...
While debugging, it might be tempting to copy-paste in IDs from the
While debugging, it might be tempting to copy-paste IDs from the
web interface into your code. This will not work, as the IDs on the web
interface and in the URLs are not the same as the IDs used internally
in the API, so don't do that.
@ -184,7 +184,7 @@ Error handling
When Mastodon.py encounters an error, it will raise an exception, generally with
some text included to tell you what went wrong.
The base class that all mastodon exceptions inherit from is `MastodonError`.
The base class that all Mastodon exceptions inherit from is `MastodonError`.
If you are only interested in the fact an error was raised somewhere in
Mastodon.py, and not the details, this is the exception you can catch.
@ -199,7 +199,7 @@ of `MastodonNetworkError`, `MastodonReadTimeout`, which is thrown when a streami
API stream times out during reading.
`MastodonAPIError` is an error returned from the Mastodon instance - the server
has decided it can't fullfill your request (i.e. you requested info on a user that
has decided it can't fulfil your request (i.e. you requested info on a user that
does not exist). It is further split into `MastodonNotFoundError` (API returned 404)
and `MastodonUnauthorizedError` (API returned 401). Different error codes might exist,
but are not currently handled separately.
@ -224,9 +224,9 @@ While you take the extra step of removing the code, please take a moment to cons
Return values
-------------
Unless otherwise specified, all data is returned as python dictionaries, matching
Unless otherwise specified, all data is returned as Python dictionaries, matching
the JSON format used by the API. Dates returned by the API are in ISO 8601 format
and are parsed into python datetime objects.
and are parsed into Python datetime objects.
To make access easier, the dictionaries returned are wrapped by a class that adds
read-only attributes for all dict values - this means that, for example, instead of
@ -268,7 +268,7 @@ User / account dicts
'followers_count': # How many followers they have
'statuses_count': # How many statuses they have
'note': # Their bio
'url': # Their URL; usually 'https://mastodon.social/users/<acct>'
'url': # Their URL; for example 'https://mastodon.social/users/<acct>'
'avatar': # URL for their avatar, can be animated
'header': # URL for their header image, can be animated
'avatar_static': # URL for their avatar, never animated
@ -288,9 +288,9 @@ User / account dicts
mastodon.account_verify_credentials()["source"]
# Returns the following dictionary:
{
'privacy': # The users default visibility setting ("private", "unlisted" or "public")
'privacy': # The user's default visibility setting ("private", "unlisted" or "public")
'sensitive': # Denotes whether user media should be marked sensitive by default
'note': # Plain text version of the users bio
'note': # Plain text version of the user's bio
}
Toot dicts
@ -346,10 +346,10 @@ Mention dicts
.. code-block:: python
{
'url': # Mentioned users profile URL (potentially remote)
'username': # Mentioned users user name (not including domain)
'acct': # Mentioned users account name (including domain)
'id': # Mentioned users (local) account ID
'url': # Mentioned user's profile URL (potentially remote)
'username': # Mentioned user's user name (not including domain)
'acct': # Mentioned user's account name (including domain)
'id': # Mentioned user's (local) account ID
}
Scheduled toot dicts
@ -673,10 +673,10 @@ Instance dicts
{
'description': # A brief instance description set by the admin
'short_description': # An even briefer instance description
'email': # The admin contact e-mail
'title': # The instances title
'uri': # The instances URL
'version': # The instances mastodon version
'email': # The admin contact email
'title': # The instance's title
'uri': # The instance's URL
'version': # The instance's Mastodon version
'urls': # Additional URLs dict, presently only 'streaming_api' with the
# stream websocket address.
'stats: # A dictionary containing three stats, user_count (number of local users),
@ -763,7 +763,7 @@ Push notification dicts
'notification_id': # ID that can be passed to notification() to get the full
# notification object,
'notification_type': # 'mention', 'reblog', 'follow' or 'favourite'
'preferred_locale': # The users preferred locale
'preferred_locale': # The user's preferred locale
'title': # Title for the notification
}
@ -776,11 +776,11 @@ Preference dicts
mastodon.preferences()
# Returns the following dictionary
{
'posting:default:visibility': # The default visibility setting for the users posts,
'posting:default:visibility': # The default visibility setting for the user's posts,
# as a string
'posting:default:sensitive': # Boolean indicating whether the users uploads should
'posting:default:sensitive': # Boolean indicating whether the user's uploads should
# be marked sensitive by default
'posting:default:language': # The users default post language, if set (None if not)
'posting:default:language': # The user's default post language, if set (None if not)
'reading:expand:media': # How the user wishes to be shown sensitive media. Can be
# 'default' (hide if sensitive), 'hide_all' or 'show_all'
'reading:expand:spoilers': # Boolean indicating whether the user wishes to expand
@ -799,7 +799,7 @@ Featured tag dicts
'id': # The featured tags id
'name': # The featured tags name (without leading #)
'statuses_count': # Number of publicly visible statuses posted with this hashtag that this instance knows about
'last_status_at': # The last time a public status containing this hashtag was added to this instances database
'last_status_at': # The last time a public status containing this hashtag was added to this instance's database
# (can be None if there are none)
}
@ -860,10 +860,10 @@ Admin account dicts
'username': # The users username, no leading @
'domain': # The users domain
'created_at': # The time of account creation
'email': # For local users, the users e-mail
'ip': # For local users, the users last known IP address
'email': # For local users, the user's email
'ip': # For local users, the user's last known IP address
'role': # 'admin', 'moderator' or None
'confirmed': # For local users, False if the user has not confirmed their e-mail, True otherwise
'confirmed': # For local users, False if the user has not confirmed their email, True otherwise
'suspended': # Boolean indicating whether the user has been suspended
'silenced': # Boolean indicating whether the user has been suspended
'disabled': # For local users, boolean indicating whether the user has had their login disabled
@ -871,12 +871,12 @@ Admin account dicts
'locale': # For local users, the locale the user has set,
'invite_request': # If the user requested an invite, the invite request comment of that user. (TODO permanent?)
'invited_by_account_id': # Present if the user was invited by another user and set to the inviting users id.
'account': # The users account, as a standard user dict
'account': # The user's account, as a standard user dict
}
App registration and user authentication
----------------------------------------
Before you can use the mastodon API, you have to register your
Before you can use the Mastodon API, you have to register your
application (which gets you a client key and client secret)
and then log in (which gets you an access token). These functions
allow you to do those things. Additionally, it is also possible
@ -979,7 +979,7 @@ This function allows you to get and refresh information about polls.
Reading data: Notifications
---------------------------
This function allows you to get information about a users notifications.
This function allows you to get information about a user's notifications.
.. automethod:: Mastodon.notifications
@ -1020,7 +1020,7 @@ Reading data: Follow suggestions
Reading data: Profile directory
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. authomethod:: Mastodon.directory
.. automethod:: Mastodon.directory
Reading data: Lists
-------------------
@ -1033,7 +1033,7 @@ These functions allow you to view information about lists.
Reading data: Follows
---------------------
.. automethod:: Mastodon.followshttps://docs.joinmastodon.org/api/rest
.. automethod:: Mastodon.follows
Reading data: Favourites
------------------------
@ -1078,7 +1078,7 @@ of reports filed by the logged in user. It has since been removed.
Writing data: Last-read markers
--------------------------
--------------------------------
This function allows you to set get last read position for timelines.
.. automethod:: Mastodon.markers_get
@ -1139,8 +1139,8 @@ interact with already posted statuses.
Writing data: Scheduled statuses
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mastodon allows you to schedule statuses (using `status_post()`_.
The functions in this section allow you to update or delete thusly
Mastodon allows you to schedule statuses (using `status_post()`_).
The functions in this section allow you to update or delete
scheduled statuses.
.. automethod:: Mastodon.scheduled_status_update
@ -1171,7 +1171,6 @@ These functions allow you to interact with other accounts: To (un)follow and
(un)block.
.. automethod:: Mastodon.account_follow
.. automethod:: Mastodon.follows
.. automethod:: Mastodon.account_unfollow
.. automethod:: Mastodon.account_block
.. automethod:: Mastodon.account_unblock
@ -1185,7 +1184,7 @@ These functions allow you to interact with other accounts: To (un)follow and
Writing data: Featured tags
~~~~~~~~~~~~~~~~~~~~~~~~~~~
These functions allow setting which tags are featured on a users profile.
These functions allow setting which tags are featured on a user's profile.
.. automethod:: Mastodon.featured_tag_create
.. automethod:: Mastodon.featured_tag_delete
@ -1240,7 +1239,7 @@ Writing data: Reports
.. automethod:: Mastodon.report
Writing data: Last-read markers
--------------------------
-------------------------------
This function allows you to set the last read position for timelines to
allow for persisting where the user was reading a timeline between sessions
and clients / devices.
@ -1348,14 +1347,14 @@ CallbackStreamListener
Push subscriptions
------------------
These functions allow you to manage webpush subscriptions and to decrypt received
pushes. Note that the intended setup is not mastodon pushing directly to a users client -
pushes. Note that the intended setup is not Mastodon pushing directly to a user's client -
the push endpoint should usually be a relay server that then takes care of delivering the
(encrypted) push to the end user via some mechanism, where it can then be decrypted and
displayed.
Mastodon allows an application to have one webpush subscription per user at a time.
All crypto utilities require Mastodon.pys optional "webpush" feature dependencies
All crypto utilities require Mastodon.py's optional "webpush" feature dependencies
(specifically, the "cryptography" and "http_ece" packages).
.. automethod:: Mastodon.push_subscription
@ -1403,10 +1402,10 @@ have admin: scopes attached with a lot of care, but be extra careful with those
Acknowledgements
----------------
Mastodon.py contains work by a large amount of contributors, many of which have
Mastodon.py contains work by a large number of contributors, many of which have
put significant work into making it a better library. You can find some information
about who helped with which particular feature or fix in the changelog.
.. _Mastodon: https://github.com/tootsuite/mastodon
.. _Mastodon flagship instance: http://mastodon.social/
.. _Official Mastodon api docs: https://docs.joinmastodon.org/api/rest
.. _Mastodon: https://github.com/mastodon/mastodon
.. _Mastodon flagship instance: https://mastodon.social/
.. _Official Mastodon API docs: https://docs.joinmastodon.org/client/intro/

Plik diff jest za duży Load Diff

Wyświetl plik

@ -1,6 +1,6 @@
"""
Handlers for the Streaming API:
https://github.com/tootsuite/mastodon/blob/master/docs/Using-the-API/Streaming-API.md
https://github.com/mastodon/documentation/blob/master/content/en/methods/timelines/streaming.md
"""
import json
@ -14,6 +14,7 @@ from mastodon import Mastodon
from mastodon.Mastodon import MastodonMalformedEventError, MastodonNetworkError, MastodonReadTimeout
from requests.exceptions import ChunkedEncodingError, ReadTimeout
class StreamListener(object):
"""Callbacks for the streaming API. Create a subclass, override the on_xxx
methods for the kinds of events you're interested in, then pass an instance
@ -65,7 +66,6 @@ class StreamListener(object):
self.on_abort(exception)
raise exception
def handle_heartbeat(self):
"""The server has sent us a keep-alive message. This callback may be
useful to carry out periodic housekeeping tasks, or just to confirm
@ -95,7 +95,8 @@ class StreamListener(object):
try:
line = line_buffer.decode('utf-8')
except UnicodeDecodeError as err:
exception = MastodonMalformedEventError("Malformed UTF-8")
exception = MastodonMalformedEventError(
"Malformed UTF-8")
self.on_abort(exception)
six.raise_from(
exception,
@ -117,7 +118,8 @@ class StreamListener(object):
err
)
except MastodonReadTimeout as err:
exception = MastodonReadTimeout("Timed out while reading from server."),
exception = MastodonReadTimeout(
"Timed out while reading from server."),
self.on_abort(exception)
six.raise_from(
exception,
@ -150,9 +152,11 @@ class StreamListener(object):
for_stream = json.loads(event['stream'])
except:
for_stream = None
payload = json.loads(data, object_hook = Mastodon._Mastodon__json_hooks)
payload = json.loads(
data, object_hook=Mastodon._Mastodon__json_hooks)
except KeyError as err:
exception = MastodonMalformedEventError('Missing field', err.args[0], event)
exception = MastodonMalformedEventError(
'Missing field', err.args[0], event)
self.on_abort(exception)
six.raise_from(
exception,
@ -191,6 +195,7 @@ class StreamListener(object):
else:
handler(name, payload)
class CallbackStreamListener(StreamListener):
"""
Simple callback stream handler class.
@ -198,6 +203,7 @@ class CallbackStreamListener(StreamListener):
Define an unknown_event_handler for new Mastodon API events. If not, the
listener will raise an error on new, not handled, events from the API.
"""
def __init__(self, update_handler=None, local_update_handler=None, delete_handler=None, notification_handler=None, conversation_handler=None, unknown_event_handler=None, status_update_handler=None):
super(CallbackStreamListener, self).__init__()
self.update_handler = update_handler