Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make pyright happy #152

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open

Make pyright happy #152

wants to merge 3 commits into from

Conversation

poksiala
Copy link

@poksiala poksiala commented Sep 4, 2024

I tried to use this library and to be honest the user experience was not the best. For me it was hard to understand with all the missing and invalid type annotations. My editor was also complaining a lot, especially about the decorated methods that did not pass trough information about the methods.

So as an exercise to better understand the inner workings of the library I started to fix those type annotations. I also found some dead code and missing variables while doing that. Here are the results if you are interested in including them in the trunk.

This should not change the API at all though I have had no time to test it in actual use yet.

Signed-off-by: poksiala <[email protected]>
def get_auth_header(self):
raise NotImplementedError

def get_container(self, name: container_type) -> oras.container.Container:
Copy link
Author

Choose a reason for hiding this comment

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

I removed this method as it relies on self.hostname which is not available

@decorator.ensure_container
def load_configs(self, container: container_type, configs: Optional[list] = None):
def load_configs(
self, container: oras.container.Container, configs: Optional[list] = None
Copy link
Author

Choose a reason for hiding this comment

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

I changed the container type as it relied on self.get_container() method above trough the decorator. Which as said would not have worked anyways

@@ -120,37 +133,3 @@ def set_basic_auth(self, username: str, password: str):
:type password: str
"""
self._basic_auth = auth_utils.get_basic_auth(username, password)

def request_anonymous_token(self, h: auth_utils.authHeader, headers: dict) -> bool:
Copy link
Author

Choose a reason for hiding this comment

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

To my understanding this is dead code and completely incompatible with the overriding method in token auth, which is actually being used.

raise NotImplementedError

def get_container(self, name: container_type) -> oras.container.Container:
def set_header(self, name: str, value: str):
Copy link
Author

Choose a reason for hiding this comment

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

This method was referenced in multiple places but did not actually exist. So I added it by copying it from Provider.

Signed-off-by: Panu Oksiala <[email protected]>
if not h.realm.startswith("http"): # type: ignore
h.realm = f"{self.prefix}://{h.realm}"
if not h.realm.startswith("http"):
h.realm = f"http://{h.realm}" # TODO: Should this be htts
Copy link
Contributor

Choose a reason for hiding this comment

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

https?

Copy link
Author

Choose a reason for hiding this comment

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

Good catch! fixed

@@ -120,10 +122,9 @@ def delete_tags(self, name: str, tags=Union[str, list]) -> List[str]:
:param tags: single or multiple tags name to delete
:type N: string or list
"""
if isinstance(tags, str):
tags = [tags]
_tags = [tags] if isinstance(tags, str) else tags
Copy link
Contributor

Choose a reason for hiding this comment

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

Why did you make these variables private?

Copy link
Author

Choose a reason for hiding this comment

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

This is a bit useless change as the real issue in this method was that there was assignment tags=Union[str, list] instead of of type hinting tags: Union[str, List[str]] in the signature. I did not notice that at first and thought that the previous if statement was not clear enough for current type checkers.

On the other hand I personally prefer this as it is clear that _tags might be or might not be same as tags given as an argument. it could be named as tag_list or something as well.

Not sure which is the most pythonic way to go as I do most of my coding in languages with immutable variables and as such assigning list to string feels a bit dirty.

Signed-off-by: Panu Oksiala <[email protected]>
@vsoch
Copy link
Contributor

vsoch commented Oct 17, 2024

@poksiala apologies this fell off my radar - if you want to rebase I can give another review and (I think) it should be ready for merge.

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