Python >= 3.10 version:
def foo(return_more: bool) -> DataType | tuple[DataType, MoreDataType]: ...
But i would definitely avoid to do that if possible. I would maybe do something like this instead:
def foo(return_more: bool) -> tuple[DataType, MoreDataType | None]:
...
if return_more:
return data, more_data
return data, None
Or if data
is a dict
, just update it with more_data
:
def foo(return_more: bool) -> dict[str, Any]:
...
if return_more:
return data.update(more_data)
return data
The difference is that with Protocol
you can define which method presence you want to ensure. Like i said: custom vs. generic.
From what i understand, Protocol
is for custom interfaces that you define (this object must have do_x()
method), while ABCs are generic (this object is iterable).
Yup, that’s what i would also do.
Yeah we are better served with pedantic nerds that thinks they know IaC better than some top engineer at an IaC vendor 🤷
Ok i think i get the point. A “generic programming language” could be used as a “domain specific language” in some context. Is that what you mean?
The author seems fully aware of the existence CDKTF, and by invest i think he means that they should privilege it instead of HCL. The point is that if you learn Python, it is reusable somewhere else. If you learn HCL, you learned a vendor language, it is only used in Terraform.
The author is actually fine with CDK, since it uses an actual programming language. That’s the point of the article.
By the way, on a personal note, Terraform is still bad to my eyes since their license change.
I’m in the process of migrating to Pulumi, i like it so far.
You can use if
instead of the ugly count
hack in HCL… 🤷♂️
Nice! It looks like the best solution out there.