Mercurial > hg > Lemuriformes
comparison lemuriformes/test_server.py @ 15:0d1b8bb1d97b
SQL + data related functionality
| author | Jeff Hammel <k0scist@gmail.com> | 
|---|---|
| date | Sun, 10 Dec 2017 17:16:52 -0800 | 
| parents | |
| children | 
   comparison
  equal
  deleted
  inserted
  replaced
| 14:756dbd3e391e | 15:0d1b8bb1d97b | 
|---|---|
| 1 """ | |
| 2 mock server for testing purposes | |
| 3 """ | |
| 4 | |
| 5 # see https://realpython.com/blog/python/testing-third-party-apis-with-mock-servers/ | |
| 6 | |
| 7 # TODO: | |
| 8 # - python3 compatability | |
| 9 # - use multiprocessing as threading does not allow hangin thread deletion | |
| 10 from BaseHTTPServer import HTTPServer | |
| 11 from threading import Thread | |
| 12 from .port import get_free_port | |
| 13 | |
| 14 | |
| 15 class MockServer(HTTPServer): | |
| 16 | |
| 17 hostname = 'localhost' | |
| 18 | |
| 19 def __init__(self, handler): | |
| 20 HTTPServer.__init__(self, | |
| 21 (self.hostname, get_free_port()), | |
| 22 handler) | |
| 23 self.thread = None | |
| 24 | |
| 25 def base_url(self): | |
| 26 return 'http://{0}:{1}/'.format(*self.server_address) | |
| 27 | |
| 28 def start_thread(self): | |
| 29 self.thread = Thread(target=self.serve_forever) | |
| 30 self.thread.setDaemon(True) | |
| 31 self.thread.start() | |
| 32 | |
| 33 def stop_thread(self): | |
| 34 raise NotImplementedError('TODO') | |
| 35 | |
| 36 def __enter__(self): | |
| 37 self.start_thread() | |
| 38 return self # or perhaps `self.thread`? | |
| 39 | |
| 40 def __exit__(self, *args): | |
| 41 pass # nothing to do? really? | 
