/usr/share/games/fretsonfire/game/Config.py is in fretsonfire-game 1.3.110.dfsg2-5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | #####################################################################
# -*- coding: iso-8859-1 -*- #
# #
# Frets on Fire #
# Copyright (C) 2006 Sami Kyöstilä #
# #
# This program is free software; you can redistribute it and/or #
# modify it under the terms of the GNU General Public License #
# as published by the Free Software Foundation; either version 2 #
# of the License, or (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program; if not, write to the Free Software #
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, #
# MA 02110-1301, USA. #
#####################################################################
from ConfigParser import ConfigParser
import Log
import Resource
import os
encoding = "iso-8859-1"
config = None
prototype = {}
class Option:
"""A prototype configuration key."""
def __init__(self, **args):
for key, value in args.items():
setattr(self, key, value)
def define(section, option, type, default = None, text = None, options = None, prototype = prototype):
"""
Define a configuration key.
@param section: Section name
@param option: Option name
@param type: Key type (e.g. str, int, ...)
@param default: Default value for the key
@param text: Text description for the key
@param options: Either a mapping of values to text descriptions
(e.g. {True: 'Yes', False: 'No'}) or a list of possible values
@param prototype: Configuration prototype mapping
"""
if not section in prototype:
prototype[section] = {}
if type == bool and not options:
options = [True, False]
prototype[section][option] = Option(type = type, default = default, text = text, options = options)
def load(fileName = None, setAsDefault = False):
"""Load a configuration with the default prototype"""
global config
c = Config(prototype, fileName)
if setAsDefault and not config:
config = c
return c
class Config:
"""A configuration registry."""
def __init__(self, prototype, fileName = None):
"""
@param prototype: The configuration protype mapping
@param fileName: The file that holds this configuration registry
"""
self.prototype = prototype
# read configuration
self.config = ConfigParser()
if fileName:
if not os.path.isfile(fileName):
path = Resource.getWritableResourcePath()
fileName = os.path.join(path, fileName)
self.config.read(fileName)
self.fileName = fileName
# fix the defaults and non-existing keys
for section, options in prototype.items():
if not self.config.has_section(section):
self.config.add_section(section)
for option in options.keys():
type = options[option].type
default = options[option].default
if not self.config.has_option(section, option):
self.config.set(section, option, str(default))
def get(self, section, option):
"""
Read a configuration key.
@param section: Section name
@param option: Option name
@return: Key value
"""
try:
type = self.prototype[section][option].type
default = self.prototype[section][option].default
except KeyError:
Log.warn("Config key %s.%s not defined while reading." % (section, option))
type, default = str, None
value = self.config.has_option(section, option) and self.config.get(section, option) or default
if type == bool:
value = str(value).lower()
if value in ("1", "true", "yes", "on"):
value = True
else:
value = False
else:
value = type(value)
#Log.debug("%s.%s = %s" % (section, option, value))
return value
def set(self, section, option, value):
"""
Set the value of a configuration key.
@param section: Section name
@param option: Option name
@param value: Value name
"""
try:
prototype[section][option]
except KeyError:
Log.warn("Config key %s.%s not defined while writing." % (section, option))
if not self.config.has_section(section):
self.config.add_section(section)
if type(value) == unicode:
value = value.encode(encoding)
else:
value = str(value)
self.config.set(section, option, value)
f = open(self.fileName, "w")
self.config.write(f)
f.close()
def get(section, option):
"""
Read the value of a global configuration key.
@param section: Section name
@param option: Option name
@return: Key value
"""
global config
return config.get(section, option)
def set(section, option, value):
"""
Write the value of a global configuration key.
@param section: Section name
@param option: Option name
@param value: New key value
"""
global config
return config.set(section, option, value)
|