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")
Example #3
0
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)
Example #4
0
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)
Example #5
0
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