annotate mamba/forest.py @ 584:60985ca71af5

Update repo url. Comment out CIA submission, since that's dead
author Neil Muller <drnlmuller@gmail.com>
date Tue, 17 Mar 2020 22:32:56 +0200
parents 1306f7d8ed35
children fca61cd8fc33
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
328
af947a20c212 First server.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
1 """Where mamba's hang out with each other."""
af947a20c212 First server.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
2
330
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
3 from werkzeug.utils import secure_filename
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
4 from flask import Flask, request, abort
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
5
496
0c5853bb7a14 Timestamp uncurated level files.
Simon Cross <hodgestar@gmail.com>
parents: 340
diff changeset
6 from datetime import datetime
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
7 from ConfigParser import SafeConfigParser
550
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
8 import xmlrpclib
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
9 import time
330
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
10 import os
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
11 import sys
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
12 import socket
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
13 import json
578
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
14 import StringIO
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
15 import zipfile
330
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
16
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
17 app = Flask(__name__)
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
18
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
19
578
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
20 class LevelSet(object):
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
21 def __init__(self, ctype):
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
22 self.ctype = ctype
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
23 self.folder = self._path(ctype)
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
24
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
25 @classmethod
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
26 def _path(cls, ctype):
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
27 main = app.config.forest.main
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
28 if ctype == "curated":
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
29 return os.path.join(main.level_folder, 'curated')
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
30 elif ctype == "uncurated":
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
31 return os.path.join(main.level_folder, 'uncurated')
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
32 abort(404, "Not found")
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
33
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
34 def _level_path(self, levelname):
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
35 filename = "%s.txt" % secure_filename(levelname)
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
36 return os.path.join(self.folder, filename)
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
37
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
38 def list_levels(self):
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
39 endl = len(".txt")
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
40 files = [x[:-endl] for x in os.listdir(self.folder)
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
41 if not x.startswith('.') and x.endswith('.txt')]
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
42 return files
340
5456db312f7f Curated and uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents: 330
diff changeset
43
578
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
44 def read_level(self, levelname):
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
45 level_path = self._level_path(levelname)
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
46 if not os.path.isfile(level_path):
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
47 abort(404, "Level not found. Hsss.")
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
48 with open(level_path) as level:
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
49 return level.read()
340
5456db312f7f Curated and uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents: 330
diff changeset
50
578
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
51 def write_level(self, levelname, leveldata):
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
52 level_path = self._level_path(levelname)
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
53 if os.path.exists(level_path):
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
54 abort(409, "Mamba already resident.")
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
55 with open(level_path, 'w') as level:
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
56 level.write(leveldata)
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
57
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
58 def zip_levels(self):
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
59 levels_raw = StringIO.StringIO()
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
60 levels_zip = zipfile.ZipFile(
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
61 levels_raw, "w", compression=zipfile.ZIP_DEFLATED)
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
62 for levelname in self.list_levels():
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
63 levels_zip.writestr(
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
64 "%s.txt" % levelname, self.read_level(levelname))
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
65 levels_zip.close()
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
66 return levels_raw.getvalue()
328
af947a20c212 First server.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
67
af947a20c212 First server.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
68
340
5456db312f7f Curated and uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents: 330
diff changeset
69 @app.route("/<ctype>/index")
5456db312f7f Curated and uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents: 330
diff changeset
70 def index(ctype):
578
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
71 ls = LevelSet(ctype)
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
72 levels = ls.list_levels()
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
73 return "\n".join(levels)
340
5456db312f7f Curated and uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents: 330
diff changeset
74
5456db312f7f Curated and uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents: 330
diff changeset
75
5456db312f7f Curated and uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents: 330
diff changeset
76 @app.route("/<ctype>/level/<levelname>")
5456db312f7f Curated and uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents: 330
diff changeset
77 def level(ctype, levelname):
578
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
78 ls = LevelSet(ctype)
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
79 return ls.read_level(levelname)
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
80
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
81
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
82 @app.route("/<ctype>/levels.zip")
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
83 def levels_zip(ctype):
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
84 ls = LevelSet(ctype)
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
85 return ls.zip_levels()
330
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
86
328
af947a20c212 First server.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
87
330
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
88 @app.route("/save/<levelname>", methods=['GET', 'POST'])
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
89 def save(levelname):
496
0c5853bb7a14 Timestamp uncurated level files.
Simon Cross <hodgestar@gmail.com>
parents: 340
diff changeset
90 ts = datetime.now().strftime("%Y%m%d.%H%M%S")
578
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
91 levelname = "%s.%s" % (levelname, ts)
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
92 ls = LevelSet("uncurated")
330
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
93 if request.method == 'POST':
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
94 leveldata = request.form['data'].encode('ascii')
578
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
95 ls.write_level(levelname, leveldata)
584
60985ca71af5 Update repo url. Comment out CIA submission, since that's dead
Neil Muller <drnlmuller@gmail.com>
parents: 578
diff changeset
96 #inform_cia(levelname, "New level uploaded.", branch="uncurated")
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
97 inform_irker(levelname, "New level uploaded.", branch="uncurated")
330
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
98 return "Ssss."
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
99 else:
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
100 abort(405, "Post levels here. Hsss.")
328
af947a20c212 First server.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
101
af947a20c212 First server.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
102
550
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
103 MAMBA_VERSION = "0.1"
584
60985ca71af5 Update repo url. Comment out CIA submission, since that's dead
Neil Muller <drnlmuller@gmail.com>
parents: 578
diff changeset
104 MAMBA_URL = "https://hg.ctpug.org.za/mamba"
550
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
105 CIA_URL = "http://cia.navi.cx"
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
106 CIA_MSG_TEMPLATE = """
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
107 <message
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
108 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
109 xsi:noNamespaceSchemaLocation="schema.xsd">
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
110 <generator>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
111 <name>Mutable Mamba Level Server</name>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
112 <version>%(mamba_version)s</version>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
113 <url>%(mamba_url)s</url>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
114 </generator>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
115 <source>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
116 <project>%(project)s</project>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
117 <module>%(module)s</module>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
118 <branch>%(branch)s</branch>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
119 </source>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
120 <timestamp>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
121 %(timestamp)d
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
122 </timestamp>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
123 <body>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
124 <commit>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
125 <revision>%(revision)s</revision>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
126 <author>%(author)s</author>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
127 <files>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
128 <file>%(file)s</file>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
129 </files>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
130 <log>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
131 %(log)s
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
132 </log>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
133 </commit>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
134 </body>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
135 </message>
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
136 """
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
137
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
138
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
139 def inform_cia(filename, log, branch='uncurated'):
568
7eb5ecda4667 Fix many bugs in new forest config usage.
Simon Cross <hodgestar@gmail.com>
parents: 567
diff changeset
140 if app.config.forest.cia is None:
550
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
141 return
568
7eb5ecda4667 Fix many bugs in new forest config usage.
Simon Cross <hodgestar@gmail.com>
parents: 567
diff changeset
142 cia = app.config.forest.cia
550
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
143 msg = CIA_MSG_TEMPLATE % {
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
144 'mamba_version': MAMBA_VERSION,
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
145 'mamba_url': MAMBA_URL,
568
7eb5ecda4667 Fix many bugs in new forest config usage.
Simon Cross <hodgestar@gmail.com>
parents: 567
diff changeset
146 'project': cia.project,
550
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
147 'module': 'level-server',
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
148 'branch': branch,
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
149 'timestamp': int(time.time()),
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
150 'revision': '0',
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
151 'author': 'unknown',
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
152 'file': filename,
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
153 'log': log,
578
1306f7d8ed35 Add support for serving zip file containing all levels.
Simon Cross <hodgestar@gmail.com>
parents: 574
diff changeset
154 }
568
7eb5ecda4667 Fix many bugs in new forest config usage.
Simon Cross <hodgestar@gmail.com>
parents: 567
diff changeset
155 srv = xmlrpclib.Server(cia.url)
550
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
156 srv.hub.deliver(msg)
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
157
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
158
574
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
159 def format_irker_message(msg_template, project, filename, log,
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
160 branch='uncurated', colours=None):
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
161 msg_params = {
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
162 "project": project,
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
163 "filename": filename,
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
164 "log": log,
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
165 "branch": branch,
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
166 }
574
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
167 if colours:
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
168 msg_params.update(colours)
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
169 return msg_template % msg_params
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
170
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
171
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
172 def irker_colours(colour_style):
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
173 if colour_style == "mIRC":
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
174 return {
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
175 'bold': '\x02',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
176 'green': '\x0303',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
177 'blue': '\x0302',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
178 'red': '\x0305',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
179 'yellow': '\x0307',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
180 'brown': '\x0305',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
181 'magenta': '\x0306',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
182 'cyan': '\x0310',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
183 'reset': '\x0F',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
184 }
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
185 else:
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
186 return {
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
187 'bold': '',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
188 'green': '',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
189 'blue': '',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
190 'red': '',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
191 'yellow': '',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
192 'brown': '',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
193 'magenta': '',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
194 'cyan': '',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
195 'reset': '',
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
196 }
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
197
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
198
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
199 def inform_irker(filename, log, branch='uncurated'):
568
7eb5ecda4667 Fix many bugs in new forest config usage.
Simon Cross <hodgestar@gmail.com>
parents: 567
diff changeset
200 if app.config.forest.irker is None:
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
201 return
568
7eb5ecda4667 Fix many bugs in new forest config usage.
Simon Cross <hodgestar@gmail.com>
parents: 567
diff changeset
202 irker = app.config.forest.irker
574
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
203 colours = irker_colours(irker.colour_style)
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
204 privmsg = format_irker_message(irker.msg_template, irker.project,
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
205 filename, log, branch, colours=colours)
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
206 message = json.dumps({"to": irker.channels, "privmsg": privmsg})
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
207 try:
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
208 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
569
c296d10bd5f9 Fix call to socket.connect.
Simon Cross <hodgestar@gmail.com>
parents: 568
diff changeset
209 sock.connect((irker.host, irker.port))
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
210 sock.sendall(message + "\n")
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
211 finally:
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
212 sock.close()
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
213
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
214
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
215 class ForestConfig(object):
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
216
574
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
217 IRKER_PORT = 6659
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
218 IRKER_MSG_TEMPLATE = (
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
219 "%(bold)s%(project)s:%(reset)s "
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
220 "%(magenta)s%(branch)s%(reset)s * "
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
221 "%(bold)s%(filename)s%(reset)s: "
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
222 "%(log)s"
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
223 )
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
224
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
225 class SubConfig(object):
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
226 """Holder for sub-config."""
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
227
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
228 def __init__(self, filenames):
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
229 self._config = SafeConfigParser()
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
230 self._config.read(filenames)
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
231 self.main = self._parse("main")
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
232 self.irker = self._parse("irker")
568
7eb5ecda4667 Fix many bugs in new forest config usage.
Simon Cross <hodgestar@gmail.com>
parents: 567
diff changeset
233 self.cia = self._parse("cia")
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
234
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
235 def _parse(self, section):
568
7eb5ecda4667 Fix many bugs in new forest config usage.
Simon Cross <hodgestar@gmail.com>
parents: 567
diff changeset
236 if self._config.has_section(section):
7eb5ecda4667 Fix many bugs in new forest config usage.
Simon Cross <hodgestar@gmail.com>
parents: 567
diff changeset
237 conf = dict(self._config.items(section))
7eb5ecda4667 Fix many bugs in new forest config usage.
Simon Cross <hodgestar@gmail.com>
parents: 567
diff changeset
238 else:
7eb5ecda4667 Fix many bugs in new forest config usage.
Simon Cross <hodgestar@gmail.com>
parents: 567
diff changeset
239 conf = {}
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
240 return getattr(self, "_parse_%s" % section)(conf)
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
241
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
242 def _parse_main(self, conf):
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
243 main = self.SubConfig()
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
244 main.host = conf.get('host', '0.0.0.0')
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
245 main.port = int(conf['port'])
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
246 main.level_folder = conf['level_folder']
568
7eb5ecda4667 Fix many bugs in new forest config usage.
Simon Cross <hodgestar@gmail.com>
parents: 567
diff changeset
247 return main
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
248
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
249 def _parse_irker(self, conf):
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
250 if 'project' not in conf:
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
251 return None
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
252 irker = self.SubConfig()
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
253 irker.project = conf['project']
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
254 irker.host = conf.get('host', 'localhost')
574
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
255 irker.port = int(conf.get('port', self.IRKER_PORT))
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
256 irker.channels = conf['channels']
574
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
257 irker.msg_template = conf.get('msg_template', self.IRKER_MSG_TEMPLATE)
e6344f57886e Try add colours to the irker messages.
Simon Cross <hodgestar@gmail.com>
parents: 570
diff changeset
258 irker.colour_style = conf.get('colour_style', 'mIRC')
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
259 return irker
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
260
568
7eb5ecda4667 Fix many bugs in new forest config usage.
Simon Cross <hodgestar@gmail.com>
parents: 567
diff changeset
261 def _parse_cia(self, conf):
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
262 if 'project' not in conf:
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
263 return None
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
264 cia = self.SubConfig()
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
265 cia.project = conf['project']
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
266 cia.url = conf.get('url', CIA_URL)
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
267 return cia
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
268
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
269
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
270 USAGE = """Usage: python -m mamba.forest <config file>
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
271
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
272 The config file should look like:
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
273
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
274 [main]
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
275 host=0.0.0.0 # optional
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
276 port=8000
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
277 level_folder=./my/levels
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
278
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
279 [irker]
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
280 host=localhost # optional
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
281 port=8001
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
282 project=mamba-levels
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
283 channels=channel1,channel2
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
284 """
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
285
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
286
328
af947a20c212 First server.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
287 if __name__ == "__main__":
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
288 if len(sys.argv) != 2:
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
289 print USAGE
330
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
290 sys.exit(1)
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
291
568
7eb5ecda4667 Fix many bugs in new forest config usage.
Simon Cross <hodgestar@gmail.com>
parents: 567
diff changeset
292 app.config.forest = ForestConfig([sys.argv[1]])
7eb5ecda4667 Fix many bugs in new forest config usage.
Simon Cross <hodgestar@gmail.com>
parents: 567
diff changeset
293 main = app.config.forest.main
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
294
340
5456db312f7f Curated and uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents: 330
diff changeset
295 for ctype in ("curated", "uncurated"):
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
296 folder = os.path.join(main.level_folder, ctype)
340
5456db312f7f Curated and uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents: 330
diff changeset
297 if not os.path.exists(folder):
5456db312f7f Curated and uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents: 330
diff changeset
298 os.makedirs(folder)
5456db312f7f Curated and uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents: 330
diff changeset
299 if not os.path.isdir(folder):
5456db312f7f Curated and uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents: 330
diff changeset
300 print "Level folder must be a folder."
5456db312f7f Curated and uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents: 330
diff changeset
301 sys.exit(1)
550
91e1a95343b2 Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
302 cia_project = sys.argv[3] if len(sys.argv) > 3 else None
330
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
303
a2724d0078d8 Mamba in a flask.
Simon Cross <hodgestar@gmail.com>
parents: 328
diff changeset
304 # app.debug = True
567
16344424dfcc First attempt at irker logging from level server.
Simon Cross <hodgestar@gmail.com>
parents: 550
diff changeset
305 app.run(host=main.host, port=main.port)