Skip to content
This repository has been archived by the owner on Nov 2, 2020. It is now read-only.

Commit

Permalink
Merge pull request #10 from kstaniek/master
Browse files Browse the repository at this point in the history
Fixed unicode device name and PEP8
  • Loading branch information
jinglemansweep committed Apr 13, 2014
2 parents 094b0bd + 84837fa commit 5135749
Show file tree
Hide file tree
Showing 5 changed files with 248 additions and 182 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
*.pyc
build
.idea
121 changes: 84 additions & 37 deletions bin/pylms
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
#!/usr/bin/env python

from __future__ import print_function
import os, sys, logging, optparse
import os
import sys
import logging
import optparse
from pylms.server import Server
from pylms.utils import clean_command

Expand All @@ -15,36 +18,67 @@ PROJECT = "PyLMS"
VERSION = "1.00"

logger = logging.getLogger(__name__)
LOG_HELP = ','.join(["%d=%s" % (4-x, logging.getLevelName((x+1)*10)) for x in range(5)])
LOG_HELP = ','.join(
["%d=%s" % (4-x, logging.getLevelName((x+1)*10)) for x in range(5)])
LOG_FORMAT_CONS = '%(levelname)s: %(message)s'
LOG_FORMAT_FILE = '%(asctime)s %(name)s[%(process)d] %(levelname)10s %(message)s'
LOGLEVEL_DICT = { 1 : 50, 2:40, 3:20, 4:10, 5:1 }
LOG_FORMAT_FILE = '%(asctime)s %(name)s[%(process)d] ' \
'%(levelname)10s %(message)s'
LOGLEVEL_DICT = {1: 50, 2: 40, 3: 20, 4: 10, 5: 1}
DEFAULT_VERBOSITY = 3

VALID_COMMANDS = ["play", "stop", "pause", "unpause", "toggle", "next", "prev",
"volume_up", "volume_down", "mute", "unmute", "seek_to",
"forward", "rewind", "set_power_state", "set_volume", "show", "display", "infos",
"get_ref", "get_uuid", "get_name", "get_ip_address", "get_model", "get_display_type",
"get_wifi_signal", "get_mode", "get_time_elapsed", "get_time_remaining", "get_power_state",
"get_ir_state", "get_volume", "get_bass", "get_treble", "get_pitch", "get_rate", "get_muting",
"get_track_genre", "get_track_artist", "get_track_album", "get_track_title",
"get_track_duration", "get_track_remote", "get_track_current_title", "get_track_path",
"randomplay", "search", "rescan", "rescanprogress"]
"forward", "rewind", "set_power_state", "set_volume", "show",
"display", "infos", "get_ref", "get_uuid", "get_name",
"get_ip_address", "get_model", "get_display_type",
"get_wifi_signal", "get_mode", "get_time_elapsed",
"get_time_remaining", "get_power_state", "get_ir_state",
"get_volume", "get_bass", "get_treble", "get_pitch",
"get_rate", "get_muting", "get_track_genre",
"get_track_artist", "get_track_album", "get_track_title",
"get_track_duration", "get_track_remote",
"get_track_current_title", "get_track_path", "randomplay",
"search", "rescan", "rescanprogress"]

# Option Parsing

parser = optparse.OptionParser(usage="%prog or type %prog -h (--help) for help", description=__doc__, version=PROJECT + " v" + VERSION)

parser.add_option("-v", action="count", dest="verbosity", default=DEFAULT_VERBOSITY, help="Verbosity. Add more -v to be more verbose (%s) [default: %%default]" % LOG_HELP)
parser.add_option("-l", "--logfile", dest="logfile", default=None, help = "Log to file instead of console" )
parser.add_option("-s", "--host", dest="host", default="localhost", help="Specify Hostname of SqueezeCenter [default: %default]")
parser.add_option("-n", "--port", dest="port", default="9090", help="Specify Port of SqueezeCenter [default: %default]")
parser.add_option("-u", "--username", dest="username", default=None, help="Specify Authorisation Username")
parser.add_option("-p", "--password", dest="password", default=None, help="Specify Authorisation Password")
parser.add_option("-d", "--device", dest="device", default=None, help="Specify SqueezePlayer Device MAC Address")
parser.add_option("-i", "--info", dest="info", action="store_true", default=False, help="Show Server/Player Information")
parser.add_option("-r", "--raw", dest="raw", action="store_true", default=False, help="Output only minimal raw results (useful for scripts)")
parser.add_option("-q", "--quick", dest="quick", action="store_true", default=False, help="Perform a quick one-time action (does not query current device state)")
parser = optparse.OptionParser(
usage="%prog or type %prog -h (--help) for help",
description=__doc__,
version=PROJECT + " v" + VERSION)

parser.add_option(
"-v", action="count", dest="verbosity", default=DEFAULT_VERBOSITY,
help="Verbosity. Add more -v to be more verbose (%s) "
"[default: %%default]" % LOG_HELP)
parser.add_option(
"-l", "--logfile", dest="logfile", default=None,
help="Log to file instead of console")
parser.add_option(
"-s", "--host", dest="host", default="localhost",
help="Specify Hostname of SqueezeCenter [default: %default]")
parser.add_option(
"-n", "--port", dest="port", default="9090",
help="Specify Port of SqueezeCenter [default: %default]")
parser.add_option(
"-u", "--username", dest="username", default=None,
help="Specify Authorisation Username")
parser.add_option(
"-p", "--password", dest="password", default=None,
help="Specify Authorisation Password")
parser.add_option(
"-d", "--device", dest="device", default=None,
help="Specify SqueezePlayer Device MAC Address")
parser.add_option(
"-i", "--info", dest="info", action="store_true", default=False,
help="Show Server/Player Information")
parser.add_option(
"-r", "--raw", dest="raw", action="store_true", default=False,
help="Output only minimal raw results (useful for scripts)")
parser.add_option(
"-q", "--quick", dest="quick", action="store_true", default=False,
help="Perform a quick one-time action (does not query "
"current device state)")


(options, args) = parser.parse_args()
Expand All @@ -57,12 +91,16 @@ if options.logfile is None:
logging.basicConfig(level=verbosity, format=LOG_FORMAT_CONS)
else:
logfilename = os.path.normpath(options.logfile)
logging.basicConfig(level=verbosity, format=LOG_FORMAT_FILE, filename=logfilename, filemode='a')
logging.basicConfig(
level=verbosity, format=LOG_FORMAT_FILE, filename=logfilename,
filemode='a')
print("Logging to %s" % logfilename, file=sys.stderr)

# Main

sc = Server(hostname=options.host, port=options.port, username=options.username, password=options.password)
sc = Server(
hostname=options.host, port=options.port, username=options.username,
password=options.password)
sc.logger = logger

update_mode = not options.quick
Expand All @@ -73,15 +111,19 @@ if options.info:
try:
sc.connect(update=update_mode)
except:
logger.error("Cannot connect to server (%s:%s)" % (options.host, options.port))
logger.error(
"Cannot connect to server (%s:%s)" % (options.host, options.port))
sys.exit(1)

all_players = sc.players

if options.info:
logger.info("Server Version: %s" % (sc.get_version()))
for p in all_players:
logger.info("Player: %s | %s | V: %i | M: %s | T: %s | C: %s | W: %s" % (p.ref, p.name, p.get_volume(), p.get_mode(), p.get_time_elapsed(), p.is_connected, p.get_wifi_signal_strength()))
logger.info(
"Player: %s | %s | V: %i | M: %s | T: %s | C: %s | W: %s" %
(p.ref, p.name, p.get_volume(), p.get_mode(), p.get_time_elapsed(),
p.is_connected, p.get_wifi_signal_strength()))

players = []
if options.device == 'all':
Expand All @@ -91,7 +133,7 @@ else:
if sel_player:
players.append(sel_player)

if options.device and len(players)==0:
if options.device and len(players) == 0:
logger.error("Cannot find player %s" % (options.device))
sys.exit(1)

Expand All @@ -102,8 +144,8 @@ if not args:
command_map = {}

for c in VALID_COMMANDS:
cleaned = clean_command(c)
command_map[cleaned] = c
cleaned = clean_command(c)
command_map[cleaned] = c

cmd = clean_command(args[0])

Expand All @@ -114,12 +156,13 @@ except IndexError:

raw_cmd = command_map.get(cmd)

if len(players)==0:
if len(players) == 0:
#server command
if cmd in command_map:
func = getattr(sc, raw_cmd, None)
try:
logger.debug("%s: %s [%s]" % ('server', raw_cmd.upper(), ", ".join(params)))
logger.debug(
"%s: %s [%s]" % ('server', raw_cmd.upper(), ", ".join(params)))
result = func(*params)
if options.raw:
if result is not None:
Expand All @@ -131,7 +174,8 @@ if len(players)==0:
except ValueError:
logger.error("Invalid parameter")
except TypeError:
logger.error("Incorrect number of parameters or invalid type parameter")
logger.error(
"Incorrect number of parameters or invalid type parameter")


else:
Expand All @@ -140,19 +184,22 @@ else:
if cmd in command_map:
func = getattr(player, raw_cmd, None)
try:
logger.debug("%s: %s [%s]" % (player.name, raw_cmd.upper(), ", ".join(params)))
logger.debug(
"%s: %s [%s]" % (player.name, raw_cmd.upper(),
", ".join(params)))
result = func(*params)
if options.raw:
if result is not None:
print(result)
else:
if result is None:
result = "No Output"
logger.info("[%s] %s" % (raw_cmd, result))
logger.info("[%s] %s" % (raw_cmd, result))
except ValueError:
logger.error("Invalid parameter")
except TypeError:
logger.error("Incorrect number of parameters or invalid type parameter")
logger.error(
"Incorrect number of parameters or invalid "
"type parameter")
else:
logger.error("Invalid command or no device: %s" % (cmd))

Loading

0 comments on commit 5135749

Please sign in to comment.