Add, document and test nodeinfo api (fixes #199)
This commit is contained in:
pare
e60a3f1892
commit
2e5095f301
S'han modificat 4 arxius amb 118 adicions i 1 eliminacions
|
@ -844,6 +844,7 @@ current instance.
|
|||
.. automethod:: Mastodon.instance_activity
|
||||
.. automethod:: Mastodon.instance_peers
|
||||
.. automethod:: Mastodon.instance_health
|
||||
.. automethod:: Mastodon.instance_nodeinfo
|
||||
|
||||
Reading data: Timelines
|
||||
-----------------------
|
||||
|
|
|
@ -660,7 +660,35 @@ class Mastodon:
|
|||
Basic health check. Returns True if healthy, False if not.
|
||||
"""
|
||||
return self.__api_request('GET', '/health', parse=False).decode("utf-8") == "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 instances 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)
|
||||
|
||||
###
|
||||
# Reading data: Timelines
|
||||
##
|
||||
|
|
81
tests/cassettes/test_nodeinfo.yaml
Normal file
81
tests/cassettes/test_nodeinfo.yaml
Normal file
|
@ -0,0 +1,81 @@
|
|||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept: ['*/*']
|
||||
Accept-Encoding: ['gzip, deflate']
|
||||
Authorization: [Bearer __MASTODON_PY_TEST_ACCESS_TOKEN]
|
||||
Connection: [keep-alive]
|
||||
User-Agent: [python-requests/2.18.4]
|
||||
method: GET
|
||||
uri: http://localhost:3000/.well-known/nodeinfo
|
||||
response:
|
||||
body: {string: '{"links":[{"rel":"http://nodeinfo.diaspora.software/ns/schema/2.0","href":"http://localhost/nodeinfo/2.0"}]}'}
|
||||
headers:
|
||||
Cache-Control: ['max-age=259200, public']
|
||||
Content-Type: [application/json; charset=utf-8]
|
||||
Date: ['Sat, 12 Oct 2019 18:50:31 GMT']
|
||||
ETag: [W/"e1fd8a5cbe12d2ef42c3146d5319c8af"]
|
||||
Referrer-Policy: [strict-origin-when-cross-origin]
|
||||
Transfer-Encoding: [chunked]
|
||||
Vary: ['Accept, Accept-Encoding, Origin']
|
||||
X-Content-Type-Options: [nosniff]
|
||||
X-Download-Options: [noopen]
|
||||
X-Frame-Options: [SAMEORIGIN]
|
||||
X-Permitted-Cross-Domain-Policies: [none]
|
||||
X-Request-Id: [38a2a5fc-0a7e-44f1-bf4d-85c90c39b2bb]
|
||||
X-Runtime: ['0.026451']
|
||||
X-XSS-Protection: [1; mode=block]
|
||||
content-length: ['108']
|
||||
status: {code: 200, message: OK}
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept: ['*/*']
|
||||
Accept-Encoding: ['gzip, deflate']
|
||||
Authorization: [Bearer __MASTODON_PY_TEST_ACCESS_TOKEN]
|
||||
Connection: [keep-alive]
|
||||
User-Agent: [python-requests/2.18.4]
|
||||
method: GET
|
||||
uri: http://localhost/nodeinfo/2.0
|
||||
response:
|
||||
body: {string: "<html>\r\n<head><title>404 Not Found</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>404
|
||||
Not Found</h1></center>\r\n<hr><center>nginx/1.14.0 (Ubuntu)</center>\r\n</body>\r\n</html>\r\n"}
|
||||
headers:
|
||||
Connection: [keep-alive]
|
||||
Content-Type: [text/html]
|
||||
Date: ['Sat, 12 Oct 2019 18:50:31 GMT']
|
||||
Server: [nginx/1.14.0 (Ubuntu)]
|
||||
Transfer-Encoding: [chunked]
|
||||
content-length: ['178']
|
||||
status: {code: 404, message: Not Found}
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept: ['*/*']
|
||||
Accept-Encoding: ['gzip, deflate']
|
||||
Authorization: [Bearer __MASTODON_PY_TEST_ACCESS_TOKEN]
|
||||
Connection: [keep-alive]
|
||||
User-Agent: [python-requests/2.18.4]
|
||||
method: GET
|
||||
uri: http://localhost:3000/nodeinfo/2.0
|
||||
response:
|
||||
body: {string: '{"version":"2.0","software":{"name":"mastodon","version":"3.0.1"},"protocols":["activitypub"],"usage":{"users":{"total":3,"activeMonth":3,"activeHalfyear":3},"localPosts":32},"openRegistrations":true}'}
|
||||
headers:
|
||||
Cache-Control: ['max-age=1800, public']
|
||||
Content-Type: [application/json; charset=utf-8]
|
||||
Date: ['Sat, 12 Oct 2019 18:50:31 GMT']
|
||||
ETag: [W/"a09a04c6f9dc121c4b70f446e88a2686"]
|
||||
Referrer-Policy: [strict-origin-when-cross-origin]
|
||||
Transfer-Encoding: [chunked]
|
||||
Vary: ['Accept,Accept-Encoding']
|
||||
X-Content-Type-Options: [nosniff]
|
||||
X-Download-Options: [noopen]
|
||||
X-Frame-Options: [SAMEORIGIN]
|
||||
X-Permitted-Cross-Domain-Policies: [none]
|
||||
X-Request-Id: [5d4c66c1-efad-4b9f-85b0-d67755adb967]
|
||||
X-Runtime: ['0.020737']
|
||||
X-XSS-Protection: [1; mode=block]
|
||||
content-length: ['200']
|
||||
status: {code: 200, message: OK}
|
||||
version: 1
|
|
@ -36,3 +36,10 @@ def test_emoji(api):
|
|||
@pytest.mark.vcr()
|
||||
def test_health(api):
|
||||
assert api.instance_health() == True
|
||||
|
||||
@pytest.mark.vcr()
|
||||
def test_nodeinfo(api):
|
||||
nodeinfo = api.instance_nodeinfo()
|
||||
assert nodeinfo
|
||||
assert nodeinfo.version == '2.0'
|
||||
|
||||
|
|
Loading…
Referencia en una nova incidència