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

Add get_generic_param() and fix finding Returns[] #184

Merged
merged 1 commit into from
Aug 2, 2023

Conversation

wRAR
Copy link
Member

@wRAR wRAR commented Jul 31, 2023

Fixes #182 and will help in zytedata/zyte-common-items#49

@codecov
Copy link

codecov bot commented Jul 31, 2023

Codecov Report

Merging #184 (54d4948) into master (ffaa303) will decrease coverage by 0.14%.
Report is 1 commits behind head on master.
The diff coverage is 93.75%.

Additional details and impacted files
@@            Coverage Diff             @@
##           master     #184      +/-   ##
==========================================
- Coverage   98.54%   98.40%   -0.14%     
==========================================
  Files          30       29       -1     
  Lines        1378     1383       +5     
==========================================
+ Hits         1358     1361       +3     
- Misses         20       22       +2     
Files Changed Coverage Δ
web_poet/pages.py 96.25% <86.66%> (-2.37%) ⬇️
web_poet/rules.py 100.00% <100.00%> (ø)
web_poet/utils.py 99.27% <100.00%> (+0.08%) ⬆️

"""Inherit from this generic mixin to change the item class used by
:class:`~.ItemPage`"""

@property
def item_cls(self) -> typing.Type[ItemT]:
def item_cls(self) -> type:
Copy link
Member

Choose a reason for hiding this comment

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

What's the reason for this change? Are there cases where a class which inherits from Returns[ItemType] doesn't return ItemType from item_cls?

Copy link
Member

Choose a reason for hiding this comment

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

Or was it not working properly?

Copy link
Member Author

Choose a reason for hiding this comment

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

It can return a dict, when the page does not actually inherit from Returns[ItemType] but just from Returns[ItemT].

Copy link
Member

Choose a reason for hiding this comment

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

It seems we should have added a couple of tests for that in https://github.com/scrapinghub/web-poet/blob/master/tests_typing/test_item_page.mypy-testing. We have the same issue with dict for other cases, like to_item. Also, Returns doesn't work properly if a type is changed in a subclass. But for a common case of not using dicts and not changing the type it should work correctly, as tests show; it seems this change might break it. I wonder if is it a right way to think about it or not :)

Copy link
Member Author

Choose a reason for hiding this comment

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

We have a test that makes sure the method returns a dict:

assert page.item_cls is dict

Copy link
Member

Choose a reason for hiding this comment

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

Yes, I think that was the intention before the change (but no test in mypy-testing).
It's not a big deal overall, because this property should rarely be used by the end users though.

Copy link
Member

Choose a reason for hiding this comment

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

We have a test that makes sure the method returns a dict

It's not a typing test (see https://github.com/scrapinghub/web-poet/tree/master/tests_typing); from the code point of view, it all should work fine.

Copy link
Member Author

Choose a reason for hiding this comment

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

Isn't

reveal_type(item) # R: dict
about it?

Copy link
Member Author

Choose a reason for hiding this comment

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

Well, it and the next one (though I'm not sure why does the next one still pass).

Copy link
Member

Choose a reason for hiding this comment

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

Yes, it's a right test; it is marked as xfail.

Copy link
Member

@kmike kmike left a comment

Choose a reason for hiding this comment

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

👍 👍

@kmike
Copy link
Member

kmike commented Aug 2, 2023

Let's merge it; I don't think typing discussion is important enough.

@kmike kmike merged commit 52b7693 into master Aug 2, 2023
15 of 16 checks passed
@kmike
Copy link
Member

kmike commented Aug 2, 2023

Thanks @wRAR!

@wRAR wRAR deleted the returns-inheritance branch November 12, 2023 17:03
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.

Returns doesn't work in some subclasses
3 participants