from GetSchedulePackager import getSchedulePackager from postSelectAppointment import SelectAppointment import json import signal import sys from http.server import BaseHTTPRequestHandler, HTTPServer # Define request handler class RequestHandler(BaseHTTPRequestHandler): def do_GET(self): """Handle GET requests and route based on path""" if self.path == '/getAppointments': self._send_response(getSchedulePackager()) elif self.path == '/interview_data': self._send_response(doNothing()) # If you want to return an empty response else: self._send_error(404, "Not Found") def do_POST(self): """Handle POST requests to '/selectAppointment' or '/'""" content_length = int(self.headers['Content-Length']) post_data = self.rfile.read(content_length) # Try to parse JSON data from the request body try: json_data = json.loads(post_data.decode('utf-8')) except json.JSONDecodeError: self._send_error(400, "Invalid Request") return if self.path == '/selectAppointment': self._send_response(SelectAppointment(json_data)) # Use SelectAppointment directly elif self.path == '/': self._send_response(doNothing()) # Empty response for the root route else: self._send_error(404, "Not Found") def _send_response(self, res): """Send the response body with the given status code""" if isinstance(res, dict): # Ensure res has all the required keys body = res.get("body", "") # Default to empty string if no body is provided baseEncoded = res.get("isBase64ENcoded", "false") # Default to "false" if not provided status_code = res.get("statusCode", 200) # Default to 200 if no statusCode is provided # Convert body to string if it's not already if isinstance(body, dict): body = json.dumps(body) # If body is base64 encoded, we would handle that differently, but currently we treat all as 'false' response = { "statusCode": status_code, "isBase64Encoded": baseEncoded, "headers": { "Content-Type": "application/json", # Specify content type "X-IsBase64Encoded": baseEncoded # Indicating if the body is base64 encoded }, "body": body } # Send the status code and headers self.send_response(status_code) self.send_header("Content-Type", "application/json") self.end_headers() # Write the JSON response body, ensuring it's encoded to utf-8 self.wfile.write(json.dumps(response).encode('utf-8')) def _send_error(self, status_code=404, message="Not Found"): """Send error response with the same structure as normal responses""" res = { "statusCode": status_code, "body": json.dumps({"message": message}) } # Return the error response in the same format self._send_response(res) def doNothing(): """Return an empty JSON response""" return { "statusCode": 200, "isBase64ENcoded": "false", "body": json.dumps({"message": ""}) } # Graceful shutdown handler def signal_handler(sig, frame): print("\nShutting down server gracefully...") sys.exit(0) # Set up and start the server if __name__ == "__main__": # Register signal handler for graceful shutdown (e.g., Ctrl+C) signal.signal(signal.SIGINT, signal_handler) # Set the server address (localhost) and port (8080) server_address = ('', 8080) httpd = HTTPServer(server_address, RequestHandler) print("Server started on port 8080") try: # Start the server and listen for requests httpd.serve_forever() except KeyboardInterrupt: pass