Hacker News new | ask | show | jobs
by drcongo 352 days ago
Last time I tried ty and pyre they weren't particularly great with a Django codebase, I'm sure ty will get there at some point, but if this handles django-stubs without any extra faffing, that's one potential selling point.

I did have the same thought as you at first though, and only carried on reading when I spotted that it was from the author of Jedi.

2 comments

Django compatibility could definitely be a selling point, but I haven’t built a dedicated Django plugin yet. Right now, I’m prioritizing features like auto-completion and go-to-definition, which I think are more impactful in the short term.

The thing is, both Ty and PyreFly aren’t really close to the level of Mypy or Pyright — neither in terms of features nor stability. ZubanLS already covers the important features, though there are still some bugs I’m working through. So in that sense, yes: At the moment the selling point is that it just works.

Both ty and Pyre are in development, so maybe the answer is just "this works and they don't". But they do promise to work eventually, like end of year if I recall correctly. I don't know what makes Django special in this regard though - is it the ORM models that don't work well with the typing spec or..?
I'm still thinking about a good model for the future, because I know that in the future they will be fine type checkers. I think the biggest advantage I have is that I don't burn big sums of money while doing it, so I only need a modest income. I think my current proposal would be a very fair way to make money. But I also see that this might not work if the competition offers everything for free and open source.

The ORM models do not work with typing at all, you basically have to make a lot of magic work if you want to support it in a type checker (especially if you want to work with reverse foreign keys). Generally type checkers do not just support the Django ORM. For Mypy there's a plugin that works pretty well, but uses runtime information, which further slows down Mypy.

it's that django does metaprogramming that cannot be expressed in terms of python's static type annotations. you need dedicated plugins that essentially replicate that metaprogramming to generate the relevant types.

it's not just django btw, pretty much any metaprogramming library needs that sort of custom support, including dataclasses - take a look at any python type checker and you will find code specifically replicating what dataclasses does in terms of code generation. for pytype we actually put dataclass and namedtuple support alongside our other third-party plugins in the codebase.

There's a lot of magic in Django, and yes that's particularly around the ORM.

The foreign key stuff and missing reverse relations in types a big issue, but there's other stuff like warning about class Meta: being incompatible because you're inheriting an abstract model.

I'm yet to find a good guide on how to handle typing a django project, even if only to get vscode to do autocomplete.

I don't know anywhere near enough to answer that with any confidence I'm afraid. I'd like to hear op's opinion though.