Config file handling
This commit is contained in:
parent
645745ed7c
commit
d7ca903f01
|
@ -4,3 +4,4 @@
|
||||||
*.pyo
|
*.pyo
|
||||||
*~
|
*~
|
||||||
*.o
|
*.o
|
||||||
|
seopardy.conf
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def _config_error(msg):
|
||||||
|
print("Configuration error: %s" % (msg,), file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
def _check_missing_keys(conf, sec, mandatory, users_choice=[]):
|
||||||
|
#d = conf[sec] if sec is not None else conf
|
||||||
|
#if sec is None:
|
||||||
|
# sec = "main"
|
||||||
|
|
||||||
|
d = conf
|
||||||
|
|
||||||
|
allowed = mandatory + users_choice
|
||||||
|
|
||||||
|
for key in d.iterkeys():
|
||||||
|
if key not in allowed:
|
||||||
|
_config_error("Key %s is not an allowed config key in section %s (allowed are %s)" % (key, sec, ", ".join(allowed)))
|
||||||
|
|
||||||
|
for key in mandatory:
|
||||||
|
if key not in d.iterkeys():
|
||||||
|
_config_error("Key %s is not present in section %s but mandatory" % (key, sec,))
|
||||||
|
|
||||||
|
|
||||||
|
def check_config(conf):
|
||||||
|
main_keys = ["music", "savedir", "playerInput"]
|
||||||
|
music_keys = ["startSong", "questionSong"]
|
||||||
|
|
||||||
|
_check_missing_keys(conf, "main", main_keys)
|
||||||
|
_check_missing_keys(conf["music"], "music", music_keys)
|
||||||
|
|
||||||
|
if conf["playerInput"]:
|
||||||
|
for i, inp in enumerate(conf["playerInput"], 1):
|
||||||
|
_check_missing_keys(inp, "playerInput %d" % i, ["Type"], ["Args"])
|
|
@ -0,0 +1,27 @@
|
||||||
|
# _
|
||||||
|
# ___ ___ ___ _ __ __ _ _ __ __| |_ _
|
||||||
|
# / __|/ _ \/ _ \| '_ \ / _` | '__/ _` | | | |
|
||||||
|
# \__ \ __/ (_) | |_) | (_| | | | (_| | |_| |
|
||||||
|
# |___/\___|\___/| .__/ \__,_|_| \__,_|\__, |
|
||||||
|
# |_| |___/
|
||||||
|
# Configuration
|
||||||
|
#
|
||||||
|
# Basicly you can configure here:
|
||||||
|
# - player inputs
|
||||||
|
# - pathes to theme songs
|
||||||
|
# - path to savedir (gamestate backups while game is running)
|
||||||
|
# Note that this is a yamlfile (no tabs -.-)
|
||||||
|
|
||||||
|
# path to music, set to null if you don't have the song
|
||||||
|
music:
|
||||||
|
startSong: path/to/theme_song.mp3
|
||||||
|
questionSong: path/to/question_song.mp3
|
||||||
|
|
||||||
|
# change to path, default is /tmp/seopardy/
|
||||||
|
savedir: /tmp/seopardy/
|
||||||
|
|
||||||
|
# player inputs. look in buttonreader.py for available types
|
||||||
|
playerInput:
|
||||||
|
# - Type: Fifo
|
||||||
|
# Args:
|
||||||
|
# - /tmp/seopardy_fifo
|
38
seopardy.py
38
seopardy.py
|
@ -2,21 +2,20 @@
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import os
|
import yaml
|
||||||
import sys
|
import sys
|
||||||
#from PySide import QtCore, QtGui
|
|
||||||
from PySide import QtGui
|
from PySide import QtGui
|
||||||
|
|
||||||
from music import MusicBox
|
from music import MusicBox
|
||||||
from question import Questions
|
from question import Questions
|
||||||
from gamestate import GameState
|
from gamestate import GameState
|
||||||
from game import SeopardyGame
|
from game import SeopardyGame
|
||||||
|
from config import check_config
|
||||||
|
|
||||||
def _parser():
|
def _parser():
|
||||||
parser = argparse.ArgumentParser(description="Sebas jeopardy/beopardy clone")
|
parser = argparse.ArgumentParser(description="Sebas jeopardy/beopardy clone")
|
||||||
parser.add_argument("--fifo", action="store", default="/tmp/seopardy-fifo", help="Name of the fifo to create")
|
|
||||||
parser.add_argument("--gamestate", action="store", default=None, help="Gamestate to load to recover a crashed game")
|
parser.add_argument("--gamestate", action="store", default=None, help="Gamestate to load to recover a crashed game")
|
||||||
parser.add_argument("--savedir", action="store", default="/tmp/seopardy/", help="Directory where to save the temporary gamestates to, in case of game-crash")
|
parser.add_argument("--conf", action="store", default="seopardy.conf", help="Path to config file")
|
||||||
parser.add_argument("questions", action="store", help="Path to questionfile")
|
parser.add_argument("questions", action="store", help="Path to questionfile")
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
@ -25,19 +24,23 @@ if __name__ == '__main__':
|
||||||
parser = _parser()
|
parser = _parser()
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
fifo = None
|
|
||||||
try:
|
|
||||||
if os.path.exists(args.fifo):
|
|
||||||
os.unlink(args.fifo)
|
|
||||||
os.mkfifo(args.fifo)
|
|
||||||
except OSError as e:
|
|
||||||
print("Error: Could not create fifo: %s" % (str(e),), file=sys.stderr)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
questions = Questions(args.questions)
|
questions = Questions(args.questions)
|
||||||
|
|
||||||
# start gui
|
# start gui
|
||||||
app = QtGui.QApplication([])
|
app = QtGui.QApplication([sys.argv[0]])
|
||||||
|
|
||||||
|
# check and load config file
|
||||||
|
config = None
|
||||||
|
try:
|
||||||
|
config = yaml.load(open(args.conf))
|
||||||
|
except IOError as e:
|
||||||
|
print("Error: Could not load config: %s" % (str(e),), file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
except yaml.scanner.ScannerError as e:
|
||||||
|
print("Error: Could not parse config file: %s" % (str(e),), file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
check_config(config)
|
||||||
|
|
||||||
# create or load gamestate
|
# create or load gamestate
|
||||||
gamestate = None
|
gamestate = None
|
||||||
|
@ -48,12 +51,15 @@ if __name__ == '__main__':
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
print("Error: Could not load gamestate: %s" % (str(e),), file=sys.stderr)
|
print("Error: Could not load gamestate: %s" % (str(e),), file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
gamestate = GameState.load(sstream, args.savedir)
|
gamestate = GameState.load(sstream, config["savedir"])
|
||||||
else:
|
else:
|
||||||
gamestate = GameState(args.savedir)
|
gamestate = GameState(config["savedir"])
|
||||||
|
|
||||||
# init music box
|
# init music box
|
||||||
MusicBox.init()
|
MusicBox.init()
|
||||||
|
for name, path in config["music"].iteritems():
|
||||||
|
if path:
|
||||||
|
MusicBox.add_music(name, path)
|
||||||
|
|
||||||
# create board
|
# create board
|
||||||
board = SeopardyGame(questions, gamestate)
|
board = SeopardyGame(questions, gamestate)
|
||||||
|
|
Loading…
Reference in New Issue