From da2da88ad5865a2c7f6c3643d658ac555ae171a2 Mon Sep 17 00:00:00 2001 From: Dmytro Lutsyk Date: Mon, 21 Mar 2022 17:26:17 +0100 Subject: [PATCH 1/5] app preview --- appstoreconnect/api.py | 58 ++++++++++++++++++++++++++++++++++++ appstoreconnect/resources.py | 21 +++++++++++++ 2 files changed, 79 insertions(+) diff --git a/appstoreconnect/api.py b/appstoreconnect/api.py index 7ef20ec..70a1fe2 100644 --- a/appstoreconnect/api.py +++ b/appstoreconnect/api.py @@ -551,6 +551,22 @@ def list_all_app_screenshots_for_an_app_screenshot_set(self, app_screen_shot_set url = BASE_API + "/v1/appScreenshotSets/" + app_screen_shot_set_id + "/appScreenshots" return self._get_resources(AppScreenshot, None, None, url) + def list_all_app_previews_for_an_app_preview_set(self, app_store_version_localization_id): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/list_all_app_previews_for_an_app_preview_set + :return: an iterator over AppPreviewSet resources + """ + url = BASE_API + "/v1/appStoreVersionLocalizations/" + app_store_version_localization_id + "/appPreviewSets" + return self._get_resources(AppPreviewSet, None, None, url) + + def list_all_app_preview_sets_for_an_app_store_version_localization(self, app_store_version_localization_id): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/list_all_app_preview_sets_for_an_app_store_version_localization + :return: an iterator over AppPreviewSet resources + """ + url = BASE_API + "/v1/appStoreVersionLocalizations/" + app_store_version_localization_id + "/appPreviewSets" + return self._get_resources(AppPreviewSet, None, None, url) + def create_an_app_screenshot_set(self, screenshotDisplayType: str, appStoreVersionLocalization: AppStoreVersionLocalization): """ :reference: https://developer.apple.com/documentation/appstoreconnectapi/create_an_app_screenshot_set @@ -558,6 +574,13 @@ def create_an_app_screenshot_set(self, screenshotDisplayType: str, appStoreVersi """ return self._create_resource(AppScreenshotSet, locals()) + def create_an_app_preview_set(self, previewType: str, appStoreVersionLocalization: AppStoreVersionLocalization): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/create_an_app_preview_set + :return: an iterator over AppPreviewSet resources + """ + return self._create_resource(AppPreviewSet, locals()) + def delete_an_app_screenshot_set(self, appScreenshotSet: AppScreenshotSet): """ :reference: https://developer.apple.com/documentation/appstoreconnectapi/delete_an_app_screenshot_set @@ -565,6 +588,13 @@ def delete_an_app_screenshot_set(self, appScreenshotSet: AppScreenshotSet): """ return self._delete_resource(appScreenshotSet) + def delete_an_app_preview_set(self, appPreviewSet: AppPreviewSet): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/delete_an_app_preview_set + :return: an iterator over AppPreviewSet resources + """ + return self._delete_resource(appPreviewSet) + def modify_an_app_screenshot(self, app_screenshot: AppScreenshot, sourceFileChecksum: str, uploaded: bool): """ @@ -574,6 +604,14 @@ def modify_an_app_screenshot(self, app_screenshot: AppScreenshot, sourceFileChec attributes = {'sourceFileChecksum':sourceFileChecksum, 'uploaded':uploaded} return self._modify_resource(app_screenshot, attributes) + def modify_an_app_preview(self, appPreview: AppPreview, sourceFileChecksum: str, uploaded: bool, previewFrameTimeCode: str): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/modify_an_app_preview + :return: an iterator over AppPreview resources + """ + attributes = {'sourceFileChecksum':sourceFileChecksum, 'uploaded':uploaded, 'previewFrameTimeCode':previewFrameTimeCode} + return self._modify_resource(appPreview, attributes) + def create_an_asset_reservation(self, appScreenshotSet: AppScreenshotSet, fileSize: int, fileName: str): """ :reference: https://developer.apple.com/documentation/appstoreconnectapi/uploading_assets_to_app_store_connect @@ -581,6 +619,13 @@ def create_an_asset_reservation(self, appScreenshotSet: AppScreenshotSet, fileSi """ return self._create_resource(AppScreenshot, locals()) + def create_a_preview_reservation(self, appPreviewSet: AppPreviewSet, fileSize: int, fileName: str): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/app_metadata/uploading_app_previews + :return: an iterator over AppScreenshot resources + """ + return self._create_resource(appPreviewSet, locals()) + def upload_the_asset(self, upload_operation, binary): """ :reference: https://developer.apple.com/documentation/appstoreconnectapi/uploading_assets_to_app_store_connect @@ -594,6 +639,19 @@ def upload_the_asset(self, upload_operation, binary): return requests.put(url=url, data = binary, headers = headers) + def upload_the_preview(self, upload_operation, binary): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/app_metadata/uploading_app_previews + :return: an json answer + """ + headers = {} + url = upload_operation['url'] + + for header in upload_operation['requestHeaders']: + headers[header['name']] = header['value'] + + return requests.put(url=url, data = binary, headers = headers) + def read_app_screenshot_information(self, app_screenshot_id): """ :reference: https://developer.apple.com/documentation/appstoreconnectapi/read_app_screenshot_information diff --git a/appstoreconnect/resources.py b/appstoreconnect/resources.py index 50d68dd..473869c 100644 --- a/appstoreconnect/resources.py +++ b/appstoreconnect/resources.py @@ -94,6 +94,15 @@ class AppScreenshot(Resource): } documentation = 'https://developer.apple.com/documentation/appstoreconnectapi/appscreenshot' +class appPreview(Resource): + endpoint = '/v1/appPreviews' + type = 'appPreviews' + attributes = ['assetDeliveryState', 'videoUrl', 'mimeType', 'fileName', 'fileSize', 'sourceFileChecksum', 'uploadOperations', 'previewFrameTimeCode', 'previewImage'] + relationships = { + 'appPreviewSet': {'multiple': False} + } + documentation = 'https://developer.apple.com/documentation/appstoreconnectapi/appPreview' + class AppScreenshotSet(Resource): endpoint = '/v1/appScreenshotSets' type = 'appScreenshotSets' @@ -104,6 +113,18 @@ class AppScreenshotSet(Resource): } documentation = 'https://developer.apple.com/documentation/appstoreconnectapi/appscreenshotset' +class AppPreviewSet(Resource): + endpoint = '/v1/appPreviewSets' + type = 'appPreviewSets' + attributes = ['previewType'] + relationships = { + 'appPreviews': {'multiple': True}, + 'appStoreVersionLocalization': {'multiple': False}, + 'appCustomProductPageLocalization': {'multiple': False}, + 'appStoreVersionExperimentTreatmentLocalization': {'multiple': False} + } + documentation = 'https://developer.apple.com/documentation/appstoreconnectapi/apppreviewset' + class AppStoreVersionLocalization(Resource): endpoint = '/v1/appStoreVersionLocalizations' type = 'appStoreVersionLocalizations' From 6affd65a71471566168218f16793f14b8553255a Mon Sep 17 00:00:00 2001 From: Dmytro Lutsyk Date: Wed, 23 Mar 2022 15:28:24 +0100 Subject: [PATCH 2/5] little fixes --- appstoreconnect/api.py | 10 +++++++++- appstoreconnect/resources.py | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/appstoreconnect/api.py b/appstoreconnect/api.py index 70a1fe2..5e10b7a 100644 --- a/appstoreconnect/api.py +++ b/appstoreconnect/api.py @@ -556,7 +556,7 @@ def list_all_app_previews_for_an_app_preview_set(self, app_store_version_localiz :reference: https://developer.apple.com/documentation/appstoreconnectapi/list_all_app_previews_for_an_app_preview_set :return: an iterator over AppPreviewSet resources """ - url = BASE_API + "/v1/appStoreVersionLocalizations/" + app_store_version_localization_id + "/appPreviewSets" + url = BASE_API + "/v1/appPreviewSets/" + app_store_version_localization_id + "/appPreviews" return self._get_resources(AppPreviewSet, None, None, url) def list_all_app_preview_sets_for_an_app_store_version_localization(self, app_store_version_localization_id): @@ -674,6 +674,14 @@ def replace_all_app_screenshots_for_an_app_screenshot_set(self, app_screenshot_s post_data = {"data": data } return self._api_call(BASE_API + "/v1/appScreenshotSets/" + app_screenshot_set.id + "/relationships/appScreenshots", HttpMethod.PATCH, post_data) + def replace_all_app_previews_for_an_app_preview_set(self, app_preview_set, data): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/replace_all_app_previews_for_an_app_preview_set + :return: an iterator over AppPreviewSet resource + """ + post_data = {"data": data } + return self._api_call(BASE_API + "/v1/appPreviewSets/" + app_preview_set.id + "/relationships/appPreviews", HttpMethod.PATCH, post_data) + # Build Resources def list_builds(self, filters=None, sort=None): diff --git a/appstoreconnect/resources.py b/appstoreconnect/resources.py index 473869c..7a6c2fb 100644 --- a/appstoreconnect/resources.py +++ b/appstoreconnect/resources.py @@ -94,7 +94,7 @@ class AppScreenshot(Resource): } documentation = 'https://developer.apple.com/documentation/appstoreconnectapi/appscreenshot' -class appPreview(Resource): +class AppPreview(Resource): endpoint = '/v1/appPreviews' type = 'appPreviews' attributes = ['assetDeliveryState', 'videoUrl', 'mimeType', 'fileName', 'fileSize', 'sourceFileChecksum', 'uploadOperations', 'previewFrameTimeCode', 'previewImage'] From d7a84ca369d9fcd50ff7d7795b9c14be6a92dcad Mon Sep 17 00:00:00 2001 From: Dmytro Lutsyk Date: Wed, 23 Mar 2022 16:44:35 +0100 Subject: [PATCH 3/5] little fix --- appstoreconnect/api.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/appstoreconnect/api.py b/appstoreconnect/api.py index 5e10b7a..9ef2df7 100644 --- a/appstoreconnect/api.py +++ b/appstoreconnect/api.py @@ -604,7 +604,8 @@ def modify_an_app_screenshot(self, app_screenshot: AppScreenshot, sourceFileChec attributes = {'sourceFileChecksum':sourceFileChecksum, 'uploaded':uploaded} return self._modify_resource(app_screenshot, attributes) - def modify_an_app_preview(self, appPreview: AppPreview, sourceFileChecksum: str, uploaded: bool, previewFrameTimeCode: str): + #def modify_an_app_preview(self, appPreview: AppPreview, sourceFileChecksum: str, uploaded: bool, previewFrameTimeCode: str): + def modify_an_app_preview(self, appPreview: AppPreview, sourceFileChecksum: str, uploaded: bool): """ :reference: https://developer.apple.com/documentation/appstoreconnectapi/modify_an_app_preview :return: an iterator over AppPreview resources @@ -624,7 +625,7 @@ def create_a_preview_reservation(self, appPreviewSet: AppPreviewSet, fileSize: i :reference: https://developer.apple.com/documentation/appstoreconnectapi/app_metadata/uploading_app_previews :return: an iterator over AppScreenshot resources """ - return self._create_resource(appPreviewSet, locals()) + return self._create_resource(AppPreview, locals()) def upload_the_asset(self, upload_operation, binary): """ @@ -666,6 +667,13 @@ def delete_an_app_screenshot(self, app_screenshot): """ return self._delete_resource(app_screenshot) + def delete_an_app_preview(self, app_preview: AppPreview): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/delete_an_app_preview + :return: an iterator over AppPreview resource + """ + return self._delete_resource(app_preview) + def replace_all_app_screenshots_for_an_app_screenshot_set(self, app_screenshot_set, data): """ :reference: https://developer.apple.com/documentation/appstoreconnectapi/replace_all_app_screenshots_for_an_app_screenshot_set From 9cdff44a55d68335f648f0e92b48cead4f38998e Mon Sep 17 00:00:00 2001 From: Dmytro Lutsyk Date: Thu, 24 Mar 2022 11:30:08 +0100 Subject: [PATCH 4/5] fix modify_an_app_preview --- appstoreconnect/api.py | 6 ++---- appstoreconnect/resources.py | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/appstoreconnect/api.py b/appstoreconnect/api.py index 9ef2df7..027dc03 100644 --- a/appstoreconnect/api.py +++ b/appstoreconnect/api.py @@ -557,7 +557,7 @@ def list_all_app_previews_for_an_app_preview_set(self, app_store_version_localiz :return: an iterator over AppPreviewSet resources """ url = BASE_API + "/v1/appPreviewSets/" + app_store_version_localization_id + "/appPreviews" - return self._get_resources(AppPreviewSet, None, None, url) + return self._get_resources(AppPreview, None, None, url) def list_all_app_preview_sets_for_an_app_store_version_localization(self, app_store_version_localization_id): """ @@ -604,14 +604,12 @@ def modify_an_app_screenshot(self, app_screenshot: AppScreenshot, sourceFileChec attributes = {'sourceFileChecksum':sourceFileChecksum, 'uploaded':uploaded} return self._modify_resource(app_screenshot, attributes) - #def modify_an_app_preview(self, appPreview: AppPreview, sourceFileChecksum: str, uploaded: bool, previewFrameTimeCode: str): def modify_an_app_preview(self, appPreview: AppPreview, sourceFileChecksum: str, uploaded: bool): """ :reference: https://developer.apple.com/documentation/appstoreconnectapi/modify_an_app_preview :return: an iterator over AppPreview resources """ - attributes = {'sourceFileChecksum':sourceFileChecksum, 'uploaded':uploaded, 'previewFrameTimeCode':previewFrameTimeCode} - return self._modify_resource(appPreview, attributes) + return self._modify_resource(appPreview, locals()) def create_an_asset_reservation(self, appScreenshotSet: AppScreenshotSet, fileSize: int, fileName: str): """ diff --git a/appstoreconnect/resources.py b/appstoreconnect/resources.py index 7a6c2fb..5f6ae08 100644 --- a/appstoreconnect/resources.py +++ b/appstoreconnect/resources.py @@ -97,7 +97,7 @@ class AppScreenshot(Resource): class AppPreview(Resource): endpoint = '/v1/appPreviews' type = 'appPreviews' - attributes = ['assetDeliveryState', 'videoUrl', 'mimeType', 'fileName', 'fileSize', 'sourceFileChecksum', 'uploadOperations', 'previewFrameTimeCode', 'previewImage'] + attributes = ['assetDeliveryState', 'videoUrl', 'mimeType', 'fileName', 'fileSize', 'sourceFileChecksum', 'uploadOperations', 'previewFrameTimeCode', 'previewImage', 'uploaded'] relationships = { 'appPreviewSet': {'multiple': False} } From efa365ab6c4e0985a083ac05ac99ce4f19eff3fd Mon Sep 17 00:00:00 2001 From: Dmytro Lutsyk Date: Mon, 28 Mar 2022 16:02:29 +0200 Subject: [PATCH 5/5] read_app_preview_information --- appstoreconnect/api.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/appstoreconnect/api.py b/appstoreconnect/api.py index 027dc03..d225303 100644 --- a/appstoreconnect/api.py +++ b/appstoreconnect/api.py @@ -658,6 +658,13 @@ def read_app_screenshot_information(self, app_screenshot_id): """ return self._get_resource(AppScreenshot, app_screenshot_id) + def read_app_preview_information(self, app_preview_id): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/read_app_preview_information + :return: an iterator over AppPreview resource + """ + return self._get_resource(AppPreview, app_preview_id) + def delete_an_app_screenshot(self, app_screenshot): """ :reference: https://developer.apple.com/documentation/appstoreconnectapi/delete_an_app_screenshot