Merge branch 'master' of https://github.com/halcy/Mastodon.py
This commit is contained in:
commit
6a5ddb0a5c
S'han modificat 3 arxius amb 51 adicions i 16 eliminacions
|
@ -1,7 +1,7 @@
|
||||||
Mastodon.py
|
Mastodon.py
|
||||||
===========
|
===========
|
||||||
Python wrapper for the Mastodon ( https://github.com/tootsuite/mastodon/ ) API.
|
Python wrapper for the Mastodon ( https://github.com/tootsuite/mastodon/ ) API.
|
||||||
Feature complete for public API as of Mastodon version 2.8.0 and easy to get started with:
|
Feature complete for public API as of Mastodon version 2.8.2 and easy to get started with:
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
|
|
|
@ -54,9 +54,10 @@ 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
|
Mastodon.py aims to implement the complete public Mastodon API. As
|
||||||
of this time, it is feature complete for Mastodon version 2.8.0. Pleromas
|
of this time, it is feature complete for Mastodon version 2.8.2. Pleromas
|
||||||
Mastodon API layer, while not an official target, should also be basically
|
Mastodon API layer, while not an official target, should also be basically
|
||||||
compatible.
|
compatible, and Mastodon.py does make some allowances for behaviour that isn't
|
||||||
|
strictly like Mastodons.
|
||||||
|
|
||||||
A note about rate limits
|
A note about rate limits
|
||||||
------------------------
|
------------------------
|
||||||
|
@ -781,6 +782,9 @@ Mastodon.py throws a `MastodonVersionError`.
|
||||||
|
|
||||||
With the following functions, you can make Mastodon.py re-check the server
|
With the following functions, you can make Mastodon.py re-check the server
|
||||||
version or explicitly determine if a specific minimum Version is available.
|
version or explicitly determine if a specific minimum Version is available.
|
||||||
|
Long-running applications that aim to support multiple Mastodon versions
|
||||||
|
should do this from time to time in case a server they are running against
|
||||||
|
updated.
|
||||||
|
|
||||||
.. automethod:: Mastodon.retrieve_mastodon_version
|
.. automethod:: Mastodon.retrieve_mastodon_version
|
||||||
.. automethod:: Mastodon.verify_minimum_version
|
.. automethod:: Mastodon.verify_minimum_version
|
||||||
|
|
|
@ -155,12 +155,12 @@ class Mastodon:
|
||||||
}
|
}
|
||||||
__VALID_SCOPES = ['read', 'write', 'follow', 'push'] + __SCOPE_SETS['read'] + __SCOPE_SETS['write']
|
__VALID_SCOPES = ['read', 'write', 'follow', 'push'] + __SCOPE_SETS['read'] + __SCOPE_SETS['write']
|
||||||
|
|
||||||
__SUPPORTED_MASTODON_VERSION = "2.4.3"
|
__SUPPORTED_MASTODON_VERSION = "2.8.2"
|
||||||
|
|
||||||
# Dict versions
|
# Dict versions
|
||||||
__DICT_VERSION_APPLICATION = "2.7.2"
|
__DICT_VERSION_APPLICATION = "2.7.2"
|
||||||
__DICT_VERSION_MENTION = "1.0.0"
|
__DICT_VERSION_MENTION = "1.0.0"
|
||||||
__DICT_VERSION_MEDIA = "2.3.0"
|
__DICT_VERSION_MEDIA = "2.8.2"
|
||||||
__DICT_VERSION_ACCOUNT = "2.4.0"
|
__DICT_VERSION_ACCOUNT = "2.4.0"
|
||||||
__DICT_VERSION_POLL = "2.8.0"
|
__DICT_VERSION_POLL = "2.8.0"
|
||||||
__DICT_VERSION_STATUS = bigger_version(bigger_version(bigger_version(bigger_version(bigger_version("2.8.0",
|
__DICT_VERSION_STATUS = bigger_version(bigger_version(bigger_version(bigger_version(bigger_version("2.8.0",
|
||||||
|
@ -202,7 +202,8 @@ class Mastodon:
|
||||||
Specify `api_base_url` if you want to register an app on an instance different from the flagship one.
|
Specify `api_base_url` if you want to register an app on an instance different from the flagship one.
|
||||||
Specify `website` to give a website for your app.
|
Specify `website` to give a website for your app.
|
||||||
|
|
||||||
Specify `session` with a requests.Session for it to be used instead of the deafult.
|
Specify `session` with a requests.Session for it to be used instead of the deafult. This can be
|
||||||
|
used to, amongst other things, adjust proxy or ssl certificate settings.
|
||||||
|
|
||||||
Presently, app registration is open by default, but this is not guaranteed to be the case for all
|
Presently, app registration is open by default, but this is not guaranteed to be the case for all
|
||||||
future mastodon instances or even the flagship instance in the future.
|
future mastodon instances or even the flagship instance in the future.
|
||||||
|
@ -357,12 +358,15 @@ class Mastodon:
|
||||||
self.mastodon_major, self.mastodon_minor, self.mastodon_patch = parse_version_string(version_str)
|
self.mastodon_major, self.mastodon_minor, self.mastodon_patch = parse_version_string(version_str)
|
||||||
return version_str
|
return version_str
|
||||||
|
|
||||||
def verify_minimum_version(self, version_str):
|
def verify_minimum_version(self, version_str, cached=False):
|
||||||
"""
|
"""
|
||||||
Update version info from server and verify that at least the specified version is present.
|
Update version info from server and verify that at least the specified version is present.
|
||||||
|
|
||||||
|
If you specify "cached", the version info update part is skipped.
|
||||||
|
|
||||||
Returns True if version requirement is satisfied, False if not.
|
Returns True if version requirement is satisfied, False if not.
|
||||||
"""
|
"""
|
||||||
|
if not cached:
|
||||||
self.retrieve_mastodon_version()
|
self.retrieve_mastodon_version()
|
||||||
major, minor, patch = parse_version_string(version_str)
|
major, minor, patch = parse_version_string(version_str)
|
||||||
if major > self.mastodon_major:
|
if major > self.mastodon_major:
|
||||||
|
@ -1107,7 +1111,16 @@ class Mastodon:
|
||||||
###
|
###
|
||||||
# Reading data: Searching
|
# Reading data: Searching
|
||||||
###
|
###
|
||||||
@api_version("2.8.0", "2.8.0", __DICT_VERSION_SEARCHRESULT)
|
def __ensure_search_params_acceptable(self, account_id, offset, min_id, max_id):
|
||||||
|
"""
|
||||||
|
Internal Helper: Throw a MastodonVersionError if version is < 2.8.0 but parameters
|
||||||
|
for search that are available only starting with 2.8.0 are specified.
|
||||||
|
"""
|
||||||
|
if not account_id is None or not offset is None or not min_id is None or not max_id is None:
|
||||||
|
if self.verify_minimum_version("2.8.0", cached=True) == False:
|
||||||
|
raise MastodonVersionError("Advanced search parameters require Mastodon 2.8.0+")
|
||||||
|
|
||||||
|
@api_version("1.1.0", "2.8.0", __DICT_VERSION_SEARCHRESULT)
|
||||||
def search(self, q, resolve=True, result_type=None, account_id=None, offset=None, min_id=None, max_id=None):
|
def search(self, q, resolve=True, result_type=None, account_id=None, offset=None, min_id=None, max_id=None):
|
||||||
"""
|
"""
|
||||||
Fetch matching hashtags, accounts and statuses. Will perform webfinger
|
Fetch matching hashtags, accounts and statuses. Will perform webfinger
|
||||||
|
@ -1122,12 +1135,22 @@ class Mastodon:
|
||||||
|
|
||||||
`offset`, `min_id` and `max_id` can be used to paginate.
|
`offset`, `min_id` and `max_id` can be used to paginate.
|
||||||
|
|
||||||
|
Will use search_v1 (no tag dicts in return values) on Mastodon versions before
|
||||||
|
2.4.1), search_v2 otherwise. Parameters other than resolve are only available
|
||||||
|
on Mastodon 2.8.0 or above - this function will throw a MastodonVersionError
|
||||||
|
if you try to use them on versions before that. Note that the cached version
|
||||||
|
number will be used for this to avoid uneccesary requests.
|
||||||
|
|
||||||
Returns a `search result dict`_, with tags as `hashtag dicts`_.
|
Returns a `search result dict`_, with tags as `hashtag dicts`_.
|
||||||
"""
|
"""
|
||||||
|
if self.verify_minimum_version("2.4.1", cached=True) == True:
|
||||||
return self.search_v2(q, resolve=resolve, result_type=result_type, account_id=account_id,
|
return self.search_v2(q, resolve=resolve, result_type=result_type, account_id=account_id,
|
||||||
offset=offset, min_id=min_id, max_id=max_id)
|
offset=offset, min_id=min_id, max_id=max_id)
|
||||||
|
else:
|
||||||
|
self.__ensure_search_params_acceptable(account_id, offset, min_id, max_id)
|
||||||
|
return self.search_v1(q, resolve=resolve)
|
||||||
|
|
||||||
@api_version("1.1.0", "2.1.0", __DICT_VERSION_SEARCHRESULT)
|
@api_version("1.1.0", "2.1.0", "2.1.0")
|
||||||
def search_v1(self, q, resolve=False):
|
def search_v1(self, q, resolve=False):
|
||||||
"""
|
"""
|
||||||
Identical to `search_v2()`, except in that it does not return
|
Identical to `search_v2()`, except in that it does not return
|
||||||
|
@ -1140,7 +1163,7 @@ class Mastodon:
|
||||||
del params['resolve']
|
del params['resolve']
|
||||||
return self.__api_request('GET', '/api/v1/search', params)
|
return self.__api_request('GET', '/api/v1/search', params)
|
||||||
|
|
||||||
@api_version("2.8.0", "2.8.0", __DICT_VERSION_SEARCHRESULT)
|
@api_version("2.4.1", "2.8.0", __DICT_VERSION_SEARCHRESULT)
|
||||||
def search_v2(self, q, resolve=True, result_type=None, account_id=None, offset=None, min_id=None, max_id=None):
|
def search_v2(self, q, resolve=True, result_type=None, account_id=None, offset=None, min_id=None, max_id=None):
|
||||||
"""
|
"""
|
||||||
Identical to `search_v1()`, except in that it returns tags as
|
Identical to `search_v1()`, except in that it returns tags as
|
||||||
|
@ -1148,6 +1171,7 @@ class Mastodon:
|
||||||
|
|
||||||
Returns a `search result dict`_.
|
Returns a `search result dict`_.
|
||||||
"""
|
"""
|
||||||
|
self.__ensure_search_params_acceptable(account_id, offset, min_id, max_id)
|
||||||
params = self.__generate_params(locals())
|
params = self.__generate_params(locals())
|
||||||
|
|
||||||
if resolve == False:
|
if resolve == False:
|
||||||
|
@ -1429,7 +1453,9 @@ class Mastodon:
|
||||||
status_post returns a `scheduled toot dict`_ instead.
|
status_post returns a `scheduled toot dict`_ instead.
|
||||||
|
|
||||||
Pass `poll` to attach a poll to the status. An appropriate object can be
|
Pass `poll` to attach a poll to the status. An appropriate object can be
|
||||||
constructed using `make_poll()`_
|
constructed using `make_poll()`_ . Note that as of Mastodon version
|
||||||
|
2.8.2, you can only have either media or a poll attached, not both at
|
||||||
|
the same time.
|
||||||
|
|
||||||
Specify `content_type` to set the content type of your post on Pleroma.
|
Specify `content_type` to set the content type of your post on Pleroma.
|
||||||
It accepts 'text/plain' (default), 'text/markdown', and 'text/html'.
|
It accepts 'text/plain' (default), 'text/markdown', and 'text/html'.
|
||||||
|
@ -1446,6 +1472,11 @@ class Mastodon:
|
||||||
|
|
||||||
params_initial = locals()
|
params_initial = locals()
|
||||||
|
|
||||||
|
# Validate poll/media exclusivity
|
||||||
|
if not poll is None:
|
||||||
|
if (not media_ids is None) and len(media_ids) != 0:
|
||||||
|
raise ValueError('Status can have media or poll attached - not both.')
|
||||||
|
|
||||||
# Validate visibility parameter
|
# Validate visibility parameter
|
||||||
valid_visibilities = ['private', 'public', 'unlisted', 'direct']
|
valid_visibilities = ['private', 'public', 'unlisted', 'direct']
|
||||||
if params_initial['visibility'] == None:
|
if params_initial['visibility'] == None:
|
||||||
|
|
Loading…
Referencia en una nova incidència