Add basic app layout and Server/Channel basic endpoints.

This commit is contained in:
2013-11-04 22:55:07 +00:00
parent 09af74a15f
commit 0ba3a12c24
4 changed files with 110 additions and 0 deletions

11
config.py Normal file
View File

@@ -0,0 +1,11 @@
import os
_basedir = os.path.abspath(os.path.dirname(__file__))
DEBUG = False
ADMINS = frozenset(['youremail@yourdomain.com'])
SECRET_KEY = 'SecretKeyForSessionSigning'
THREADS_PER_PAGE = 8
ICE_SECRET = 'test'

15
grumble/__init__.py Normal file
View File

@@ -0,0 +1,15 @@
from flask import Flask
from flask.ext import restful
from api_v1 import Server, ServerList, Channel, ChannelList
app = Flask(__name__)
app.config.from_object('config')
api_v1 = restful.Api(app)
# Servers
api_v1.add_resource(ServerList, '/v1/servers/')
api_v1.add_resource(Server, '/v1/servers/<int:server_id>/')
api_v1.add_resource(ChannelList, '/v1/servers/<int:server_id>/channels/')
api_v1.add_resource(Channel, '/v1/servers/<int:server_id>/channels/<int:channel_id>/')

81
grumble/api_v1.py Normal file
View File

@@ -0,0 +1,81 @@
from flask import current_app
from flask.ext import restful
from mumble.meta import Meta
class MumbleResource(restful.Resource):
def _get_meta(self):
print current_app.config['ICE_SECRET']
return Meta(current_app.config['ICE_SECRET'])
def _get_server(self, server_id):
return self._get_meta().get_server(server_id)
class ServerList(MumbleResource):
def get(self):
servers = self._get_meta().get_all_servers()
return [{'id': srv.id, 'name': srv.get_all_conf()['registername'], 'port': srv.get_all_conf()['port'], 'running': srv.running} for srv in servers]
def post(self):
new_port = max([int(x.get_all_conf()['port']) for x in self._get_meta().get_all_servers()]) + 1
srv = self._get_meta().new_server()
srv.set_conf('port', str(new_port))
return {'id': srv.id}, 201
class Server(MumbleResource):
def get(self, server_id):
server = self._get_server(server_id)
if server is None:
return '', 404
cfg = server.get_all_conf()
for k in ['certificate', 'key']:
cfg.pop(k)
return cfg
def delete(self, server_id):
if self._get_server(server_id).delete():
return '', 204
return '', 500
def start(self, server_id):
if self._get_server(server_id).start():
return '', 204
return '', 500
def stop(self, server_id):
if self._get_server(server_id).stop():
return '', 204
return '', 500
class Channel(MumbleResource):
def get(self, server_id, channel_id):
server = self._get_server(server_id)
if server is None:
return '', 404
channel = server.get_channel(channel_id)
if channel is None:
return '', 404
return channel.serialize(), 200
class ChannelList(MumbleResource):
def get(self, server_id):
server = self._get_server(server_id)
if server is None:
return '', 404
channels = []
for channel in server.get_channels():
raw = channel.serialize()
channels.append({
'id': raw['id'],
'name': raw['name'],
'parent': raw['parent'],
'position': raw['position'],
})
return channels

3
run.py Normal file
View File

@@ -0,0 +1,3 @@
#!/usr/bin/env python
from grumble import app
app.run(debug=True, host='0.0.0.0')