Skip to content

Commit bbd92e3

Browse files
committed
refactor API endpoints to streamline request handling; add logging for requests and responses; enhance meme management functionality
1 parent ec425be commit bbd92e3

File tree

8 files changed

+161
-219
lines changed

8 files changed

+161
-219
lines changed

endpoints/base_endpoint.py

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import os
22
import logging
33
from faker import Faker
4+
import requests
5+
from requests import Request
6+
from typing import Optional
7+
import rlogger
48

59
# import requests
610

@@ -9,10 +13,39 @@
913

1014

1115
class BaseEndpoint:
12-
url = "http://167.172.172.115:52355"
13-
response = None
14-
json = None
15-
fake = Faker()
16+
def __init__(self):
17+
self.url = "http://167.172.172.115:52355"
18+
self.request = None # Store the request
19+
self.response = None # Store the response
20+
self.fake = Faker()
21+
22+
def _send_request(
23+
self,
24+
method: str,
25+
endpoint: str,
26+
headers: Optional[dict] = None,
27+
**kwargs,
28+
) -> requests.Response:
29+
headers = self._set_default_headers(headers)
30+
url = self._build_endpoint_url(endpoint)
31+
32+
self.request = Request(
33+
method,
34+
url,
35+
headers=headers,
36+
**kwargs,
37+
)
38+
rlogger.requests_logging(self.request)
39+
40+
self.response = requests.request(
41+
method,
42+
url,
43+
headers=headers,
44+
**kwargs,
45+
)
46+
rlogger.response_logging(self.response)
47+
48+
return self.response
1649

1750
def _build_endpoint_url(
1851
self,
@@ -26,9 +59,9 @@ def _set_default_headers(
2659
headers=None,
2760
):
2861
"""Set default headers if not provided"""
29-
if headers is None:
30-
headers = self.headers
31-
return headers
62+
return (
63+
self._default_headers_with_authorization() if headers is None else headers
64+
)
3265

3366
def _generate_tags(
3467
self,

endpoints/delete_meme.py

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,30 @@
1+
import os
12
import requests
3+
from requests import Request
24
import allure
35
import logging
46
from faker import Faker
7+
from typing import Optional
58
from endpoints.base_endpoint import BaseEndpoint
6-
from loggers import apply_logging_decorators
79

810
# Initialize logger
911
logger = logging.getLogger(__name__)
1012

1113

12-
@apply_logging_decorators
1314
class DeleteMeme(BaseEndpoint):
14-
fake = Faker()
15-
response = None # Add this line to store the response
16-
endpoint_with_id = "/meme/{id}"
17-
1815
def __init__(self):
19-
self.headers = self._default_headers_with_authorization()
16+
super().__init__()
2017

2118
@allure.step("Delete name")
2219
def delete_meme_by_id(
2320
self,
2421
id: int,
2522
*,
2623
headers=None,
27-
endpoint_with_id="/meme/{id}",
2824
) -> requests.Response:
29-
headers = self._set_default_headers(headers)
30-
url = self._build_endpoint_url(endpoint_with_id.format(id=id))
31-
32-
self.response = requests.delete(
33-
url,
25+
self.response = self._send_request(
26+
"DELETE",
27+
f"/meme/{id}",
3428
headers=headers,
3529
)
3630
return self.response

endpoints/get_meme.py

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,29 @@
11
import os
22
import requests
3+
from requests import Request
34
import allure
45
import logging
56
from faker import Faker
67
from typing import Optional
78
from endpoints.base_endpoint import BaseEndpoint
8-
from loggers import apply_logging_decorators
99

1010
# Initialize logger and Faker
1111
logger = logging.getLogger(__name__)
1212

1313

14-
@apply_logging_decorators
1514
class GetMeme(BaseEndpoint):
16-
response = None # Store the response
17-
1815
def __init__(self):
19-
self.headers = self._default_headers_with_authorization()
16+
super().__init__()
2017

2118
@allure.step("Get all memes")
2219
def get_all_memes(
2320
self,
2421
headers=None,
2522
) -> requests.Response:
2623
"""Fetches all memes from the API."""
27-
headers = self._set_default_headers(headers)
28-
url = self._build_endpoint_url("/meme")
29-
30-
self.response = requests.get(
31-
url,
24+
self.response = self._send_request(
25+
"GET",
26+
"/meme",
3227
headers=headers,
3328
)
3429
return self.response
@@ -41,11 +36,9 @@ def get_meme_by_id(
4136
headers=None,
4237
) -> requests.Response:
4338
"""Get a meme by ID"""
44-
headers = self._set_default_headers(headers)
45-
url = self._build_endpoint_url(f"/meme/{id}")
46-
47-
self.response = requests.get(
48-
url,
39+
self.response = self._send_request(
40+
"GET",
41+
f"/meme/{id}",
4942
headers=headers,
5043
)
5144
return self.response

endpoints/post_meme.py

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,14 @@
55
from faker import Faker
66
from typing import Optional
77
from endpoints.base_endpoint import BaseEndpoint
8-
from loggers import apply_logging_decorators
98

109
# Initialize logger and Faker
1110
logger = logging.getLogger(__name__)
1211

1312

14-
@apply_logging_decorators
1513
class PostMeme(BaseEndpoint):
16-
response = None # Store the response
17-
meme_id = None # Store the meme id
18-
1914
def __init__(self):
20-
self.headers = self._default_headers_with_authorization()
15+
super().__init__()
2116

2217
@allure.step("Step name")
2318
def post_new_meme(
@@ -30,22 +25,18 @@ def post_new_meme(
3025
headers=None,
3126
) -> requests.Response:
3227
"""Make a POST request to the /meme endpoint"""
33-
text = text or self._generate_text()
34-
meme_url = url or self._generate_url()
35-
tags = tags or self._generate_tags()
36-
info = info or self._generate_picture_info()
37-
headers = self._set_default_headers(headers)
38-
endpoint_url = self._build_endpoint_url("/meme")
28+
json = {
29+
"text": text or self._generate_text(),
30+
"url": url or self._generate_url(),
31+
"tags": tags or self._generate_tags(),
32+
"info": info or self._generate_picture_info(),
33+
}
3934

40-
self.response = requests.post(
41-
endpoint_url,
35+
self.response = self._send_request(
36+
"POST",
37+
"/meme",
4238
headers=headers,
43-
json={
44-
"text": text,
45-
"url": meme_url,
46-
"tags": tags,
47-
"info": info,
48-
},
39+
json=json,
4940
)
5041
return self.response
5142

endpoints/put_meme.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import allure
33
import logging
44
from faker import Faker
5+
from typing import Optional
56
from endpoints.base_endpoint import BaseEndpoint
67

78
# Initialize logger
@@ -13,7 +14,28 @@ class PutMeme(BaseEndpoint):
1314
response = None # Add this line to store the response
1415

1516
@allure.step("Step name")
16-
def method_name(
17+
def put_meme_by_id(
1718
self,
19+
*,
20+
text: Optional[str] = None,
21+
url: Optional[str] = None,
22+
tags: Optional[list] = None,
23+
info: Optional[object] = None,
24+
headers=None,
1825
) -> requests.Response:
19-
pass
26+
"""Make a POST request to the /meme endpoint"""
27+
json = {
28+
"id": id,
29+
"text": text or self._generate_text(),
30+
"url": url or self._generate_url(),
31+
"tags": tags or self._generate_tags(),
32+
"info": info or self._generate_picture_info(),
33+
}
34+
35+
self.response = self._send_request(
36+
"POST",
37+
"/meme",
38+
headers=headers,
39+
json=json,
40+
)
41+
return self.response

0 commit comments

Comments
 (0)