aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLorenz Diener <[email protected]>2019-04-28 18:37:15 +0200
committerLorenz Diener <[email protected]>2019-04-28 18:37:15 +0200
commit09f9023c7070c1610d0287953e9365ee00c5f374 (patch)
tree557eb97c772b77d2e193e9b5647e3d3acf237a8c
parent08ba4c88bf6ab7bc91e55e86edb2c2371d723d97 (diff)
downloadmastodon.py-09f9023c7070c1610d0287953e9365ee00c5f374.tar.gz
Add basic support for scheduled statuses
-rw-r--r--mastodon/Mastodon.py38
1 files changed, 30 insertions, 8 deletions
diff --git a/mastodon/Mastodon.py b/mastodon/Mastodon.py
index 444c12d..7561cea 100644
--- a/mastodon/Mastodon.py
+++ b/mastodon/Mastodon.py
@@ -179,6 +179,7 @@ class Mastodon:
179 __DICT_VERSION_PUSH_NOTIF = "2.4.0" 179 __DICT_VERSION_PUSH_NOTIF = "2.4.0"
180 __DICT_VERSION_FILTER = "2.4.3" 180 __DICT_VERSION_FILTER = "2.4.3"
181 __DICT_VERSION_CONVERSATION = bigger_version(bigger_version("2.6.0", __DICT_VERSION_ACCOUNT), __DICT_VERSION_STATUS) 181 __DICT_VERSION_CONVERSATION = bigger_version(bigger_version("2.6.0", __DICT_VERSION_ACCOUNT), __DICT_VERSION_STATUS)
182 __DICT_VERSION_SCHEDULED_STATUS = bigger_version("2.7.0", __DICT_VERSION_STATUS)
182 183
183 ### 184 ###
184 # Registering apps 185 # Registering apps
@@ -1300,10 +1301,11 @@ class Mastodon:
1300 ### 1301 ###
1301 # Writing data: Statuses 1302 # Writing data: Statuses
1302 ### 1303 ###
1303 @api_version("1.0.0", "2.4.3", __DICT_VERSION_STATUS) 1304 @api_version("1.0.0", "2.7.0", __DICT_VERSION_STATUS)
1304 def status_post(self, status, in_reply_to_id=None, media_ids=None, 1305 def status_post(self, status, in_reply_to_id=None, media_ids=None,
1305 sensitive=False, visibility=None, spoiler_text=None, 1306 sensitive=False, visibility=None, spoiler_text=None,
1306 language=None, idempotency_key=None, content_type=None): 1307 language=None, idempotency_key=None, content_type=None,
1308 scheduled_at=None):
1307 """ 1309 """
1308 Post a status. Can optionally be in reply to another status and contain 1310 Post a status. Can optionally be in reply to another status and contain
1309 media. 1311 media.
@@ -1341,7 +1343,11 @@ class Mastodon:
1341 if you call it with the same `idempotency_key`, only one status will 1343 if you call it with the same `idempotency_key`, only one status will
1342 be created. 1344 be created.
1343 1345
1344 Specify 'content_type' to set the content type of your post on Pleroma. 1346 Pass a datetime as `scheduled_at` to schedule the toot for a specific time
1347 (the time must be at least 5 minutes into the future). If this is passed,
1348 status_post returns a `scheduled toot dict`_ instead.
1349
1350 Specify `content_type` to set the content type of your post on Pleroma.
1345 It accepts 'text/plain' (default), 'text/markdown', and 'text/html'. 1351 It accepts 'text/plain' (default), 'text/markdown', and 'text/html'.
1346 This parameter is not supported on Mastodon servers, but will be 1352 This parameter is not supported on Mastodon servers, but will be
1347 safely ignored if set. 1353 safely ignored if set.
@@ -1351,6 +1357,9 @@ class Mastodon:
1351 if in_reply_to_id != None: 1357 if in_reply_to_id != None:
1352 in_reply_to_id = self.__unpack_id(in_reply_to_id) 1358 in_reply_to_id = self.__unpack_id(in_reply_to_id)
1353 1359
1360 if scheduled_at != None:
1361 scheduled_at = scheduled_at.isoformat()
1362
1354 params_initial = locals() 1363 params_initial = locals()
1355 1364
1356 # Validate visibility parameter 1365 # Validate visibility parameter
@@ -1395,7 +1404,7 @@ class Mastodon:
1395 params = self.__generate_params(params_initial, ['idempotency_key']) 1404 params = self.__generate_params(params_initial, ['idempotency_key'])
1396 return self.__api_request('POST', '/api/v1/statuses', params, headers = headers) 1405 return self.__api_request('POST', '/api/v1/statuses', params, headers = headers)
1397 1406
1398 @api_version("1.0.0", "2.4.3", __DICT_VERSION_STATUS) 1407 @api_version("1.0.0", "2.7.0", __DICT_VERSION_STATUS)
1399 def toot(self, status): 1408 def toot(self, status):
1400 """ 1409 """
1401 Synonym for `status_post()`_ that only takes the status text as input. 1410 Synonym for `status_post()`_ that only takes the status text as input.
@@ -1406,9 +1415,10 @@ class Mastodon:
1406 """ 1415 """
1407 return self.status_post(status) 1416 return self.status_post(status)
1408 1417
1409 @api_version("1.0.0", "2.4.3", __DICT_VERSION_STATUS) 1418 @api_version("1.0.0", "2.7.0", __DICT_VERSION_STATUS)
1410 def status_reply(self, to_status, status, media_ids=None, sensitive=False, visibility=None, 1419 def status_reply(self, to_status, status, media_ids=None, sensitive=False, visibility=None,
1411 spoiler_text=None, language=None, idempotency_key=None, untag=False): 1420 spoiler_text=None, language=None, idempotency_key=None, content_type=None,
1421 scheduled_at=None, untag=False):
1412 """ 1422 """
1413 Helper function - acts like status_post, but prepends the name of all 1423 Helper function - acts like status_post, but prepends the name of all
1414 the users that are being replied to to the status text and retains 1424 the users that are being replied to to the status text and retains
@@ -1440,7 +1450,8 @@ class Mastodon:
1440 1450
1441 return self.status_post(status, in_reply_to_id = to_status.id, media_ids = media_ids, sensitive = sensitive, 1451 return self.status_post(status, in_reply_to_id = to_status.id, media_ids = media_ids, sensitive = sensitive,
1442 visibility = visibility, spoiler_text = spoiler_text, language = language, 1452 visibility = visibility, spoiler_text = spoiler_text, language = language,
1443 idempotency_key = idempotency_key) 1453 idempotency_key = idempotency_key, content_type = content_type,
1454 scheduled_at = scheduled_at)
1444 1455
1445 @api_version("1.0.0", "1.0.0", "1.0.0") 1456 @api_version("1.0.0", "1.0.0", "1.0.0")
1446 def status_delete(self, id): 1457 def status_delete(self, id):
@@ -1540,6 +1551,17 @@ class Mastodon:
1540 return self.__api_request('POST', url) 1551 return self.__api_request('POST', url)
1541 1552
1542 ### 1553 ###
1554 # Writing data: Scheduled statuses
1555 ###
1556 @api_version("2.7.0", "2.7.0", __DICT_VERSION_SCHEDULED_STATUS)
1557 def update_scheduled_status(self, id, scheduled_at):
1558 scheduled_at = scheduled_at.isoformat()
1559 id = self.__unpack_id(id)
1560 self.__generate_params(locals(), ['id'])
1561 url = '/api/v1/scheduled_statuses/{0}'.format(str(id))
1562 return self.__api_request('PUT', url, params)
1563
1564 ###
1543 # Writing data: Notifications 1565 # Writing data: Notifications
1544 ### 1566 ###
1545 @api_version("1.0.0", "1.0.0", "1.0.0") 1567 @api_version("1.0.0", "1.0.0", "1.0.0")
@@ -2303,7 +2325,7 @@ class Mastodon:
2303 """ 2325 """
2304 Parse dates in certain known json fields, if possible. 2326 Parse dates in certain known json fields, if possible.
2305 """ 2327 """
2306 known_date_fields = ["created_at", "week", "day", "expires_at"] 2328 known_date_fields = ["created_at", "week", "day", "expires_at", "scheduled_at"]
2307 for k, v in json_object.items(): 2329 for k, v in json_object.items():
2308 if k in known_date_fields: 2330 if k in known_date_fields:
2309 if v != None: 2331 if v != None:
Powered by cgit v1.2.3 (git 2.41.0)