Web based Jalousie control.

wsgi_server.py 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. from wsgiref.simple_server import make_server, demo_app
  2. import time
  3. from urllib.parse import urlparse
  4. from io import StringIO
  5. HOST_NAME = 'localhost'
  6. PORT_NUMBER = 6666
  7. def handle_html_file_request(filename):
  8. if filename.startswith('/'):
  9. filename = filename[1:]
  10. data = open(filename).read()
  11. #return [data.encode("utf-8")]
  12. return [data]
  13. def handle_frontpage():
  14. return handle_html_file_request('index.html')
  15. #return ["Hello World".encode("utf-8")]
  16. def HandleError( PATH_INFO ):
  17. stdout = StringIO()
  18. print("requested site \"{}\" not found".format(PATH_INFO), file=stdout)
  19. print(file=stdout)
  20. print("time: {}".format(time.asctime()), file=stdout)
  21. return [stdout.getvalue().encode("utf-8")]
  22. def simple_webserver_app(environ, start_response):
  23. PATH_INFO = environ['PATH_INFO']
  24. parsed_path = urlparse(PATH_INFO)
  25. if environ['REQUEST_METHOD'] == 'GET' :
  26. start_response("200 OK", [('Content-Type','text/plain; charset=utf-8')])
  27. if PATH_INFO=='/' or PATH_INFO=='':
  28. return handle_frontpage()
  29. elif PATH_INFO.endswith('.html'):
  30. return handle_html_file_request(PATH_INFO)
  31. else:
  32. return HandleError(PATH_INFO)
  33. else:
  34. assert(0)
  35. pass
  36. if __name__ == '__main__':
  37. httpd = make_server(HOST_NAME,PORT_NUMBER,demo_app)
  38. #httpd = make_server(HOST_NAME,PORT_NUMBER,simple_webserver_app)
  39. print('{} http Server started - http://{}:{}'.format(time.asctime(), HOST_NAME, PORT_NUMBER))
  40. try:
  41. httpd.serve_forever()
  42. except KeyboardInterrupt:
  43. pass
  44. httpd.close()
  45. print('{} http Server started - {}:{}'.format(time.asctime(), HOST_NAME, PORT_NUMBER))
  46. import unittest
  47. class Webserver_UnitTest(unittest.TestCase):
  48. def setUp(self):
  49. pass
  50. def test_frontpage(self):
  51. ret = handle_frontpage()
  52. self.assertTrue(len(ret)==1)
  53. ret = handle_html_file_request('index.html')
  54. self.assertTrue(len(ret)==1)
  55. ret = handle_html_file_request('/index.html')
  56. self.assertTrue(len(ret)==1)
  57. pass