(-: Fibergeek's Blog :-)
Inhoud blog
  • Python 2 of 3
  • IDA-python: GetStructureIdAt
  • Geslaagd in Microsoft's 70-680 examen
  • minibio: kort vervolg
  • miniboa: een voorbeeld
    Zoeken in blog

    Categorieën
  • Code: C/C++ (2)
  • Code: Powershell (1)
  • Code: Python (8)
  • Code: WPF (2)
  • Programmeren (5)
  • 05-08-2011
    Klik hier om een link te hebben waarmee u dit artikel later terug kunt lezen.BaseHTTPServer-voorbeeldcode in Python

    De code in deze blogpost is een refactoring van de BaseHTTPServer-code die je kan terug vinden op de Python-website: http://wiki.python.org/moin/BaseHttpServer. Waarom heb ik die code gerefactored? Omdat er van uit het Clean Code-oogpunt vanalles mis was met de originele versie, met name: duplicate code, functions with too many responsibilities, functions with mixed languages.

    Het programma zal een HTTP-server starten op poort 85 en zal ieder URL-pad als antwoord terug sturen. Vrij simpel, maar het vormt een goede basis voor uitgebreidere functionaliteit.

    import BaseHTTPServer

    HEADER__ContentTypeIsTextHtml = ("Content-type", "text/html")
    TextHtmlHeaders = [HEADER__ContentTypeIsTextHtml]

    def get_address_pair_using_local_host(port_number):
        return ("", port_number)

    class HTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
        def do_HEAD(self):
            self.send_response_and_headers(200, TextHtmlHeaders)
       
        def do_GET(self):
            self.send_response_and_headers(200, TextHtmlHeaders)
            self.send_path_as_answer()
       
        def send_headers(self, headers):
            for header in headers:
              self.send_header(header[0], header[1])
            self.end_headers()
       
        def send_response_and_headers(self, response_code, headers):
            self.send_response(response_code)
            self.send_headers(headers)
       
        def send_path_as_answer(self):
            self.wfile.write(self.build_path_answer_string())
       
        def build_path_answer_string(self):
            return "<html><p>Pad=%s</p></html>" % self.path

    class HTTPServer():
        def __init__(self, port_number):
            address = get_address_pair_using_local_host(port_number)
            self._TheServer = BaseHTTPServer.HTTPServer(address, HTTPRequestHandler)
       
        def serve_forever(self):
            self._TheServer.serve_forever()
       
        def serve_until_keyboard_interrupt(self):
            try:
                self.serve_forever()
            except KeyboardInterrupt:
                pass

    PORT_NUMBER_TO_USE = 85
    httpd = HTTPServer(PORT_NUMBER_TO_USE)
    httpd.serve_until_keyboard_interrupt()

    Een programma moet je kunnen lezen zoals een boek. De code moet duidelijk zijn, daarom hebben de functies in de bovenstaande programmacode slechts of 1 of 2 verantwoordelijkheden en iedere verantwoordelijkheid wordt vooraf duidelijk gemaakt door de functienaam.

    05-08-2011, 22:28 Geschreven door Fibergeek  


    Categorie:Code: Python
    Tags:Python,Clean Code,Refactoring,BaseHTTPServer
    Archief per week
  • 25/11-01/12 2013
  • 05/11-11/11 2012
  • 07/05-13/05 2012
  • 05/03-11/03 2012
  • 20/02-26/02 2012
  • 13/02-19/02 2012
  • 30/01-05/02 2012
  • 12/12-18/12 2011
  • 05/12-11/12 2011
  • 19/09-25/09 2011
  • 15/08-21/08 2011
  • 01/08-07/08 2011
  • 04/07-10/07 2011
  • 06/06-12/06 2011

    E-mail mij

    Druk op onderstaande knop om mij te e-mailen.


    Gastenboek

    Druk op onderstaande knop om een berichtje achter te laten in mijn gastenboek


    Blog als favoriet !


    Blog tegen de wet? Klik hier.
    Gratis blog op https://www.bloggen.be - Meer blogs