From cdc32b7cc05f27d2c690fdcd01a4331e929bbfbf Mon Sep 17 00:00:00 2001 From: Uriziel Date: Wed, 19 Sep 2012 17:12:09 +0200 Subject: [PATCH] utils to ConfiguratorGetter split --- syncplay/ConfigurationGetter.py | 143 ++++++++++++++++++++++++++++++++ syncplay/utils.py | 140 ------------------------------- 2 files changed, 143 insertions(+), 140 deletions(-) create mode 100644 syncplay/ConfigurationGetter.py diff --git a/syncplay/ConfigurationGetter.py b/syncplay/ConfigurationGetter.py new file mode 100644 index 0000000..978725a --- /dev/null +++ b/syncplay/ConfigurationGetter.py @@ -0,0 +1,143 @@ +import ConfigParser +import argparse +import sys +import os + +class ConfigurationGetter(object): + def __init__(self): + self._config = None + self._args = None + self._syncplayClient = None + self._workingDir = None + self._parser = None + + def _findWorkingDirectory(self): + frozen = getattr(sys, 'frozen', '') + if not frozen: + self._workingDir = os.path.dirname(os.path.dirname(__file__)) + elif frozen in ('dll', 'console_exe', 'windows_exe'): + self._workingDir = os.path.dirname(sys.executable) + else: + raise Exception('Working dir not found') + + def _prepareArgParser(self): + self._parser = argparse.ArgumentParser(description='Solution to synchronize playback of multiple MPlayer and MPC-HC instances over the network.', + epilog='If no options supplied _config values will be used') + self._parser.add_argument('--no-gui', action='store_true', help='show no GUI') + self._parser.add_argument('--host', metavar='hostname', type=str, help='server\'s address') + self._parser.add_argument('--name', metavar='username', type=str, help='desired username') + self._parser.add_argument('-d','--debug', action='store_true', help='debug mode') + self._parser.add_argument('--no-store', action='store_true', help='don\'t store values in syncplay.ini') + self._parser.add_argument('--room', metavar='room', type=str, nargs='?', help='default room') + self._parser.add_argument('--password', metavar='password', type=str, nargs='?', help='server password') + self._parser.add_argument('file', metavar='file', type=str, nargs='?', help='file to play') + self._parser.add_argument('_args', metavar='options', type=str, nargs='*', help='player options, if you need to pass options starting with - prepend them with single \'--\' argument') + + def _openConfigFile(self): + if(not self._config): + self._config = ConfigParser.RawConfigParser(allow_no_value=True) + self._config.read(os.path.join(self._workingDir, 'syncplay.ini')) + + def _getSectionName(self): + return 'sync' if not self._args.debug else 'debug' + + def saveValuesIntoConfigFile(self): + self._openConfigFile() + section_name = self._getSectionName() + if(not self._args.no_store): + with open(os.path.join(self._workingDir, 'syncplay.ini'), 'wb') as configfile: + if(not self._config.has_section(section_name)): + self._config.add_section(section_name) + self._setUpValuesToSave(section_name) + self._config.write(configfile) + + def _setUpValuesToSave(self, section_name): + self._config.set(section_name, 'host', self._args.host) + self._config.set(section_name, 'name', self._args.name) + self._config.set(section_name, 'room', self._args.room) + self._config.set(section_name, 'password', self._args.password) + + def _readConfigValue(self, section_name, name): + try: + return self._config.get(section_name, name) + except ConfigParser.NoOptionError: + return None + + def _readMissingValuesFromConfigFile(self): + self._openConfigFile() + section_name = self._getSectionName() + try: + self._valuesToReadFromConfig(section_name) + except ConfigParser.NoSectionError: + pass + + + def _valuesToReadFromConfig(self, section_name): + if (self._args.host == None): + self._args.host = self._readConfigValue(section_name, 'host') + if (self._args.name == None): + self._args.name = self._readConfigValue(section_name, 'name') + if (self._args.room == None): + self._args.room = self._readConfigValue(section_name, 'room') + if (self._args.password == None): + self._args.password = self._readConfigValue(section_name, 'password') + + + + def _splitPortAndHost(self): + if(self._args.host): + if ':' in self._args.host: + self._args.host, port = self._args.host.split(':', 1) + self._args.port = int(port) + else: + self._args.port = 8999 + + def getConfiguration(self): + self._findWorkingDirectory() + self._prepareArgParser() + self._args = self._parser.parse_args() + self._readMissingValuesFromConfigFile() + self.saveValuesIntoConfigFile() + self._splitPortAndHost() + return self._args + + +class MPCConfigurationGetter(ConfigurationGetter): + def _prepareArgParser(self): + ConfigurationGetter._prepareArgParser(self) + self._parser.add_argument('--mpc-path', metavar='path', type=str, help='path to mpc-hc.exe (only for sync_mpc_api client)') + + def _setUpValuesToSave(self, section_name): + ConfigurationGetter._setUpValuesToSave(self, section_name) + self._config.set(section_name, 'mpc_path', self._args.mpc_path) + + def _valuesToReadFromConfig(self, section_name): + ConfigurationGetter._valuesToReadFromConfig(self, section_name) + if (self._args.mpc_path == None): + self._args.mpc_path = self._readConfigValue(section_name, 'mpc_path') + + def __addSpecialMPCFlags(self): + self._args._args.extend(['/open', '/new']) + + def getConfiguration(self): + ConfigurationGetter.getConfiguration(self) + self.__addSpecialMPCFlags() + return self._args + + +class ServerConfigurationGetter(ConfigurationGetter): + def getConfiguration(self): + self._prepareArgParser() + self._args = self._parser.parse_args() + if(self._args.port == None): + self._args.port = 8999 + return self._args + + def _prepareArgParser(self): + self._parser = argparse.ArgumentParser(description='Solution to synchronize playback of multiple MPlayer and MPC-HC instances over the network. Server instance', + epilog='If no options supplied _config values will be used') + self._parser.add_argument('--port', metavar='port', type=str, nargs='?', help='server TCP port') + self._parser.add_argument('--password', metavar='password', type=str, nargs='?', help='server password') + self._parser.add_argument('--isolate-rooms', action='store_true', help='should rooms be isolated?') + + \ No newline at end of file diff --git a/syncplay/utils.py b/syncplay/utils.py index 067ffd8..7e5fd36 100644 --- a/syncplay/utils.py +++ b/syncplay/utils.py @@ -1,7 +1,5 @@ #coding:utf8 -import ConfigParser -import argparse import os import re import sys @@ -81,141 +79,3 @@ def stdin_thread(manager): except: pass -class ConfigurationGetter(object): - def __init__(self): - self._config = None - self._args = None - self._syncplayClient = None - self._workingDir = None - self._parser = None - - def _findWorkingDirectory(self): - frozen = getattr(sys, 'frozen', '') - if not frozen: - self._workingDir = os.path.dirname(os.path.dirname(__file__)) - elif frozen in ('dll', 'console_exe', 'windows_exe'): - self._workingDir = os.path.dirname(sys.executable) - else: - raise Exception('Working dir not found') - - def _prepareArgParser(self): - self._parser = argparse.ArgumentParser(description='Solution to synchronize playback of multiple MPlayer and MPC-HC instances over the network.', - epilog='If no options supplied _config values will be used') - self._parser.add_argument('--no-gui', action='store_true', help='show no GUI') - self._parser.add_argument('--host', metavar='hostname', type=str, help='server\'s address') - self._parser.add_argument('--name', metavar='username', type=str, help='desired username') - self._parser.add_argument('-d','--debug', action='store_true', help='debug mode') - self._parser.add_argument('--no-store', action='store_true', help='don\'t store values in syncplay.ini') - self._parser.add_argument('--room', metavar='room', type=str, nargs='?', help='default room') - self._parser.add_argument('--password', metavar='password', type=str, nargs='?', help='server password') - self._parser.add_argument('file', metavar='file', type=str, nargs='?', help='file to play') - self._parser.add_argument('_args', metavar='options', type=str, nargs='*', help='player options, if you need to pass options starting with - prepend them with single \'--\' argument') - - def _openConfigFile(self): - if(not self._config): - self._config = ConfigParser.RawConfigParser(allow_no_value=True) - self._config.read(os.path.join(self._workingDir, 'syncplay.ini')) - - def _getSectionName(self): - return 'sync' if not self._args.debug else 'debug' - - def saveValuesIntoConfigFile(self): - self._openConfigFile() - section_name = self._getSectionName() - if(not self._args.no_store): - with open(os.path.join(self._workingDir, 'syncplay.ini'), 'wb') as configfile: - if(not self._config.has_section(section_name)): - self._config.add_section(section_name) - self._setUpValuesToSave(section_name) - self._config.write(configfile) - - def _setUpValuesToSave(self, section_name): - self._config.set(section_name, 'host', self._args.host) - self._config.set(section_name, 'name', self._args.name) - self._config.set(section_name, 'room', self._args.room) - self._config.set(section_name, 'password', self._args.password) - - def _readConfigValue(self, section_name, name): - try: - return self._config.get(section_name, name) - except ConfigParser.NoOptionError: - return None - - def _readMissingValuesFromConfigFile(self): - self._openConfigFile() - section_name = self._getSectionName() - try: - self._valuesToReadFromConfig(section_name) - except ConfigParser.NoSectionError: - pass - - - def _valuesToReadFromConfig(self, section_name): - if (self._args.host == None): - self._args.host = self._readConfigValue(section_name, 'host') - if (self._args.name == None): - self._args.name = self._readConfigValue(section_name, 'name') - if (self._args.room == None): - self._args.room = self._readConfigValue(section_name, 'room') - if (self._args.password == None): - self._args.password = self._readConfigValue(section_name, 'password') - - - - def _splitPortAndHost(self): - if(self._args.host): - if ':' in self._args.host: - self._args.host, port = self._args.host.split(':', 1) - self._args.port = int(port) - else: - self._args.port = 8999 - - def getConfiguration(self): - self._findWorkingDirectory() - self._prepareArgParser() - self._args = self._parser.parse_args() - self._readMissingValuesFromConfigFile() - self.saveValuesIntoConfigFile() - self._splitPortAndHost() - return self._args - - -class MPCConfigurationGetter(ConfigurationGetter): - def _prepareArgParser(self): - ConfigurationGetter._prepareArgParser(self) - self._parser.add_argument('--mpc-path', metavar='path', type=str, help='path to mpc-hc.exe (only for sync_mpc_api client)') - - def _setUpValuesToSave(self, section_name): - ConfigurationGetter._setUpValuesToSave(self, section_name) - self._config.set(section_name, 'mpc_path', self._args.mpc_path) - - def _valuesToReadFromConfig(self, section_name): - ConfigurationGetter._valuesToReadFromConfig(self, section_name) - if (self._args.mpc_path == None): - self._args.mpc_path = self._readConfigValue(section_name, 'mpc_path') - - def __addSpecialMPCFlags(self): - self._args._args.extend(['/open', '/new']) - - def getConfiguration(self): - ConfigurationGetter.getConfiguration(self) - self.__addSpecialMPCFlags() - return self._args - - -class ServerConfigurationGetter(ConfigurationGetter): - def getConfiguration(self): - self._prepareArgParser() - self._args = self._parser.parse_args() - if(self._args.port == None): - self._args.port = 8999 - return self._args - - def _prepareArgParser(self): - self._parser = argparse.ArgumentParser(description='Solution to synchronize playback of multiple MPlayer and MPC-HC instances over the network. Server instance', - epilog='If no options supplied _config values will be used') - self._parser.add_argument('--port', metavar='port', type=str, nargs='?', help='server TCP port') - self._parser.add_argument('--password', metavar='password', type=str, nargs='?', help='server password') - self._parser.add_argument('--isolate-rooms', action='store_true', help='should rooms be isolated?') - - \ No newline at end of file