From ffa1d772862cc7a5f8cc0e01d406c223db91a6e0 Mon Sep 17 00:00:00 2001 From: Dmytro Lutsyk Date: Wed, 2 Feb 2022 16:41:16 +0100 Subject: [PATCH 1/2] first commit --- appstoreconnect/api.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/appstoreconnect/api.py b/appstoreconnect/api.py index d28f653..7a26f90 100644 --- a/appstoreconnect/api.py +++ b/appstoreconnect/api.py @@ -357,6 +357,16 @@ def list_beta_testers(self, filters=None, sort=None): """ return self._get_resources(BetaTester, filters, sort) + def list_all_beta_testers_in_a_beta_group(self, betaGroup, filters=None, sort=None): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/list_all_beta_testers_in_a_beta_group + :return: an iterator over BetaTester resources + """ + full_url = BASE_API + "/v1/betaGroups/" + betaGroup.id + "/betaTesters" + return self._get_resources(BetaGroup, None, None, full_url) + #return self._api_call(BASE_API + "/v1/betaGroups/" + betaGroup.id + "/betaTesters", HttpMethod.GET) + #return self._get_resources(BetaGroup, filters, sort) + def read_beta_tester_information(self, beta_tester_id: str): """ :reference: https://developer.apple.com/documentation/appstoreconnectapi/read_beta_tester_information @@ -364,6 +374,31 @@ def read_beta_tester_information(self, beta_tester_id: str): """ return self._get_resource(BetaTester, beta_tester_id) + def add_beta_testers_to_a_beta_group(self, betaGroup: BetaGroup, betaTesters: list): #betaTesters list of BetaTester + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/add_beta_testers_to_a_beta_group + :return: a BetaTester resource + """ + return self._create_resource(BetaGroup, locals()) + + def remove_beta_testers_from_a_beta_group(self, betaGroup: BetaGroup, betaTesters: list): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/remove_beta_testers_from_a_beta_group + :return: a BetaTester resource + """ + headers = {"Authorization": "Bearer %s" % self.token} + headers["Content-Type"] = "application/json" + url = BASE_API + "/v1/betaGroups/" + betaGroup.id + "/relationships/betaTesters" + post_data = { 'data': []} + for betaTester in betaTesters: + data = { 'id': betaTester.id, 'type': 'betaTesters'} + post_data["data"].append(data) + + return requests.delete(url=url, data = post_data, headers = headers) + #post_data = [{'data': [{ 'id': build_id, 'type': 'builds'}]}] + #return self._api_call(BASE_API + "/v1/betaGroups/" + betaGroup.id + "/relationships/betaTesters", HttpMethod.DELETE, post_data) + + def create_beta_group(self, app: App, name: str, publicLinkEnabled: bool = None, publicLinkLimit: int = None, publicLinkLimitEnabled: bool = None) -> BetaGroup: """ :reference:https://developer.apple.com/documentation/appstoreconnectapi/create_a_beta_group @@ -396,6 +431,10 @@ def read_beta_group_information(self, beta_group_ip): return self._get_resource(BetaGroup, beta_group_ip) def add_build_to_beta_group(self, beta_group_id, build_id): + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/add_builds_to_a_beta_group + :return: an BetaGroup resource + """ post_data = {'data': [{ 'id': build_id, 'type': 'builds'}]} self._api_call(BASE_API + "/v1/betaGroups/" + beta_group_id + "/relationships/builds", HttpMethod.POST, post_data) From e3f9be01f1ba4989d083d92fac03cb155c3b5e9a Mon Sep 17 00:00:00 2001 From: Dmytro Lutsyk Date: Fri, 4 Feb 2022 15:51:00 +0100 Subject: [PATCH 2/2] send_an_invitation_to_a_beta_tester --- appstoreconnect/api.py | 14 ++++++++++---- appstoreconnect/resources.py | 9 +++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/appstoreconnect/api.py b/appstoreconnect/api.py index 7a26f90..9dfa3ce 100644 --- a/appstoreconnect/api.py +++ b/appstoreconnect/api.py @@ -114,6 +114,7 @@ def _create_resource(self, Resource, args): url = "%s%s" % (BASE_API, Resource.endpoint) if self._debug: print(post_data) + payload = self._api_call(url, HttpMethod.POST, post_data) return Resource(payload.get('data', {}), self) @@ -248,6 +249,7 @@ def _api_call(self, url, method=HttpMethod.GET, post_data=None): else: raise APIError("Unknown HTTP method") + content_type = r.headers['content-type'] if content_type in [ "application/json", "application/vnd.api+json" ]: @@ -381,6 +383,13 @@ def add_beta_testers_to_a_beta_group(self, betaGroup: BetaGroup, betaTesters: li """ return self._create_resource(BetaGroup, locals()) + def send_an_invitation_to_a_beta_tester(self, app: App, betaTester: BetaTester): #betaTesters list of BetaTester + """ + :reference: https://developer.apple.com/documentation/appstoreconnectapi/send_an_invitation_to_a_beta_tester + :return: a BetaTester resource + """ + return self._create_resource(BetaTesterInvitation, locals()) + def remove_beta_testers_from_a_beta_group(self, betaGroup: BetaGroup, betaTesters: list): """ :reference: https://developer.apple.com/documentation/appstoreconnectapi/remove_beta_testers_from_a_beta_group @@ -393,10 +402,7 @@ def remove_beta_testers_from_a_beta_group(self, betaGroup: BetaGroup, betaTester for betaTester in betaTesters: data = { 'id': betaTester.id, 'type': 'betaTesters'} post_data["data"].append(data) - - return requests.delete(url=url, data = post_data, headers = headers) - #post_data = [{'data': [{ 'id': build_id, 'type': 'builds'}]}] - #return self._api_call(BASE_API + "/v1/betaGroups/" + betaGroup.id + "/relationships/betaTesters", HttpMethod.DELETE, post_data) + return requests.delete(url=url, data = json.dumps(post_data), headers = headers) def create_beta_group(self, app: App, name: str, publicLinkEnabled: bool = None, publicLinkLimit: int = None, publicLinkLimitEnabled: bool = None) -> BetaGroup: diff --git a/appstoreconnect/resources.py b/appstoreconnect/resources.py index 72b53e6..50d68dd 100644 --- a/appstoreconnect/resources.py +++ b/appstoreconnect/resources.py @@ -60,6 +60,15 @@ class BetaTester(Resource): } documentation = 'https://developer.apple.com/documentation/appstoreconnectapi/betatester' +class BetaTesterInvitation(Resource): + endpoint = '/v1/betaTesterInvitations' + type = 'betaTesterInvitations' + attributes = [] + relationships = { + 'app': {'multiple': False}, + 'betaTester': {'multiple': False} + } + documentation = 'https://developer.apple.com/documentation/appstoreconnectapi/BetaTesterInvitation' class BetaGroup(Resource): endpoint = '/v1/betaGroups'