#python to excel
import os
from openpyxl import Workbook, load_workbook
class Excel:
def __init__(self, fileName=str, headers=[]):
self.fileName = fileName + '.xlsx'
self.headers = headers
if os.path.exists(self.fileName):
self.workbook = load_workbook(self.fileName)
self.worksheet = self.workbook.active
else:
self.workbook = Workbook()
self.worksheet = self.workbook.active
self.worksheet.append(self.headers)
self.workbook.save(self.fileName)
def _save(self):
self.workbook.save(self.fileName)
def create(self, data):
self.worksheet.append(data)
self._save()
def update(self, id, data):
found = False
for index, row in enumerate(self.worksheet.iter_rows(min_row=2, max_row=self.worksheet.max_row, values_only=False), start=2):
if int(row[0].value) == id:
for col_index in range(len(self.headers)):
row[col_index].value = data[col_index]
found = True
self._save()
break
return {"success": found, "message": "Data updated" if found else "Data not found"}
def delete(self, id):
for index, row in enumerate(self.worksheet.iter_rows(min_row=2, max_row=self.worksheet.max_row, values_only=False), start=2):
if int(row[0].value) == id:
self.worksheet.delete_rows(index)
self._save()
return {"success": True, "message": "Data deleted"}
return {"success": False, "message": "Data not found"}
def read(self):
data=[]
for row in self.worksheet.iter_rows(min_row=2,max_row=self.worksheet.max_row,values_only=True):
obj=dict(zip(self.headers,row))
data.append(obj)
return data
#http server dengah python
from sheet import Excel
from http.server import SimpleHTTPRequestHandler, HTTPServer
from urllib.parse import urlparse, parse_qs
import json
class MyHandler(SimpleHTTPRequestHandler):
def _send_response(self, data, status=200):
self.send_response(status)
self.send_header("Content-type", "application/json")
self.end_headers()
self.wfile.write(json.dumps(data).encode())
def do_GET(self):
if self.path == "/api/hello":
self.send_response(200)
self.send_header("Content-type", "application/json")
self.end_headers()
self.wfile.write(b'{"message": "Hello, World!"}')
else:
self.send_response(404)
self.end_headers()
self.wfile.write(b'{"error": "Not Found"}')
def do_POST(self):
if self.path == "/api/create":
content_length = int(self.headers['Content-Length'])
body = self.rfile.read(content_length)
try:
data = json.loads(body.decode('utf-8'))
response = {"status": "success", "data": data}
excel = Excel(fileName="data", headers=['uuid','name','age'])
excel.create(list(data.values()))
self._send_response(response)
except json.JSONDecodeError:
self._send_response({"error": "Invalid JSON format"}, 400)
else:
self._send_response({"error": "Not Found"}, 404)
def do_GET(self):
if self.path == "/api/read":
excel = Excel(fileName="data", headers=['uuid','name','age'])
data = excel.read()
self._send_response(data)
else:
self._send_response({"error": "Not Found"}, 404)
def do_DELETE(self):
parsed_url = urlparse(self.path) # Parsing URL
if parsed_url.path == "/api/delete":
query_params = parse_qs(parsed_url.query)
excel = Excel(fileName="data", headers=['uuid','name','age'])
data = excel.delete(query_params['uuid'][0])
self._send_response(data)
else:
self._send_response({"error": "Not Found"}, 404)
server = HTTPServer(("0.0.0.0", 3333), MyHandler)
print("Server running on port 3333...")
server.serve_forever()