Parse Query responses into their own object

This commit is contained in:
Nathan Adams
2014-09-07 00:17:08 +02:00
parent 3de920b406
commit 0474c1d68d
2 changed files with 85 additions and 3 deletions

View File

@@ -62,6 +62,29 @@ class ServerQuerier:
class QueryResponse:
class Players:
def __init__(self, online, max, names):
self.online = int(online)
self.max = int(max)
self.names = names
class Software:
def __init__(self, version, plugins):
self.version = version
self.brand = "vanilla"
self.plugins = []
if plugins:
parts = plugins.split(":", 1)
self.brand = parts[0].strip()
if len(parts) == 2:
self.plugins = map(lambda s: s.strip(), parts[1].split(";"))
def __init__(self, raw, players):
self.raw = raw
self.players = players
self.motd = raw["hostname"]
self.map = raw["map"]
self.players = QueryResponse.Players(raw["numplayers"], raw["maxplayers"], players)
self.software = QueryResponse.Software(raw["version"], raw["plugins"])

View File

@@ -1,7 +1,7 @@
from unittest import TestCase
from mcstatus.protocol.connection import Connection
from mcstatus.querier import ServerQuerier
from mcstatus.querier import ServerQuerier, QueryResponse
class TestQuerier(TestCase):
@@ -32,4 +32,63 @@ class TestQuerier(TestCase):
"hostport": "25565",
"hostip": "192.168.56.1",
})
self.assertEqual(response.players, ["Dinnerbone", "Djinnibone", "Steve"])
self.assertEqual(response.players.names, ["Dinnerbone", "Djinnibone", "Steve"])
class TestQueryResponse(TestCase):
def setUp(self):
self.raw = {
"hostname": "A Minecraft Server",
"gametype": "SMP",
"game_id": "MINECRAFT",
"version": "1.8",
"plugins": "",
"map": "world",
"numplayers": "3",
"maxplayers": "20",
"hostport": "25565",
"hostip": "192.168.56.1",
}
self.players = ["Dinnerbone", "Djinnibone", "Steve"]
def test_valid(self):
response = QueryResponse(self.raw, self.players)
self.assertEqual(response.motd, "A Minecraft Server")
self.assertEqual(response.map, "world")
self.assertEqual(response.players.online, 3)
self.assertEqual(response.players.max, 20)
self.assertEqual(response.players.names, ["Dinnerbone", "Djinnibone", "Steve"])
self.assertEqual(response.software.brand, "vanilla")
self.assertEqual(response.software.version, "1.8")
self.assertEqual(response.software.plugins, [])
class TestQueryResponsePlayers(TestCase):
def test_valid(self):
players = QueryResponse.Players(5, 20, ["Dinnerbone", "Djinnibone", "Steve"])
self.assertEqual(players.online, 5)
self.assertEqual(players.max, 20)
self.assertEqual(players.names, ["Dinnerbone", "Djinnibone", "Steve"])
class TestQueryResponseSoftware(TestCase):
def test_vanilla(self):
software = QueryResponse.Software("1.8", "")
self.assertEqual(software.brand, "vanilla")
self.assertEqual(software.version, "1.8")
self.assertEqual(software.plugins, [])
def test_modded(self):
software = QueryResponse.Software("1.8", "A modded server: Foo 1.0; Bar 2.0; Baz 3.0")
self.assertEqual(software.brand, "A modded server")
self.assertEqual(software.plugins, ["Foo 1.0", "Bar 2.0", "Baz 3.0"])
def test_modded_no_plugins(self):
software = QueryResponse.Software("1.8", "A modded server")
self.assertEqual(software.brand, "A modded server")
self.assertEqual(software.plugins, [])