mirror of
https://github.com/Dinnerbone/mcstatus.git
synced 2026-04-06 03:51:23 +08:00
Parse Query responses into their own object
This commit is contained in:
@@ -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"])
|
||||
@@ -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, [])
|
||||
Reference in New Issue
Block a user