Strings setting works like Server from CLI

This commit is contained in:
Lex Berezhny 2019-06-04 16:48:12 -04:00
parent 69345b4b0e
commit d8630a02d9
2 changed files with 20 additions and 11 deletions

View file

@ -192,7 +192,17 @@ class MaxKeyFee(Setting[dict]):
) )
class Servers(Setting[list]): class ListSetting(Setting[list]):
def contribute_to_argparse(self, parser: ArgumentParser):
parser.add_argument(
self.cli_name,
help=self.doc,
action='append'
)
class Servers(ListSetting):
def validate(self, val): def validate(self, val):
assert isinstance(val, (tuple, list)), \ assert isinstance(val, (tuple, list)), \
@ -225,15 +235,8 @@ class Servers(Setting[list]):
return [f"{host}:{port}" for host, port in value] return [f"{host}:{port}" for host, port in value]
return value return value
def contribute_to_argparse(self, parser: ArgumentParser):
parser.add_argument(
self.cli_name,
help=self.doc,
action='append'
)
class Strings(ListSetting):
class Strings(Setting[list]):
def validate(self, val): def validate(self, val):
assert isinstance(val, (tuple, list)), \ assert isinstance(val, (tuple, list)), \
@ -268,7 +271,7 @@ class ArgumentAccess:
def load(self, args): def load(self, args):
for setting in self.configuration.get_settings(): for setting in self.configuration.get_settings():
value = getattr(args, setting.name, NOT_SET) value = getattr(args, setting.name, NOT_SET)
if value != NOT_SET and not (isinstance(setting, Servers) and value is None): if value != NOT_SET and not (isinstance(setting, ListSetting) and value is None):
self.args[setting.name] = setting.deserialize(value) self.args[setting.name] = setting.deserialize(value)
def __contains__(self, item: str): def __contains__(self, item: str):

View file

@ -4,7 +4,7 @@ import types
import tempfile import tempfile
import unittest import unittest
import argparse import argparse
from lbrynet.conf import Config, BaseConfig, String, Integer, Toggle, Servers, NOT_SET from lbrynet.conf import Config, BaseConfig, String, Integer, Toggle, Servers, Strings, NOT_SET
from lbrynet.error import InvalidCurrencyError from lbrynet.error import InvalidCurrencyError
@ -14,6 +14,7 @@ class TestConfig(BaseConfig):
test_false_toggle = Toggle('toggle help', False) test_false_toggle = Toggle('toggle help', False)
test_true_toggle = Toggle('toggle help', True) test_true_toggle = Toggle('toggle help', True)
servers = Servers('servers help', [('localhost', 80)]) servers = Servers('servers help', [('localhost', 80)])
strings = Strings('cheese', ['string'])
class ConfigurationTests(unittest.TestCase): class ConfigurationTests(unittest.TestCase):
@ -54,6 +55,7 @@ class ConfigurationTests(unittest.TestCase):
self.assertTrue(c.test_true_toggle) self.assertTrue(c.test_true_toggle)
self.assertFalse(c.test_false_toggle) self.assertFalse(c.test_false_toggle)
self.assertEqual(c.servers, [('localhost', 80)]) self.assertEqual(c.servers, [('localhost', 80)])
self.assertEqual(c.strings, ['string'])
args = parser.parse_args(['--test-str', 'blah']) args = parser.parse_args(['--test-str', 'blah'])
c = TestConfig.create_from_arguments(args) c = TestConfig.create_from_arguments(args)
@ -80,6 +82,10 @@ class ConfigurationTests(unittest.TestCase):
c = TestConfig.create_from_arguments(args) c = TestConfig.create_from_arguments(args)
self.assertEqual(c.servers, [('localhost', 1), ('192.168.0.1', 2)]) self.assertEqual(c.servers, [('localhost', 1), ('192.168.0.1', 2)])
args = parser.parse_args(['--strings=cheddar', '--strings=mozzarella'])
c = TestConfig.create_from_arguments(args)
self.assertEqual(c.strings, ['cheddar', 'mozzarella'])
def test_environment(self): def test_environment(self):
c = TestConfig() c = TestConfig()
self.assertEqual(c.test_str, 'the default') self.assertEqual(c.test_str, 'the default')