@@ -110,25 +110,26 @@ def test_valid_sidecar_field(schema_obj):
110110
111111 Test failures are usually due to typos.
112112 """
113- field_names = {field .name for key , field in schema_obj .objects .metadata .items ()}
113+ field_names = {field .name for field in schema_obj .objects .metadata .values ()}
114+ # Sidecars can have column descriptions
115+ column_names = {column .name for column in schema_obj .objects .columns .values ()}
116+ field_or_column_names = field_names | column_names
114117
115118 for key , rule in walk_schema (
116119 schema_obj .rules , lambda k , v : isinstance (v , Mapping ) and v .get ("selectors" )
117120 ):
118- for selector in rule ["selectors" ]:
119- ast = expression .parse_string (selector )[0 ]
120- for name in find_names (ast ):
121- if name .startswith (("json." , "sidecar." )):
122- assert name .split ("." , 1 )[1 ] in field_names , (
123- f"Bad field in selector: { name } ({ key } )"
124- )
125- for check in rule .get ("checks" , []):
126- ast = expression .parse_string (check )[0 ]
127- for name in find_names (ast ):
128- if name .startswith (("json." , "sidecar." )):
129- assert name .split ("." , 1 )[1 ] in field_names , (
130- f"Bad field in check: { name } ({ key } )"
131- )
121+ for expr_type in ("selector" , "check" ):
122+ for expr in rule .get (f"{ expr_type } s" , []):
123+ ast = expression .parse_string (expr )[0 ]
124+ for name in find_names (ast ):
125+ if name .startswith ("json." ):
126+ assert name .split ("." , 2 )[1 ] in field_names , (
127+ f"Bad field in { expr_type } : { name } ({ key } )"
128+ )
129+ elif name .startswith ("sidecar." ):
130+ assert name .split ("." , 2 )[1 ] in field_or_column_names , (
131+ f"Bad field in { expr_type } : { name } ({ key } )"
132+ )
132133
133134
134135def test_test_valid_sidecar_field ():
@@ -137,7 +138,10 @@ def test_test_valid_sidecar_field():
137138 "objects" : {
138139 "metadata" : {
139140 "a" : {"name" : "a" },
140- }
141+ },
142+ "columns" : {
143+ "column" : {"name" : "column" },
144+ },
141145 },
142146 "rules" : {"myruleA" : {"selectors" : ["sidecar.a" ], "checks" : ["json.a == sidecar.a" ]}},
143147 }
0 commit comments