From d9cd7547fd0919a46b79ede084910b7df66f8fd7 Mon Sep 17 00:00:00 2001 From: halcy Date: Wed, 30 Nov 2022 23:47:46 +0200 Subject: Move some more methods, fix crypto heckup --- mastodon/instance.py | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 mastodon/instance.py (limited to 'mastodon/instance.py') diff --git a/mastodon/instance.py b/mastodon/instance.py new file mode 100644 index 0000000..88445d1 --- /dev/null +++ b/mastodon/instance.py @@ -0,0 +1,96 @@ +from .versions import _DICT_VERSION_INSTANCE, _DICT_VERSION_ACTIVITY +from .error import MastodonIllegalArgumentError, MastodonNotFoundError +from .utility import api_version +from .compat import urlparse + +from .internals import Mastodon as Internals + +class Mastodon(Internals): + ### + # Reading data: Instances + ### + @api_version("1.1.0", "2.3.0", _DICT_VERSION_INSTANCE) + def instance(self): + """ + Retrieve basic information about the instance, including the URI and administrative contact email. + + Does not require authentication unless locked down by the administrator. + + Returns an :ref:`instance dict `. + """ + return self.__instance() + + def __instance(self): + """ + Internal, non-version-checking helper that does the same as instance() + """ + instance = self.__api_request('GET', '/api/v1/instance/') + return instance + + @api_version("2.1.2", "2.1.2", _DICT_VERSION_ACTIVITY) + def instance_activity(self): + """ + Retrieve activity stats about the instance. May be disabled by the instance administrator - throws + a MastodonNotFoundError in that case. + + Activity is returned for 12 weeks going back from the current week. + + Returns a list of :ref:`activity dicts `. + """ + return self.__api_request('GET', '/api/v1/instance/activity') + + @api_version("2.1.2", "2.1.2", "2.1.2") + def instance_peers(self): + """ + Retrieve the instances that this instance knows about. May be disabled by the instance administrator - throws + a MastodonNotFoundError in that case. + + Returns a list of URL strings. + """ + return self.__api_request('GET', '/api/v1/instance/peers') + + @api_version("3.0.0", "3.0.0", "3.0.0") + def instance_health(self): + """ + Basic health check. Returns True if healthy, False if not. + """ + status = self.__api_request('GET', '/health', parse=False).decode("utf-8") + return status in ["OK", "success"] + + @api_version("3.0.0", "3.0.0", "3.0.0") + def instance_nodeinfo(self, schema="http://nodeinfo.diaspora.software/ns/schema/2.0"): + """ + Retrieves the instance's nodeinfo information. + + For information on what the nodeinfo can contain, see the nodeinfo + specification: https://github.com/jhass/nodeinfo . By default, + Mastodon.py will try to retrieve the version 2.0 schema nodeinfo. + + To override the schema, specify the desired schema with the `schema` + parameter. + """ + links = self.__api_request('GET', '/.well-known/nodeinfo')["links"] + + schema_url = None + for available_schema in links: + if available_schema.rel == schema: + schema_url = available_schema.href + + if schema_url is None: + raise MastodonIllegalArgumentError( + "Requested nodeinfo schema is not available.") + + try: + return self.__api_request('GET', schema_url, base_url_override="") + except MastodonNotFoundError: + parse = urlparse(schema_url) + return self.__api_request('GET', parse.path + parse.params + parse.query + parse.fragment) + + @api_version("3.4.0", "3.4.0", _DICT_VERSION_INSTANCE) + def instance_rules(self): + """ + Retrieve instance rules. + + Returns a list of `id` + `text` dicts, same as the `rules` field in the :ref:`instance dicts `. + """ + return self.__api_request('GET', '/api/v1/instance/rules') -- cgit v1.2.3