mirror of
https://github.com/LibreELEC/LibreELEC.tv
synced 2025-09-24 19:46:01 +07:00
117 lines
3.6 KiB
Python
Executable File
117 lines
3.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
################################################################################
|
|
# This file is part of OpenELEC - http://www.openelec.tv
|
|
# Copyright (C) 2011 Travis Glenn Hansen (travisghansen@openelec.tv)
|
|
#
|
|
# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to
|
|
# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
# http://www.gnu.org/copyleft/gpl.html
|
|
################################################################################
|
|
|
|
from configobj import ConfigObj
|
|
import sys
|
|
import os
|
|
import string
|
|
|
|
python_major = sys.version_info[0]
|
|
python_minor = sys.version_info[1]
|
|
|
|
prog="ini_tool"
|
|
description="""Read/Write config files.
|
|
|
|
Examples:
|
|
%(prog)s --file config.ini --action read --option [section:]username
|
|
%(prog)s --file config.ini --action write --option [section:]username --value foo""" % {'prog':prog}
|
|
|
|
def option_required_error(option):
|
|
parser.print_usage()
|
|
print prog + ": error: " + option + " is required"
|
|
exit(2)
|
|
|
|
if python_major > 2 or (python_major == 2 and python_minor >= 7):
|
|
import argparse
|
|
|
|
parser = argparse.ArgumentParser(
|
|
prog=prog,
|
|
description=description,
|
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
)
|
|
|
|
parser.add_argument('--file', help='file to read/write to/from', required=True)
|
|
parser.add_argument('--action', help='read|write', required=True)
|
|
parser.add_argument('--option', help='the option key', required=True)
|
|
parser.add_argument('--value', help='value to store in the given option (only for write action)')
|
|
|
|
options = parser.parse_args()
|
|
|
|
else:
|
|
import optparse
|
|
|
|
parser = optparse.OptionParser(
|
|
prog=prog,
|
|
description=description,
|
|
)
|
|
|
|
parser.add_option('--file', help='file to read/write to/from')
|
|
parser.add_option('--action', help='read|write')
|
|
parser.add_option('--option', help='the option key')
|
|
parser.add_option('--value', help='value to store in the given option (only for write action)')
|
|
|
|
(options, args) = parser.parse_args()
|
|
|
|
if not options.file:
|
|
option_required_error("--file")
|
|
if not options.action:
|
|
option_required_error("--action")
|
|
if not options.option:
|
|
option_required_error("--option")
|
|
|
|
|
|
if options.action != "read" and options.action != "write":
|
|
print "'" + options.action + "' is not a valid action"
|
|
parser.print_help()
|
|
exit(2)
|
|
|
|
if options.action == "read" and not os.path.isfile(options.file):
|
|
print "'" + options.file + "' is not a file"
|
|
exit(2)
|
|
|
|
config = ConfigObj(options.file)
|
|
keys = string.split(options.option, ":")
|
|
key_len = len(keys)
|
|
current_section = config
|
|
|
|
if options.action == 'read':
|
|
i = 1
|
|
for key in keys:
|
|
if i == key_len:
|
|
print current_section[key]
|
|
exit(0)
|
|
else:
|
|
current_section = current_section[key]
|
|
i += 1
|
|
elif options.action == 'write':
|
|
i = 1
|
|
for key in keys:
|
|
if i == key_len:
|
|
current_section[key] = options.value
|
|
elif key not in current_section:
|
|
current_section[key] = {}
|
|
current_section = current_section[key]
|
|
i += 1
|
|
|
|
config.write()
|
|
else:
|
|
exit(1) |