Daftar Isi:

#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()