2020 render_meta_fields ,
2121)
2222from sqlmesh .core .model .kind import ModelKindName , _ModelKind
23- from sqlmesh .utils import registry_decorator
23+ from sqlmesh .utils import registry_decorator , DECORATOR_RETURN_TYPE
2424from sqlmesh .utils .errors import ConfigError
2525from sqlmesh .utils .metaprogramming import build_env , serialize_env
2626
@@ -39,6 +39,7 @@ def __init__(self, name: t.Optional[str] = None, is_sql: bool = False, **kwargs:
3939 if not is_sql and "columns" not in kwargs :
4040 raise ConfigError ("Python model must define column schema." )
4141
42+ self .name_provided = bool (name )
4243 self .name = name or ""
4344 self .is_sql = is_sql
4445 self .kwargs = kwargs
@@ -76,6 +77,13 @@ def __init__(self, name: t.Optional[str] = None, is_sql: bool = False, **kwargs:
7677 for column_name , column_type in self .kwargs .pop ("columns" , {}).items ()
7778 }
7879
80+ def __call__ (
81+ self , func : t .Callable [..., DECORATOR_RETURN_TYPE ]
82+ ) -> t .Callable [..., DECORATOR_RETURN_TYPE ]:
83+ if not self .name_provided :
84+ self .name = get_model_name (Path (inspect .getfile (func )))
85+ return super ().__call__ (func )
86+
7987 def model (
8088 self ,
8189 * ,
@@ -97,10 +105,7 @@ def model(
97105 env : t .Dict [str , t .Any ] = {}
98106 entrypoint = self .func .__name__
99107
100- if not self .name and infer_names :
101- self .name = get_model_name (Path (inspect .getfile (self .func )))
102-
103- if not self .name :
108+ if not self .name_provided and not infer_names :
104109 raise ConfigError ("Python model must have a name." )
105110
106111 kind = self .kwargs .get ("kind" , None )
0 commit comments