Merge pull request #43 from adilosa/master

Implement CLI using Click (fixes #36)
Made cli install with pip install
This commit is contained in:
Dinner Bone
2017-04-01 17:39:08 +02:00
committed by Nathan Adams
parent 6ac2ead3cd
commit 88961d3b46
5 changed files with 140 additions and 3 deletions

View File

@@ -28,6 +28,44 @@ query = server.query()
print("The server has the following players online: {0}".format(", ".join(query.players.names))) print("The server has the following players online: {0}".format(", ".join(query.players.names)))
``` ```
Command Line Interface
```
$ mcstatus
Usage: mcstatus [OPTIONS] ADDRESS COMMAND [ARGS]...
mcstatus provides an easy way to query Minecraft servers for any
information they can expose. It provides three modes of access: query,
status, and ping.
Examples:
$ mcstatus example.org ping
21.120ms
$ mcstatus example.org:1234 ping
159.903ms
$ mcstatus example.org status
version: v1.8.8 (protocol 47)
description: "A Minecraft Server"
players: 1/20 ['Dinnerbone (61699b2e-d327-4a01-9f1e-0ea8c3f06bc6)']
$ mcstatus example.org query
host: 93.148.216.34:25565
software: v1.8.8 vanilla
plugins: []
motd: "A Minecraft Server"
players: 1/20 ['Dinnerbone (61699b2e-d327-4a01-9f1e-0ea8c3f06bc6)']
Options:
-h, --help Show this message and exit.
Commands:
ping prints server latency
query detailed server information
status basic server information
```
Installation Installation
------------ ------------

View File

View File

@@ -0,0 +1,94 @@
import click
from .. import MinecraftServer
server = None
@click.group(context_settings=dict(help_option_names=['-h', '--help']))
@click.argument("address")
def cli(address):
"""
mcstatus provides an easy way to query Minecraft servers for
any information they can expose. It provides three modes of
access: query, status, and ping.
Examples:
\b
$ mcstatus example.org ping
21.120ms
\b
$ mcstatus example.org:1234 ping
159.903ms
\b
$ mcstatus example.org status
version: v1.8.8 (protocol 47)
description: "A Minecraft Server"
players: 1/20 ['Dinnerbone (61699b2e-d327-4a01-9f1e-0ea8c3f06bc6)']
\b
$ mcstatus example.org query
host: 93.148.216.34:25565
software: v1.8.8 vanilla
plugins: []
motd: "A Minecraft Server"
players: 1/20 ['Dinnerbone (61699b2e-d327-4a01-9f1e-0ea8c3f06bc6)']
"""
global server
server = MinecraftServer.lookup(address)
@cli.command(short_help="prints server latency")
def ping():
"""
Ping server for latency.
"""
click.echo("{}ms".format(server.ping()))
@cli.command(short_help="basic server information")
def status():
"""
Prints server status. Supported by all Minecraft
servers that are version 1.7 or higher.
"""
response = server.status()
click.echo("version: v{} (protocol {})".format(response.version.name, response.version.protocol))
click.echo("description: \"{}\"".format(response.description))
click.echo(
"players: {}/{} {}".format(
response.players.online,
response.players.max,
[
"{} ({})".format(player.name, player.id)
for player in response.players.sample
] if response.players.sample is not None else "No players online"
)
)
@cli.command(short_help="detailed server information")
def query():
"""
Prints detailed server information. Must be enabled in
servers' server.properties file.
"""
response = server.query()
click.echo("host: {}:{}".format(response.raw['hostip'], response.raw['hostport']))
click.echo("software: v{} {}".format(response.software.version, response.software.brand))
click.echo("plugins: {}".format(response.software.plugins))
click.echo("motd: \"{}\"".format(response.motd))
click.echo(
"players: {}/{} {}".format(
response.players.online,
response.players.max,
response.players.names,
)
)
if __name__ == "__main__":
cli()

View File

@@ -1,2 +1,3 @@
six==1.7.3 six==1.7.3
mock==1.0.1 mock==1.0.1
click==6.2

View File

@@ -3,7 +3,7 @@ import sys
PY2 = sys.version_info[0] == 2 PY2 = sys.version_info[0] == 2
install_requires = [ install_requires = [
'six' 'six', 'Click'
] ]
if PY2: if PY2:
@@ -21,7 +21,7 @@ setup(
author='Nathan Adams', author='Nathan Adams',
author_email='dinnerbone@dinnerbone.com', author_email='dinnerbone@dinnerbone.com',
url='https://pypi.python.org/pypi/mcstatus', url='https://pypi.python.org/pypi/mcstatus',
packages=['mcstatus', 'mcstatus.protocol'], packages=['mcstatus', 'mcstatus.protocol', 'mcstatus.scripts'],
description='A library to query Minecraft Servers for their status and capabilities.', description='A library to query Minecraft Servers for their status and capabilities.',
install_requires=install_requires, install_requires=install_requires,
tests_require=tests_require, tests_require=tests_require,
@@ -35,4 +35,8 @@ setup(
'Operating System :: OS Independent', 'Operating System :: OS Independent',
'Topic :: Software Development :: Libraries :: Python Modules', 'Topic :: Software Development :: Libraries :: Python Modules',
], ],
entry_points='''
[console_scripts]
mcstatus=mcstatus.scripts.mcstatus:cli
''',
) )