django / channels

Developer-friendly asynchrony for Django
https://channels.readthedocs.io
BSD 3-Clause "New" or "Revised" License
6.02k stars 793 forks source link

feature: improve channel typings, add method stubs #2022

Open devkral opened 1 year ago

devkral commented 1 year ago

Currently the layers module is untyped and BaseChannelLayer is not a real interface (lacks stub methods)

This PR adds typings and stub methods (for type hinting and getting a meaningful error in case something is missing)

devkral commented 5 months ago

ping?

carltongibson commented 5 months ago

ping?

Yes, I'm not sure about this. It's a lot of noise for not much benefit as far as I can see.

Surely though, if we were adding types, a Protocol would be the way forward, rather than base class stub methods... 🤔

devkral commented 5 months ago

The problem my PR solves is, that it is not obvious for programmers how to write a layer backend. Docstrings are spread around and you have to look in channels-redis too to make sense of the functions

Agreed a protocol would be maybe better later but it needs more refactory. I will implement this

devkral commented 5 months ago

tried it. Protocol is not the right way I think, we should use abc classes, as the BaseChannelLayer implements also some real methods

devkral commented 5 months ago

how do you think about this?

BaseChannelLayer is now abstract, the extensions are now runtime checkable Protocols.

If you think this is good, I can document the changes