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)