diff --git a/test_oss_cloud_api_compatibility.py b/test_oss_cloud_api_compatibility.py index 2ebf060..9d7fa4b 100644 --- a/test_oss_cloud_api_compatibility.py +++ b/test_oss_cloud_api_compatibility.py @@ -5,9 +5,16 @@ import pytest +PREFECT_V2 = False + + @pytest.fixture def oss_schema(): - return load_schema("oss_schema.json") + schema = load_schema("oss_schema.json") + if schema["info"]["version"].startswith("2"): + global PREFECT_V2 + PREFECT_V2 = True + return schema @pytest.fixture @@ -252,11 +259,21 @@ def extract_types(d): return {item.get("type") for item in d["anyOf"] if item.get("type")} return set() + def extract_format(d): + if "format" in d: + return d["format"] + # in practice, this will have only one format + elif "anyOf" in d: + for option in d["anyOf"]: + if option.get("format"): + return option.get("format") + return None + # TODO: add sorts and filters prop_gettr = lambda name, d: ( name, extract_types(d), - d.get("format"), + extract_format(d), hashable_default(d), d.get("deprecated"), ) @@ -295,6 +312,11 @@ def extract_types(d): # failures when looping over fields print("parameter name:", oss_name) + if oss_name == "history_interval_seconds": + oss_name = "history_interval" # cloud aliases this which doesn't appear in the schema + elif oss_name == "schema" and PREFECT_V2: + oss_name = "json_schema" # UI schema validation doesnt really matter for 2.x OSS compat + assert oss_name in cloud_props[1] ( cloud_name, @@ -393,6 +415,14 @@ def preprocess_pydantic_v1_type(schema): # test failures when looping over fields print("field name:", field_name) + # fields are ignored in all cases + if ( + PREFECT_V2 + and name == "StateCreate" + and field_name in ["timestamp", "id"] + ): + continue + assert field_name in cloud_props oss_options = set()