Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
parkpow
GitHub Repository: parkpow/deep-license-plate-recognition
Path: blob/master/webhooks/webhook_reader.py
1072 views
1
import cgi
2
import json
3
import os
4
import urllib.parse
5
from http.server import BaseHTTPRequestHandler, HTTPServer
6
from json.decoder import JSONDecodeError
7
8
upload_to = "uploads"
9
10
11
class GetHandler(BaseHTTPRequestHandler):
12
def do_GET(self):
13
self.send_response(200)
14
self.end_headers()
15
self.wfile.write(b"Send a POST request instead.")
16
return
17
18
def do_POST(self):
19
self.send_response(200)
20
self.send_header("Content-type", "text/html")
21
self.end_headers()
22
ctype, pdict = cgi.parse_header(self.headers["Content-Type"])
23
if ctype == "multipart/form-data":
24
form = cgi.FieldStorage(
25
fp=self.rfile,
26
headers=self.headers,
27
environ={
28
"REQUEST_METHOD": "POST",
29
"CONTENT_TYPE": self.headers["Content-Type"],
30
},
31
)
32
# Get webhook content
33
json_data = form.getvalue("json")
34
# Get webhook file
35
if "upload" in form:
36
filename = form["upload"].filename
37
buffer = form["upload"].file.read()
38
if not os.path.exists(upload_to):
39
try:
40
os.makedirs(upload_to)
41
except OSError:
42
print("Error creating directory:", upload_to)
43
44
with open(f"./{upload_to}/{filename}", "wb") as fp:
45
print(f"Saving image to {filename}")
46
fp.write(buffer)
47
48
else:
49
raw_data = self.rfile.read(int(self.headers["content-length"])).decode(
50
"utf-8"
51
)
52
if raw_data.startswith("json="):
53
raw_data = raw_data[5:]
54
try:
55
decoded_data = urllib.parse.unquote(raw_data)
56
decoded_data = decoded_data.replace("+", " ")
57
json_data = json.loads(decoded_data)
58
except JSONDecodeError:
59
json_data = {}
60
print(json_data)
61
self.wfile.write(b"OK")
62
63
64
if __name__ == "__main__":
65
server = HTTPServer(("", 8001), GetHandler)
66
print("Starting server, use <Ctrl-C> to stop")
67
server.serve_forever()
68
69