From 30c888be613e5b7f290fc0ffa56f4b2f0c08692d Mon Sep 17 00:00:00 2001 From: Samuel Boyd Date: Thu, 26 Sep 2024 12:28:44 +0100 Subject: [PATCH] PA-757: Updating url for ssl on websites. by Piotr and Sam --- pythonanywhere_core/website.py | 18 +++++++++------- tests/test_website.py | 39 +++++++++++++++++++--------------- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/pythonanywhere_core/website.py b/pythonanywhere_core/website.py index a92b406..457ee29 100644 --- a/pythonanywhere_core/website.py +++ b/pythonanywhere_core/website.py @@ -20,7 +20,9 @@ class Website: Use :method: ``Website.delete`` to delete website. """ - api_endpoint = get_api_endpoint(username=getpass.getuser(), flavor="websites") + def __init__(self) -> None: + self.websites_base_url = get_api_endpoint(username=getpass.getuser(), flavor="websites") + self.domains_base_url = get_api_endpoint(username=getpass.getuser(), flavor="domains") def create(self, domain_name: str, command: str) -> dict: """Creates new website with ``domain_name`` and ``command``. @@ -30,7 +32,7 @@ def create(self, domain_name: str, command: str) -> dict: :returns: dictionary with created website info""" response = call_api( - self.api_endpoint, + self.websites_base_url, "post", json={ "domain_name": domain_name, @@ -48,7 +50,7 @@ def get(self, domain_name: str) -> dict: :return: dictionary with website info""" response = call_api( - f"{self.api_endpoint}{domain_name}/", + f"{self.websites_base_url}{domain_name}/", "get", ) return response.json() @@ -58,7 +60,7 @@ def list(self) -> list: :return: list of dictionaries with websites info""" response = call_api( - self.api_endpoint, + self.websites_base_url, "get", ) return response.json() @@ -69,7 +71,7 @@ def reload(self, domain_name: str) -> dict: :return: dictionary with response""" response = call_api( - f"{self.api_endpoint}{domain_name}/reload/", + f"{self.websites_base_url}{domain_name}/reload/", "post", ) return response.json() @@ -79,7 +81,7 @@ def auto_ssl(self, domain_name: str) -> dict: :param domain_name: domain name for website to apply the certificate to :return: dictionary with response""" response = call_api( - f"{self.api_endpoint}{domain_name}/ssl/", + f"{self.domains_base_url}{domain_name}/ssl/", "post", json={"cert_type": "letsencrypt-auto-renew"} ) @@ -87,7 +89,7 @@ def auto_ssl(self, domain_name: str) -> dict: def get_ssl_info(self, domain_name) -> dict: """Get SSL certificate info""" - url = f"{self.api_endpoint}{domain_name}/ssl/" + url = f"{self.domains_base_url}{domain_name}/ssl/" response = call_api(url, "get") if not response.ok: raise PythonAnywhereApiException(f"GET SSL details via API failed, got {response}:{response.text}") @@ -100,7 +102,7 @@ def delete(self, domain_name: str) -> dict: :return: empty dictionary""" call_api( - f"{self.api_endpoint}{domain_name}/", + f"{self.websites_base_url}{domain_name}/", "delete", ) return {} diff --git a/tests/test_website.py b/tests/test_website.py index f585da1..2d4d64e 100644 --- a/tests/test_website.py +++ b/tests/test_website.py @@ -13,10 +13,15 @@ @pytest.fixture -def webapps_base_url(): +def websites_base_url(): return get_api_endpoint(username=getpass.getuser(), flavor="websites") +@pytest.fixture +def domains_base_url(): + return get_api_endpoint(username=getpass.getuser(), flavor="domains") + + @pytest.fixture def domain_name(): return "foo.bar.com" @@ -53,10 +58,10 @@ def website_info(domain_name, command): def test_create_returns_json_with_created_website_info( - api_responses, webapps_base_url, website_info, domain_name, command + api_responses, websites_base_url, website_info, domain_name, command ): api_responses.add( - responses.POST, url=webapps_base_url, status=201, body=json.dumps(website_info) + responses.POST, url=websites_base_url, status=201, body=json.dumps(website_info) ) expected_request_body = json.dumps( {"domain_name": domain_name, "enabled": True, "webapp": {"command": command}} @@ -71,11 +76,11 @@ def test_create_returns_json_with_created_website_info( def test_get_returns_json_with_info_for_given_domain( - api_responses, webapps_base_url, website_info, domain_name + api_responses, websites_base_url, website_info, domain_name ): api_responses.add( responses.GET, - url=f"{webapps_base_url}{domain_name}/", + url=f"{websites_base_url}{domain_name}/", status=200, body=json.dumps(website_info) ) @@ -83,10 +88,10 @@ def test_get_returns_json_with_info_for_given_domain( assert Website().get(domain_name=domain_name) == website_info -def test_list_returns_json_with_info_for_all_websites(api_responses, webapps_base_url, website_info): +def test_list_returns_json_with_info_for_all_websites(api_responses, websites_base_url, website_info): api_responses.add( responses.GET, - url=webapps_base_url, + url=websites_base_url, status=200, body=json.dumps([website_info]) ) @@ -94,10 +99,10 @@ def test_list_returns_json_with_info_for_all_websites(api_responses, webapps_bas assert Website().list() == [website_info] -def test_reloads_website(api_responses, domain_name, webapps_base_url): +def test_reloads_website(api_responses, domain_name, websites_base_url): api_responses.add( responses.POST, - url=f"{webapps_base_url}{domain_name}/reload/", + url=f"{websites_base_url}{domain_name}/reload/", status=200, body=json.dumps({"status": "OK"}) ) @@ -105,20 +110,20 @@ def test_reloads_website(api_responses, domain_name, webapps_base_url): assert Website().reload(domain_name=domain_name) == {"status": "OK"} -def test_deletes_website(api_responses, domain_name, webapps_base_url): +def test_deletes_website(api_responses, domain_name, websites_base_url): api_responses.add( responses.DELETE, - url=f"{webapps_base_url}{domain_name}/", + url=f"{websites_base_url}{domain_name}/", status=204, ) assert Website().delete(domain_name=domain_name) == {} -def test_sets_lets_encrypt_cert(api_responses, domain_name, webapps_base_url): +def test_sets_lets_encrypt_cert(api_responses, domain_name, domains_base_url): api_responses.add( responses.POST, - url=f"{webapps_base_url}{domain_name}/ssl/", + url=f"{domains_base_url}{domain_name}/ssl/", body=json.dumps({"status": "OK"}), status=200 ) @@ -131,10 +136,10 @@ def test_sets_lets_encrypt_cert(api_responses, domain_name, webapps_base_url): } -def test_returns_ssl_info(api_responses, domain_name, webapps_base_url): +def test_returns_ssl_info(api_responses, domain_name, domains_base_url): api_responses.add( responses.GET, - url=f"{webapps_base_url}{domain_name}/ssl/", + url=f"{domains_base_url}{domain_name}/ssl/", body=json.dumps({"status": "OK"}), status=200 ) @@ -142,10 +147,10 @@ def test_returns_ssl_info(api_responses, domain_name, webapps_base_url): assert Website().get_ssl_info(domain_name=domain_name) == {"status": "OK"} -def test_raises_if_ssl_info_does_not_return_200(api_responses, domain_name, webapps_base_url): +def test_raises_if_ssl_info_does_not_return_200(api_responses, domain_name, domains_base_url): api_responses.add( responses.GET, - url=f"{webapps_base_url}{domain_name}/ssl/", + url=f"{domains_base_url}{domain_name}/ssl/", status=404, body="nope" )