Mercurial > mamba
comparison mamba/forest.py @ 550:91e1a95343b2
Add option to inform CIA of new levels.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Tue, 20 Sep 2011 17:29:38 +0200 |
parents | 0c5853bb7a14 |
children | 16344424dfcc |
comparison
equal
deleted
inserted
replaced
549:f0a29c9d57ee | 550:91e1a95343b2 |
---|---|
2 | 2 |
3 from werkzeug.utils import secure_filename | 3 from werkzeug.utils import secure_filename |
4 from flask import Flask, request, abort | 4 from flask import Flask, request, abort |
5 | 5 |
6 from datetime import datetime | 6 from datetime import datetime |
7 import xmlrpclib | |
8 import time | |
7 import os | 9 import os |
8 import sys | 10 import sys |
9 | 11 |
10 app = Flask(__name__) | 12 app = Flask(__name__) |
11 app.config['LEVEL_FOLDER'] = None # set later | 13 app.config['LEVEL_FOLDER'] = None # set later |
14 app.config['CIA_PROJECT'] = None # set to activate CIA sending | |
12 | 15 |
13 | 16 |
14 def path(ctype): | 17 def path(ctype): |
15 if ctype == "curated": | 18 if ctype == "curated": |
16 return os.path.join(app.config['LEVEL_FOLDER'], 'curated') | 19 return os.path.join(app.config['LEVEL_FOLDER'], 'curated') |
52 if os.path.exists(levelpath): | 55 if os.path.exists(levelpath): |
53 abort(409, "Mamba already resident.") | 56 abort(409, "Mamba already resident.") |
54 leveldata = request.form['data'].encode('ascii') | 57 leveldata = request.form['data'].encode('ascii') |
55 with open(levelpath, 'w') as level: | 58 with open(levelpath, 'w') as level: |
56 level.write(leveldata) | 59 level.write(leveldata) |
60 inform_cia(levelname, "New level uploaded.", branch="uncurated") | |
57 return "Ssss." | 61 return "Ssss." |
58 else: | 62 else: |
59 abort(405, "Post levels here. Hsss.") | 63 abort(405, "Post levels here. Hsss.") |
60 | 64 |
61 | 65 |
66 MAMBA_VERSION = "0.1" | |
67 MAMBA_URL = "https://ctpug.org.za/hg/mamba" | |
68 CIA_URL = "http://cia.navi.cx" | |
69 CIA_MSG_TEMPLATE = """ | |
70 <message | |
71 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
72 xsi:noNamespaceSchemaLocation="schema.xsd"> | |
73 <generator> | |
74 <name>Mutable Mamba Level Server</name> | |
75 <version>%(mamba_version)s</version> | |
76 <url>%(mamba_url)s</url> | |
77 </generator> | |
78 <source> | |
79 <project>%(project)s</project> | |
80 <module>%(module)s</module> | |
81 <branch>%(branch)s</branch> | |
82 </source> | |
83 <timestamp> | |
84 %(timestamp)d | |
85 </timestamp> | |
86 <body> | |
87 <commit> | |
88 <revision>%(revision)s</revision> | |
89 <author>%(author)s</author> | |
90 <files> | |
91 <file>%(file)s</file> | |
92 </files> | |
93 <log> | |
94 %(log)s | |
95 </log> | |
96 </commit> | |
97 </body> | |
98 </message> | |
99 """ | |
100 | |
101 | |
102 def inform_cia(filename, log, branch='uncurated'): | |
103 if app.config['CIA_PROJECT'] is None: | |
104 return | |
105 msg = CIA_MSG_TEMPLATE % { | |
106 'mamba_version': MAMBA_VERSION, | |
107 'mamba_url': MAMBA_URL, | |
108 'project': app.config['CIA_PROJECT'], | |
109 'module': 'level-server', | |
110 'branch': branch, | |
111 'timestamp': int(time.time()), | |
112 'revision': '0', | |
113 'author': 'unknown', | |
114 'file': filename, | |
115 'log': log, | |
116 } | |
117 srv = xmlrpclib.Server(CIA_URL) | |
118 srv.hub.deliver(msg) | |
119 | |
120 | |
62 if __name__ == "__main__": | 121 if __name__ == "__main__": |
63 if len(sys.argv) != 3: | 122 if len(sys.argv) not in (3, 4): |
64 print "Usage: python -m mamba.forest <port> <level folder>" | 123 print ("Usage: python -m mamba.forest <port> <level folder>" |
124 " [<cia project>]") | |
65 sys.exit(1) | 125 sys.exit(1) |
66 | 126 |
67 host = '0.0.0.0' | 127 host = '0.0.0.0' |
68 port = int(sys.argv[1]) | 128 port = int(sys.argv[1]) |
69 level_folder = sys.argv[2] | 129 level_folder = sys.argv[2] |
72 if not os.path.exists(folder): | 132 if not os.path.exists(folder): |
73 os.makedirs(folder) | 133 os.makedirs(folder) |
74 if not os.path.isdir(folder): | 134 if not os.path.isdir(folder): |
75 print "Level folder must be a folder." | 135 print "Level folder must be a folder." |
76 sys.exit(1) | 136 sys.exit(1) |
137 cia_project = sys.argv[3] if len(sys.argv) > 3 else None | |
77 | 138 |
78 app.config['LEVEL_FOLDER'] = level_folder | 139 app.config['LEVEL_FOLDER'] = level_folder |
140 app.config['CIA_PROJECT'] = cia_project | |
79 # app.debug = True | 141 # app.debug = True |
80 app.run(host=host, port=port) | 142 app.run(host=host, port=port) |