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

Resolve Mypy erorrs in v3 branch #1692

Merged
merged 9 commits into from Apr 6, 2024
Merged

Conversation

DahnJ
Copy link
Contributor

@DahnJ DahnJ commented Mar 4, 2024

Attempts to address #1593

There are still two unsolved issues around the nonexistant Store.from_path in core.py.

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@@ -26,7 +26,8 @@ def __init__(self, store: Store, path: Optional[str] = None):

@classmethod
def from_path(cls, pth: Path) -> StorePath:
return cls(Store.from_path(pth))
# NOT SOLVED: This is instantiating an ABC + there is no from_path method
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Not solved here, as per comment. What subclass of Store should this use?

Copy link
Member

Choose a reason for hiding this comment

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

Good catch. I don't think we're using StorePath.from_path() anymore. If so, I'd be comfortable removing it here.

@DahnJ DahnJ mentioned this pull request Mar 4, 2024
2 tasks
@@ -76,7 +77,8 @@ def make_store_path(store_like: StoreLike) -> StorePath:
try:
from upath import UPath

return StorePath(Store.from_path(UPath(store_like)))
# NOT SOLVED: Similar here, ABC instantiation + no from_path method
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Similar here

Copy link
Member

Choose a reason for hiding this comment

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

See above.

def _sync_iter(
self, func: Callable[P, AsyncIterator[T]], *args: P.args, **kwargs: P.kwargs
) -> List[T]:
def _sync_iter(self, coroutine: Coroutine[Any, Any, AsyncIterator[T]]) -> List[T]:
Copy link
Contributor Author

Choose a reason for hiding this comment

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

I removed the args/kwargs here to make it handle a coroutine, which is how it's so far being used.

@joshmoore
Copy link
Member

Thanks, @DahnJ. I've launched the workflows.

@DahnJ
Copy link
Contributor Author

DahnJ commented Mar 5, 2024

Thanks @joshmoore I tried to fix a failing test (which I think happened because Any was used in a Pydantic model), can you launch them again please?

@joshmoore
Copy link
Member

On their way! 🏇🏽

Copy link
Member

@jhamman jhamman left a comment

Choose a reason for hiding this comment

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

Thanks @DahnJ for jumping in here! Really happy to see this contribution.

Some guiding principles that may help the work here progress. First, I would prioritize getting Mypy to pass, even if it requires ignoring a few problematic lines. Then, once things are passing again (see #1649 where we disable the mypy checks in the v3 CI), then we can come back and fix any TODOs.

@@ -46,11 +46,11 @@ def to_bytes(self) -> Dict[str, bytes]:
return {ZARR_JSON: json.dumps(self.to_dict()).encode()}
else:
return {
ZGROUP_JSON: self.zarr_format,
ZGROUP_JSON: str(self.zarr_format).encode(),
Copy link
Member

Choose a reason for hiding this comment

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

Flagging that this was actually a bug in hiding. I believe it should have been something like:

Suggested change
ZGROUP_JSON: str(self.zarr_format).encode(),
ZGROUP_JSON: json.dumps({"zarr_format": 2}).encode(),

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Addressed in a30af88

@@ -26,7 +26,8 @@ def __init__(self, store: Store, path: Optional[str] = None):

@classmethod
def from_path(cls, pth: Path) -> StorePath:
return cls(Store.from_path(pth))
# NOT SOLVED: This is instantiating an ABC + there is no from_path method
Copy link
Member

Choose a reason for hiding this comment

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

Good catch. I don't think we're using StorePath.from_path() anymore. If so, I'd be comfortable removing it here.

@@ -76,7 +77,8 @@ def make_store_path(store_like: StoreLike) -> StorePath:
try:
from upath import UPath

return StorePath(Store.from_path(UPath(store_like)))
# NOT SOLVED: Similar here, ABC instantiation + no from_path method
Copy link
Member

Choose a reason for hiding this comment

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

See above.

@DahnJ
Copy link
Contributor Author

DahnJ commented Mar 19, 2024

@jhamman I have addressed the comments in a30af88

I was not sure how to handle the second Store.from_path() reference. What should happen if the store_like argument is of type str? I tried to make a potential suggestion based on a commented-out code in f57527a. Let me please know if this is the correct way of handling that case.

As for getting mypy to pass, it does pass for me locally and I didn't add any type: ignore lines. However, there already are a few in zarr/v3 – I removed some more in e1fdd1e and then turned on mypy in pre-commit in db6da34.

@MSanKeys963 MSanKeys963 added the V3 Related to compatibility with V3 spec label Mar 28, 2024
@jhamman jhamman requested a review from d-v-b April 6, 2024 04:41
@jhamman
Copy link
Member

jhamman commented Apr 6, 2024

@DahnJ - I think this is a great step forward. I want @d-v-b to review this but from my perspective, it could go in now, even with the outstanding store issue.

@jhamman jhamman added this to the 3.0.0.alpha milestone Apr 6, 2024
@d-v-b
Copy link
Contributor

d-v-b commented Apr 6, 2024

This looks good! There's some overlap with stuff I did over in #1743, but that's not a problem. I will merge and rebase #1743 on this.

@d-v-b d-v-b merged commit 15a9747 into zarr-developers:v3 Apr 6, 2024
7 checks passed
@d-v-b
Copy link
Contributor

d-v-b commented Apr 6, 2024

thanks @DahnJ !

d-v-b pushed a commit to d-v-b/zarr-python that referenced this pull request Apr 10, 2024
* refactor(v3): Using appropriate types

* fix(v3): Typing fixes + minor code fixes

* fix(v3): _sync_iter works with coroutines

* docs(v3/store/core.py): clearer comment

* fix(metadata.py): Use Any outside TYPE_CHECKING for Pydantic

* fix(zarr/v3): correct zarr format + remove unused method

* fix(v3/store/core.py): Potential suggestion on handling str store_like

* refactor(zarr/v3): Add more typing

* ci(.pre-commit-config.yaml): zarr v3 mypy checks turned on in pre-commit
@d-v-b d-v-b mentioned this pull request Apr 12, 2024
6 tasks
d-v-b added a commit that referenced this pull request Apr 22, 2024
* chore: add deprecation warnings to v3 classes / functions

* Resolve Mypy erorrs in `v3` branch (#1692)

* refactor(v3): Using appropriate types

* fix(v3): Typing fixes + minor code fixes

* fix(v3): _sync_iter works with coroutines

* docs(v3/store/core.py): clearer comment

* fix(metadata.py): Use Any outside TYPE_CHECKING for Pydantic

* fix(zarr/v3): correct zarr format + remove unused method

* fix(v3/store/core.py): Potential suggestion on handling str store_like

* refactor(zarr/v3): Add more typing

* ci(.pre-commit-config.yaml): zarr v3 mypy checks turned on in pre-commit

* Specify hatch envs using GitHub actions matrix for v3 tests (#1728)

* Specify v3 hatch envs using GitHub actions matrix

* Update .github/workflows/test-v3.yml

Co-authored-by: Joe Hamman <jhamman1@gmail.com>

* Update .github/workflows/test-v3.yml

Co-authored-by: Joe Hamman <jhamman1@gmail.com>

* test on 3.12 too

* no 3.12

---------

Co-authored-by: Joe Hamman <jhamman1@gmail.com>
Co-authored-by: Joe Hamman <joe@earthmover.io>

* black -> ruff format + cleanup (#1639)

* black -> ruff + cleanup

* format

* Preserve git blame

* pre-commit fix

* Remove outdated dev install docs from installation.rst and link to contributing.rst (#1643)

Co-authored-by: Joe Hamman <joe@earthmover.io>

* chore: remove old v3 implementation

* chore: remove more version-conditional logic

* chore: remove v3_storage_transformers.py again

---------

Co-authored-by: Daniel Jahn (dahn) <dahnjahn@gmail.com>
Co-authored-by: Max Jones <14077947+maxrjones@users.noreply.github.com>
Co-authored-by: Joe Hamman <jhamman1@gmail.com>
Co-authored-by: Joe Hamman <joe@earthmover.io>
Co-authored-by: Saransh Chopra <saransh0701@gmail.com>
Co-authored-by: Alden Keefe Sampson <aldenkeefesampson@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
V3 Related to compatibility with V3 spec
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

None yet

5 participants