diff options
author | Lorenz Diener <[email protected]> | 2018-07-30 17:29:37 +0200 |
---|---|---|
committer | Lorenz Diener <[email protected]> | 2018-07-30 17:29:37 +0200 |
commit | de0d5df86152ab5f4a748fecd0d2089e701820cd (patch) | |
tree | 50830eb14f39f8c690d8181dab315db283a2d8a4 /mastodon | |
parent | cf2d0ebc8246cea8c5e1dbb48687b625affe53c8 (diff) | |
download | mastodon.py-de0d5df86152ab5f4a748fecd0d2089e701820cd.tar.gz |
Add keyword filters
Diffstat (limited to 'mastodon')
-rw-r--r-- | mastodon/Mastodon.py | 80 |
1 files changed, 78 insertions, 2 deletions
diff --git a/mastodon/Mastodon.py b/mastodon/Mastodon.py index 5e73622..0020710 100644 --- a/mastodon/Mastodon.py +++ b/mastodon/Mastodon.py | |||
@@ -173,6 +173,7 @@ class Mastodon: | |||
173 | __DICT_VERSION_REPORT = "1.1.0" | 173 | __DICT_VERSION_REPORT = "1.1.0" |
174 | __DICT_VERSION_PUSH = "2.4.0" | 174 | __DICT_VERSION_PUSH = "2.4.0" |
175 | __DICT_VERSION_PUSH_NOTIF = "2.4.0" | 175 | __DICT_VERSION_PUSH_NOTIF = "2.4.0" |
176 | __DICT_VERSION_FILTER = "2.4.3" | ||
176 | 177 | ||
177 | ### | 178 | ### |
178 | # Registering apps | 179 | # Registering apps |
@@ -833,6 +834,29 @@ class Mastodon: | |||
833 | return self.__api_request('GET', url, params) | 834 | return self.__api_request('GET', url, params) |
834 | 835 | ||
835 | ### | 836 | ### |
837 | # Reading data: Keyword filters | ||
838 | ### | ||
839 | @api_version("2.4.3", "2.4.3", __DICT_VERSION_FILTER) | ||
840 | def filters(): | ||
841 | """ | ||
842 | Fetch all of the logged-in users filters. | ||
843 | |||
844 | Returns a list of `filter dicts`_. Not paginated. | ||
845 | """ | ||
846 | return self.__api_request('GET', '/api/v1/filters') | ||
847 | |||
848 | @api_version("2.4.3", "2.4.3", __DICT_VERSION_FILTER) | ||
849 | def filter(id): | ||
850 | """ | ||
851 | Fetches information about the filter with the specified `id`. | ||
852 | |||
853 | Returns a `filter dict`_. | ||
854 | """ | ||
855 | id = self.__unpack_id(id) | ||
856 | url = '/api/v1/filters/{0}'.format(str(id)) | ||
857 | return self.__api_request('GET', url) | ||
858 | |||
859 | ### | ||
836 | # Reading data: Follow suggestions | 860 | # Reading data: Follow suggestions |
837 | ### | 861 | ### |
838 | @api_version("2.4.3", "2.4.3", __DICT_VERSION_ACCOUNT) | 862 | @api_version("2.4.3", "2.4.3", __DICT_VERSION_ACCOUNT) |
@@ -1470,12 +1494,64 @@ class Mastodon: | |||
1470 | 1494 | ||
1471 | 1495 | ||
1472 | ### | 1496 | ### |
1497 | # Writing data: Keyword filters | ||
1498 | ### | ||
1499 | @api_version("2.4.3", "2.4.3", __DICT_VERSION_FILTER) | ||
1500 | def filter_create(phrase, context, irreversible = True, whole_word = True, expires_in = None): | ||
1501 | """ | ||
1502 | Creates a new keyword filter. `phrase` is the phrase that should be | ||
1503 | filtered out, `context` specifies from where to filter the keywords. | ||
1504 | Valid contexts are 'home', 'notifications', 'public' and 'thread'. | ||
1505 | |||
1506 | Set `irreversible` to False if you want the filter to merely be applied | ||
1507 | at client side. Note that Mastodon.py doesn't do any client-side | ||
1508 | filtering for you. | ||
1509 | |||
1510 | Set `whole_word` to False if you want to allow filter matches to | ||
1511 | start or end within a word, not only at word boundaries. | ||
1512 | |||
1513 | Set `expires_in` to specify for how many seconds the filter should be | ||
1514 | kept around. | ||
1515 | |||
1516 | Returns the `filter dict`_ of the newly created filter. | ||
1517 | """ | ||
1518 | params = self.__generate_params(locals()) | ||
1519 | |||
1520 | for context_val in context: | ||
1521 | if not context_val in ['home', 'notifications', 'public', 'thread']: | ||
1522 | raise MastodonIllegalArgumentError('Invalid filter context.') | ||
1523 | |||
1524 | return self.__api_request('POST', '/api/v1/filters', params) | ||
1525 | |||
1526 | @api_version("2.4.3", "2.4.3", __DICT_VERSION_FILTER) | ||
1527 | def filter_update(id, phrase = None, context = None, irreversible = None, whole_word = None, expires_in = None): | ||
1528 | """ | ||
1529 | Updates the filter with the given `id`. Parameters are the same | ||
1530 | as in `filter_create()`. | ||
1531 | |||
1532 | Returns the `filter dict`_ of the updated filter. | ||
1533 | """ | ||
1534 | id = self.__unpack_id(id) | ||
1535 | params = self.__generate_params(locals(), ['id']) | ||
1536 | url = '/api/v1/filters/{0}'.format(str(id)) | ||
1537 | return self.__api_request('PUT', url, params) | ||
1538 | |||
1539 | @api_version("2.4.3", "2.4.3", "2.4.3") | ||
1540 | def filter_delete(id): | ||
1541 | """ | ||
1542 | Deletes the filter with the given `id`. | ||
1543 | """ | ||
1544 | id = self.__unpack_id(id) | ||
1545 | url = '/api/v1/filters/{0}'.format(str(id)) | ||
1546 | self.__api_request('DELETE', url) | ||
1547 | |||
1548 | ### | ||
1473 | # Writing data: Follow suggestions | 1549 | # Writing data: Follow suggestions |
1474 | ### | 1550 | ### |
1475 | @api_version("2.4.3", "2.4.3", __DICT_VERSION_ACCOUNT) | 1551 | @api_version("2.4.3", "2.4.3", __DICT_VERSION_ACCOUNT) |
1476 | def suggestion_delete(self, account_id): | 1552 | def suggestion_delete(self, account_id): |
1477 | """ | 1553 | """ |
1478 | Remove a single user from the follow suggestions. | 1554 | Remove the user with the given `account_id` from the follow suggestions. |
1479 | """ | 1555 | """ |
1480 | account_id = self.__unpack_id(account_id) | 1556 | account_id = self.__unpack_id(account_id) |
1481 | url = '/api/v1/suggestions/{0}'.format(str(account_id)) | 1557 | url = '/api/v1/suggestions/{0}'.format(str(account_id)) |
@@ -1947,7 +2023,7 @@ class Mastodon: | |||
1947 | """ | 2023 | """ |
1948 | Parse dates in certain known json fields, if possible. | 2024 | Parse dates in certain known json fields, if possible. |
1949 | """ | 2025 | """ |
1950 | known_date_fields = ["created_at", "week", "day"] | 2026 | known_date_fields = ["created_at", "week", "day", "expires_at"] |
1951 | for k, v in json_object.items(): | 2027 | for k, v in json_object.items(): |
1952 | if k in known_date_fields: | 2028 | if k in known_date_fields: |
1953 | try: | 2029 | try: |