kazoo icon indicating copy to clipboard operation
kazoo copied to clipboard

docs: kick start the process of adding type definitions

Open a-ungurianu opened this issue 3 years ago • 9 comments

Beginnings of #647

Why is this needed?

Python type annotations are a great way of documenting the APIs, as well as improving the developer experience when using this library.

I find the actual type checking to be an added benefit than a necessity.

Proposed Changes

  • type the election, lock, lease, counter, barrier and party recipes
  • configure and add mypy to CI

Does this PR introduce any breaking change?

  • I hope not, but there are some real code changes along side the annotations

a-ungurianu avatar Nov 15 '22 23:11 a-ungurianu

Hi @a-ungurianu,

Awesome that you started that work!!

Full disclosure, I haven't reviewed all the changes but one thing I wanted to mention is trying to minimize imports at runtime. 

In most of my projects, i am able to only import TYPE_CHECKING and occasionally cast like so:


from typing import TYPE_CHECKING

# ... other imports

if TYPE_CHECKING:  # pragma: nocover
    from typing import...
    from typing_extensions import...
    T = TypeVar(...)

I have seen numerous other projects doing that as well.

What do you think?

ceache avatar Nov 16 '22 16:11 ceache

I think I agree. I've just been adding any new modules inside the TYPE_CHECKING check, but adding all imports used for typing and repeating module imports makes sense.

a-ungurianu avatar Nov 16 '22 23:11 a-ungurianu

Codecov Report

Attention: Patch coverage is 82.60870% with 28 lines in your changes are missing coverage. Please review.

Project coverage is 96.19%. Comparing base (2fb93a8) to head (07bbc80). Report is 3 commits behind head on master.

Files Patch % Lines
kazoo/client.py 82.50% 7 Missing :warning:
kazoo/recipe/barrier.py 81.81% 4 Missing :warning:
kazoo/recipe/election.py 63.63% 4 Missing :warning:
kazoo/retry.py 50.00% 4 Missing :warning:
kazoo/recipe/counter.py 86.36% 3 Missing :warning:
kazoo/recipe/party.py 90.62% 3 Missing :warning:
kazoo/recipe/lease.py 89.47% 2 Missing :warning:
kazoo/recipe/lock.py 85.71% 1 Missing :warning:
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #684      +/-   ##
==========================================
- Coverage   96.81%   96.19%   -0.62%     
==========================================
  Files          27       27              
  Lines        3549     3628      +79     
==========================================
+ Hits         3436     3490      +54     
- Misses        113      138      +25     

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

codecov-commenter avatar Nov 18 '22 20:11 codecov-commenter

This is ready for a proper review now.

The history log in the PR is a bit of a mess for this due to me fighting with Hound and with making sure the stuff used from typing is available from 3.7 upwards

a-ungurianu avatar Feb 12 '23 00:02 a-ungurianu

@a-ungurianu any chance this would get merged?

takeda avatar Feb 08 '24 07:02 takeda

I'm considering declaring bankruptcy on this PR and re-openning so that it looks a bit more approachable for review.

Also, if there's anything in the structure that makes it hard to review, lemme know and I can amend

a-ungurianu avatar May 02 '24 20:05 a-ungurianu

Would it be possible to exclude the if TYPE_CHECKING: lines from the test coverage? So that codecov can give us a "true" coverage. (see https://coverage.readthedocs.io/en/latest/excluding.html#advanced-exclusion) Probably the ... and/or @overload too.

StephenSorriaux avatar May 02 '24 21:05 StephenSorriaux