Ejemplo n.º 1
0
    async def _validate(self, schema_name, data, id=None):
        verrors = ValidationErrors()

        await self._ensure_unique(verrors, schema_name, "name", data["name"],
                                  id)

        if data["type"] not in TYPES:
            verrors.add(f"{schema_name}.type", "Invalid type")
            raise verrors
        else:
            type = TYPES[data["type"]]

            attributes_verrors = validate_schema(type.credentials_schema,
                                                 data["attributes"])
            verrors.add_child(f"{schema_name}.attributes", attributes_verrors)

        if verrors:
            raise verrors

        await type.validate_and_pre_save(self.middleware, verrors,
                                         f"{schema_name}.attributes",
                                         data["attributes"])

        if verrors:
            raise verrors
Ejemplo n.º 2
0
def construct_schema(
    item_version_details: dict, new_values: dict, update: bool, old_values: Union[dict, object] = NOT_PROVIDED
) -> dict:
    schema_name = f'chart_release_{"update" if update else "create"}'
    attrs = list(itertools.chain.from_iterable(
        get_schema(q, update, old_values) for q in item_version_details['schema']['questions']
    ))
    dict_obj = update_conditional_defaults(
        Dict(schema_name, *attrs, update=update, additional_attrs=True), {
            'schema': {'attrs': item_version_details['schema']['questions']}
        }
    )

    verrors = ValidationErrors()
    verrors.add_child('values', validate_schema(
        attrs, new_values, True, dict_kwargs={
            'conditional_defaults': dict_obj.conditional_defaults, 'update': update,
        }
    ))
    return {
        'verrors': verrors,
        'new_values': new_values,
        'dict_obj': dict_obj,
        'schema_name': schema_name,
    }
Ejemplo n.º 3
0
    async def do_update(self, data):
        """
        Update default Alert settings.

        .. examples(rest)::

        Set ClassName's level to LEVEL and policy to POLICY. Reset settings for other alert classes.

        {
            "classes": {
                "ClassName": {
                    "level": "LEVEL",
                    "policy": "POLICY",
                }
            }
        }
        """
        old = await self.config()

        new = old.copy()
        new.update(data)

        verrors = ValidationErrors()

        for k, v in new["classes"].items():
            if k not in AlertClass.class_by_name:
                verrors.add(f"alert_class_update.classes.{k}",
                            "This alert class does not exist")

            verrors.add_child(
                f"alert_class_update.classes.{k}",
                validate_schema([
                    Str("level", enum=list(AlertLevel.__members__)),
                    Str("policy", enum=POLICIES),
                    Bool("proactive_support"),
                ], v),
            )

            if "proactive_support" in v and not AlertClass.class_by_name[
                    k].proactive_support:
                verrors.add(
                    f"alert_class_update.classes.{k}.proactive_support",
                    "Proactive support is not supported by this alert class",
                )

        if verrors:
            raise verrors

        await self.middleware.call("datastore.update", self._config.datastore,
                                   old["id"], new)

        return await self.config()
Ejemplo n.º 4
0
    async def _validate(self, schema_name, data, id=None):
        verrors = ValidationErrors()

        await self._ensure_unique(verrors, schema_name, "name", data["name"], id)

        if data["provider"] not in REMOTES:
            verrors.add(f"{schema_name}.provider", "Invalid provider")
        else:
            provider = REMOTES[data["provider"]]

            attributes_verrors = validate_schema(provider.credentials_schema, data["attributes"])
            verrors.add_child(f"{schema_name}.attributes", attributes_verrors)

        if verrors:
            raise verrors
Ejemplo n.º 5
0
    async def _validate(self, service, schema_name):
        verrors = ValidationErrors()

        factory = ALERT_SERVICES_FACTORIES.get(service["type"])
        if factory is None:
            verrors.add(f"{schema_name}.type", "This field has invalid value")
            raise verrors

        verrors.add_child(
            f"{schema_name}.attributes",
            validate_schema(list(factory.schema.attrs.values()),
                            service["attributes"]))

        if verrors:
            raise verrors
Ejemplo n.º 6
0
    async def _basic_validate(self, verrors, name, data):
        if data["encryption"]:
            if not data["encryption_password"]:
                verrors.add(f"{name}.encryption_password", "This field is required when encryption is enabled")

        credentials = await self._get_credentials(data["credentials"])
        if not credentials:
            verrors.add(f"{name}.credentials", "Invalid credentials")

        try:
            shlex.split(data["args"])
        except ValueError as e:
            verrors.add(f"{name}.args", f"Parse error: {e.args[0]}")

        if verrors:
            raise verrors

        provider = REMOTES[credentials["provider"]]

        schema = []

        if provider.buckets:
            schema.append(Str("bucket", required=True, empty=False))

        schema.append(Str("folder", required=True))

        schema.extend(provider.task_schema)

        schema.extend(self.common_task_schema(provider))

        attributes_verrors = validate_schema(schema, data["attributes"])

        if not attributes_verrors:
            await provider.pre_save_task(data, credentials, verrors)

        verrors.add_child(f"{name}.attributes", attributes_verrors)
Ejemplo n.º 7
0
def test__validate_schema(schema, data, result):
    verrors = validate_schema(schema, data)
    if isinstance(result, set):
        assert result == {e.attribute for e in verrors.errors}
    else:
        assert data == result