Skip to content

Commit

Permalink
PA-757: Updating url for ssl on websites. by Piotr and Sam
Browse files Browse the repository at this point in the history
  • Loading branch information
SamBoyd committed Sep 26, 2024
1 parent 9d44159 commit 30c888b
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 25 deletions.
18 changes: 10 additions & 8 deletions pythonanywhere_core/website.py
Original file line number Diff line number Diff line change
Expand Up @@ -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``.
Expand All @@ -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,
Expand All @@ -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()
Expand All @@ -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()
Expand All @@ -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()
Expand All @@ -79,15 +81,15 @@ 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"}
)
return response.json()

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}")
Expand All @@ -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 {}
39 changes: 22 additions & 17 deletions tests/test_website.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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}}
Expand All @@ -71,54 +76,54 @@ 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)
)

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])
)

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"})
)

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
)
Expand All @@ -131,21 +136,21 @@ 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
)

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"
)

Expand Down

0 comments on commit 30c888b

Please sign in to comment.