Skip to content

Add typing with mypy#791

Merged
PierreF merged 1 commit into
masterfrom
add-typing
Jan 10, 2024
Merged

Add typing with mypy#791
PierreF merged 1 commit into
masterfrom
add-typing

Conversation

@PierreF
Copy link
Copy Markdown
Contributor

@PierreF PierreF commented Jan 3, 2024

Split of #786 : contains add of mypy on client.py

@PierreF PierreF mentioned this pull request Jan 3, 2024
@PierreF
Copy link
Copy Markdown
Contributor Author

PierreF commented Jan 3, 2024

Tests are a bit flappy (not related to this PR, it's also happen on master or other PR). @akx did you also had unstable tests result for PR you created recently (i.e. did you re-run failed tests until they succeed) ? Because if you didn't had to re-run failed test, tests seems to fail more often recently.

Edit: you already answered this question in #789 :)

Copy link
Copy Markdown
Contributor

@akx akx left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some softer suggestions and some actual bug-looking things here.

Comment thread src/paho/mqtt/client.py
Comment thread src/paho/mqtt/client.py Outdated
Comment thread src/paho/mqtt/client.py Outdated
Comment thread src/paho/mqtt/client.py Outdated
Comment thread src/paho/mqtt/client.py Outdated
Comment thread src/paho/mqtt/publish.py Outdated
Comment thread src/paho/mqtt/publish.py Outdated
assert msg.payload == expected_payload, f"Invalid payload: ({msg.payload})"
assert msg.qos == 1, f"Invalid qos: ({msg.qos})"
assert msg.retain is not False, f"Invalid retain: ({msg.retain})"
assert not msg.retain, f"Invalid retain: ({msg.retain})"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't this the inverse test c.f. before?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, but I think the test was wrong.

  • We don't produce a message with retain flag in this test, so it make sense that msg.retain is False
  • Previously, msg.retain was an interger so msg.retain is not False was always true.
  • I've checked and the value was 0. So it seems expected to assert the value False

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe this change should be done in a separate PR, then? I'm afraid it will confuse future code archeologists terribly if this happens in a commit that says "Add typing".

Comment thread tests/test_client.py Outdated
Comment thread tox.ini
@PierreF
Copy link
Copy Markdown
Contributor Author

PierreF commented Jan 3, 2024

Thank for the review. I've only fixed few of your feedback but it's bed time now, I'll continue tomorrow.

Copy link
Copy Markdown
Contributor

@akx akx left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A couple more comments - sorry it took a while for the second round of reviews. Starting to look pretty nice though, excellent renovation here :) 🛠️

Comment thread src/paho/mqtt/enums.py Outdated
Comment thread src/paho/mqtt/enums.py
Comment thread src/paho/mqtt/enums.py Outdated
Comment thread src/paho/mqtt/enums.py Outdated
Comment on lines +67 to +70
mqtt_cs_new = 0
mqtt_cs_connected = 1
mqtt_cs_disconnecting = 2
mqtt_cs_connect_async = 3
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These should maybe also be UPPER_SNAKE_CASE? The compatibility aliases in client.py can of course remain lower-case.

Comment thread src/paho/mqtt/publish.py Outdated
Comment on lines +24 to +26
import typing
from collections.abc import Iterable
from typing import Any, List, Tuple, Union
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might be good to import the typing one way only; I'd suggest the from typing way.

Comment thread src/paho/mqtt/client.py Outdated
Comment on lines +3977 to +3978
return WebsocketWrapper(sock, self._host, self._port, self._ssl,
self._websocket_path, self._websocket_extra_headers)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would maybe read easier as

Suggested change
return WebsocketWrapper(sock, self._host, self._port, self._ssl,
self._websocket_path, self._websocket_extra_headers)
return WebsocketWrapper(
sock,
self._host,
self._port,
self._ssl,
self._websocket_path,
self._websocket_extra_headers,
)

(and I'd also consider adding kwargs, so it's harder to accidentally pass things in the wrong order)

Comment thread src/paho/mqtt/client.py Outdated
def _create_socket_connection(self):
def _create_socket(self) -> SocketLike:
tcp_sock = self._create_socket_connection()
sock = self._create_ssl_socket_if_enable(tcp_sock)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure the _if_enable is a good idea - I'd just do

Suggested change
sock = self._create_ssl_socket_if_enable(tcp_sock)
if self._ssl:
sock = self._ssl_wrap_socket(tcp_sock)

or similar? That would also simplify the return type of that function.

Comment thread src/paho/mqtt/client.py Outdated
Comment on lines +4020 to +4021
if (hasattr(self._ssl_context, 'check_hostname') and
self._ssl_context.check_hostname): # type: ignore
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if (hasattr(self._ssl_context, 'check_hostname') and
self._ssl_context.check_hostname): # type: ignore
if getattr(self._ssl_context, 'check_hostname', False): # type: ignore

Comment thread src/paho/mqtt/client.py Outdated
@@ -520,8 +636,9 @@ def __init__(self, client_id="", clean_session=None, userdata=None,
self._transport = transport.lower()
self._protocol = protocol
self._userdata = userdata
self._sock = None
self._sockpairR, self._sockpairW = (None, None,)
self._sock: socket.socket | WebsocketWrapper | ssl.SSLSocket | None = None
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
self._sock: socket.socket | WebsocketWrapper | ssl.SSLSocket | None = None
self._sock: SocketLike | None = None

Comment thread src/paho/mqtt/client.py
Comment on lines -3126 to +3353
reason = 132 # Unsupported protocol version
reason = ReasonCodes(CONNACK >> 4, aName="Unsupported protocol version")
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change doesn't seem strictly type-related - would be nice to be sure it's covered by tests, at least?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've done this after adding type to the on_connect callback and saw that reason could be either a int or a ReasonCodes. I believe using int was a mistake.

Anyway I've added a test, and test show that it should no break compatibility (reason == 132 work)

@PierreF
Copy link
Copy Markdown
Contributor Author

PierreF commented Jan 9, 2024

All your comments should be resolved. I think I'll squash-merge this PR due to multiple commits adding the removing thing. If you believe that we should kept multiple commits, I can do a rebase to only squash together part that belong to the same commit (but I want to squash or rebase, because their is change + exact revert of that change in this PR)

@akx
Copy link
Copy Markdown
Contributor

akx commented Jan 10, 2024

@PierreF A squash-merge, or a squashing rebase in this PR before merging sounds fine :) In fact, if #791 gets merged (and Codecov gets a baseline of the coverage for master), this could be squash-rebased on master and we'd see the coverage diff here too (hopefully).

@PierreF PierreF merged commit 1097a18 into master Jan 10, 2024
@PierreF PierreF deleted the add-typing branch January 10, 2024 20:34
@akx akx mentioned this pull request Jan 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants