diff --git a/appstoreconnect/api.py b/appstoreconnect/api.py index c384537..a9f7751 100644 --- a/appstoreconnect/api.py +++ b/appstoreconnect/api.py @@ -398,6 +398,14 @@ def read_app_information(self, app_ip): """ return self._get_resource(App, app_ip) + def list_app_infos(self, app_id: str): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/list_all_app_infos_for_an_app + :return: an iterator over AppCategory resources + """ + full_url = BASE_API + "/v1/apps/" + app_id + "/appInfos" + return self._get_resources(AppInfo, None, None, full_url) + def list_apps(self, filters=None, sort=None): """ :reference: https://developer.apple.com/documentation/appstoreconnectapi/list_apps @@ -448,7 +456,6 @@ def list_beta_license_agreements(self, filters=None): return self._get_resources(BetaLicenseAgreement, filters) # App Metadata Resources - def list_app_store_versions(self, app_id: str, filters=None, sort=None): """ :reference: https://developer.apple.com/documentation/appstoreconnectapi/list_all_app_store_versions_for_an_app @@ -583,21 +590,69 @@ def get_build_info(self, build_id): """ return self._get_resource(Build, build_id) + # appStoreVersions localization + def list_app_store_version_localizations(self, appstoreversion): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/list_all_app_store_version_localizations_for_an_app_store_version + :return: an iterator over AppStoreVersionLocalization resources + """ + full_url = BASE_API + f"/v1/appStoreVersions/{appstoreversion.id}/appStoreVersionLocalizations" + return self._get_resources(AppStoreVersionLocalization, None, None, full_url) + + def modify_app_store_version_localization(self, app_store_version_localization: AppStoreVersionLocalization, description: str, keywords: str, marketingUrl: str, promotionalText: str, supportUrl: str, whatsNew: str ): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/modify_an_app_store_version_localization + :return: an iterator over AppInfoLocalization resources + """ + return self._modify_resource(app_store_version_localization, locals()) + + # appStoreInfo localization + def list_app_store_info_localizations(self, app_information): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/list_all_app_info_localizations_for_an_app_info + :return: an iterator over AppInfoLocalization resources + """ + full_url = BASE_API + f"/v1/appInfos/{app_information.id}/appInfoLocalizations" + return self._get_resources(AppInfoLocalization, None, None, full_url) + + def modify_app_store_info_localization(self, app_info_localization: AppInfoLocalization, name: str, privacyPolicyUrl: str, subtitle: str): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/modify_an_app_info_localization + :return: an iterator over AppInfoLocalization resources + """ + return self._modify_resource(app_info_localization, locals()) + # App Metadata - def modify_app_store_version(self, app_store_version: AppStoreVersion, versionString: str, build: Build = None): + def modify_app_store_version(self, app_store_version: AppStoreVersion, versionString: str, copyright: str, build: Build = None): """ :reference: https://developer.apple.com/documentation/appstoreconnectapi/modify_an_app_store_version :return: a Device resource """ return self._modify_resource(app_store_version, locals()) - def create_new_app_store_version(self, platform: str, versionString: str, app: App, build: Build = None) -> AppStoreVersion: + def create_new_app_store_version(self, platform: str, versionString: str, copyright: str, app: App, build: Build = None) -> AppStoreVersion: """ :reference: https://developer.apple.com/documentation/appstoreconnectapi/create_an_app_store_version :return: a AppStoreVersion resource """ return self._create_resource(AppStoreVersion, locals()) + def read_app_category_info(self, app_category_id): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/read_app_category_information + :return: an iterator over AppCategory resources + """ + return self._get_resource(AppCategory, app_category_id) + + # App info Resources + + def modify_app_info(self, app_information: AppInfo, primaryCategory: str = None, secondaryCategory:str = None): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/modify_an_app_info + :return: an iterator over AppInfo resources + """ + return self._modify_resource(app_information, locals()) + # Reporting def download_finance_reports(self, filters=None, split_response=False, save_to=None): # setup required filters if not provided diff --git a/appstoreconnect/resources.py b/appstoreconnect/resources.py index 92351ac..5730be2 100644 --- a/appstoreconnect/resources.py +++ b/appstoreconnect/resources.py @@ -76,6 +76,17 @@ class BetaGroup(Resource): # App Metadata Resources +class AppStoreVersionLocalization(Resource): + endpoint = '/v1/appStoreVersionLocalizations' + type = 'appStoreVersionLocalizations' + attributes = ['description', 'keywords', 'locale', 'marketingUrl', 'promotionalText' 'supportUrl', 'whatsNew'] + relationships = { + 'appPreviewSets': {'multiple': True}, + 'appScreenshotSets': {'multiple': True}, + 'appStoreVersion': {'multiple': False} + } + documentation = 'https://developer.apple.com/documentation/appstoreconnectapi/appstoreversionlocalization' + class AppStoreVersion(Resource): endpoint = '/v1/appStoreVersions' type = 'appStoreVersions' @@ -123,6 +134,15 @@ class RoutingAppCoverage(Resource): type = "routingAppCoverages" documentation = 'https://developer.apple.com/documentation/appstoreconnectapi/routingappcoverages' +class AppInfoLocalization(Resource): + endpoint = '/v1/appInfoLocalizations' + type = 'appInfoLocalizations' + attributes = ['locale', 'name', 'privacyPolicyText', 'privacyPolicyUrl', 'subtitle'] + relationships = { + 'appInfo': {'multiple': False}, + } + documentation = 'https://developer.apple.com/documentation/appstoreconnectapi/appinfolocalization' + # App Resources class App(Resource): @@ -257,3 +277,30 @@ class FinanceReport(Resource): class SalesReport(Resource): endpoint = '/v1/salesReports' filters = 'https://developer.apple.com/documentation/appstoreconnectapi/download_sales_and_trends_reports' + +class AppCategory(Resource): + endpoint = '/v1/appCategories' + type = 'appCategories' + attributes = ['platforms'] + relationships = { + 'parent': {'multiple': False}, + 'subcategories': {'multiple': True} + } + documentation = 'https://developer.apple.com/documentation/appstoreconnectapi/appcategory' + +class AppInfo(Resource): + endpoint = '/v1/appInfos' + type = 'appInfos' + attributes = ['appStoreAgeRating', 'appStoreState', 'brazilAgeRating', 'kidsAgeBand'] + relationships = { + 'app': {'multiple': False}, + 'appInfoLocalizations': {'multiple': True}, + 'primaryCategory': {'multiple': False}, + 'primarySubcategoryOne': {'multiple': False}, + 'primarySubcategoryTwo': {'multiple': False}, + 'secondaryCategory': {'multiple': False}, + 'secondarySubcategoryOne': {'multiple': False}, + 'secondarySubcategoryTwo': {'multiple': False} + + } + documentation = 'https://developer.apple.com/documentation/appstoreconnectapi/appinfo'