Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Der-Henning
GitHub Repository: Der-Henning/tgtg
Path: blob/main/tests/tgtg_server.py
725 views
1
import argparse
2
import json
3
import logging
4
import random
5
from http.server import BaseHTTPRequestHandler, HTTPServer
6
from urllib.parse import urljoin
7
8
import requests
9
10
from tgtg_scanner.tgtg.tgtg_client import API_ITEM_ENDPOINT, BASE_URL
11
12
13
class RequestHandler(BaseHTTPRequestHandler):
14
def do_GET(self):
15
logging.info("GET request,\nPath: %s\nHeaders:\n%s\n", str(self.path), str(self.headers))
16
self.send_response(200)
17
self.send_header("Content-type", "text/html; charset=utf-8")
18
self.end_headers()
19
self.wfile.write("<h1>TGTG API test server</h1>".encode("utf-8"))
20
self.wfile.write(f"GET request for {self.path}".encode("utf-8"))
21
22
def do_POST(self):
23
content_length = int(self.headers["Content-Length"])
24
post_data = self.rfile.read(content_length)
25
logging.info(
26
"POST request,\nPath: %s\nHeaders:\n%s\nBody:\n%s\n",
27
str(self.path),
28
str(self.headers),
29
post_data.decode("utf-8"),
30
)
31
32
path = self.path[1:]
33
headers = self.headers
34
headers["Host"] = "apptoogoodtogo.com"
35
url = urljoin(BASE_URL, path)
36
response = requests.post(url, post_data, headers=headers)
37
38
response_data = response.content
39
if path.startswith(API_ITEM_ENDPOINT):
40
response_json = response.json()
41
for i in range(len(response_json.get("items"))):
42
new_avail = random.randint(0, 3)
43
response_json["items"][i]["items_available"] = new_avail
44
response_data = json.dumps(response_json).encode("utf-8")
45
46
logging.debug("POST response,\nBody:\n%s\n", response_data)
47
self.send_response(response.status_code)
48
self.send_header(
49
"Set-Cookie",
50
f"datadome={response.cookies.get('datadome')}; Domain=.local; Path=/",
51
)
52
self.end_headers()
53
self.wfile.write(response_data)
54
55
56
def run_server(port: int = 8080):
57
server_address = ("", port)
58
httpd = HTTPServer(server_address, RequestHandler)
59
logging.info("Starting httpd...")
60
try:
61
httpd.serve_forever()
62
except KeyboardInterrupt:
63
pass
64
httpd.server_close()
65
logging.info("Stopping httpd...")
66
67
68
def main():
69
parser = argparse.ArgumentParser(description="TGTG API test server")
70
parser.add_argument("-d", "--debug", action="store_true", help="activate debugging mode")
71
parser.add_argument("-p", "--port", type=int, default=8080)
72
args = parser.parse_args()
73
logging.basicConfig(level=logging.DEBUG if args.debug else logging.INFO)
74
run_server(args.port)
75
76
77
if __name__ == "__main__":
78
main()
79
80