From 6dfadc92523a013db683706e89296b259e309052 Mon Sep 17 00:00:00 2001 From: Smartiqa Courses Date: Sun, 12 May 2019 23:09:09 +0300 Subject: [PATCH 1/7] SMART-24: HTTP requests script added --- scripts/lesson_1/lesson_1_http_requests.py | 55 ++++++++++++++++++ scripts/net_http_init.py | 66 ++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 scripts/lesson_1/lesson_1_http_requests.py create mode 100644 scripts/net_http_init.py diff --git a/scripts/lesson_1/lesson_1_http_requests.py b/scripts/lesson_1/lesson_1_http_requests.py new file mode 100644 index 0000000..d22a213 --- /dev/null +++ b/scripts/lesson_1/lesson_1_http_requests.py @@ -0,0 +1,55 @@ +import requests +from requests.exceptions import HTTPError +import json + +PROTOCOL = 'https' +HOST = 'httpbin.org' + + +class Http: + + def __init__(self, host, protocol, headers=None, auth_cred=None): + self.base_url = f'{protocol}://{host}' + self.headers = headers + self.auth_cred = auth_cred + + def send_request(self, method, relative_url, params=None, data=None): + url = ''.join([self.base_url, relative_url]) + result = None + try: + if method is 'GET': + result = self.get_request(url, params) + elif method is 'POST': + result = self.post_request(url, data) + else: + raise Exception(f"Request type is not defined! Provided type:{method}") + result.raise_for_status() + except HTTPError as err: + print(f'HTTP error occurred: {err}') + return Http.parse_result(result.text) + + def get_request(self, url, params): + return requests.get(url, params=params, headers=self.headers, auth=self.auth_cred) + + def post_request(self, url, data): + return requests.post(url, data=data, headers=self.headers, auth=self.auth_cred) + + @staticmethod + def parse_result(result): + return json.loads(result) if Http.is_json(result) else result + + @staticmethod + def is_json(str): + try: + json.loads(str) + return True + except ValueError: + return False + + +if __name__ == '__main__': + http = Http(HOST, PROTOCOL) + print(f'Sending HTTP requests to {http.base_url}...') + info = http.send_request('GET', '/get') + http.send_request('POST', '/post', data={'test_key': 'test_value'}) + print(f'HTTP requests to {http.base_url} are successful!') \ No newline at end of file diff --git a/scripts/net_http_init.py b/scripts/net_http_init.py new file mode 100644 index 0000000..267554e --- /dev/null +++ b/scripts/net_http_init.py @@ -0,0 +1,66 @@ +import requests +from requests.exceptions import HTTPError +import json + +PROTOCOL = 'http' +HOST = 'api.openweathermap.org' +API_PATH = '/data/2.5/weather' +API_KEY = '2ab106523eb046092f91d4c4c22af3f1' + + +class Http: + + def __init__(self, host, protocol, headers=None, auth_cred=None): + self.base_url = f'{protocol}://{host}' + self.headers = headers + self.auth_cred = auth_cred + + def send_request(self, method, relative_url, params=None, data=None): + url = ''.join([self.base_url, relative_url]) + result = None + try: + if method is 'GET': + result = self.get_request(url, params) + elif method is 'POST': + result = self.post_request(url, data) + elif method is 'PUT': + result = self.put_request() + elif method is 'DELETE': + result = self.delete_request() + else: + raise Exception(f"Request type is not defined! Provided type:{method}") + result.raise_for_status() + except HTTPError as err: + print(f'HTTP error occurred: {err}') + return Http.parse_result(result.text) + + def get_request(self, url, params): + return requests.get(url, params, headers=self.headers, auth=self.auth_cred) + + def post_request(self, url, data): + return requests.post(url, data, headers=self.headers, auth=self.auth_cred) + + def put_request(self): + pass + + def delete_request(self): + pass + + @staticmethod + def parse_result(result): + return json.loads(result) if Http.is_json(result) else result + + @staticmethod + def is_json(str): + try: + json.loads(str) + return True + except ValueError: + return False + + +if __name__ == '__main__': + http = Http(HOST, PROTOCOL) + print(f'Sending HTTP request to {http.base_url}...') + info = http.send_request('GET', API_PATH, {'q': 'Moscow', 'APPID': API_KEY}) + print(f'HTTP request to {http.base_url} is successful!') \ No newline at end of file From 511bcc05bb296fb6348660e5c33d335acd15a00a Mon Sep 17 00:00:00 2001 From: Smartiqa Courses Date: Wed, 15 May 2019 13:32:57 +0300 Subject: [PATCH 2/7] QA-16: API helper added --- ...son_1_http_requests.py => http_request.py} | 31 ++--- scripts/lesson_2/__init__.py | 0 scripts/lesson_2/github.py | 116 ++++++++++++++++++ scripts/lesson_2/http_request.py | 56 +++++++++ scripts/net_http.py | 66 ---------- scripts/net_http_init.py | 66 ---------- 6 files changed, 188 insertions(+), 147 deletions(-) rename scripts/lesson_1/{lesson_1_http_requests.py => http_request.py} (54%) create mode 100644 scripts/lesson_2/__init__.py create mode 100644 scripts/lesson_2/github.py create mode 100644 scripts/lesson_2/http_request.py delete mode 100644 scripts/net_http.py delete mode 100644 scripts/net_http_init.py diff --git a/scripts/lesson_1/lesson_1_http_requests.py b/scripts/lesson_1/http_request.py similarity index 54% rename from scripts/lesson_1/lesson_1_http_requests.py rename to scripts/lesson_1/http_request.py index d22a213..3cb8d7d 100644 --- a/scripts/lesson_1/lesson_1_http_requests.py +++ b/scripts/lesson_1/http_request.py @@ -2,37 +2,38 @@ from requests.exceptions import HTTPError import json -PROTOCOL = 'https' -HOST = 'httpbin.org' - class Http: - def __init__(self, host, protocol, headers=None, auth_cred=None): + def __init__(self, host, protocol, auth_cred=None): self.base_url = f'{protocol}://{host}' - self.headers = headers self.auth_cred = auth_cred - def send_request(self, method, relative_url, params=None, data=None): + def send_request(self, method, relative_url, headers=None, params=None, data=None, json=None): url = ''.join([self.base_url, relative_url]) result = None try: if method is 'GET': - result = self.get_request(url, params) + result = self.get_request(url, params, headers) elif method is 'POST': - result = self.post_request(url, data) + result = self.post_request(url, data, headers) + elif method is 'PATCH': + result = self.patch_request(url, json, headers) else: - raise Exception(f"Request type is not defined! Provided type:{method}") + raise Exception(f"Request type is not defined! Provided type: {method}") result.raise_for_status() except HTTPError as err: print(f'HTTP error occurred: {err}') return Http.parse_result(result.text) - def get_request(self, url, params): - return requests.get(url, params=params, headers=self.headers, auth=self.auth_cred) + def get_request(self, url, params, headers=None): + return requests.get(url, params=params, headers=headers, auth=self.auth_cred) + + def post_request(self, url, data, headers=None): + return requests.post(url, data=data, headers=headers, auth=self.auth_cred) - def post_request(self, url, data): - return requests.post(url, data=data, headers=self.headers, auth=self.auth_cred) + def patch_request(self, url, json, headers=None): + return requests.patch(url, json=json, headers=headers, auth=self.auth_cred) @staticmethod def parse_result(result): @@ -48,8 +49,8 @@ def is_json(str): if __name__ == '__main__': - http = Http(HOST, PROTOCOL) + http = Http('httpbin.org', 'https') print(f'Sending HTTP requests to {http.base_url}...') - info = http.send_request('GET', '/get') + http.send_request('GET', '/get') http.send_request('POST', '/post', data={'test_key': 'test_value'}) print(f'HTTP requests to {http.base_url} are successful!') \ No newline at end of file diff --git a/scripts/lesson_2/__init__.py b/scripts/lesson_2/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/scripts/lesson_2/github.py b/scripts/lesson_2/github.py new file mode 100644 index 0000000..449a063 --- /dev/null +++ b/scripts/lesson_2/github.py @@ -0,0 +1,116 @@ +from http_request import Http + +TEST_USER = 'smartiqa-test' +AUTH_TOKEN = '606ceeb93e6f8a771040abafb46258a762bab277' +TEST_REPO = 'test_repository_2' +TEST_ISSUE_NUM = 3 +TEST_COMMIT_SHA = '063b6dde79957b9f34a0a5f74f4febe0e34cbba5' + + +class API: + + HOST = 'api.github.com' + PROTOCOL = 'https' + + def __init__(self): + self.http = Http(self.HOST, self.PROTOCOL) + + def call(self, method, relative_url, headers=None, json=None): + return self.http.send_request(method, relative_url, headers=headers, json=json) + + +class User: + + def __init__(self, auth_token=None): + self.api = API() + # Majority of the API requests need Authentication Token but not all + if auth_token is not None: + self.headers = {'Authorization': f'token {auth_token}'} + + # ------ Get User info without Authentication ------ + def get(self, user_name): + return self.api.call('GET', f'/users/{user_name}') + + def get_bio(self, user_name): + return self.get(user_name)['bio'] + + # -- Get additional User info with Authentication -- + def get_authenticated(self): + return self.api.call('GET', f'/user', headers=self.headers) + + # --------------- Update User info ----------------- + def update_bio(self, new_bio): + return self.api.call('PATCH', f'/user', headers=self.headers, json={'bio': new_bio}) + + +class Issue: + + def __init__(self, auth_token): + self.api = API() + self.headers = {'Authorization': f'token {auth_token}'} + + # ------- List Issues ------------- + def list(self): + return self.api.call('GET', '/issues', headers=self.headers) + + def list_for_repository(self, owner, repo): + return self.api.call('GET', f'/repos/{owner}/{repo}/issues', headers=self.headers) + + # ------- Get Issue info ---------- + def get(self, owner, repo, number): + return self.api.call('GET', f'/repos/{owner}/{repo}/issues/{number}', headers=self.headers) + + # ------- Edit Issues ------------- + def edit_title(self, owner, repo, number, new_title): + return self._edit(owner, repo, number, json={'title': new_title}) + + def edit_body(self, owner, repo, number, new_body): + return self._edit(owner, repo, number, json={'body': new_body}) + # --------------------------------- + + def _edit(self, owner, repo, number, json): + return self.api.call('PATCH', f'/repos/{owner}/{repo}/issues/{number}', headers=self.headers, json=json) + + +class Repository: + + def __init__(self): + self.api = API() + + # ------- Work with Branches ------------- + def list_branches(self, owner, repo): + return self.api.call('GET', f'/repos/{owner}/{repo}/branches') + + # ------- Work with Commits -------------- + def list_commits(self, owner, repo, branch='master'): + return self.api.call('GET', f'/repos/{owner}/{repo}/commits', json={'sha': branch}) + + def get_commit(self, owner, repo, commit_sha): + return self.api.call('GET', f'/repos/{owner}/{repo}/commits/{commit_sha}') + + def get_commit_author(self, owner, repo, commit_sha): + return self.get_commit(owner, repo, commit_sha)['author'] + + +if __name__ == '__main__': + # Check GitHub User API functionality + user = User(AUTH_TOKEN) + user.get(TEST_USER) + user.get_bio(TEST_USER) + user.get_authenticated() + user.update_bio('New Test bio') + + # Check GitHub Issue API functionality + issue = Issue(AUTH_TOKEN) + issue.list() + issue.list_for_repository(TEST_USER, TEST_REPO) + issue.get(TEST_USER, TEST_REPO, TEST_ISSUE_NUM) + issue.edit_title(TEST_USER, TEST_REPO, TEST_ISSUE_NUM, 'Smartiqa Test issue 3') + issue.edit_body(TEST_USER, TEST_REPO, TEST_ISSUE_NUM, 'Smartiqa Test body 3') + + # Check GitHub Repository API functionality + repo = Repository() + info = repo.list_branches(TEST_USER, TEST_REPO) + repo.list_commits(TEST_USER, TEST_REPO) + repo.get_commit(TEST_USER, TEST_REPO, TEST_COMMIT_SHA) + repo.get_commit_author(TEST_USER, TEST_REPO, TEST_COMMIT_SHA) \ No newline at end of file diff --git a/scripts/lesson_2/http_request.py b/scripts/lesson_2/http_request.py new file mode 100644 index 0000000..3cb8d7d --- /dev/null +++ b/scripts/lesson_2/http_request.py @@ -0,0 +1,56 @@ +import requests +from requests.exceptions import HTTPError +import json + + +class Http: + + def __init__(self, host, protocol, auth_cred=None): + self.base_url = f'{protocol}://{host}' + self.auth_cred = auth_cred + + def send_request(self, method, relative_url, headers=None, params=None, data=None, json=None): + url = ''.join([self.base_url, relative_url]) + result = None + try: + if method is 'GET': + result = self.get_request(url, params, headers) + elif method is 'POST': + result = self.post_request(url, data, headers) + elif method is 'PATCH': + result = self.patch_request(url, json, headers) + else: + raise Exception(f"Request type is not defined! Provided type: {method}") + result.raise_for_status() + except HTTPError as err: + print(f'HTTP error occurred: {err}') + return Http.parse_result(result.text) + + def get_request(self, url, params, headers=None): + return requests.get(url, params=params, headers=headers, auth=self.auth_cred) + + def post_request(self, url, data, headers=None): + return requests.post(url, data=data, headers=headers, auth=self.auth_cred) + + def patch_request(self, url, json, headers=None): + return requests.patch(url, json=json, headers=headers, auth=self.auth_cred) + + @staticmethod + def parse_result(result): + return json.loads(result) if Http.is_json(result) else result + + @staticmethod + def is_json(str): + try: + json.loads(str) + return True + except ValueError: + return False + + +if __name__ == '__main__': + http = Http('httpbin.org', 'https') + print(f'Sending HTTP requests to {http.base_url}...') + http.send_request('GET', '/get') + http.send_request('POST', '/post', data={'test_key': 'test_value'}) + print(f'HTTP requests to {http.base_url} are successful!') \ No newline at end of file diff --git a/scripts/net_http.py b/scripts/net_http.py deleted file mode 100644 index 267554e..0000000 --- a/scripts/net_http.py +++ /dev/null @@ -1,66 +0,0 @@ -import requests -from requests.exceptions import HTTPError -import json - -PROTOCOL = 'http' -HOST = 'api.openweathermap.org' -API_PATH = '/data/2.5/weather' -API_KEY = '2ab106523eb046092f91d4c4c22af3f1' - - -class Http: - - def __init__(self, host, protocol, headers=None, auth_cred=None): - self.base_url = f'{protocol}://{host}' - self.headers = headers - self.auth_cred = auth_cred - - def send_request(self, method, relative_url, params=None, data=None): - url = ''.join([self.base_url, relative_url]) - result = None - try: - if method is 'GET': - result = self.get_request(url, params) - elif method is 'POST': - result = self.post_request(url, data) - elif method is 'PUT': - result = self.put_request() - elif method is 'DELETE': - result = self.delete_request() - else: - raise Exception(f"Request type is not defined! Provided type:{method}") - result.raise_for_status() - except HTTPError as err: - print(f'HTTP error occurred: {err}') - return Http.parse_result(result.text) - - def get_request(self, url, params): - return requests.get(url, params, headers=self.headers, auth=self.auth_cred) - - def post_request(self, url, data): - return requests.post(url, data, headers=self.headers, auth=self.auth_cred) - - def put_request(self): - pass - - def delete_request(self): - pass - - @staticmethod - def parse_result(result): - return json.loads(result) if Http.is_json(result) else result - - @staticmethod - def is_json(str): - try: - json.loads(str) - return True - except ValueError: - return False - - -if __name__ == '__main__': - http = Http(HOST, PROTOCOL) - print(f'Sending HTTP request to {http.base_url}...') - info = http.send_request('GET', API_PATH, {'q': 'Moscow', 'APPID': API_KEY}) - print(f'HTTP request to {http.base_url} is successful!') \ No newline at end of file diff --git a/scripts/net_http_init.py b/scripts/net_http_init.py deleted file mode 100644 index 267554e..0000000 --- a/scripts/net_http_init.py +++ /dev/null @@ -1,66 +0,0 @@ -import requests -from requests.exceptions import HTTPError -import json - -PROTOCOL = 'http' -HOST = 'api.openweathermap.org' -API_PATH = '/data/2.5/weather' -API_KEY = '2ab106523eb046092f91d4c4c22af3f1' - - -class Http: - - def __init__(self, host, protocol, headers=None, auth_cred=None): - self.base_url = f'{protocol}://{host}' - self.headers = headers - self.auth_cred = auth_cred - - def send_request(self, method, relative_url, params=None, data=None): - url = ''.join([self.base_url, relative_url]) - result = None - try: - if method is 'GET': - result = self.get_request(url, params) - elif method is 'POST': - result = self.post_request(url, data) - elif method is 'PUT': - result = self.put_request() - elif method is 'DELETE': - result = self.delete_request() - else: - raise Exception(f"Request type is not defined! Provided type:{method}") - result.raise_for_status() - except HTTPError as err: - print(f'HTTP error occurred: {err}') - return Http.parse_result(result.text) - - def get_request(self, url, params): - return requests.get(url, params, headers=self.headers, auth=self.auth_cred) - - def post_request(self, url, data): - return requests.post(url, data, headers=self.headers, auth=self.auth_cred) - - def put_request(self): - pass - - def delete_request(self): - pass - - @staticmethod - def parse_result(result): - return json.loads(result) if Http.is_json(result) else result - - @staticmethod - def is_json(str): - try: - json.loads(str) - return True - except ValueError: - return False - - -if __name__ == '__main__': - http = Http(HOST, PROTOCOL) - print(f'Sending HTTP request to {http.base_url}...') - info = http.send_request('GET', API_PATH, {'q': 'Moscow', 'APPID': API_KEY}) - print(f'HTTP request to {http.base_url} is successful!') \ No newline at end of file From d5c3b49938c96d1f8dc62528cab676a73c0d5564 Mon Sep 17 00:00:00 2001 From: Smartiqa Courses Date: Wed, 15 May 2019 22:44:07 +0300 Subject: [PATCH 3/7] Unnecessary info deleted --- scripts/lesson_2/github.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/lesson_2/github.py b/scripts/lesson_2/github.py index 449a063..83ce8af 100644 --- a/scripts/lesson_2/github.py +++ b/scripts/lesson_2/github.py @@ -110,7 +110,7 @@ def get_commit_author(self, owner, repo, commit_sha): # Check GitHub Repository API functionality repo = Repository() - info = repo.list_branches(TEST_USER, TEST_REPO) + repo.list_branches(TEST_USER, TEST_REPO) repo.list_commits(TEST_USER, TEST_REPO) repo.get_commit(TEST_USER, TEST_REPO, TEST_COMMIT_SHA) repo.get_commit_author(TEST_USER, TEST_REPO, TEST_COMMIT_SHA) \ No newline at end of file From dca1af649852e6ecc18406f79ac1dcf78c1df30d Mon Sep 17 00:00:00 2001 From: Smartiqa Courses Date: Wed, 15 May 2019 22:19:55 +0300 Subject: [PATCH 4/7] QA-37: Auth token updated --- scripts/lesson_1/http_request.py | 15 +++++++-------- scripts/lesson_2/github.py | 4 +++- scripts/lesson_2/http_request.py | 15 +++++++-------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/scripts/lesson_1/http_request.py b/scripts/lesson_1/http_request.py index 3cb8d7d..c8ceda9 100644 --- a/scripts/lesson_1/http_request.py +++ b/scripts/lesson_1/http_request.py @@ -5,9 +5,8 @@ class Http: - def __init__(self, host, protocol, auth_cred=None): + def __init__(self, host, protocol): self.base_url = f'{protocol}://{host}' - self.auth_cred = auth_cred def send_request(self, method, relative_url, headers=None, params=None, data=None, json=None): url = ''.join([self.base_url, relative_url]) @@ -26,14 +25,14 @@ def send_request(self, method, relative_url, headers=None, params=None, data=Non print(f'HTTP error occurred: {err}') return Http.parse_result(result.text) - def get_request(self, url, params, headers=None): - return requests.get(url, params=params, headers=headers, auth=self.auth_cred) + def get_request(self, url, params, headers): + return requests.get(url, params=params, headers=headers) - def post_request(self, url, data, headers=None): - return requests.post(url, data=data, headers=headers, auth=self.auth_cred) + def post_request(self, url, data, headers): + return requests.post(url, data=data, headers=headers) - def patch_request(self, url, json, headers=None): - return requests.patch(url, json=json, headers=headers, auth=self.auth_cred) + def patch_request(self, url, json, headers): + return requests.patch(url, json=json, headers=headers) @staticmethod def parse_result(result): diff --git a/scripts/lesson_2/github.py b/scripts/lesson_2/github.py index 83ce8af..3c579aa 100644 --- a/scripts/lesson_2/github.py +++ b/scripts/lesson_2/github.py @@ -1,7 +1,9 @@ from http_request import Http TEST_USER = 'smartiqa-test' -AUTH_TOKEN = '606ceeb93e6f8a771040abafb46258a762bab277' +# GitHub restricts pushing Authentication Token to public repo +# That's why it's necessary to update it with valid token before running +AUTH_TOKEN = '' TEST_REPO = 'test_repository_2' TEST_ISSUE_NUM = 3 TEST_COMMIT_SHA = '063b6dde79957b9f34a0a5f74f4febe0e34cbba5' diff --git a/scripts/lesson_2/http_request.py b/scripts/lesson_2/http_request.py index 3cb8d7d..c8ceda9 100644 --- a/scripts/lesson_2/http_request.py +++ b/scripts/lesson_2/http_request.py @@ -5,9 +5,8 @@ class Http: - def __init__(self, host, protocol, auth_cred=None): + def __init__(self, host, protocol): self.base_url = f'{protocol}://{host}' - self.auth_cred = auth_cred def send_request(self, method, relative_url, headers=None, params=None, data=None, json=None): url = ''.join([self.base_url, relative_url]) @@ -26,14 +25,14 @@ def send_request(self, method, relative_url, headers=None, params=None, data=Non print(f'HTTP error occurred: {err}') return Http.parse_result(result.text) - def get_request(self, url, params, headers=None): - return requests.get(url, params=params, headers=headers, auth=self.auth_cred) + def get_request(self, url, params, headers): + return requests.get(url, params=params, headers=headers) - def post_request(self, url, data, headers=None): - return requests.post(url, data=data, headers=headers, auth=self.auth_cred) + def post_request(self, url, data, headers): + return requests.post(url, data=data, headers=headers) - def patch_request(self, url, json, headers=None): - return requests.patch(url, json=json, headers=headers, auth=self.auth_cred) + def patch_request(self, url, json, headers): + return requests.patch(url, json=json, headers=headers) @staticmethod def parse_result(result): From 18f68eb2d7dee8b3228a8a98770ec1c938b8596c Mon Sep 17 00:00:00 2001 From: Smartiqa Courses Date: Wed, 15 May 2019 22:28:35 +0300 Subject: [PATCH 5/7] Lesson 1 changed --- scripts/lesson_1/http_request.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/scripts/lesson_1/http_request.py b/scripts/lesson_1/http_request.py index c8ceda9..9764ae8 100644 --- a/scripts/lesson_1/http_request.py +++ b/scripts/lesson_1/http_request.py @@ -16,6 +16,10 @@ def send_request(self, method, relative_url, headers=None, params=None, data=Non result = self.get_request(url, params, headers) elif method is 'POST': result = self.post_request(url, data, headers) + elif method is 'PUT': + result = self.put_request(url, data, headers) + elif method is 'DELETE': + result = self.delete_request(url, headers) elif method is 'PATCH': result = self.patch_request(url, json, headers) else: @@ -31,6 +35,12 @@ def get_request(self, url, params, headers): def post_request(self, url, data, headers): return requests.post(url, data=data, headers=headers) + def put_request(self, url, data, headers): + return requests.put(url, data=data, headers=headers) + + def delete_request(self, url, headers): + return requests.delete(url, headers=headers) + def patch_request(self, url, json, headers): return requests.patch(url, json=json, headers=headers) @@ -52,4 +62,7 @@ def is_json(str): print(f'Sending HTTP requests to {http.base_url}...') http.send_request('GET', '/get') http.send_request('POST', '/post', data={'test_key': 'test_value'}) + http.send_request('PUT', '/put', data={'test_key': 'test_value'}) + http.send_request('PATCH', '/patch', data={'test_key': 'test_value'}) + http.send_request('DELETE', '/delete') print(f'HTTP requests to {http.base_url} are successful!') \ No newline at end of file From 9f0f2fba852921256cc5172e9c35b3eff67760aa Mon Sep 17 00:00:00 2001 From: Smartiqa Courses Date: Wed, 15 May 2019 23:29:26 +0300 Subject: [PATCH 6/7] Lesson1 and Lesson2 are ready --- scripts/lesson_1/http_request.py | 18 ------------------ scripts/lesson_2/github.py | 29 +---------------------------- 2 files changed, 1 insertion(+), 46 deletions(-) diff --git a/scripts/lesson_1/http_request.py b/scripts/lesson_1/http_request.py index 9764ae8..4ea19b5 100644 --- a/scripts/lesson_1/http_request.py +++ b/scripts/lesson_1/http_request.py @@ -16,12 +16,6 @@ def send_request(self, method, relative_url, headers=None, params=None, data=Non result = self.get_request(url, params, headers) elif method is 'POST': result = self.post_request(url, data, headers) - elif method is 'PUT': - result = self.put_request(url, data, headers) - elif method is 'DELETE': - result = self.delete_request(url, headers) - elif method is 'PATCH': - result = self.patch_request(url, json, headers) else: raise Exception(f"Request type is not defined! Provided type: {method}") result.raise_for_status() @@ -35,15 +29,6 @@ def get_request(self, url, params, headers): def post_request(self, url, data, headers): return requests.post(url, data=data, headers=headers) - def put_request(self, url, data, headers): - return requests.put(url, data=data, headers=headers) - - def delete_request(self, url, headers): - return requests.delete(url, headers=headers) - - def patch_request(self, url, json, headers): - return requests.patch(url, json=json, headers=headers) - @staticmethod def parse_result(result): return json.loads(result) if Http.is_json(result) else result @@ -62,7 +47,4 @@ def is_json(str): print(f'Sending HTTP requests to {http.base_url}...') http.send_request('GET', '/get') http.send_request('POST', '/post', data={'test_key': 'test_value'}) - http.send_request('PUT', '/put', data={'test_key': 'test_value'}) - http.send_request('PATCH', '/patch', data={'test_key': 'test_value'}) - http.send_request('DELETE', '/delete') print(f'HTTP requests to {http.base_url} are successful!') \ No newline at end of file diff --git a/scripts/lesson_2/github.py b/scripts/lesson_2/github.py index 3c579aa..37ef4b1 100644 --- a/scripts/lesson_2/github.py +++ b/scripts/lesson_2/github.py @@ -74,26 +74,6 @@ def _edit(self, owner, repo, number, json): return self.api.call('PATCH', f'/repos/{owner}/{repo}/issues/{number}', headers=self.headers, json=json) -class Repository: - - def __init__(self): - self.api = API() - - # ------- Work with Branches ------------- - def list_branches(self, owner, repo): - return self.api.call('GET', f'/repos/{owner}/{repo}/branches') - - # ------- Work with Commits -------------- - def list_commits(self, owner, repo, branch='master'): - return self.api.call('GET', f'/repos/{owner}/{repo}/commits', json={'sha': branch}) - - def get_commit(self, owner, repo, commit_sha): - return self.api.call('GET', f'/repos/{owner}/{repo}/commits/{commit_sha}') - - def get_commit_author(self, owner, repo, commit_sha): - return self.get_commit(owner, repo, commit_sha)['author'] - - if __name__ == '__main__': # Check GitHub User API functionality user = User(AUTH_TOKEN) @@ -108,11 +88,4 @@ def get_commit_author(self, owner, repo, commit_sha): issue.list_for_repository(TEST_USER, TEST_REPO) issue.get(TEST_USER, TEST_REPO, TEST_ISSUE_NUM) issue.edit_title(TEST_USER, TEST_REPO, TEST_ISSUE_NUM, 'Smartiqa Test issue 3') - issue.edit_body(TEST_USER, TEST_REPO, TEST_ISSUE_NUM, 'Smartiqa Test body 3') - - # Check GitHub Repository API functionality - repo = Repository() - repo.list_branches(TEST_USER, TEST_REPO) - repo.list_commits(TEST_USER, TEST_REPO) - repo.get_commit(TEST_USER, TEST_REPO, TEST_COMMIT_SHA) - repo.get_commit_author(TEST_USER, TEST_REPO, TEST_COMMIT_SHA) \ No newline at end of file + issue.edit_body(TEST_USER, TEST_REPO, TEST_ISSUE_NUM, 'Smartiqa Test body 3') \ No newline at end of file From fbe12f327c8e75b1ba66d8a54f7999df894de37a Mon Sep 17 00:00:00 2001 From: smartiqa <42942364+smartiqa@users.noreply.github.com> Date: Sun, 2 Jun 2019 23:39:51 +0300 Subject: [PATCH 7/7] Update http_request.py --- scripts/lesson_1/http_request.py | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/scripts/lesson_1/http_request.py b/scripts/lesson_1/http_request.py index 4ea19b5..4934d29 100644 --- a/scripts/lesson_1/http_request.py +++ b/scripts/lesson_1/http_request.py @@ -1,13 +1,13 @@ import requests from requests.exceptions import HTTPError import json - - + + class Http: - + def __init__(self, host, protocol): self.base_url = f'{protocol}://{host}' - + def send_request(self, method, relative_url, headers=None, params=None, data=None, json=None): url = ''.join([self.base_url, relative_url]) result = None @@ -16,23 +16,33 @@ def send_request(self, method, relative_url, headers=None, params=None, data=Non result = self.get_request(url, params, headers) elif method is 'POST': result = self.post_request(url, data, headers) + elif method is 'PUT': + result = self.post_request(url, data, headers) + elif method is 'DELETE': + result = self.post_request(url, data, headers) else: raise Exception(f"Request type is not defined! Provided type: {method}") result.raise_for_status() except HTTPError as err: print(f'HTTP error occurred: {err}') return Http.parse_result(result.text) - + def get_request(self, url, params, headers): return requests.get(url, params=params, headers=headers) - + + def post_request(self, url, data, headers): + return requests.post(url, data=data, headers=headers) + def post_request(self, url, data, headers): return requests.post(url, data=data, headers=headers) - + + def post_request(self, url, data, headers): + return requests.post(url, data=data, headers=headers) + @staticmethod def parse_result(result): return json.loads(result) if Http.is_json(result) else result - + @staticmethod def is_json(str): try: @@ -40,11 +50,11 @@ def is_json(str): return True except ValueError: return False - - + + if __name__ == '__main__': http = Http('httpbin.org', 'https') print(f'Sending HTTP requests to {http.base_url}...') http.send_request('GET', '/get') http.send_request('POST', '/post', data={'test_key': 'test_value'}) - print(f'HTTP requests to {http.base_url} are successful!') \ No newline at end of file +print(f'HTTP requests to {http.base_url} are successful!')