diff --git a/CHANGES.rst b/CHANGES.rst index b5cea8564..1320efeea 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -6,6 +6,13 @@ PRAW follows `semantic versioning `_. Unreleased ---------- +**Added** + +- :meth:`~.SubredditLinkFlairTemplates.reorder` to reorder a subreddit's link flair + templates. +- :meth:`~.SubredditRedditorFlairTemplates.reorder` to reorder a subreddit's redditor + flair templates. + 7.7.1 (2023/07/11) ------------------ diff --git a/praw/endpoints.py b/praw/endpoints.py index 104d2141f..eaef33a6d 100644 --- a/praw/endpoints.py +++ b/praw/endpoints.py @@ -63,6 +63,7 @@ "flairtemplate_v2": "r/{subreddit}/api/flairtemplate_v2", "flairtemplateclear": "r/{subreddit}/api/clearflairtemplates/", "flairtemplatedelete": "r/{subreddit}/api/deleteflairtemplate/", + "flairtemplatereorder": "r/{subreddit}/api/flair_template_order", "friend": "r/{subreddit}/api/friend/", "friend_v1": "api/v1/me/friends/{user}", "friends": "api/v1/me/friends/", diff --git a/praw/models/reddit/subreddit.py b/praw/models/reddit/subreddit.py index 73f0a6691..d4ffc7e44 100644 --- a/praw/models/reddit/subreddit.py +++ b/praw/models/reddit/subreddit.py @@ -830,6 +830,11 @@ def _fetch(self): self.__dict__.update(other.__dict__) self._fetched = True + def _fetch_data(self) -> dict: + name, fields, params = self._fetch_info() + path = API_PATH[name].format(**fields) + return self._reddit.request(method="GET", params=params, path=path) + def _fetch_info(self): return "subreddit_about", {"subreddit": self}, None @@ -2225,6 +2230,17 @@ def delete(self, template_id: str): url = API_PATH["flairtemplatedelete"].format(subreddit=self.subreddit) self.subreddit._reddit.post(url, data={"flair_template_id": template_id}) + def _reorder(self, flair_list: list, *, is_link: Optional[bool] = None): + url = API_PATH["flairtemplatereorder"].format(subreddit=self.subreddit) + self.subreddit._reddit.patch( + url, + params={ + "flair_type": self.flair_type(is_link), + "subreddit": self.subreddit.display_name, + }, + json=flair_list, + ) + @_deprecate_args( "template_id", "text", @@ -2728,7 +2744,7 @@ def update( :param submit_text_label: Custom label for submit text post button (``None`` for default). :param subreddit_type: One of ``"archived"``, ``"employees_only"``, - ``"gold_only"``, ``"gold_restricted"``, ``"private"``, ``"public"``, or + ``"gold_only"``, ``gold_restricted``, ``"private"``, ``"public"``, or ``"restricted"``. :param suggested_comment_sort: All comment threads will use this sorting method by default. Leave ``None``, or choose one of ``"confidence"``, @@ -4130,6 +4146,22 @@ def clear(self): """ self._clear(is_link=True) + def reorder(self, flair_list: List[str]): + """Reorder a list of flairs. + + :param flair_list: A list of flair IDs. + + For example, to reverse the order of the link flair list try: + + .. code-block:: python + + subreddit = reddit.subreddit("test") + flairs = [flair["id"] for flair in subreddit.flair.link_templates] + subreddit.flair.link_templates.reorder(list(reversed(flairs))) + + """ + self._reorder(flair_list, is_link=True) + def user_selectable( self, ) -> Generator[Dict[str, Union[str, bool]], None, None]: @@ -4245,3 +4277,20 @@ def clear(self): """ self._clear(is_link=False) + + def reorder(self, flair_list: List[str]): + """Reorder a list of flairs. + + :param flair_list: A list of flair IDs. + + For example, to reverse the order of the :class:`.Redditor` flair templates list + try: + + .. code-block:: python + + subreddit = reddit.subreddit("test") + flairs = [flair["id"] for flair in subreddit.flair.templates] + subreddit.flair.templates.reorder(list(reversed(flairs))) + + """ + self._reorder(flair_list, is_link=False) diff --git a/praw/reddit.py b/praw/reddit.py index 9364f5b89..cca57caf0 100644 --- a/praw/reddit.py +++ b/praw/reddit.py @@ -13,6 +13,7 @@ Dict, Generator, Iterable, + List, Optional, Type, Union, @@ -493,7 +494,7 @@ def _objectify_request( *, data: Optional[Union[Dict[str, Union[str, Any]], bytes, IO, str]] = None, files: Optional[Dict[str, IO]] = None, - json: Optional[Dict[Any, Any]] = None, + json: Optional[Union[Dict[Any, Any], List[Any]]] = None, method: str = "", params: Optional[Union[str, Dict[str, str]]] = None, path: str = "", @@ -670,7 +671,7 @@ def delete( path: str, *, data: Optional[Union[Dict[str, Union[str, Any]], bytes, IO, str]] = None, - json: Optional[Dict[Any, Any]] = None, + json: Optional[Union[Dict[Any, Any], List[Any]]] = None, params: Optional[Union[str, Dict[str, str]]] = None, ) -> Any: """Return parsed objects returned from a DELETE request to ``path``. @@ -794,7 +795,8 @@ def patch( path: str, *, data: Optional[Union[Dict[str, Union[str, Any]], bytes, IO, str]] = None, - json: Optional[Dict[Any, Any]] = None, + json: Optional[Union[Dict[Any, Any], List[Any]]] = None, + params: Optional[Union[str, Dict[str, str]]] = None, ) -> Any: """Return parsed objects returned from a PATCH request to ``path``. @@ -804,9 +806,12 @@ def patch( :param json: JSON-serializable object to send in the body of the request with a Content-Type header of application/json (default: ``None``). If ``json`` is provided, ``data`` should not be. + :param params: The query parameters to add to the request (default: ``None``). """ - return self._objectify_request(data=data, json=json, method="PATCH", path=path) + return self._objectify_request( + data=data, json=json, method="PATCH", params=params, path=path + ) @_deprecate_args("path", "data", "files", "params", "json") def post( @@ -815,7 +820,7 @@ def post( *, data: Optional[Union[Dict[str, Union[str, Any]], bytes, IO, str]] = None, files: Optional[Dict[str, IO]] = None, - json: Optional[Dict[Any, Any]] = None, + json: Optional[Union[Dict[Any, Any], List[Any]]] = None, params: Optional[Union[str, Dict[str, str]]] = None, ) -> Any: """Return parsed objects returned from a POST request to ``path``. @@ -863,7 +868,7 @@ def put( path: str, *, data: Optional[Union[Dict[str, Union[str, Any]], bytes, IO, str]] = None, - json: Optional[Dict[Any, Any]] = None, + json: Optional[Union[Dict[Any, Any], List[Any]]] = None, ): """Return parsed objects returned from a PUT request to ``path``. @@ -913,7 +918,7 @@ def request( *, data: Optional[Union[Dict[str, Union[str, Any]], bytes, IO, str]] = None, files: Optional[Dict[str, IO]] = None, - json: Optional[Dict[Any, Any]] = None, + json: Optional[Union[Dict[Any, Any], List[Any]]] = None, method: str, params: Optional[Union[str, Dict[str, Union[str, int]]]] = None, path: str, diff --git a/tests/integration/cassettes/TestSubredditFlairTemplates.test_reorder.json b/tests/integration/cassettes/TestSubredditFlairTemplates.test_reorder.json new file mode 100644 index 000000000..cd85da340 --- /dev/null +++ b/tests/integration/cassettes/TestSubredditFlairTemplates.test_reorder.json @@ -0,0 +1,548 @@ +{ + "http_interactions": [ + { + "recorded_at": "2023-08-26T20:37:00", + "request": { + "body": { + "encoding": "utf-8", + "string": "grant_type=refresh_token&refresh_token=" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "identity" + ], + "Authorization": [ + "Basic " + ], + "Connection": [ + "close" + ], + "Content-Length": [ + "82" + ], + "Content-Type": [ + "application/x-www-form-urlencoded" + ], + "User-Agent": [ + " PRAW/7.7.2.dev0 prawcore/2.3.0" + ] + }, + "method": "POST", + "uri": "https://www.reddit.com/api/v1/access_token" + }, + "response": { + "body": { + "encoding": "UTF-8", + "string": "{\"access_token\": \"\", \"token_type\": \"bearer\", \"expires_in\": 86400, \"refresh_token\": \"\", \"scope\": \"creddits modnote modcontributors modmail modconfig subscribe structuredstyles vote wikiedit mysubreddits submit modlog modposts modflair save modothers read privatemessages report identity livemanage account modtraffic wikiread edit modwiki modself history flair\"}" + }, + "headers": { + "Accept-Ranges": [ + "bytes" + ], + "Cache-Control": [ + "private, max-age=3600" + ], + "Connection": [ + "close" + ], + "Content-Length": [ + "1527" + ], + "Date": [ + "Sat, 26 Aug 2023 20:37:00 GMT" + ], + "NEL": [ + "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 1.0, \"failure_fraction\": 1.0}" + ], + "Report-To": [ + "{\"group\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-nel.reddit.com/reports\" }]}, {\"group\": \"w3-reporting\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting.reddit.com/reports\" }]}, {\"group\": \"w3-reporting-csp\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-csp.reddit.com/reports\" }]}" + ], + "Server": [ + "snooserv" + ], + "Set-Cookie": [ + "edgebucket=WpJSHDtulMun2MXHSv; Domain=reddit.com; Max-Age=63071999; Path=/; secure" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubdomains" + ], + "Vary": [ + "accept-encoding" + ], + "Via": [ + "1.1 varnish" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "X-Frame-Options": [ + "SAMEORIGIN" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "content-type": [ + "application/json; charset=UTF-8" + ], + "x-moose": [ + "majestic" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "https://www.reddit.com/api/v1/access_token" + } + }, + { + "recorded_at": "2023-08-26T20:37:00", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "identity" + ], + "Authorization": [ + "bearer " + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "edgebucket=WpJSHDtulMun2MXHSv" + ], + "User-Agent": [ + " PRAW/7.7.2.dev0 prawcore/2.3.0" + ] + }, + "method": "GET", + "uri": "https://oauth.reddit.com/r//api/user_flair_v2?unique=0&raw_json=1" + }, + "response": { + "body": { + "encoding": "UTF-8", + "string": "[{\"allowable_content\": \"all\", \"text\": \"PRAW3\", \"text_color\": \"dark\", \"mod_only\": false, \"background_color\": \"#abcdef\", \"id\": \"3cd3a25a-4450-11ee-a8ca-b28ede539ab9\", \"css_class\": \"myCSS\", \"max_emojis\": 10, \"richtext\": [], \"text_editable\": false, \"override_css\": false, \"type\": \"text\"}, {\"allowable_content\": \"all\", \"text\": \"PRAW2\", \"text_color\": \"dark\", \"mod_only\": false, \"background_color\": \"#abcdef\", \"id\": \"3c90fd74-4450-11ee-8287-eee2453f66ac\", \"css_class\": \"myCSS\", \"max_emojis\": 10, \"richtext\": [], \"text_editable\": false, \"override_css\": false, \"type\": \"text\"}, {\"allowable_content\": \"all\", \"text\": \"PRAW\", \"text_color\": \"dark\", \"mod_only\": false, \"background_color\": \"#abcdef\", \"id\": \"3c602924-4450-11ee-a33f-2667db42e4a6\", \"css_class\": \"myCSS\", \"max_emojis\": 10, \"richtext\": [], \"text_editable\": false, \"override_css\": false, \"type\": \"text\"}]" + }, + "headers": { + "Accept-Ranges": [ + "bytes" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "851" + ], + "Date": [ + "Sat, 26 Aug 2023 20:37:00 GMT" + ], + "NEL": [ + "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 1.0, \"failure_fraction\": 1.0}" + ], + "Report-To": [ + "{\"group\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-nel.reddit.com/reports\" }]}, {\"group\": \"w3-reporting\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting.reddit.com/reports\" }]}, {\"group\": \"w3-reporting-csp\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-csp.reddit.com/reports\" }]}" + ], + "Server": [ + "snooserv" + ], + "Set-Cookie": [ + "loid=000000000075u2lqkb.2.1593898363221.Z0FBQUFBQms2bUpzODE1QWVOZnIwc2p6cDJUUE81dVVnRHYwdkhkeDhUdlZPQXFGLVpSUEJMN3AwUW9qSkN3eEpkY1ZkYzRxWUNjRDRTbVcwcVBpMWVEUlBBTko4dGJUNDIxbDFiVjFPVkYzYVQxN2I0dG1VRnI0bklGRGJYb2h3SGliX3NFR1J3TXA; Domain=reddit.com; Max-Age=63071999; Path=/; expires=Mon, 25-Aug-2025 20:37:00 GMT; secure; SameSite=None; Secure", + "session_tracker=bnijfmibicgkrfmorm.0.1693082220421.Z0FBQUFBQms2bUpzUnJrOWU1WmFsaGlaSm1qVWVYRTRuTE1oU191YjlFMERWdXl6bi1Wc3I3dTQycmVWSXNDRklZMmNmaEdOd1dnUWhTTFdHcDZtbzFPY0JDRV9kb2V5eU5aVnhlUWFKNGNuaDhEY3pYaGRZYU1QNFZUV2lsUmVrZ2stVUlfVlMtbWk; Domain=reddit.com; Max-Age=7199; Path=/; expires=Sat, 26-Aug-2023 22:37:00 GMT; secure; SameSite=None; Secure", + "csv=2; Max-Age=63072000; Domain=.reddit.com; Path=/; Secure; SameSite=None" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubdomains" + ], + "Vary": [ + "accept-encoding" + ], + "Via": [ + "1.1 varnish" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "X-Frame-Options": [ + "SAMEORIGIN" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "cache-control": [ + "private, s-maxage=0, max-age=0, must-revalidate, no-store" + ], + "content-type": [ + "application/json; charset=UTF-8" + ], + "expires": [ + "-1" + ], + "x-moose": [ + "majestic" + ], + "x-ratelimit-remaining": [ + "971" + ], + "x-ratelimit-reset": [ + "180" + ], + "x-ratelimit-used": [ + "25" + ], + "x-ua-compatible": [ + "IE=edge" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "https://oauth.reddit.com/r//api/user_flair_v2?unique=0&raw_json=1" + } + }, + { + "recorded_at": "2023-08-26T20:37:00", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "identity" + ], + "Authorization": [ + "bearer " + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "edgebucket=WpJSHDtulMun2MXHSv; loid=000000000075u2lqkb.2.1593898363221.Z0FBQUFBQms2bUpzODE1QWVOZnIwc2p6cDJUUE81dVVnRHYwdkhkeDhUdlZPQXFGLVpSUEJMN3AwUW9qSkN3eEpkY1ZkYzRxWUNjRDRTbVcwcVBpMWVEUlBBTko4dGJUNDIxbDFiVjFPVkYzYVQxN2I0dG1VRnI0bklGRGJYb2h3SGliX3NFR1J3TXA; session_tracker=bnijfmibicgkrfmorm.0.1693082220421.Z0FBQUFBQms2bUpzUnJrOWU1WmFsaGlaSm1qVWVYRTRuTE1oU191YjlFMERWdXl6bi1Wc3I3dTQycmVWSXNDRklZMmNmaEdOd1dnUWhTTFdHcDZtbzFPY0JDRV9kb2V5eU5aVnhlUWFKNGNuaDhEY3pYaGRZYU1QNFZUV2lsUmVrZ2stVUlfVlMtbWk; csv=2" + ], + "User-Agent": [ + " PRAW/7.7.2.dev0 prawcore/2.3.0" + ] + }, + "method": "GET", + "uri": "https://oauth.reddit.com/r//api/user_flair_v2?unique=1&raw_json=1" + }, + "response": { + "body": { + "encoding": "UTF-8", + "string": "[{\"allowable_content\": \"all\", \"text\": \"PRAW3\", \"text_color\": \"dark\", \"mod_only\": false, \"background_color\": \"#abcdef\", \"id\": \"3cd3a25a-4450-11ee-a8ca-b28ede539ab9\", \"css_class\": \"myCSS\", \"max_emojis\": 10, \"richtext\": [], \"text_editable\": false, \"override_css\": false, \"type\": \"text\"}, {\"allowable_content\": \"all\", \"text\": \"PRAW2\", \"text_color\": \"dark\", \"mod_only\": false, \"background_color\": \"#abcdef\", \"id\": \"3c90fd74-4450-11ee-8287-eee2453f66ac\", \"css_class\": \"myCSS\", \"max_emojis\": 10, \"richtext\": [], \"text_editable\": false, \"override_css\": false, \"type\": \"text\"}, {\"allowable_content\": \"all\", \"text\": \"PRAW\", \"text_color\": \"dark\", \"mod_only\": false, \"background_color\": \"#abcdef\", \"id\": \"3c602924-4450-11ee-a33f-2667db42e4a6\", \"css_class\": \"myCSS\", \"max_emojis\": 10, \"richtext\": [], \"text_editable\": false, \"override_css\": false, \"type\": \"text\"}]" + }, + "headers": { + "Accept-Ranges": [ + "bytes" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "851" + ], + "Date": [ + "Sat, 26 Aug 2023 20:37:00 GMT" + ], + "NEL": [ + "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 1.0, \"failure_fraction\": 1.0}" + ], + "Report-To": [ + "{\"group\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-nel.reddit.com/reports\" }]}, {\"group\": \"w3-reporting\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting.reddit.com/reports\" }]}, {\"group\": \"w3-reporting-csp\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-csp.reddit.com/reports\" }]}" + ], + "Server": [ + "snooserv" + ], + "Set-Cookie": [ + "session_tracker=bnijfmibicgkrfmorm.0.1693082220757.Z0FBQUFBQms2bUpzcjB2WHVzTzJhMk1JWmhiRnJ3ZzNHeHdtdnMyM0Q2amxrNjFQZGJIRllwUDhKS0lRSFo0RWp5VTJzYTk5TWUzX05aQ1UyR2ZReUhxRjZiWnp3b252cHh4OV9HMVB6U04yMnU2cVNkeHR3d3h5dk05SDlPOTJEbzVCZGM3bF9XdTk; Domain=reddit.com; Max-Age=7199; Path=/; expires=Sat, 26-Aug-2023 22:37:00 GMT; secure; SameSite=None; Secure" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubdomains" + ], + "Vary": [ + "accept-encoding" + ], + "Via": [ + "1.1 varnish" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "X-Frame-Options": [ + "SAMEORIGIN" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "cache-control": [ + "private, s-maxage=0, max-age=0, must-revalidate, no-store" + ], + "content-type": [ + "application/json; charset=UTF-8" + ], + "expires": [ + "-1" + ], + "x-moose": [ + "majestic" + ], + "x-ratelimit-remaining": [ + "970" + ], + "x-ratelimit-reset": [ + "180" + ], + "x-ratelimit-used": [ + "26" + ], + "x-ua-compatible": [ + "IE=edge" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "https://oauth.reddit.com/r//api/user_flair_v2?unique=1&raw_json=1" + } + }, + { + "recorded_at": "2023-08-26T20:37:00", + "request": { + "body": { + "encoding": "utf-8", + "string": "[\"3c602924-4450-11ee-a33f-2667db42e4a6\", \"3c90fd74-4450-11ee-8287-eee2453f66ac\", \"3cd3a25a-4450-11ee-a8ca-b28ede539ab9\"]" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "identity" + ], + "Authorization": [ + "bearer " + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "120" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "edgebucket=WpJSHDtulMun2MXHSv; loid=000000000075u2lqkb.2.1593898363221.Z0FBQUFBQms2bUpzODE1QWVOZnIwc2p6cDJUUE81dVVnRHYwdkhkeDhUdlZPQXFGLVpSUEJMN3AwUW9qSkN3eEpkY1ZkYzRxWUNjRDRTbVcwcVBpMWVEUlBBTko4dGJUNDIxbDFiVjFPVkYzYVQxN2I0dG1VRnI0bklGRGJYb2h3SGliX3NFR1J3TXA; session_tracker=bnijfmibicgkrfmorm.0.1693082220757.Z0FBQUFBQms2bUpzcjB2WHVzTzJhMk1JWmhiRnJ3ZzNHeHdtdnMyM0Q2amxrNjFQZGJIRllwUDhKS0lRSFo0RWp5VTJzYTk5TWUzX05aQ1UyR2ZReUhxRjZiWnp3b252cHh4OV9HMVB6U04yMnU2cVNkeHR3d3h5dk05SDlPOTJEbzVCZGM3bF9XdTk; csv=2" + ], + "User-Agent": [ + " PRAW/7.7.2.dev0 prawcore/2.3.0" + ] + }, + "method": "PATCH", + "uri": "https://oauth.reddit.com/r//api/flair_template_order?flair_type=USER_FLAIR&subreddit=&raw_json=1" + }, + "response": { + "body": { + "encoding": "UTF-8", + "string": "" + }, + "headers": { + "Accept-Ranges": [ + "bytes" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "0" + ], + "Date": [ + "Sat, 26 Aug 2023 20:37:00 GMT" + ], + "NEL": [ + "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 1.0, \"failure_fraction\": 1.0}" + ], + "Report-To": [ + "{\"group\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-nel.reddit.com/reports\" }]}, {\"group\": \"w3-reporting\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting.reddit.com/reports\" }]}, {\"group\": \"w3-reporting-csp\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-csp.reddit.com/reports\" }]}" + ], + "Server": [ + "snooserv" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubdomains" + ], + "Via": [ + "1.1 varnish" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "X-Frame-Options": [ + "SAMEORIGIN" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "cache-control": [ + "private, s-maxage=0, max-age=0, must-revalidate, no-store" + ], + "content-type": [ + "application/json; charset=UTF-8" + ], + "expires": [ + "-1" + ], + "set-cookie": [ + "session_tracker=bnijfmibicgkrfmorm.0.1693082220914.Z0FBQUFBQms2bUpzWnd1VlBuT0g1ZjBBWWVUNmxBVmRxMTgxanFjV3NXUTZDVWtmdG5CVWp6aGliSlVjVjlqUGNMRXlldVYwUElMR0VkSlowbjB2ZHhNVTc4VnZIWHg3cUdCVTg0S3VfOE9qZ3A4TzJXbTRscWQ1SE5QbHMwc1FCZEZZbmI4VWppY3k; Domain=reddit.com; Max-Age=7199; Path=/; expires=Sat, 26-Aug-2023 22:37:00 GMT; secure" + ], + "x-moose": [ + "majestic" + ], + "x-ratelimit-remaining": [ + "969" + ], + "x-ratelimit-reset": [ + "180" + ], + "x-ratelimit-used": [ + "27" + ], + "x-ua-compatible": [ + "IE=edge" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "https://oauth.reddit.com/r//api/flair_template_order?flair_type=USER_FLAIR&subreddit=&raw_json=1" + } + }, + { + "recorded_at": "2023-08-26T20:37:01", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "identity" + ], + "Authorization": [ + "bearer " + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "edgebucket=WpJSHDtulMun2MXHSv; loid=000000000075u2lqkb.2.1593898363221.Z0FBQUFBQms2bUpzODE1QWVOZnIwc2p6cDJUUE81dVVnRHYwdkhkeDhUdlZPQXFGLVpSUEJMN3AwUW9qSkN3eEpkY1ZkYzRxWUNjRDRTbVcwcVBpMWVEUlBBTko4dGJUNDIxbDFiVjFPVkYzYVQxN2I0dG1VRnI0bklGRGJYb2h3SGliX3NFR1J3TXA; session_tracker=bnijfmibicgkrfmorm.0.1693082220914.Z0FBQUFBQms2bUpzWnd1VlBuT0g1ZjBBWWVUNmxBVmRxMTgxanFjV3NXUTZDVWtmdG5CVWp6aGliSlVjVjlqUGNMRXlldVYwUElMR0VkSlowbjB2ZHhNVTc4VnZIWHg3cUdCVTg0S3VfOE9qZ3A4TzJXbTRscWQ1SE5QbHMwc1FCZEZZbmI4VWppY3k; csv=2" + ], + "User-Agent": [ + " PRAW/7.7.2.dev0 prawcore/2.3.0" + ] + }, + "method": "GET", + "uri": "https://oauth.reddit.com/r//api/user_flair_v2?unique=2&raw_json=1" + }, + "response": { + "body": { + "encoding": "UTF-8", + "string": "[{\"allowable_content\": \"all\", \"text\": \"PRAW\", \"text_color\": \"dark\", \"mod_only\": false, \"background_color\": \"#abcdef\", \"id\": \"3c602924-4450-11ee-a33f-2667db42e4a6\", \"css_class\": \"myCSS\", \"max_emojis\": 10, \"richtext\": [], \"text_editable\": false, \"override_css\": false, \"type\": \"text\"}, {\"allowable_content\": \"all\", \"text\": \"PRAW2\", \"text_color\": \"dark\", \"mod_only\": false, \"background_color\": \"#abcdef\", \"id\": \"3c90fd74-4450-11ee-8287-eee2453f66ac\", \"css_class\": \"myCSS\", \"max_emojis\": 10, \"richtext\": [], \"text_editable\": false, \"override_css\": false, \"type\": \"text\"}, {\"allowable_content\": \"all\", \"text\": \"PRAW3\", \"text_color\": \"dark\", \"mod_only\": false, \"background_color\": \"#abcdef\", \"id\": \"3cd3a25a-4450-11ee-a8ca-b28ede539ab9\", \"css_class\": \"myCSS\", \"max_emojis\": 10, \"richtext\": [], \"text_editable\": false, \"override_css\": false, \"type\": \"text\"}]" + }, + "headers": { + "Accept-Ranges": [ + "bytes" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "851" + ], + "Date": [ + "Sat, 26 Aug 2023 20:37:01 GMT" + ], + "NEL": [ + "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 1.0, \"failure_fraction\": 1.0}" + ], + "Report-To": [ + "{\"group\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-nel.reddit.com/reports\" }]}, {\"group\": \"w3-reporting\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting.reddit.com/reports\" }]}, {\"group\": \"w3-reporting-csp\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-csp.reddit.com/reports\" }]}" + ], + "Server": [ + "snooserv" + ], + "Set-Cookie": [ + "session_tracker=bnijfmibicgkrfmorm.0.1693082221143.Z0FBQUFBQms2bUp0MlFYUmlpSEVVcDZ2VlBjTWpab181dlRhT3FZSG9fU2FDRGFKOTBjUkQ2UG1IZkJzOW1ZV2tPUlB1MHhoNUloUGdVeTV5dkxySzhvSk1IZ1RncFVvNkpBVmJpclgtY0ZqeU9UX0RtWmgwSkxjRXpMV3FOUktzcWVCYk8ySkhvcHo; Domain=reddit.com; Max-Age=7199; Path=/; expires=Sat, 26-Aug-2023 22:37:01 GMT; secure; SameSite=None; Secure" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubdomains" + ], + "Vary": [ + "accept-encoding" + ], + "Via": [ + "1.1 varnish" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "X-Frame-Options": [ + "SAMEORIGIN" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "cache-control": [ + "private, s-maxage=0, max-age=0, must-revalidate, no-store" + ], + "content-type": [ + "application/json; charset=UTF-8" + ], + "expires": [ + "-1" + ], + "x-moose": [ + "majestic" + ], + "x-ratelimit-remaining": [ + "968" + ], + "x-ratelimit-reset": [ + "179" + ], + "x-ratelimit-used": [ + "28" + ], + "x-ua-compatible": [ + "IE=edge" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "https://oauth.reddit.com/r//api/user_flair_v2?unique=2&raw_json=1" + } + } + ], + "recorded_with": "betamax/0.8.1" +} diff --git a/tests/integration/cassettes/TestSubredditLinkFlairTemplates.test_reorder.json b/tests/integration/cassettes/TestSubredditLinkFlairTemplates.test_reorder.json new file mode 100644 index 000000000..c1dc051c7 --- /dev/null +++ b/tests/integration/cassettes/TestSubredditLinkFlairTemplates.test_reorder.json @@ -0,0 +1,539 @@ +{ + "http_interactions": [ + { + "recorded_at": "2023-08-26T20:34:45", + "request": { + "body": { + "encoding": "utf-8", + "string": "grant_type=refresh_token&refresh_token=" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "identity" + ], + "Authorization": [ + "Basic " + ], + "Connection": [ + "close" + ], + "Content-Length": [ + "82" + ], + "Content-Type": [ + "application/x-www-form-urlencoded" + ], + "User-Agent": [ + " PRAW/7.7.2.dev0 prawcore/2.3.0" + ] + }, + "method": "POST", + "uri": "https://www.reddit.com/api/v1/access_token" + }, + "response": { + "body": { + "encoding": "UTF-8", + "string": "{\"access_token\": \"\", \"token_type\": \"bearer\", \"expires_in\": 86400, \"refresh_token\": \"\", \"scope\": \"creddits modnote modcontributors modmail modconfig subscribe structuredstyles vote wikiedit mysubreddits submit modlog modposts modflair save modothers read privatemessages report identity livemanage account modtraffic wikiread edit modwiki modself history flair\"}" + }, + "headers": { + "Accept-Ranges": [ + "bytes" + ], + "Cache-Control": [ + "private, max-age=3600" + ], + "Connection": [ + "close" + ], + "Content-Length": [ + "1527" + ], + "Date": [ + "Sat, 26 Aug 2023 20:34:45 GMT" + ], + "NEL": [ + "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 1.0, \"failure_fraction\": 1.0}" + ], + "Report-To": [ + "{\"group\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-nel.reddit.com/reports\" }]}, {\"group\": \"w3-reporting\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting.reddit.com/reports\" }]}, {\"group\": \"w3-reporting-csp\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-csp.reddit.com/reports\" }]}" + ], + "Server": [ + "snooserv" + ], + "Set-Cookie": [ + "edgebucket=QNBgZvwSIl7hxK70z8; Domain=reddit.com; Max-Age=63071999; Path=/; secure" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubdomains" + ], + "Vary": [ + "accept-encoding" + ], + "Via": [ + "1.1 varnish" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "X-Frame-Options": [ + "SAMEORIGIN" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "content-type": [ + "application/json; charset=UTF-8" + ], + "x-moose": [ + "majestic" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "https://www.reddit.com/api/v1/access_token" + } + }, + { + "recorded_at": "2023-08-26T20:34:45", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "identity" + ], + "Authorization": [ + "bearer " + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "edgebucket=QNBgZvwSIl7hxK70z8" + ], + "User-Agent": [ + " PRAW/7.7.2.dev0 prawcore/2.3.0" + ] + }, + "method": "GET", + "uri": "https://oauth.reddit.com/r//api/link_flair_v2?raw_json=1" + }, + "response": { + "body": { + "encoding": "UTF-8", + "string": "[{\"type\": \"text\", \"text_editable\": true, \"allowable_content\": \"all\", \"text\": \"test\", \"max_emojis\": 10, \"text_color\": \"dark\", \"mod_only\": false, \"css_class\": \"\", \"richtext\": [], \"background_color\": \"#dadada\", \"id\": \"6fc213da-cae7-11ea-9274-0e2407099e45\"}, {\"type\": \"text\", \"text_editable\": true, \"allowable_content\": \"all\", \"text\": \"another\", \"max_emojis\": 10, \"text_color\": \"dark\", \"mod_only\": false, \"css_class\": \"\", \"richtext\": [], \"background_color\": \"\", \"id\": \"aa80b3be-f56b-11eb-8c89-1a66d9a33ef0\"}]" + }, + "headers": { + "Accept-Ranges": [ + "bytes" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "504" + ], + "Date": [ + "Sat, 26 Aug 2023 20:34:46 GMT" + ], + "NEL": [ + "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 1.0, \"failure_fraction\": 1.0}" + ], + "Report-To": [ + "{\"group\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-nel.reddit.com/reports\" }]}, {\"group\": \"w3-reporting\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting.reddit.com/reports\" }]}, {\"group\": \"w3-reporting-csp\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-csp.reddit.com/reports\" }]}" + ], + "Server": [ + "snooserv" + ], + "Set-Cookie": [ + "loid=000000000075u2lqkb.2.1593898363221.Z0FBQUFBQms2bUhsdkdxdTBzUGZZUXRNRHZlUmJESk5UTjZOWmF0TFBsZVZlcWMxSmxfWmlkZHZjeE82UDZ5cDhYV01mVkRQWno5WG9ZaXltRnRDcG1BTjV3UElwNXpOOXBxbkM1VzRyT19Qei1BZGthbTY3VEs2Z1NtLW5aVTVvRTZxb3U4cUs4T2Y; Domain=reddit.com; Max-Age=63071999; Path=/; expires=Mon, 25-Aug-2025 20:34:45 GMT; secure; SameSite=None; Secure", + "session_tracker=pdlcjabpqnarfjcdfr.0.1693082085952.Z0FBQUFBQms2bUhsT1VWVVJ4cWJydzdNbmp1ZXotSmR0WVd5c3JnTzhzWU1JV09qSHNyT2FIbGJJWW16R09SM2VOaW5BcE5oeVpib0l0WnktNW4yTkcxZEJTdjNqZDFJWWV5TXh2SGFKaVFVc0hFZUNiSnRTc3VGTEhVbVAzaFRaRm81MmF1ckJNTTY; Domain=reddit.com; Max-Age=7199; Path=/; expires=Sat, 26-Aug-2023 22:34:45 GMT; secure; SameSite=None; Secure", + "csv=2; Max-Age=63072000; Domain=.reddit.com; Path=/; Secure; SameSite=None" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubdomains" + ], + "Via": [ + "1.1 varnish" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "X-Frame-Options": [ + "SAMEORIGIN" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "cache-control": [ + "private, s-maxage=0, max-age=0, must-revalidate, no-store" + ], + "content-type": [ + "application/json; charset=UTF-8" + ], + "expires": [ + "-1" + ], + "x-moose": [ + "majestic" + ], + "x-ratelimit-remaining": [ + "985" + ], + "x-ratelimit-reset": [ + "315" + ], + "x-ratelimit-used": [ + "11" + ], + "x-ua-compatible": [ + "IE=edge" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "https://oauth.reddit.com/r//api/link_flair_v2?raw_json=1" + } + }, + { + "recorded_at": "2023-08-26T20:34:46", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "identity" + ], + "Authorization": [ + "bearer " + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "edgebucket=QNBgZvwSIl7hxK70z8; loid=000000000075u2lqkb.2.1593898363221.Z0FBQUFBQms2bUhsdkdxdTBzUGZZUXRNRHZlUmJESk5UTjZOWmF0TFBsZVZlcWMxSmxfWmlkZHZjeE82UDZ5cDhYV01mVkRQWno5WG9ZaXltRnRDcG1BTjV3UElwNXpOOXBxbkM1VzRyT19Qei1BZGthbTY3VEs2Z1NtLW5aVTVvRTZxb3U4cUs4T2Y; session_tracker=pdlcjabpqnarfjcdfr.0.1693082085952.Z0FBQUFBQms2bUhsT1VWVVJ4cWJydzdNbmp1ZXotSmR0WVd5c3JnTzhzWU1JV09qSHNyT2FIbGJJWW16R09SM2VOaW5BcE5oeVpib0l0WnktNW4yTkcxZEJTdjNqZDFJWWV5TXh2SGFKaVFVc0hFZUNiSnRTc3VGTEhVbVAzaFRaRm81MmF1ckJNTTY; csv=2" + ], + "User-Agent": [ + " PRAW/7.7.2.dev0 prawcore/2.3.0" + ] + }, + "method": "GET", + "uri": "https://oauth.reddit.com/r//api/link_flair_v2?raw_json=1" + }, + "response": { + "body": { + "encoding": "UTF-8", + "string": "[{\"type\": \"text\", \"text_editable\": true, \"allowable_content\": \"all\", \"text\": \"test\", \"max_emojis\": 10, \"text_color\": \"dark\", \"mod_only\": false, \"css_class\": \"\", \"richtext\": [], \"background_color\": \"#dadada\", \"id\": \"6fc213da-cae7-11ea-9274-0e2407099e45\"}, {\"type\": \"text\", \"text_editable\": true, \"allowable_content\": \"all\", \"text\": \"another\", \"max_emojis\": 10, \"text_color\": \"dark\", \"mod_only\": false, \"css_class\": \"\", \"richtext\": [], \"background_color\": \"\", \"id\": \"aa80b3be-f56b-11eb-8c89-1a66d9a33ef0\"}]" + }, + "headers": { + "Accept-Ranges": [ + "bytes" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "504" + ], + "Date": [ + "Sat, 26 Aug 2023 20:34:46 GMT" + ], + "NEL": [ + "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 1.0, \"failure_fraction\": 1.0}" + ], + "Report-To": [ + "{\"group\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-nel.reddit.com/reports\" }]}, {\"group\": \"w3-reporting\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting.reddit.com/reports\" }]}, {\"group\": \"w3-reporting-csp\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-csp.reddit.com/reports\" }]}" + ], + "Server": [ + "snooserv" + ], + "Set-Cookie": [ + "session_tracker=pdlcjabpqnarfjcdfr.0.1693082086112.Z0FBQUFBQms2bUhtY1NkNnhOVXowWVl5UVRSbXdzVFNiWlNUdnJtRUVBS0RNeFY2QWVaUGdZMFZvbHVBWlBBZUxFQ1kyMnZjNHlxcVFMcTk2SEc1TFZMZWhZTGZZWHBxdF9wZjJ6ck92SlY5Q0FQTXpCcGdob3psRFg5cl9QZVlRSTZRSERlM1kxaHY; Domain=reddit.com; Max-Age=7199; Path=/; expires=Sat, 26-Aug-2023 22:34:46 GMT; secure; SameSite=None; Secure" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubdomains" + ], + "Via": [ + "1.1 varnish" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "X-Frame-Options": [ + "SAMEORIGIN" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "cache-control": [ + "private, s-maxage=0, max-age=0, must-revalidate, no-store" + ], + "content-type": [ + "application/json; charset=UTF-8" + ], + "expires": [ + "-1" + ], + "x-moose": [ + "majestic" + ], + "x-ratelimit-remaining": [ + "984" + ], + "x-ratelimit-reset": [ + "314" + ], + "x-ratelimit-used": [ + "12" + ], + "x-ua-compatible": [ + "IE=edge" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "https://oauth.reddit.com/r//api/link_flair_v2?raw_json=1" + } + }, + { + "recorded_at": "2023-08-26T20:34:46", + "request": { + "body": { + "encoding": "utf-8", + "string": "[\"aa80b3be-f56b-11eb-8c89-1a66d9a33ef0\", \"6fc213da-cae7-11ea-9274-0e2407099e45\"]" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "identity" + ], + "Authorization": [ + "bearer " + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "80" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "edgebucket=QNBgZvwSIl7hxK70z8; loid=000000000075u2lqkb.2.1593898363221.Z0FBQUFBQms2bUhsdkdxdTBzUGZZUXRNRHZlUmJESk5UTjZOWmF0TFBsZVZlcWMxSmxfWmlkZHZjeE82UDZ5cDhYV01mVkRQWno5WG9ZaXltRnRDcG1BTjV3UElwNXpOOXBxbkM1VzRyT19Qei1BZGthbTY3VEs2Z1NtLW5aVTVvRTZxb3U4cUs4T2Y; session_tracker=pdlcjabpqnarfjcdfr.0.1693082086112.Z0FBQUFBQms2bUhtY1NkNnhOVXowWVl5UVRSbXdzVFNiWlNUdnJtRUVBS0RNeFY2QWVaUGdZMFZvbHVBWlBBZUxFQ1kyMnZjNHlxcVFMcTk2SEc1TFZMZWhZTGZZWHBxdF9wZjJ6ck92SlY5Q0FQTXpCcGdob3psRFg5cl9QZVlRSTZRSERlM1kxaHY; csv=2" + ], + "User-Agent": [ + " PRAW/7.7.2.dev0 prawcore/2.3.0" + ] + }, + "method": "PATCH", + "uri": "https://oauth.reddit.com/r//api/flair_template_order?flair_type=LINK_FLAIR&subreddit=&raw_json=1" + }, + "response": { + "body": { + "encoding": "UTF-8", + "string": "" + }, + "headers": { + "Accept-Ranges": [ + "bytes" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "0" + ], + "Date": [ + "Sat, 26 Aug 2023 20:34:46 GMT" + ], + "NEL": [ + "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 1.0, \"failure_fraction\": 1.0}" + ], + "Report-To": [ + "{\"group\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-nel.reddit.com/reports\" }]}, {\"group\": \"w3-reporting\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting.reddit.com/reports\" }]}, {\"group\": \"w3-reporting-csp\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-csp.reddit.com/reports\" }]}" + ], + "Server": [ + "snooserv" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubdomains" + ], + "Via": [ + "1.1 varnish" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "X-Frame-Options": [ + "SAMEORIGIN" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "cache-control": [ + "private, s-maxage=0, max-age=0, must-revalidate, no-store" + ], + "content-type": [ + "application/json; charset=UTF-8" + ], + "expires": [ + "-1" + ], + "set-cookie": [ + "session_tracker=pdlcjabpqnarfjcdfr.0.1693082086270.Z0FBQUFBQms2bUhtVE5JZVJ3SzA2bnBrbEtsTlBnV3EtQW5UZzItS3ctNnNNSEhmUllKcVROTThER1RKeGtKQjNhOU8zdUstallZU3VSNWp0d1o1Y19VUDVYVjYwNWI5X3NfaGtrU2FnbDR6aHFxakxlUVJKaHByWW1sUmQtZl9Wd3VjWWhpcnhiWHI; Domain=reddit.com; Max-Age=7199; Path=/; expires=Sat, 26-Aug-2023 22:34:46 GMT; secure" + ], + "x-moose": [ + "majestic" + ], + "x-ratelimit-remaining": [ + "983" + ], + "x-ratelimit-reset": [ + "314" + ], + "x-ratelimit-used": [ + "13" + ], + "x-ua-compatible": [ + "IE=edge" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "https://oauth.reddit.com/r//api/flair_template_order?flair_type=LINK_FLAIR&subreddit=&raw_json=1" + } + }, + { + "recorded_at": "2023-08-26T20:34:46", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "identity" + ], + "Authorization": [ + "bearer " + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "edgebucket=QNBgZvwSIl7hxK70z8; loid=000000000075u2lqkb.2.1593898363221.Z0FBQUFBQms2bUhsdkdxdTBzUGZZUXRNRHZlUmJESk5UTjZOWmF0TFBsZVZlcWMxSmxfWmlkZHZjeE82UDZ5cDhYV01mVkRQWno5WG9ZaXltRnRDcG1BTjV3UElwNXpOOXBxbkM1VzRyT19Qei1BZGthbTY3VEs2Z1NtLW5aVTVvRTZxb3U4cUs4T2Y; session_tracker=pdlcjabpqnarfjcdfr.0.1693082086270.Z0FBQUFBQms2bUhtVE5JZVJ3SzA2bnBrbEtsTlBnV3EtQW5UZzItS3ctNnNNSEhmUllKcVROTThER1RKeGtKQjNhOU8zdUstallZU3VSNWp0d1o1Y19VUDVYVjYwNWI5X3NfaGtrU2FnbDR6aHFxakxlUVJKaHByWW1sUmQtZl9Wd3VjWWhpcnhiWHI; csv=2" + ], + "User-Agent": [ + " PRAW/7.7.2.dev0 prawcore/2.3.0" + ] + }, + "method": "GET", + "uri": "https://oauth.reddit.com/r//api/link_flair_v2?raw_json=1" + }, + "response": { + "body": { + "encoding": "UTF-8", + "string": "[{\"type\": \"text\", \"text_editable\": true, \"allowable_content\": \"all\", \"text\": \"another\", \"max_emojis\": 10, \"text_color\": \"dark\", \"mod_only\": false, \"css_class\": \"\", \"richtext\": [], \"background_color\": \"\", \"id\": \"aa80b3be-f56b-11eb-8c89-1a66d9a33ef0\"}, {\"type\": \"text\", \"text_editable\": true, \"allowable_content\": \"all\", \"text\": \"test\", \"max_emojis\": 10, \"text_color\": \"dark\", \"mod_only\": false, \"css_class\": \"\", \"richtext\": [], \"background_color\": \"#dadada\", \"id\": \"6fc213da-cae7-11ea-9274-0e2407099e45\"}]" + }, + "headers": { + "Accept-Ranges": [ + "bytes" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "504" + ], + "Date": [ + "Sat, 26 Aug 2023 20:34:46 GMT" + ], + "NEL": [ + "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 1.0, \"failure_fraction\": 1.0}" + ], + "Report-To": [ + "{\"group\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-nel.reddit.com/reports\" }]}, {\"group\": \"w3-reporting\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting.reddit.com/reports\" }]}, {\"group\": \"w3-reporting-csp\", \"max_age\": 14400, \"include_subdomains\": true, \"endpoints\": [{ \"url\": \"https://w3-reporting-csp.reddit.com/reports\" }]}" + ], + "Server": [ + "snooserv" + ], + "Set-Cookie": [ + "session_tracker=pdlcjabpqnarfjcdfr.0.1693082086530.Z0FBQUFBQms2bUhtc3h4SFdkVzYtVmNWUEE4M3JMMEthUXJWN2ZtRjhPQTZwdlJHV2JTbHlZVlVDdXNRRFdNVGN6TkRNcHItdjdMc2J0T3ZoWGMxa0g3ZF9rZWxLbzFEUFVYQ3dpUE0yVHpscWlLSmFTakxFcTc2VnFHWEVNbTNKazhlY1UwMUFRdGY; Domain=reddit.com; Max-Age=7199; Path=/; expires=Sat, 26-Aug-2023 22:34:46 GMT; secure; SameSite=None; Secure" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubdomains" + ], + "Via": [ + "1.1 varnish" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "X-Frame-Options": [ + "SAMEORIGIN" + ], + "X-XSS-Protection": [ + "1; mode=block" + ], + "cache-control": [ + "private, s-maxage=0, max-age=0, must-revalidate, no-store" + ], + "content-type": [ + "application/json; charset=UTF-8" + ], + "expires": [ + "-1" + ], + "x-moose": [ + "majestic" + ], + "x-ratelimit-remaining": [ + "982" + ], + "x-ratelimit-reset": [ + "314" + ], + "x-ratelimit-used": [ + "14" + ], + "x-ua-compatible": [ + "IE=edge" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "https://oauth.reddit.com/r//api/link_flair_v2?raw_json=1" + } + } + ], + "recorded_with": "betamax/0.8.1" +} diff --git a/tests/integration/models/reddit/test_subreddit.py b/tests/integration/models/reddit/test_subreddit.py index 02bdea8a5..2ddee0527 100644 --- a/tests/integration/models/reddit/test_subreddit.py +++ b/tests/integration/models/reddit/test_subreddit.py @@ -232,6 +232,14 @@ def test_delete(self, reddit): subreddit = reddit.subreddit(pytest.placeholders.test_subreddit) subreddit.flair.templates.delete(template["id"]) + def test_reorder(self, reddit): + reddit.read_only = False + subreddit = reddit.subreddit(pytest.placeholders.test_subreddit) + original = list(subreddit.flair.templates) + flairs = [flair["id"] for flair in subreddit.flair.templates] + subreddit.flair.templates.reorder(list(reversed(flairs))) + assert list(subreddit.flair.templates) == list(reversed(original)) + def test_update(self, reddit): reddit.read_only = False subreddit = reddit.subreddit(pytest.placeholders.test_subreddit) @@ -364,6 +372,14 @@ def test_clear(self, reddit): subreddit = reddit.subreddit(pytest.placeholders.test_subreddit) subreddit.flair.link_templates.clear() + def test_reorder(self, reddit): + reddit.read_only = False + subreddit = reddit.subreddit(pytest.placeholders.test_subreddit) + original = list(subreddit.flair.link_templates) + flairs = [flair["id"] for flair in subreddit.flair.link_templates] + subreddit.flair.link_templates.reorder(list(reversed(flairs))) + assert list(subreddit.flair.link_templates) == list(reversed(original)) + def test_user_selectable(self, reddit): reddit.read_only = False subreddit = reddit.subreddit(pytest.placeholders.test_subreddit)