Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/CeibalEncuestaWeb/CeibalEncuesta.py
blob: 1d517b3d72cf190af644a7db694937bcec55ed90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import socket
from multiprocessing import Process
from time import sleep

from flask import Flask


PORT = 9004
print 'Opening web server'


class Browser(object):

    def __init__(self, webrender=None, widget_toolkit=None):
        self.webrender = webrender
        self.widget_toolkit = widget_toolkit

    def start(self):
        view = self.webrender.WebView()

        sw = self.widget_toolkit.ScrolledWindow()
        sw.add(view)

        win = self.widget_toolkit.Window(self.widget_toolkit.WINDOW_TOPLEVEL)
        win.add(sw)
        win.show_all()

        view.open('/')

        win.fullscreen()
        self.widget_toolkit.main()


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"