def processMethod(self, method): parse = urllib.parse.urlparse(self.path) # Create an object for the request with method(post, get...), path, query, header and the file used to read the body request = Request(method, parse.path, parse.query, self.headers, self.rfile) # Route the request and get the response response = Router.route(request) # type: Response # Read the boyd as bytes body_as_bytes = bytes(response.body, 'UTF-8') # Set response code self.send_response(response.code) # Set header with the content type self.send_header('Content-type', response.mime_type) # Set the content length self.send_header('Content-Length', str(len(body_as_bytes))) self.end_headers() # Write the body and send the response self.wfile.write(body_as_bytes)
class RequestHandler(BaseHTTPRequestHandler): def __init__(self, request, client_address, server): get_routes = [ {'url': '/api/?$', 'controller': 'HomeController', 'action': 'getApi'}, {'url': '/api/books/?$', 'controller': 'BooksController', 'action': 'getBooks'}, {'url': '/api/books/([1-9]+d*)$', 'controller': 'BooksController', 'action': 'getBook'} ] post_routes = [ {'url': '/api/books/([1-9]+d*)$', 'controller': 'BooksController', 'action': 'postBook'} ] put_routes = [ {'url': '/api/books/?$', 'controller': 'BooksController', 'action': 'putBook'} ] delete_routes = [ {'url': '/api/books/([1-9]+d*)$', 'controller': 'BooksController', 'action': 'deleteBook'} ] self.router = Router(self) for route in get_routes: self.router.addGetRoute(route['url'], route['controller'], route['action']) for route in post_routes: self.router.addPostRoute(route['url'], route['controller'], route['action']) for route in put_routes: self.router.addPutRoute(route['url'], route['controller'], route['action']) for route in delete_routes: self.router.addDeleteRoute(route['url'], route['controller'], route['action']) BaseHTTPRequestHandler.__init__(self, request, client_address, server) def do_GET(self): self.router.route(self.path,"GET") def do_POST(self): self.router.route(self.path,"POST") def do_PUT(self): self.router.route(self.path,"PUT") def do_DELETE(self): self.router.route(self.path,"DELETE")
screenWidth = 900 screenHeight = 600 screen = pygame.display.set_mode((screenWidth, screenHeight)) pygame.display.set_caption("Pong") FPS = 60 clock = pygame.time.Clock() pages = [ "MainMenu", "Difficulty", "OnePlayerGameEasy", "OnePlayerGameMedium", "OnePlayerGameHard", "TwoPlayerGame", "Pause" ] router = Router(screen) page = router.route('MainMenu') pageToResume = None while True: page.update() page.draw() for event in pygame.event.get(): action = page.handleEvent(event) # | If the action is to change page if action in pages: if action == 'Pause': pageToResume = page page = router.route(action)
os.environ['SDL_VIDEO_CENTERED'] = '1' # | This centers the window pygame.init() screenWidth = 900 screenHeight = 600 screen = pygame.display.set_mode((screenWidth, screenHeight)) pygame.display.set_caption("Snake") FPS = 60 # | The FPS to use clock = pygame.time.Clock() pages = ["MainMenu", "Play", "Pause", "GameOver"] router = Router(screen) page = router.route("MainMenu") pageToResume = None while True: page.update() page.draw() for event in pygame.event.get(): action = page.handleEvent(event) if action in pages: if action == "Pause": page.pause() pageToResume = page page = router.route(action)
class Kernel(object): def __init__(self): # Basic setup self.__basepath = os.path.dirname( os.path.realpath(os.path.realpath( __file__ ) + '/../../' ) ) self.__router = Router() # Load container self.__container = self._create_container() # Setup logging if self.__container.has_service('log.handler'): self.__log_handler = self.__container.get_service('log.handler') else: self.__log_handler = NullHandler() self.__log_handler.push_thread() self.__logger = Logger('MiniMVC') self.__container.set_param('sys.log', self.__logger) # Import application sys.path.append(self.__basepath) import app self.__logger.info('Kernel started') def run(self, request): query_string = request.unparsed_uri self.__logger.info('Request: ' + query_string) route = self.__router.route(query_string) if route: self.__logger.info('Route matched: %s.%s(%s)' % (route['controller'], route['action'], route['params'])) self.__container.set_param('sys.matched_route', route) request.parameters = route['params'] res = ObjectFactory.instantiate_and_call(route['controller'], [self.__container], route['action'], request) else: self.__logger.warn('No matching route found for: ' + query_string) res = False # Shutdown logger and return self.__log_handler.pop_thread() # Return the local request log self.request_log = self.__container.get_service('log.test_handler').records return res def _create_container(self): container = ServiceContainer() container.set_param('sys.kernel', self) container.set_param('sys.container', container) container.set_param('sys.basepath', self.__basepath) container.set_param('sys.router', self.__router) #container.set_param('sys.log', self.__logger) loader = ServiceContainerLoader() loader.register_section_loader(DatabaseSectionLoader()) loader.register_section_loader(ServicesSectionLoader()) loader.register_section_loader(RoutesSectionLoader()) loader.load(container, self.__basepath + '/app/config/config.yml') return container def __str__(self): return "MiniMVC.Kernel" @property def container(self): return self.__container