diff --git a/CHANGES.rst b/CHANGES.rst
index 81caa843..20bf82e1 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -6,6 +6,11 @@ Async PRAW follows `semantic versioning `_.
Unreleased
----------
+**Added**
+
+- :meth:`.delete_mobile_banner` to delete mobile banners.
+- :meth:`.upload_mobile_banner` to upload mobile banners.
+
**Fixed**
- An issue with with iterating :class:`.ModNote` when a user has more than a hundred
diff --git a/asyncpraw/models/reddit/subreddit.py b/asyncpraw/models/reddit/subreddit.py
index a85965cf..e6dee38f 100644
--- a/asyncpraw/models/reddit/subreddit.py
+++ b/asyncpraw/models/reddit/subreddit.py
@@ -4096,6 +4096,22 @@ async def delete_image(self, name: str):
url = API_PATH["delete_sr_image"].format(subreddit=self.subreddit)
await self.subreddit._reddit.post(url, data={"img_name": name})
+ async def delete_mobile_banner(self):
+ """Remove the current :class:`.Subreddit` (redesign) mobile banner.
+
+ Succeeds even if there is no mobile banner.
+
+ For example:
+
+ .. code-block:: python
+
+ subreddit = await reddit.subreddit("test")
+ await subreddit.stylesheet.delete_banner_hover_image()
+
+ """
+ data = {"mobileBannerImage": ""}
+ await self._update_structured_styles(data)
+
async def delete_mobile_header(self):
"""Remove the current :class:`.Subreddit` mobile header.
@@ -4307,6 +4323,34 @@ async def upload_header(self, image_path: str) -> Dict[str, str]:
data={"upload_type": "header"}, image_path=image_path
)
+ async def upload_mobile_banner(self, image_path: str):
+ """Upload an image for the :class:`.Subreddit`'s (redesign) mobile banner.
+
+ :param image_path: A path to a JPEG or PNG image.
+
+ For example:
+
+ .. code-block:: python
+
+ subreddit = await reddit.subreddit("test")
+ await subreddit.stylesheet.upload_mobile_banner("banner.png")
+
+ Fails if the :class:`.Subreddit` does not have an additional image defined.
+
+ :raises: ``prawcore.TooLarge`` if the overall request body is too large.
+
+ :raises: :class:`.RedditAPIException` if there are other issues with the
+ uploaded image. Unfortunately the exception info might not be very specific,
+ so try through the website with the same image to see what the problem
+ actually might be.
+
+ """
+ image_type = "mobileBannerImage"
+ image_url = await self._upload_style_asset(
+ image_path=image_path, image_type=image_type
+ )
+ await self._update_structured_styles({image_type: image_url})
+
async def upload_mobile_header(self, image_path: str) -> Dict[str, str]:
"""Upload an image to be used as the :class:`.Subreddit`'s mobile header.
diff --git a/tests/integration/cassettes/TestSubredditStylesheet.test_delete_mobile_banner.json b/tests/integration/cassettes/TestSubredditStylesheet.test_delete_mobile_banner.json
new file mode 100644
index 00000000..fc813c31
--- /dev/null
+++ b/tests/integration/cassettes/TestSubredditStylesheet.test_delete_mobile_banner.json
@@ -0,0 +1,210 @@
+{
+ "interactions": [
+ {
+ "request": {
+ "body": [
+ [
+ "grant_type",
+ "refresh_token"
+ ],
+ [
+ "refresh_token",
+ ""
+ ]
+ ],
+ "headers": {
+ "AUTHORIZATION": [
+ "Basic "
+ ],
+ "Accept-Encoding": [
+ "identity"
+ ],
+ "Connection": [
+ "close"
+ ],
+ "User-Agent": [
+ " Async PRAW/7.6.2.dev0 asyncprawcore/2.3.0"
+ ]
+ },
+ "method": "POST",
+ "uri": "https://www.reddit.com/api/v1/access_token"
+ },
+ "response": {
+ "body": {
+ "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 adsconversions read privatemessages report identity livemanage account modtraffic wikiread edit modwiki modself flair history\"}"
+ },
+ "headers": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Cache-Control": [
+ "private, max-age=3600"
+ ],
+ "Connection": [
+ "close"
+ ],
+ "Content-Length": [
+ "454"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Fri, 09 Dec 2022 00:34:19 GMT"
+ ],
+ "NEL": [
+ "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 0.2, \"failure_fraction\": 0.2}"
+ ],
+ "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\" }]}"
+ ],
+ "Server": [
+ "snooserv"
+ ],
+ "Set-Cookie": [
+ "edgebucket=EPDDnGPcPAp4XhPonG; Domain=reddit.com; Max-Age=63071999; Path=/; 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"
+ ],
+ "x-moose": [
+ "majestic"
+ ],
+ "x-ratelimit-remaining": [
+ "299"
+ ],
+ "x-ratelimit-reset": [
+ "341"
+ ],
+ "x-ratelimit-used": [
+ "1"
+ ]
+ },
+ "status": {
+ "code": 200,
+ "message": "OK"
+ },
+ "url": "https://www.reddit.com/api/v1/access_token"
+ }
+ },
+ {
+ "request": {
+ "body": [
+ [
+ "api_type",
+ "json"
+ ],
+ [
+ "mobileBannerImage",
+ ""
+ ]
+ ],
+ "headers": {
+ "Accept-Encoding": [
+ "identity"
+ ],
+ "Authorization": [
+ "bearer "
+ ],
+ "Cookie": [
+ "edgebucket=EPDDnGPcPAp4XhPonG"
+ ],
+ "User-Agent": [
+ " Async PRAW/7.6.2.dev0 asyncprawcore/2.3.0"
+ ]
+ },
+ "method": "PATCH",
+ "uri": "https://oauth.reddit.com/api/v1/structured_styles/?raw_json=1"
+ },
+ "response": {
+ "body": {
+ "string": "{}"
+ },
+ "headers": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Cache-Control": [
+ "private, s-maxage=0, max-age=0, must-revalidate, no-store"
+ ],
+ "Connection": [
+ "keep-alive"
+ ],
+ "Content-Length": [
+ "2"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Fri, 09 Dec 2022 00:34:20 GMT"
+ ],
+ "Expires": [
+ "-1"
+ ],
+ "NEL": [
+ "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 0.2, \"failure_fraction\": 0.2}"
+ ],
+ "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\" }]}"
+ ],
+ "Server": [
+ "snooserv"
+ ],
+ "Set-Cookie": [
+ "redesign_optout=true; Domain=reddit.com; Max-Age=94607999; Path=/; expires=Mon, 08-Dec-2025 00:34:19 GMT; secure",
+ "session_tracker=fbeimfmkbpieehfrjq.0.1670546059960.Z0FBQUFBQmprb0tNLWhSMjh0RDhyTWZUWS1pcE13TWZ4SWhFR0MtS0FMQm1Gb0djN0NfOUhEYkNHdm1nVlpjMjZRZVA3NngwMjQwTFJqeUpBYUktUFB0WVdrZk8zWm1pS2RmNEJ4djM2NEIyY29EM21GRGNmdWpabzBDajRfY1lyWHRVeFRFcm9MbGY; Domain=reddit.com; Max-Age=7199; Path=/; expires=Fri, 09-Dec-2022 02:34:20 GMT; 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"
+ ],
+ "x-moose": [
+ "majestic"
+ ],
+ "x-ratelimit-remaining": [
+ "599.0"
+ ],
+ "x-ratelimit-reset": [
+ "341"
+ ],
+ "x-ratelimit-used": [
+ "1"
+ ],
+ "x-ua-compatible": [
+ "IE=edge"
+ ]
+ },
+ "status": {
+ "code": 200,
+ "message": "OK"
+ },
+ "url": "https://oauth.reddit.com/api/v1/structured_styles/?raw_json=1"
+ }
+ }
+ ],
+ "version": 1
+}
diff --git a/tests/integration/cassettes/TestSubredditStylesheet.test_upload_mobile_banner__jpg.json b/tests/integration/cassettes/TestSubredditStylesheet.test_upload_mobile_banner__jpg.json
new file mode 100644
index 00000000..0f411810
--- /dev/null
+++ b/tests/integration/cassettes/TestSubredditStylesheet.test_upload_mobile_banner__jpg.json
@@ -0,0 +1,409 @@
+{
+ "interactions": [
+ {
+ "request": {
+ "body": [
+ [
+ "grant_type",
+ "refresh_token"
+ ],
+ [
+ "refresh_token",
+ ""
+ ]
+ ],
+ "headers": {
+ "AUTHORIZATION": [
+ "Basic "
+ ],
+ "Accept-Encoding": [
+ "identity"
+ ],
+ "Connection": [
+ "close"
+ ],
+ "User-Agent": [
+ " Async PRAW/7.6.2.dev0 asyncprawcore/2.3.0"
+ ]
+ },
+ "method": "POST",
+ "uri": "https://www.reddit.com/api/v1/access_token"
+ },
+ "response": {
+ "body": {
+ "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 adsconversions read privatemessages report identity livemanage account modtraffic wikiread edit modwiki modself flair history\"}"
+ },
+ "headers": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Cache-Control": [
+ "private, max-age=3600"
+ ],
+ "Connection": [
+ "close"
+ ],
+ "Content-Length": [
+ "454"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Fri, 09 Dec 2022 00:34:27 GMT"
+ ],
+ "NEL": [
+ "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 0.2, \"failure_fraction\": 0.2}"
+ ],
+ "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\" }]}"
+ ],
+ "Server": [
+ "snooserv"
+ ],
+ "Set-Cookie": [
+ "edgebucket=M9jlq80NqzrEGhPwnQ; Domain=reddit.com; Max-Age=63071999; Path=/; 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"
+ ],
+ "x-moose": [
+ "majestic"
+ ],
+ "x-ratelimit-remaining": [
+ "298"
+ ],
+ "x-ratelimit-reset": [
+ "333"
+ ],
+ "x-ratelimit-used": [
+ "2"
+ ]
+ },
+ "status": {
+ "code": 200,
+ "message": "OK"
+ },
+ "url": "https://www.reddit.com/api/v1/access_token"
+ }
+ },
+ {
+ "request": {
+ "body": [
+ [
+ "api_type",
+ "json"
+ ],
+ [
+ "filepath",
+ "white-square.jpg"
+ ],
+ [
+ "imagetype",
+ "mobileBannerImage"
+ ],
+ [
+ "mimetype",
+ "image/jpeg"
+ ]
+ ],
+ "headers": {
+ "Accept-Encoding": [
+ "identity"
+ ],
+ "Authorization": [
+ "bearer "
+ ],
+ "Cookie": [
+ "edgebucket=M9jlq80NqzrEGhPwnQ"
+ ],
+ "User-Agent": [
+ " Async PRAW/7.6.2.dev0 asyncprawcore/2.3.0"
+ ]
+ },
+ "method": "POST",
+ "uri": "https://oauth.reddit.com/api/v1/style_asset_upload_s3/?raw_json=1"
+ },
+ "response": {
+ "body": {
+ "string": "{\"s3UploadLease\": {\"action\": \"//reddit-subreddit-uploaded-media.s3-accelerate.amazonaws.com\", \"fields\": [{\"name\": \"acl\", \"value\": \"public-read\"}, {\"name\": \"key\", \"value\": \"t5_29ey0j/styles/mobileBannerImage_sk36rnlmpr4a1.jpg\"}, {\"name\": \"X-Amz-Credential\", \"value\": \"ASIATB45ILA5YTLOVPXL/20221209/us-east-1/s3/aws4_request\"}, {\"name\": \"X-Amz-Algorithm\", \"value\": \"AWS4-HMAC-SHA256\"}, {\"name\": \"X-Amz-Date\", \"value\": \"20221209T003427Z\"}, {\"name\": \"success_action_status\", \"value\": \"201\"}, {\"name\": \"content-type\", \"value\": \"image/jpeg\"}, {\"name\": \"x-amz-storage-class\", \"value\": \"STANDARD\"}, {\"name\": \"x-amz-meta-ext\", \"value\": \"jpg\"}, {\"name\": \"policy\", \"value\": \"eyJjb25kaXRpb25zIjogW3siYnVja2V0IjogInJlZGRpdC1zdWJyZWRkaXQtdXBsb2FkZWQtbWVkaWEifSwgeyJrZXkiOiAidDVfMjlleTBqL3N0eWxlcy9tb2JpbGVCYW5uZXJJbWFnZV9zazM2cm5sbXByNGExLmpwZyJ9LCB7ImFjbCI6ICJwdWJsaWMtcmVhZCJ9LCB7IngtYW16LXN0b3JhZ2UtY2xhc3MiOiAiU1RBTkRBUkQifSwgeyJ4LWFtei1jcmVkZW50aWFsIjogIkFTSUFUQjQ1SUxBNVlUTE9WUFhMLzIwMjIxMjA5L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QifSwgeyJ4LWFtei1hbGdvcml0aG0iOiAiQVdTNC1ITUFDLVNIQTI1NiJ9LCB7IngtYW16LWRhdGUiOiAiMjAyMjEyMDlUMDAzNDI3WiJ9LCB7IngtYW16LXNlY3VyaXR5LXRva2VuIjogIkZ3b0daWEl2WVhkekVEb2FEQmpQcTI3MUEvRFBuNEp3UkNLK0FjOTNkYkQ1aWk3WVRHTHFuUXRiNStSK1hLSzkyOGlRRDJoU3M1aUdUUCtoYk5ueUpJZ3JEakVheHF1U0REKy9SNUczVmlqZlBwU2dRakJhS1NvUnQ4bXRFNmR4NkJ6aGwydFk4dVRLSjE0M25RRTV5MXpYbm9wM0FwekYwKzFMa05JSkdBa2dIQmxwOTU3dkRXMUJiakRuNm1KMlRDdDhyTFcrZmpnWFhGUkVITDMzbzFNS0dmbEswdHlPbTVDalB0Q2dsc1ZlRUV6S2docU1HZUlxbWFiR25IclRCNGVQMTdmcXVPRG05anBJQm8yOE9BcE1uMEhublVKaEFVZ291NExLbkFZeUxZNHZnQlRZcXlmUUl6TXZncXNmK0RmYUVBUEpBT1M2OEkyOUJic0NrclZKNGd0eDNTUWtTU09iOHIyMGZRPT0ifSwgeyJzdWNjZXNzX2FjdGlvbl9zdGF0dXMiOiAiMjAxIn0sIFsiY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCAxMDQ4NTc2MF0sIHsieC1hbXotbWV0YS1leHQiOiAianBnIn0sIHsiY29udGVudC10eXBlIjogImltYWdlL2pwZWcifV0sICJleHBpcmF0aW9uIjogIjIwMjItMTItMDlUMDA6MzU6MjdaIn0=\"}, {\"name\": \"X-Amz-Signature\", \"value\": \"5cb813061d3df6271ad62a1c89a995a3451717ac2ebd3366fe37174e3784b252\"}, {\"name\": \"x-amz-security-token\", \"value\": \"FwoGZXIvYXdzEDoaDBjPq271A/DPn4JwRCK+Ac93dbD5ii7YTGLqnQtb5+R+XKK928iQD2hSs5iGTP+hbNnyJIgrDjEaxquSDD+/R5G3VijfPpSgQjBaKSoRt8mtE6dx6Bzhl2tY8uTKJ143nQE5y1zXnop3ApzF0+1LkNIJGAkgHBlp957vDW1BbjDn6mJ2TCt8rLW+fjgXXFREHL33o1MKGflK0tyOm5CjPtCglsVeEEzKghqMGeIqmabGnHrTB4eP17fquODm9jpIBo28OApMn0HnnUJhAUgou4LKnAYyLY4vgBTYqyfQIzMvgqsf+DfaEAPJAOS68I29BbsCkrVJ4gtx3SQkSSOb8r20fQ==\"}]}, \"websocketUrl\": \"wss://ws-07381166f904475a7.wss.redditmedia.com/structured-styles/t5_29ey0j-?m=AQAA64SSYydSTr5q97U0X0lstjJc7ADt7-mc_1Bg_HGpAB-cHQoe\"}"
+ },
+ "headers": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Cache-Control": [
+ "private, s-maxage=0, max-age=0, must-revalidate, no-store"
+ ],
+ "Connection": [
+ "keep-alive"
+ ],
+ "Content-Length": [
+ "2565"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Fri, 09 Dec 2022 00:34:27 GMT"
+ ],
+ "Expires": [
+ "-1"
+ ],
+ "NEL": [
+ "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 0.2, \"failure_fraction\": 0.2}"
+ ],
+ "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\" }]}"
+ ],
+ "Server": [
+ "snooserv"
+ ],
+ "Set-Cookie": [
+ "redesign_optout=true; Domain=reddit.com; Max-Age=94607999; Path=/; expires=Mon, 08-Dec-2025 00:34:27 GMT; secure",
+ "session_tracker=liqljqahahbglbicdp.0.1670546067934.Z0FBQUFBQmprb0tUeEs5LXQyZmItR0dMSGwzcTFPZ19CSUhBN2E1T1JmbTh2bmRnMkJ6cnZGNTFxZmJhVDBBWDNJOEJaZDhXOHFMd2wzTTZEUVZIZ203d011LTJZN0F0S19wMGtDRkdQOWhiMThSRk5jTHVCZVZFbzdIenhQQlFTX0EwRkstYmJ6bWo; Domain=reddit.com; Max-Age=7199; Path=/; expires=Fri, 09-Dec-2022 02:34:27 GMT; 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"
+ ],
+ "x-moose": [
+ "majestic"
+ ],
+ "x-ratelimit-remaining": [
+ "598.0"
+ ],
+ "x-ratelimit-reset": [
+ "333"
+ ],
+ "x-ratelimit-used": [
+ "2"
+ ],
+ "x-ua-compatible": [
+ "IE=edge"
+ ]
+ },
+ "status": {
+ "code": 200,
+ "message": "OK"
+ },
+ "url": "https://oauth.reddit.com/api/v1/style_asset_upload_s3/?raw_json=1"
+ }
+ },
+ {
+ "request": {
+ "body": {
+ "X-Amz-Algorithm": "AWS4-HMAC-SHA256",
+ "X-Amz-Credential": "ASIATB45ILA5YTLOVPXL/20221209/us-east-1/s3/aws4_request",
+ "X-Amz-Date": "20221209T003427Z",
+ "X-Amz-Signature": "5cb813061d3df6271ad62a1c89a995a3451717ac2ebd3366fe37174e3784b252",
+ "acl": "public-read",
+ "content-type": "image/jpeg",
+ "file": "\ufffd\ufffd\ufffd\ufffd\u0000\u0010JFIF\u0000\u0001\u0001\u0001\u0000H\u0000H\u0000\u0000\ufffd\ufffd\u0000C\u0000\u0006\u0004\u0005\u0006\u0005\u0004\u0006\u0006\u0005\u0006\u0007\u0007\u0006\b\n\u0010\n\n\t\t\n\u0014\u000e\u000f\f\u0010\u0017\u0014\u0018\u0018\u0017\u0014\u0016\u0016\u001a\u001d%\u001f\u001a\u001b#\u001c\u0016\u0016 , #&')*)\u0019\u001f-0-(0%()(\ufffd\ufffd\u0000\u000b\b\u0001,\u0001,\u0001\u0001\u0011\u0000\ufffd\ufffd\u0000\u0015\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\ufffd\ufffd\u0000\u0014\u0010\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ufffd\ufffd\u0000\b\u0001\u0001\u0000\u0000?\u0000\ufffd@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u007f\ufffd\ufffd",
+ "key": "t5_29ey0j/styles/mobileBannerImage_sk36rnlmpr4a1.jpg",
+ "policy": "eyJjb25kaXRpb25zIjogW3siYnVja2V0IjogInJlZGRpdC1zdWJyZWRkaXQtdXBsb2FkZWQtbWVkaWEifSwgeyJrZXkiOiAidDVfMjlleTBqL3N0eWxlcy9tb2JpbGVCYW5uZXJJbWFnZV9zazM2cm5sbXByNGExLmpwZyJ9LCB7ImFjbCI6ICJwdWJsaWMtcmVhZCJ9LCB7IngtYW16LXN0b3JhZ2UtY2xhc3MiOiAiU1RBTkRBUkQifSwgeyJ4LWFtei1jcmVkZW50aWFsIjogIkFTSUFUQjQ1SUxBNVlUTE9WUFhMLzIwMjIxMjA5L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QifSwgeyJ4LWFtei1hbGdvcml0aG0iOiAiQVdTNC1ITUFDLVNIQTI1NiJ9LCB7IngtYW16LWRhdGUiOiAiMjAyMjEyMDlUMDAzNDI3WiJ9LCB7IngtYW16LXNlY3VyaXR5LXRva2VuIjogIkZ3b0daWEl2WVhkekVEb2FEQmpQcTI3MUEvRFBuNEp3UkNLK0FjOTNkYkQ1aWk3WVRHTHFuUXRiNStSK1hLSzkyOGlRRDJoU3M1aUdUUCtoYk5ueUpJZ3JEakVheHF1U0REKy9SNUczVmlqZlBwU2dRakJhS1NvUnQ4bXRFNmR4NkJ6aGwydFk4dVRLSjE0M25RRTV5MXpYbm9wM0FwekYwKzFMa05JSkdBa2dIQmxwOTU3dkRXMUJiakRuNm1KMlRDdDhyTFcrZmpnWFhGUkVITDMzbzFNS0dmbEswdHlPbTVDalB0Q2dsc1ZlRUV6S2docU1HZUlxbWFiR25IclRCNGVQMTdmcXVPRG05anBJQm8yOE9BcE1uMEhublVKaEFVZ291NExLbkFZeUxZNHZnQlRZcXlmUUl6TXZncXNmK0RmYUVBUEpBT1M2OEkyOUJic0NrclZKNGd0eDNTUWtTU09iOHIyMGZRPT0ifSwgeyJzdWNjZXNzX2FjdGlvbl9zdGF0dXMiOiAiMjAxIn0sIFsiY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCAxMDQ4NTc2MF0sIHsieC1hbXotbWV0YS1leHQiOiAianBnIn0sIHsiY29udGVudC10eXBlIjogImltYWdlL2pwZWcifV0sICJleHBpcmF0aW9uIjogIjIwMjItMTItMDlUMDA6MzU6MjdaIn0=",
+ "success_action_status": "201",
+ "x-amz-meta-ext": "jpg",
+ "x-amz-security-token": "FwoGZXIvYXdzEDoaDBjPq271A/DPn4JwRCK+Ac93dbD5ii7YTGLqnQtb5+R+XKK928iQD2hSs5iGTP+hbNnyJIgrDjEaxquSDD+/R5G3VijfPpSgQjBaKSoRt8mtE6dx6Bzhl2tY8uTKJ143nQE5y1zXnop3ApzF0+1LkNIJGAkgHBlp957vDW1BbjDn6mJ2TCt8rLW+fjgXXFREHL33o1MKGflK0tyOm5CjPtCglsVeEEzKghqMGeIqmabGnHrTB4eP17fquODm9jpIBo28OApMn0HnnUJhAUgou4LKnAYyLY4vgBTYqyfQIzMvgqsf+DfaEAPJAOS68I29BbsCkrVJ4gtx3SQkSSOb8r20fQ==",
+ "x-amz-storage-class": "STANDARD"
+ },
+ "headers": {
+ "Accept-Encoding": [
+ "identity"
+ ],
+ "User-Agent": [
+ " Async PRAW/7.6.2.dev0 asyncprawcore/2.3.0"
+ ]
+ },
+ "method": "POST",
+ "uri": "https://reddit-subreddit-uploaded-media.s3-accelerate.amazonaws.com"
+ },
+ "response": {
+ "body": {
+ "string": "\nhttps://reddit-subreddit-uploaded-media.s3-accelerate.amazonaws.com/t5_29ey0j%2Fstyles%2FmobileBannerImage_sk36rnlmpr4a1.jpgreddit-subreddit-uploaded-mediat5_29ey0j/styles/mobileBannerImage_sk36rnlmpr4a1.jpg\"2b9b411d68afa1c4e752386137523883\""
+ },
+ "headers": {
+ "Connection": [
+ "keep-alive"
+ ],
+ "Content-Length": [
+ "371"
+ ],
+ "Content-Type": [
+ "application/xml"
+ ],
+ "Date": [
+ "Fri, 09 Dec 2022 00:34:29 GMT"
+ ],
+ "Etag": [
+ "\"2b9b411d68afa1c4e752386137523883\""
+ ],
+ "Location": [
+ "https://reddit-subreddit-uploaded-media.s3-accelerate.amazonaws.com/t5_29ey0j%2Fstyles%2FmobileBannerImage_sk36rnlmpr4a1.jpg"
+ ],
+ "Server": [
+ "AmazonS3"
+ ],
+ "Via": [
+ "1.1 5257b3c7acd3727a389946b312557ff2.cloudfront.net (CloudFront)"
+ ],
+ "X-Amz-Cf-Id": [
+ "XZM-MZA_qj-adTWWOLgQ2qKRMlUb2U2-v3Jp4Dgo1slr_RXHqN71gQ=="
+ ],
+ "X-Amz-Cf-Pop": [
+ "DEN52-P2"
+ ],
+ "X-Cache": [
+ "Miss from cloudfront"
+ ],
+ "x-amz-expiration": [
+ "expiry-date=\"Sun, 11 Dec 2022 00:00:00 GMT\", rule-id=\"delete-after-1-day\""
+ ],
+ "x-amz-id-2": [
+ "mlq5OSDryBALQXdVGGLhvY21jgCBDa1b5zvwgl44zlmX6FfjzLAGsb6g9rbVuvSsG3pKfjb1W3I="
+ ],
+ "x-amz-request-id": [
+ "PJQFFT7NT8QFNH88"
+ ]
+ },
+ "status": {
+ "code": 201,
+ "message": "Created"
+ },
+ "url": "https://reddit-subreddit-uploaded-media.s3-accelerate.amazonaws.com"
+ }
+ },
+ {
+ "request": {
+ "body": [
+ [
+ "api_type",
+ "json"
+ ],
+ [
+ "mobileBannerImage",
+ "https://reddit-subreddit-uploaded-media.s3-accelerate.amazonaws.com/t5_29ey0j/styles/mobileBannerImage_sk36rnlmpr4a1.jpg"
+ ]
+ ],
+ "headers": {
+ "Accept-Encoding": [
+ "identity"
+ ],
+ "Authorization": [
+ "bearer "
+ ],
+ "Cookie": [
+ "edgebucket=M9jlq80NqzrEGhPwnQ; redesign_optout=true; session_tracker=liqljqahahbglbicdp.0.1670546067934.Z0FBQUFBQmprb0tUeEs5LXQyZmItR0dMSGwzcTFPZ19CSUhBN2E1T1JmbTh2bmRnMkJ6cnZGNTFxZmJhVDBBWDNJOEJaZDhXOHFMd2wzTTZEUVZIZ203d011LTJZN0F0S19wMGtDRkdQOWhiMThSRk5jTHVCZVZFbzdIenhQQlFTX0EwRkstYmJ6bWo"
+ ],
+ "User-Agent": [
+ " Async PRAW/7.6.2.dev0 asyncprawcore/2.3.0"
+ ]
+ },
+ "method": "PATCH",
+ "uri": "https://oauth.reddit.com/api/v1/structured_styles/?raw_json=1"
+ },
+ "response": {
+ "body": {
+ "string": "{\"websocketUrl\": \"wss://ws-087584d04c2c0f5cc.wss.redditmedia.com/structured-styles/t5_29ey0j-?m=AQAA7ISSYza79z586TSqYR_FBJXp9wAfAboaTe6kyCRIvLAjpEjz\"}"
+ },
+ "headers": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Cache-Control": [
+ "private, s-maxage=0, max-age=0, must-revalidate, no-store"
+ ],
+ "Connection": [
+ "keep-alive"
+ ],
+ "Content-Length": [
+ "163"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Fri, 09 Dec 2022 00:34:28 GMT"
+ ],
+ "Expires": [
+ "-1"
+ ],
+ "NEL": [
+ "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 0.2, \"failure_fraction\": 0.2}"
+ ],
+ "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\" }]}"
+ ],
+ "Server": [
+ "snooserv"
+ ],
+ "Set-Cookie": [
+ "session_tracker=liqljqahahbglbicdp.0.1670546068472.Z0FBQUFBQmprb0tVNkNvOWs3UUQ1VWVZN0pCVzZCMklBc1pRSC1iUThYb0FDdXdpM3hJVFg4QUtSbkI1Z29VQy1DUjFfM3h1TERTZ3pURnZxUF9XNVlyZ3hndjMtN1VTOVFKWmhTekZQVUs3NmswcTlPdEljSU0yUVE5ZTRIdHppWHBMMXlkLVBVY2g; Domain=reddit.com; Max-Age=7199; Path=/; expires=Fri, 09-Dec-2022 02:34:28 GMT; 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"
+ ],
+ "x-moose": [
+ "majestic"
+ ],
+ "x-ratelimit-remaining": [
+ "597.0"
+ ],
+ "x-ratelimit-reset": [
+ "332"
+ ],
+ "x-ratelimit-used": [
+ "3"
+ ],
+ "x-ua-compatible": [
+ "IE=edge"
+ ]
+ },
+ "status": {
+ "code": 200,
+ "message": "OK"
+ },
+ "url": "https://oauth.reddit.com/api/v1/structured_styles/?raw_json=1"
+ }
+ }
+ ],
+ "version": 1
+}
diff --git a/tests/integration/cassettes/TestSubredditStylesheet.test_upload_mobile_banner__png.json b/tests/integration/cassettes/TestSubredditStylesheet.test_upload_mobile_banner__png.json
new file mode 100644
index 00000000..2a31edc5
--- /dev/null
+++ b/tests/integration/cassettes/TestSubredditStylesheet.test_upload_mobile_banner__png.json
@@ -0,0 +1,409 @@
+{
+ "interactions": [
+ {
+ "request": {
+ "body": [
+ [
+ "grant_type",
+ "refresh_token"
+ ],
+ [
+ "refresh_token",
+ ""
+ ]
+ ],
+ "headers": {
+ "AUTHORIZATION": [
+ "Basic "
+ ],
+ "Accept-Encoding": [
+ "identity"
+ ],
+ "Connection": [
+ "close"
+ ],
+ "User-Agent": [
+ " Async PRAW/7.6.2.dev0 asyncprawcore/2.3.0"
+ ]
+ },
+ "method": "POST",
+ "uri": "https://www.reddit.com/api/v1/access_token"
+ },
+ "response": {
+ "body": {
+ "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 adsconversions read privatemessages report identity livemanage account modtraffic wikiread edit modwiki modself flair history\"}"
+ },
+ "headers": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Cache-Control": [
+ "private, max-age=3600"
+ ],
+ "Connection": [
+ "close"
+ ],
+ "Content-Length": [
+ "454"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Fri, 09 Dec 2022 00:34:42 GMT"
+ ],
+ "NEL": [
+ "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 0.2, \"failure_fraction\": 0.2}"
+ ],
+ "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\" }]}"
+ ],
+ "Server": [
+ "snooserv"
+ ],
+ "Set-Cookie": [
+ "edgebucket=176R3OoZ4G3eTt0qa8; Domain=reddit.com; Max-Age=63071999; Path=/; 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"
+ ],
+ "x-moose": [
+ "majestic"
+ ],
+ "x-ratelimit-remaining": [
+ "297"
+ ],
+ "x-ratelimit-reset": [
+ "318"
+ ],
+ "x-ratelimit-used": [
+ "3"
+ ]
+ },
+ "status": {
+ "code": 200,
+ "message": "OK"
+ },
+ "url": "https://www.reddit.com/api/v1/access_token"
+ }
+ },
+ {
+ "request": {
+ "body": [
+ [
+ "api_type",
+ "json"
+ ],
+ [
+ "filepath",
+ "white-square.png"
+ ],
+ [
+ "imagetype",
+ "mobileBannerImage"
+ ],
+ [
+ "mimetype",
+ "image/png"
+ ]
+ ],
+ "headers": {
+ "Accept-Encoding": [
+ "identity"
+ ],
+ "Authorization": [
+ "bearer "
+ ],
+ "Cookie": [
+ "edgebucket=176R3OoZ4G3eTt0qa8"
+ ],
+ "User-Agent": [
+ " Async PRAW/7.6.2.dev0 asyncprawcore/2.3.0"
+ ]
+ },
+ "method": "POST",
+ "uri": "https://oauth.reddit.com/api/v1/style_asset_upload_s3/?raw_json=1"
+ },
+ "response": {
+ "body": {
+ "string": "{\"s3UploadLease\": {\"action\": \"//reddit-subreddit-uploaded-media.s3-accelerate.amazonaws.com\", \"fields\": [{\"name\": \"acl\", \"value\": \"public-read\"}, {\"name\": \"key\", \"value\": \"t5_29ey0j/styles/mobileBannerImage_mv59uj6opr4a1.png\"}, {\"name\": \"X-Amz-Credential\", \"value\": \"ASIATB45ILA572P5GWYM/20221209/us-east-1/s3/aws4_request\"}, {\"name\": \"X-Amz-Algorithm\", \"value\": \"AWS4-HMAC-SHA256\"}, {\"name\": \"X-Amz-Date\", \"value\": \"20221209T003442Z\"}, {\"name\": \"success_action_status\", \"value\": \"201\"}, {\"name\": \"content-type\", \"value\": \"image/png\"}, {\"name\": \"x-amz-storage-class\", \"value\": \"STANDARD\"}, {\"name\": \"x-amz-meta-ext\", \"value\": \"png\"}, {\"name\": \"policy\", \"value\": \"eyJjb25kaXRpb25zIjogW3siYnVja2V0IjogInJlZGRpdC1zdWJyZWRkaXQtdXBsb2FkZWQtbWVkaWEifSwgeyJrZXkiOiAidDVfMjlleTBqL3N0eWxlcy9tb2JpbGVCYW5uZXJJbWFnZV9tdjU5dWo2b3ByNGExLnBuZyJ9LCB7ImFjbCI6ICJwdWJsaWMtcmVhZCJ9LCB7IngtYW16LXN0b3JhZ2UtY2xhc3MiOiAiU1RBTkRBUkQifSwgeyJ4LWFtei1jcmVkZW50aWFsIjogIkFTSUFUQjQ1SUxBNTcyUDVHV1lNLzIwMjIxMjA5L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QifSwgeyJ4LWFtei1hbGdvcml0aG0iOiAiQVdTNC1ITUFDLVNIQTI1NiJ9LCB7IngtYW16LWRhdGUiOiAiMjAyMjEyMDlUMDAzNDQyWiJ9LCB7IngtYW16LXNlY3VyaXR5LXRva2VuIjogIkZ3b0daWEl2WVhkekVEb2FESU41YWQ0WExiM0dYU2R5blNLL0FSMTVuenZVRTN6dndPYjdRejFTdi94WUhNTjloWEJGUHpOSzcwZWRBM2hGeUMrSGdoQzRZd1hFcXlTVkZoa3NsZGtKT3VyVzlIelE3OXNmQVpUY2NibS9HaDkxUlRXTlhUa2JwZllTS0FoMkNxR3JFaEs4eWZzM014OU9OWkVhREFoU3hZaXA0c2JxU0lCM3RucVJrcWEyNzdTSnI3STF0VnkyQ2FKWk9lRmRscW1YOFV6ZFRPbHZrdlZ2VzU3bk9Hd3ViUngzVGF3bFhjV1UxRGc2UkY4MDZzZzZ4Wmg3NXZ5M0VtNUhWUEdtbDVOV0l2SnRVb2taR21SV3JVK1RLSmFEeXB3R01pMGh1RnNWNnZSSE1Gb0hLWjc0U3pjOEJ0SmxtUmtEeUVlQmRGRnd3Vm9KQjhtSnl5L0RLaTBUZjZUb2JoST0ifSwgeyJzdWNjZXNzX2FjdGlvbl9zdGF0dXMiOiAiMjAxIn0sIFsiY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCAxMDQ4NTc2MF0sIHsieC1hbXotbWV0YS1leHQiOiAicG5nIn0sIHsiY29udGVudC10eXBlIjogImltYWdlL3BuZyJ9XSwgImV4cGlyYXRpb24iOiAiMjAyMi0xMi0wOVQwMDozNTo0MloifQ==\"}, {\"name\": \"X-Amz-Signature\", \"value\": \"378a0e76f5b8d453ea8127d134d48d729a01ae708a5a88ccc610381ee371d267\"}, {\"name\": \"x-amz-security-token\", \"value\": \"FwoGZXIvYXdzEDoaDIN5ad4XLb3GXSdynSK/AR15nzvUE3zvwOb7Qz1Sv/xYHMN9hXBFPzNK70edA3hFyC+HghC4YwXEqySVFhksldkJOurW9HzQ79sfAZTccbm/Gh91RTWNXTkbpfYSKAh2CqGrEhK8yfs3Mx9ONZEaDAhSxYip4sbqSIB3tnqRkqa277SJr7I1tVy2CaJZOeFdlqmX8UzdTOlvkvVvW57nOGwubRx3TawlXcWU1Dg6RF806sg6xZh75vy3Em5HVPGml5NWIvJtUokZGmRWrU+TKJaDypwGMi0huFsV6vRHMFoHKZ74Szc8BtJlmRkDyEeBdFFwwVoJB8mJyy/DKi0Tf6TobhI=\"}]}, \"websocketUrl\": \"wss://ws-087584d04c2c0f5cc.wss.redditmedia.com/structured-styles/t5_29ey0j-?m=AQAA-oSSY-jPtpUY9Hx1qj2ZQ-gOroVgse-A8IJI_1HZ07K9f6oS\"}"
+ },
+ "headers": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Cache-Control": [
+ "private, s-maxage=0, max-age=0, must-revalidate, no-store"
+ ],
+ "Connection": [
+ "keep-alive"
+ ],
+ "Content-Length": [
+ "2564"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Fri, 09 Dec 2022 00:34:42 GMT"
+ ],
+ "Expires": [
+ "-1"
+ ],
+ "NEL": [
+ "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 0.2, \"failure_fraction\": 0.2}"
+ ],
+ "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\" }]}"
+ ],
+ "Server": [
+ "snooserv"
+ ],
+ "Set-Cookie": [
+ "redesign_optout=true; Domain=reddit.com; Max-Age=94607999; Path=/; expires=Mon, 08-Dec-2025 00:34:42 GMT; secure",
+ "session_tracker=fgkmocpnoeifafcdjd.0.1670546082699.Z0FBQUFBQmprb0tpMmoxSjF0dmJBLU5mRjNMU0FCcUxrSkdHb3dmVUtRR0x6WTlZd2NwWUFtZEF4dlBMd1FtbUZBQ0NuckZEZzJPby1uTmhmSGZNUTNkNlcxdTBJckltclR0NUY2UGo2LU5lQTNhUHcxcWVHb25fWUVNQjNsV3NSMDhoU2t3OXliT1Y; Domain=reddit.com; Max-Age=7199; Path=/; expires=Fri, 09-Dec-2022 02:34:42 GMT; 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"
+ ],
+ "x-moose": [
+ "majestic"
+ ],
+ "x-ratelimit-remaining": [
+ "596.0"
+ ],
+ "x-ratelimit-reset": [
+ "318"
+ ],
+ "x-ratelimit-used": [
+ "4"
+ ],
+ "x-ua-compatible": [
+ "IE=edge"
+ ]
+ },
+ "status": {
+ "code": 200,
+ "message": "OK"
+ },
+ "url": "https://oauth.reddit.com/api/v1/style_asset_upload_s3/?raw_json=1"
+ }
+ },
+ {
+ "request": {
+ "body": {
+ "X-Amz-Algorithm": "AWS4-HMAC-SHA256",
+ "X-Amz-Credential": "ASIATB45ILA572P5GWYM/20221209/us-east-1/s3/aws4_request",
+ "X-Amz-Date": "20221209T003442Z",
+ "X-Amz-Signature": "378a0e76f5b8d453ea8127d134d48d729a01ae708a5a88ccc610381ee371d267",
+ "acl": "public-read",
+ "content-type": "image/png",
+ "file": "\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0001,\u0000\u0000\u0001,\b\u0000\u0000\u0000\u0000\\\u0016\u0469\u0000\u0000\u0000\tpHYs\u0000\u0000\u000b\u0013\u0000\u0000\u000b\u0013\u0001\u0000\ufffd\ufffd\u0018\u0000\u0000\u0003iIDATx\u0001\ufffd\u04b1\u0011\u0000 \f\u0003\ufffd\ufffd\ufffd;\ufffd\n\ufffd^\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0746\ufffd\u0019X\ufffd\u0005\ufffd`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=\u000bV\u0010\b\ufffdg\ufffd\n\u0002!\ufffd,XA \ufffd\ufffd\u0005+\b\ufffd\u0533`\u0005\ufffd\ufffdz\u0016\ufffd \u0010R\u03c2\u0015\u0004B\ufffdY\ufffd\ufffd@H=+`}D3\u0003W}\ufffd\ufffd\ufffd\u0000\u0000\u0000\u0000IEND\ufffdB`\ufffd",
+ "key": "t5_29ey0j/styles/mobileBannerImage_mv59uj6opr4a1.png",
+ "policy": "eyJjb25kaXRpb25zIjogW3siYnVja2V0IjogInJlZGRpdC1zdWJyZWRkaXQtdXBsb2FkZWQtbWVkaWEifSwgeyJrZXkiOiAidDVfMjlleTBqL3N0eWxlcy9tb2JpbGVCYW5uZXJJbWFnZV9tdjU5dWo2b3ByNGExLnBuZyJ9LCB7ImFjbCI6ICJwdWJsaWMtcmVhZCJ9LCB7IngtYW16LXN0b3JhZ2UtY2xhc3MiOiAiU1RBTkRBUkQifSwgeyJ4LWFtei1jcmVkZW50aWFsIjogIkFTSUFUQjQ1SUxBNTcyUDVHV1lNLzIwMjIxMjA5L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QifSwgeyJ4LWFtei1hbGdvcml0aG0iOiAiQVdTNC1ITUFDLVNIQTI1NiJ9LCB7IngtYW16LWRhdGUiOiAiMjAyMjEyMDlUMDAzNDQyWiJ9LCB7IngtYW16LXNlY3VyaXR5LXRva2VuIjogIkZ3b0daWEl2WVhkekVEb2FESU41YWQ0WExiM0dYU2R5blNLL0FSMTVuenZVRTN6dndPYjdRejFTdi94WUhNTjloWEJGUHpOSzcwZWRBM2hGeUMrSGdoQzRZd1hFcXlTVkZoa3NsZGtKT3VyVzlIelE3OXNmQVpUY2NibS9HaDkxUlRXTlhUa2JwZllTS0FoMkNxR3JFaEs4eWZzM014OU9OWkVhREFoU3hZaXA0c2JxU0lCM3RucVJrcWEyNzdTSnI3STF0VnkyQ2FKWk9lRmRscW1YOFV6ZFRPbHZrdlZ2VzU3bk9Hd3ViUngzVGF3bFhjV1UxRGc2UkY4MDZzZzZ4Wmg3NXZ5M0VtNUhWUEdtbDVOV0l2SnRVb2taR21SV3JVK1RLSmFEeXB3R01pMGh1RnNWNnZSSE1Gb0hLWjc0U3pjOEJ0SmxtUmtEeUVlQmRGRnd3Vm9KQjhtSnl5L0RLaTBUZjZUb2JoST0ifSwgeyJzdWNjZXNzX2FjdGlvbl9zdGF0dXMiOiAiMjAxIn0sIFsiY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCAxMDQ4NTc2MF0sIHsieC1hbXotbWV0YS1leHQiOiAicG5nIn0sIHsiY29udGVudC10eXBlIjogImltYWdlL3BuZyJ9XSwgImV4cGlyYXRpb24iOiAiMjAyMi0xMi0wOVQwMDozNTo0MloifQ==",
+ "success_action_status": "201",
+ "x-amz-meta-ext": "png",
+ "x-amz-security-token": "FwoGZXIvYXdzEDoaDIN5ad4XLb3GXSdynSK/AR15nzvUE3zvwOb7Qz1Sv/xYHMN9hXBFPzNK70edA3hFyC+HghC4YwXEqySVFhksldkJOurW9HzQ79sfAZTccbm/Gh91RTWNXTkbpfYSKAh2CqGrEhK8yfs3Mx9ONZEaDAhSxYip4sbqSIB3tnqRkqa277SJr7I1tVy2CaJZOeFdlqmX8UzdTOlvkvVvW57nOGwubRx3TawlXcWU1Dg6RF806sg6xZh75vy3Em5HVPGml5NWIvJtUokZGmRWrU+TKJaDypwGMi0huFsV6vRHMFoHKZ74Szc8BtJlmRkDyEeBdFFwwVoJB8mJyy/DKi0Tf6TobhI=",
+ "x-amz-storage-class": "STANDARD"
+ },
+ "headers": {
+ "Accept-Encoding": [
+ "identity"
+ ],
+ "User-Agent": [
+ " Async PRAW/7.6.2.dev0 asyncprawcore/2.3.0"
+ ]
+ },
+ "method": "POST",
+ "uri": "https://reddit-subreddit-uploaded-media.s3-accelerate.amazonaws.com"
+ },
+ "response": {
+ "body": {
+ "string": "\nhttps://reddit-subreddit-uploaded-media.s3-accelerate.amazonaws.com/t5_29ey0j%2Fstyles%2FmobileBannerImage_mv59uj6opr4a1.pngreddit-subreddit-uploaded-mediat5_29ey0j/styles/mobileBannerImage_mv59uj6opr4a1.png\"bc241eeeac11d31c489f00173935c94f\""
+ },
+ "headers": {
+ "Connection": [
+ "keep-alive"
+ ],
+ "Content-Length": [
+ "371"
+ ],
+ "Content-Type": [
+ "application/xml"
+ ],
+ "Date": [
+ "Fri, 09 Dec 2022 00:34:43 GMT"
+ ],
+ "Etag": [
+ "\"bc241eeeac11d31c489f00173935c94f\""
+ ],
+ "Location": [
+ "https://reddit-subreddit-uploaded-media.s3-accelerate.amazonaws.com/t5_29ey0j%2Fstyles%2FmobileBannerImage_mv59uj6opr4a1.png"
+ ],
+ "Server": [
+ "AmazonS3"
+ ],
+ "Via": [
+ "1.1 a70648d67d4a5a7f7eed7b14595ab4fe.cloudfront.net (CloudFront)"
+ ],
+ "X-Amz-Cf-Id": [
+ "pLQ2-m33p7MzOLJwljzu8lbvDRxatLuUFT-RTFve7qffnQ-Ig0yYXA=="
+ ],
+ "X-Amz-Cf-Pop": [
+ "DEN52-P2"
+ ],
+ "X-Cache": [
+ "Miss from cloudfront"
+ ],
+ "x-amz-expiration": [
+ "expiry-date=\"Sun, 11 Dec 2022 00:00:00 GMT\", rule-id=\"delete-after-1-day\""
+ ],
+ "x-amz-id-2": [
+ "QrgfcCHXnpee5yzanpKxwoqpwrXdb+ilETUytvfosJ9p6MEedwPpoi6bJVGthC+LbRndvG0Sqx0="
+ ],
+ "x-amz-request-id": [
+ "T8TEEH348TWV2KZ3"
+ ]
+ },
+ "status": {
+ "code": 201,
+ "message": "Created"
+ },
+ "url": "https://reddit-subreddit-uploaded-media.s3-accelerate.amazonaws.com"
+ }
+ },
+ {
+ "request": {
+ "body": [
+ [
+ "api_type",
+ "json"
+ ],
+ [
+ "mobileBannerImage",
+ "https://reddit-subreddit-uploaded-media.s3-accelerate.amazonaws.com/t5_29ey0j/styles/mobileBannerImage_mv59uj6opr4a1.png"
+ ]
+ ],
+ "headers": {
+ "Accept-Encoding": [
+ "identity"
+ ],
+ "Authorization": [
+ "bearer "
+ ],
+ "Cookie": [
+ "edgebucket=176R3OoZ4G3eTt0qa8; redesign_optout=true; session_tracker=fgkmocpnoeifafcdjd.0.1670546082699.Z0FBQUFBQmprb0tpMmoxSjF0dmJBLU5mRjNMU0FCcUxrSkdHb3dmVUtRR0x6WTlZd2NwWUFtZEF4dlBMd1FtbUZBQ0NuckZEZzJPby1uTmhmSGZNUTNkNlcxdTBJckltclR0NUY2UGo2LU5lQTNhUHcxcWVHb25fWUVNQjNsV3NSMDhoU2t3OXliT1Y"
+ ],
+ "User-Agent": [
+ " Async PRAW/7.6.2.dev0 asyncprawcore/2.3.0"
+ ]
+ },
+ "method": "PATCH",
+ "uri": "https://oauth.reddit.com/api/v1/structured_styles/?raw_json=1"
+ },
+ "response": {
+ "body": {
+ "string": "{\"websocketUrl\": \"wss://ws-078822fa467f2f8bb.wss.redditmedia.com/structured-styles/t5_29ey0j-?m=AQAA-4SSYwhcS97ww-_ftAAe6yNG8TRD0snQhtySKLz7Tb7z-UEa\"}"
+ },
+ "headers": {
+ "Accept-Ranges": [
+ "bytes"
+ ],
+ "Cache-Control": [
+ "private, s-maxage=0, max-age=0, must-revalidate, no-store"
+ ],
+ "Connection": [
+ "keep-alive"
+ ],
+ "Content-Length": [
+ "163"
+ ],
+ "Content-Type": [
+ "application/json; charset=UTF-8"
+ ],
+ "Date": [
+ "Fri, 09 Dec 2022 00:34:43 GMT"
+ ],
+ "Expires": [
+ "-1"
+ ],
+ "NEL": [
+ "{\"report_to\": \"w3-reporting-nel\", \"max_age\": 14400, \"include_subdomains\": false, \"success_fraction\": 0.2, \"failure_fraction\": 0.2}"
+ ],
+ "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\" }]}"
+ ],
+ "Server": [
+ "snooserv"
+ ],
+ "Set-Cookie": [
+ "session_tracker=fgkmocpnoeifafcdjd.0.1670546082984.Z0FBQUFBQmprb0tqUHllTzUwNzdxMG5remtrdnJLMGprNmV4cWx6aTlGUFZIVmdnYVMyQ2FGQVR5RVROUHBBaHJDRVhVVHQtUUJXWG9QMVBVMjdWbEt3dkxxZVBQbURnTHR6RVI1Q1lCOGNJVHUxN3dpWFh4U3dZSWZwOHFyNXd1N0pIaTZucXBtN3Y; Domain=reddit.com; Max-Age=7199; Path=/; expires=Fri, 09-Dec-2022 02:34:43 GMT; 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"
+ ],
+ "x-moose": [
+ "majestic"
+ ],
+ "x-ratelimit-remaining": [
+ "595.0"
+ ],
+ "x-ratelimit-reset": [
+ "318"
+ ],
+ "x-ratelimit-used": [
+ "5"
+ ],
+ "x-ua-compatible": [
+ "IE=edge"
+ ]
+ },
+ "status": {
+ "code": 200,
+ "message": "OK"
+ },
+ "url": "https://oauth.reddit.com/api/v1/structured_styles/?raw_json=1"
+ }
+ }
+ ],
+ "version": 1
+}
diff --git a/tests/integration/models/reddit/test_subreddit.py b/tests/integration/models/reddit/test_subreddit.py
index b0087488..118bcac5 100644
--- a/tests/integration/models/reddit/test_subreddit.py
+++ b/tests/integration/models/reddit/test_subreddit.py
@@ -1748,6 +1748,11 @@ async def test_delete_mobile_header(self, reddit):
subreddit = await reddit.subreddit(pytest.placeholders.test_subreddit)
await subreddit.stylesheet.delete_mobile_header()
+ async def test_delete_mobile_banner(self, reddit):
+ reddit.read_only = False
+ subreddit = await reddit.subreddit(pytest.placeholders.test_subreddit)
+ await subreddit.stylesheet.delete_mobile_banner()
+
async def test_delete_mobile_icon(self, reddit):
reddit.read_only = False
subreddit = await reddit.subreddit(pytest.placeholders.test_subreddit)
@@ -1849,6 +1854,16 @@ async def test_upload_banner_hover_image__png(self, reddit, image_path):
image_path("white-square.png")
)
+ async def test_upload_mobile_banner__jpg(self, reddit, image_path):
+ reddit.read_only = False
+ subreddit = await reddit.subreddit(pytest.placeholders.test_subreddit)
+ await subreddit.stylesheet.upload_mobile_banner(image_path("white-square.jpg"))
+
+ async def test_upload_mobile_banner__png(self, reddit, image_path):
+ reddit.read_only = False
+ subreddit = await reddit.subreddit(pytest.placeholders.test_subreddit)
+ await subreddit.stylesheet.upload_mobile_banner(image_path("white-square.png"))
+
async def test_upload_header__jpg(self, reddit, image_path):
reddit.read_only = False
subreddit = await reddit.subreddit(pytest.placeholders.test_subreddit)