Ejemplo n.º 1
0
 def get_json_schema(self) -> Mapping[str, Any]:
     """Add fields from breakdowns to the stream schema
     :return: A dict of the JSON schema representing this stream.
     """
     loader = ResourceSchemaLoader(package_name_from_class(self.__class__))
     schema = loader.get_schema("ads_insights")
     if self._fields:
         schema["properties"] = {k: v for k, v in schema["properties"].items() if k in self._fields}
     if self.breakdowns:
         breakdowns_properties = loader.get_schema("ads_insights_breakdowns")["properties"]
         schema["properties"].update({prop: breakdowns_properties[prop] for prop in self.breakdowns})
     return schema
Ejemplo n.º 2
0
    def test_inline_schema_resolves():
        expected_schema = {
            "type": ["null", "object"],
            "properties": {
                "str": {
                    "type": "string"
                },
                "int": {
                    "type": "integer"
                },
                "obj": {
                    "type": ["null", "object"],
                    "properties": {
                        "k1": {
                            "type": "string"
                        }
                    },
                },
            },
        }

        create_schema("simple_schema", expected_schema)
        resolver = ResourceSchemaLoader(MODULE_NAME)
        actual_schema = resolver.get_schema("simple_schema")
        assert actual_schema == expected_schema
Ejemplo n.º 3
0
    def test_shared_schemas_resolves():
        expected_schema = {
            "type": ["null", "object"],
            "properties": {
                "str": {
                    "type": "string"
                },
                "int": {
                    "type": "integer"
                },
                "obj": {
                    "$ref": "#/definitions/shared_schema_"
                },
            },
            "definitions": {
                "shared_schema_": {
                    "type": ["null", "object"],
                    "properties": {
                        "k1": {
                            "type": "string"
                        }
                    }
                }
            },
        }

        partial_schema = {
            "type": ["null", "object"],
            "properties": {
                "str": {
                    "type": "string"
                },
                "int": {
                    "type": "integer"
                },
                "obj": {
                    "$ref": "shared_schema.json"
                }
            },
        }

        referenced_schema = {
            "type": ["null", "object"],
            "properties": {
                "k1": {
                    "type": "string"
                }
            }
        }

        create_schema("complex_schema", partial_schema)
        create_schema("shared/shared_schema", referenced_schema)

        resolver = ResourceSchemaLoader(MODULE_NAME)

        actual_schema = resolver.get_schema("complex_schema")
        assert actual_schema == expected_schema
Ejemplo n.º 4
0
    def _check_custom_insights_entries(self, insights: List[Mapping[str,
                                                                    Any]]):

        loader = ResourceSchemaLoader(package_name_from_class(self.__class__))
        default_fields = list(
            loader.get_schema("ads_insights").get("properties", {}).keys())
        default_breakdowns = list(
            loader.get_schema("ads_insights_breakdowns").get("properties",
                                                             {}).keys())
        default_action_breakdowns = list(
            loader.get_schema("ads_insights_action_breakdowns").get(
                "properties", {}).keys())

        for insight in insights:
            if insight.get("fields"):
                value_checked, value = self._check_values(
                    default_fields, insight.get("fields"))
                if not value_checked:
                    message = f"{value} is not a valid field name"
                    raise Exception("Config validation error: " +
                                    message) from None
            if insight.get("breakdowns"):
                value_checked, value = self._check_values(
                    default_breakdowns, insight.get("breakdowns"))
                if not value_checked:
                    message = f"{value} is not a valid breakdown name"
                    raise Exception("Config validation error: " +
                                    message) from None
            if insight.get("action_breakdowns"):
                value_checked, value = self._check_values(
                    default_action_breakdowns,
                    insight.get("action_breakdowns"))
                if not value_checked:
                    message = f"{value} is not a valid action_breakdown name"
                    raise Exception("Config validation error: " +
                                    message) from None

        return True
Ejemplo n.º 5
0
    def test_shared_schemas_resolves_nested():
        expected_schema = {
            "type": ["null", "object"],
            "properties": {
                "str": {
                    "type": "string"
                },
                "int": {
                    "type": "integer"
                },
                "one_of": {
                    "oneOf": [
                        {
                            "type": "string"
                        },
                        {
                            "type": ["null", "object"],
                            "properties": {
                                "k1": {
                                    "type": "string"
                                }
                            },
                        },
                    ]
                },
                "obj": {
                    "type": ["null", "object"],
                    "properties": {
                        "k1": {
                            "type": "string"
                        }
                    },
                },
            },
        }
        partial_schema = {
            "type": ["null", "object"],
            "properties": {
                "str": {
                    "type": "string"
                },
                "int": {
                    "type": "integer"
                },
                "one_of": {
                    "oneOf": [
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "shared_schema.json#/definitions/type_one"
                        },
                    ]
                },
                "obj": {
                    "$ref": "shared_schema.json#/definitions/type_one"
                },
            },
        }

        referenced_schema = {
            "definitions": {
                "type_one": {
                    "$ref": "shared_schema.json#/definitions/type_nested"
                },
                "type_nested": {
                    "type": ["null", "object"],
                    "properties": {
                        "k1": {
                            "type": "string"
                        }
                    },
                },
            }
        }

        create_schema("complex_schema", partial_schema)
        create_schema("shared/shared_schema", referenced_schema)

        resolver = ResourceSchemaLoader(MODULE_NAME)

        actual_schema = resolver.get_schema("complex_schema")
        assert actual_schema == expected_schema
        # Make sure generated schema is JSON serializable
        assert json.dumps(actual_schema)
        assert jsonref.JsonRef.replace_refs(actual_schema)