def test_everything_optional_is_allowed(self): data = {'b': 'b', 'c': 'c', 'd': 'd'} schema = ( (optional('z'), 'd'), (optional('f'), 'f'), ) result = validate(data, schema, defined_keys=True) assert result is None
def test_top_level_cherry_pick_with_optionals_passes(self): data = {'b': 'b', 'c': 'c', 'd': 'd'} schema = cherry_pick(( ('b', types.string), (optional('optional'), types.string)) ) assert validate(data, schema) is None
def test_top_level_cherry_pick_with_optionals_complains(self): data = {'b': 'b', 'optional': 1, 'garbage': 'yes'} schema = (('b', types.string), (optional('optional'), types.string)) with raises(Invalid) as exc: validate(data, schema, defined_keys=True) error = exc.value.args[0] assert '1 did not pass validation against callable: string' in error
def test_complain_about_non_alpha_optional_schema(self): data = {'a': 'a', 'b': 'b', 'c': 'c'} schema = ((optional('b'), 'b'), ('a', 'a'), ('c', 'c')) with raises(SchemaError) as exc: validate(data, schema) error = exc.value.args[0] assert "b schema item is not alphabetically ordered" in error
def test_extra_unexpected_items(self): optional_schema = (optional(1), 1) schema = ('a', Hybrid(validator, optional_schema)) data = {'a': {'foo': 'bar'}} with raises(Invalid) as exc: validate(data, schema) error = exc.value.args[0] assert '-> a did not match {}' in error assert exc.value.reason == 'unexpected extra items'
def test_optional_key_raises(self): data = {'a': 1, 'b': 3, 'c': 3} schema = (('a', 1), (optional('b'), 2), ('c', 3)) validator = engine.Validator(data, schema) with raises(Invalid) as exc: validator.validate() exc_msg = str(exc.value) assert '3 did not match 2' in exc_msg assert 'b -> 3' in exc_msg
def test_optional_is_kept_optional(self): data = {'b': 'b', 'c': 'c', 'd': 'd'} schema = ( ('d', 'd'), (optional('f'), 'f'), ) result = validate(data, schema, defined_keys=True) assert result is None
def test_extra_unexpected_items(self): optional_schema = (optional(1), 1) schema = ("a", Hybrid(validator, optional_schema)) data = {"a": {"foo": "bar"}} with raises(Invalid) as exc: validate(data, schema) error = exc.value.args[0] assert "-> a did not match {}" in error assert exc.value.reason == "unexpected extra items"
def test_complain_about_non_alpha_optional_schema(self): data = {'a': 'a', 'b': 'b', 'c': 'c'} schema = ((optional('b') ,'b'), ('a', 'a'), ('c', 'c')) with raises(SchemaError) as exc: validate(data, schema) error = exc.value.args[0] assert "b schema item is not alphabetically ordered" in error
def test_top_level_cherry_pick_with_optionals_complains(self): data = {'b': 'b', 'optional': 1} schema = (cherry_pick( ('b', types.string),), (optional('optional'), types.string) ) with raises(Invalid) as exc: validate(data, schema) error = exc.value.args[0] assert '1 did not pass validation against callable: string' in error
def test_optional_does_not_affect_cherry_picked(self): data = {'b': 'b', 'c': 'c', 'd': 'd'} schema = ( ('d', 'a'), (optional('f'), 'f'), ) with raises(Invalid) as exc: validate(data, schema, defined_keys=True) error = exc.value.args[0] assert "-> d -> d did not match 'a'" in error
def test_top_level_cherry_pick_with_optionals_passes(self): data = {'b': 'b', 'c': 'c', 'd': 'd'} schema = cherry_pick( (('b', types.string), (optional('optional'), types.string))) assert validate(data, schema) is None
from notario.validators import types from notario.decorators import optional def list_of_hosts(value): assert isinstance(value, list), "requires format: ['host1', 'host2']" install_schema = (("hosts", list_of_hosts), (optional("redhat_storage"), types.boolean)) mon_configure_schema = ( ("fsid", types.string), ("host", types.string), ("monitor_interface", types.string), (optional("monitor_secret"), types.string), (optional("redhat_storage"), types.boolean), )
from notario.validators import types from notario.decorators import optional repo_schema = ( (optional("distro"), types.string), (optional("distro_version"), types.string), (optional("needs_update"), types.boolean), (optional("ref"), types.string), (optional("type"), types.string), )
from notario.validators import types from notario.decorators import optional repo_schema = ( (optional("distro"), types.string), (optional("distro_version"), types.string), (optional("needs_update"), types.boolean), (optional("ref"), types.string), )
def test_optional_key_passes(self): data = {'a': 1, 'c': 3} schema = (('a', 1), (optional('b'), 2), ('c', 3)) validator = engine.Validator(data, schema) assert validator.validate() is None
def test_optional_key(self): data = {"required": 2, "zoo": 1} schema = ((optional("optional"), 1), ("required", 2), ("zoo", 1)) validate(data, schema)
from notario.validators import types from notario.decorators import optional def list_of_hosts(value): assert isinstance(value, list), "requires format: ['host1', 'host2']" install_schema = ( ("hosts", list_of_hosts), (optional("redhat_storage"), types.boolean), )
def test_optional_key(self): data = {'required': 2, 'zoo': 1} schema = ((optional('optional'), 1), ('required', 2), ('zoo', 1)) validate(data, schema)
from notario.validators import types from notario.decorators import optional def list_of_hosts(value): assert isinstance(value, list), "requires format: ['host1', 'host2']" install_schema = ( ("hosts", list_of_hosts), (optional("redhat_storage"), types.boolean), ) mon_configure_schema = ( ("fsid", types.string), ("host", types.string), ("monitor_interface", types.string), (optional("monitor_secret"), types.string), (optional("redhat_storage"), types.boolean), )
("cluster_network", types.string), ("fsid", types.string), ("monitor_address", validate_monitor_options), ("monitor_address_block", validate_monitor_options), ("monitor_interface", validate_monitor_options), ("public_network", types.string), ) rados_options = ( ("radosgw_address", validate_rados_options), ("radosgw_address_block", validate_rados_options), ("radosgw_interface", validate_rados_options), ) osd_options = ( (optional("dmcrypt"), types.boolean), (optional("osd_auto_discovery"), types.boolean), ("osd_scenario", validate_osd_scenarios), ) collocated_osd_scenario = ("devices", iterables.AllItems(types.string)) non_collocated_osd_scenario = ( (optional("bluestore_wal_devices"), iterables.AllItems(types.string)), (optional("dedicated_devices"), iterables.AllItems(types.string)), ("devices", iterables.AllItems(types.string)), ) lvm_osd_scenario = ("lvm_volumes", iterables.AllItems(( (optional('crush_device_class'), types.string),
("cluster_network", types.string), ("fsid", types.string), ("monitor_address", validate_monitor_options), ("monitor_address_block", validate_monitor_options), ("monitor_interface", validate_monitor_options), ("public_network", types.string), ) rados_options = ( ("radosgw_address", validate_rados_options), ("radosgw_address_block", validate_rados_options), ("radosgw_interface", validate_rados_options), ) osd_options = ( (optional("dmcrypt"), validate_dmcrypt_bool_value), (optional("osd_auto_discovery"), validate_osd_auto_discovery_bool_value), ("osd_scenario", validate_osd_scenarios), ) collocated_osd_scenario = ("devices", iterables.AllItems(types.string)) non_collocated_osd_scenario = ( (optional("bluestore_wal_devices"), iterables.AllItems(types.string)), (optional("dedicated_devices"), iterables.AllItems(types.string)), ("devices", iterables.AllItems(types.string)), ) lvm_batch_scenario = ("devices", iterables.AllItems(types.string)) lvm_filestore_scenario = ("lvm_volumes", iterables.AllItems((
("cluster_network", types.string), ("fsid", types.string), ("monitor_address", validate_monitor_options), ("monitor_address_block", validate_monitor_options), ("monitor_interface", validate_monitor_options), ("public_network", types.string), ) rados_options = ( ("radosgw_address", validate_rados_options), ("radosgw_address_block", validate_rados_options), ("radosgw_interface", validate_rados_options), ) osd_options = ( (optional("dmcrypt"), validate_dmcrypt_bool_value), (optional("osd_auto_discovery"), types.boolean), ) lvm_batch_scenario = ("devices", iterables.AllItems(types.string)) lvm_filestore_scenario = ("lvm_volumes", iterables.AllItems(( (optional('crush_device_class'), types.string), ('data', types.string), (optional('data_vg'), types.string), ('journal', types.string), (optional('journal_vg'), types.string), ))) lvm_bluestore_scenario = ("lvm_volumes",
def test_optional_value(self): data = {"optional": "", "required": 2} schema = (("optional", optional(1)), ("required", 2)) validate(data, schema)
def test_optional_value(self): data = {'optional': '', 'required': 2} schema = (('optional', optional(1)), ('required', 2)) validate(data, schema)
def list_of_monitors(value): msg = 'requires format: [{"host": "mon1.host", "interface": "eth1"},{"host": "mon2.host", "address": "10.0.0.1"}]' assert isinstance(value, list), msg msg = 'address or interface is required for monitor lists: [{"host": "mon1", "interface": "eth1", {"host": "mon2", "address": "10.0.0.1"}]' for monitor in value: assert isinstance(monitor, dict), msg assert "host" in monitor, msg try: assert "interface" in monitor, msg except AssertionError: assert "address" in monitor, msg conf = ( (optional("global"), types.dictionary), (optional("mds"), types.dictionary), (optional("mon"), types.dictionary), (optional("osd"), types.dictionary), (optional("rgw"), types.dictionary), ) install_schema = ( ("hosts", list_of_hosts), (optional("redhat_storage"), types.boolean), (optional("redhat_use_cdn"), types.boolean), (optional("verbose"), types.boolean), ) agent_install_schema = ( ("hosts", list_of_hosts),
def optional(validator): from notario import decorators msg = "import optional from notario.decorators, not from utils" warnings.warn(msg, DeprecationWarning, stacklevel=2) return decorators.optional(validator)
CONF = cfg.CONF LOG = log.getLogger(__name__) CONDUCTOR_API_OPTS = [ cfg.StrOpt('server_url', default='', help='Base URL for plans.'), cfg.StrOpt('username', default='', help='username for plans.'), cfg.StrOpt('password', default='', help='password for plans.'), cfg.BoolOpt('basic_auth_secure', default=True, help='auth toggling.'), ] CONF.register_opts(CONDUCTOR_API_OPTS, group='conductor_api') CREATE_SCHEMA = ( (decorators.optional('files'), types.dictionary), (decorators.optional('id'), types.string), (decorators.optional('limit'), types.integer), (decorators.optional('name'), types.string), (decorators.optional('num_solution'), types.string), ('template', string_or_dict), (decorators.optional('template_url'), types.string), (decorators.optional('timeout'), types.integer), ) class PlansBaseController(object): """Plans Base Controller - Common Methods""" def plan_link(self, plan_id): return [{ "href": "%(url)s/v1/%(endpoint)s/%(id)s" % {
("cluster_network", types.string), ("fsid", types.string), ("monitor_address", validate_monitor_options), ("monitor_address_block", validate_monitor_options), ("monitor_interface", validate_monitor_options), ("public_network", types.string), ) rados_options = ( ("radosgw_address", validate_rados_options), ("radosgw_address_block", validate_rados_options), ("radosgw_interface", validate_rados_options), ) osd_options = ( (optional("dmcrypt"), types.boolean), (optional("osd_auto_discovery"), types.boolean), ) lvm_batch_scenario = ("devices", iterables.AllItems(types.string)) lvm_filestore_scenario = ("lvm_volumes", iterables.AllItems(( (optional('crush_device_class'), types.string), ('data', types.string), (optional('data_vg'), types.string), ('journal', types.string), (optional('journal_vg'), types.string), ))) lvm_bluestore_scenario = ("lvm_volumes", iterables.AllItems(( (optional('crush_device_class'), types.string),