Mercurial > mamba
annotate mamba/forest.py @ 578:1306f7d8ed35
Add support for serving zip file containing all levels.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Sun, 06 Oct 2013 22:47:45 +0200 |
parents | e6344f57886e |
children | 60985ca71af5 |
rev | line source |
---|---|
328 | 1 """Where mamba's hang out with each other.""" |
2 | |
330 | 3 from werkzeug.utils import secure_filename |
4 from flask import Flask, request, abort | |
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 | 10 import os |
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 | 16 |
17 app = Flask(__name__) | |
18 | |
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 | 67 |
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 | 86 |
328 | 87 |
330 | 88 @app.route("/save/<levelname>", methods=['GET', 'POST']) |
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 | 93 if request.method == 'POST': |
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) |
550
91e1a95343b2
Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents:
496
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 | 98 return "Ssss." |
99 else: | |
100 abort(405, "Post levels here. Hsss.") | |
328 | 101 |
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" |
91e1a95343b2
Add option to inform CIA of new levels.
Simon Cross <hodgestar@gmail.com>
parents:
496
diff
changeset
|
104 MAMBA_URL = "https://ctpug.org.za/hg/mamba" |
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 | 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 | 290 sys.exit(1) |
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 | 303 |
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) |