Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCode Raguet <ignacio.code@gmail.com>2013-07-04 18:51:36 (GMT)
committer Code Raguet <ignacio.code@gmail.com>2013-07-04 18:58:59 (GMT)
commit2f4887b4394f2d093309f6c24daea6b46b4478d4 (patch)
tree29d885e9454d6f86be649f482f322a1dde33a08f
parent57444bf738bab7d367d552b59a20943b607a029b (diff)
add webser and venv requirements (for pip)
-rw-r--r--CeibalEncuestaWeb/CeibalEncuesta.py47
-rw-r--r--CeibalEncuestaWeb/requirements.txt12
-rw-r--r--CeibalEncuestaWeb/tests.py26
3 files changed, 81 insertions, 4 deletions
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()
+