From 2f4887b4394f2d093309f6c24daea6b46b4478d4 Mon Sep 17 00:00:00 2001 From: Code Raguet Date: Thu, 04 Jul 2013 18:51:36 +0000 Subject: add webser and venv requirements (for pip) --- diff --git a/CeibalEncuestaWeb/CeibalEncuesta.py b/CeibalEncuestaWeb/CeibalEncuesta.py index c9868cd..51d0209 100644 --- a/CeibalEncuestaWeb/CeibalEncuesta.py +++ b/CeibalEncuestaWeb/CeibalEncuesta.py @@ -1,6 +1,53 @@ +import socket +from multiprocessing import Process +from time import sleep + +from flask import Flask + PORT = 9004 print 'Opening web server' + +class WebServer(object): + + def start(self): + + self.p = Process(target=self._start) + self.p.start() + + try: + retry = 0 + while not self.is_alive(): + if retry == 5: + raise Exception("Webserver start failed") + retry += 1 + sleep(1) + finally: + self.stop() + + def is_alive(self): + res = False + + try: + s = socket.socket() + s.connect(("localhost", PORT)) + res = True + except socket.error: + pass + finally: + s.close() + + return res + + def stop(self): + self.p.terminate() + + def _start(self): + webserver = Flask("API server") + webserver.run('localhost', PORT) + + if __name__ == '__main__': print "Opening browser" + diff --git a/CeibalEncuestaWeb/requirements.txt b/CeibalEncuestaWeb/requirements.txt new file mode 100644 index 0000000..20b0580 --- /dev/null +++ b/CeibalEncuestaWeb/requirements.txt @@ -0,0 +1,12 @@ +Fabric==1.6.1 +Flask==0.10.1 +Jinja2==2.7 +MarkupSafe==0.18 +Werkzeug==0.9.1 +argparse==1.2.1 +distribute==0.6.24 +ipython==0.13.2 +itsdangerous==0.22 +paramiko==1.10.1 +pycrypto==2.6 +wsgiref==0.1.2 diff --git a/CeibalEncuestaWeb/tests.py b/CeibalEncuestaWeb/tests.py index bfc18d3..1fed945 100644 --- a/CeibalEncuestaWeb/tests.py +++ b/CeibalEncuestaWeb/tests.py @@ -1,8 +1,19 @@ import unittest import socket +import contextlib +import sys from fabric.api import local +from CeibalEncuesta import WebServer + + +@contextlib.contextmanager +def redirect_stdout(stream): + sys.stdout = sys.stderr = stream + yield + sys.stdout = sys.__stdout__ + class ContainerTest(unittest.TestCase): @@ -22,18 +33,25 @@ class ContainerTest(unittest.TestCase): result = self.result self.assertIn('Opening browser', result) -@unittest.skip("waiting implementation") + class WebServerTest(unittest.TestCase): def test_connection(self): - s = socket.socket() + with open('/dev/null') as null: + with redirect_stdout(null): + webserver = WebServer() + webserver.start() + try: + s = socket.socket() s.connect(("localhost", 9004)) - except Exception: - self.fail("Can't connect to web server") + except Exception as e: + self.fail(e) finally: s.close() + webserver.stop() if __name__ == '__main__': unittest.main() + -- cgit v0.9.1