-
Notifications
You must be signed in to change notification settings - Fork 241
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
Use Iterator instead of Iterable for specifier filter methods #584
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -86,7 +86,7 @@ def contains(self, item: str, prereleases: Optional[bool] = None) -> bool: | |||||
@abc.abstractmethod | ||||||
def filter( | ||||||
self, iterable: Iterable[UnparsedVersion], prereleases: Optional[bool] = None | ||||||
) -> Iterable[UnparsedVersion]: | ||||||
) -> Iterator[UnparsedVersion]: | ||||||
""" | ||||||
Takes an iterable of items and filters them so that only items which | ||||||
are contained within this specifier are allowed in it. | ||||||
|
@@ -564,14 +564,14 @@ def contains( | |||||
|
||||||
def filter( | ||||||
self, iterable: Iterable[UnparsedVersion], prereleases: Optional[bool] = None | ||||||
) -> Iterable[UnparsedVersion]: | ||||||
) -> Iterator[UnparsedVersion]: | ||||||
"""Filter items in the given iterable, that match the specifier. | ||||||
|
||||||
:param iterable: | ||||||
An iterable that can contain version strings and :class:`Version` instances. | ||||||
The items in the iterable will be filtered according to the specifier. | ||||||
:param prereleases: | ||||||
Whether or not to allow prereleases in the returned iterable. If set to | ||||||
Whether or not to allow prereleases in the returned iterator. If set to | ||||||
``None`` (the default), it will be intelligently decide whether to allow | ||||||
prereleases or not (based on the :attr:`prereleases` attribute, and | ||||||
whether the only versions matching are prereleases). | ||||||
|
@@ -914,14 +914,14 @@ def contains( | |||||
|
||||||
def filter( | ||||||
self, iterable: Iterable[UnparsedVersion], prereleases: Optional[bool] = None | ||||||
) -> Iterable[UnparsedVersion]: | ||||||
) -> Iterator[UnparsedVersion]: | ||||||
"""Filter items in the given iterable, that match the specifiers in this set. | ||||||
|
||||||
:param iterable: | ||||||
An iterable that can contain version strings and :class:`Version` instances. | ||||||
The items in the iterable will be filtered according to the specifier. | ||||||
:param prereleases: | ||||||
Whether or not to allow prereleases in the returned iterable. If set to | ||||||
Whether or not to allow prereleases in the returned iterator. If set to | ||||||
``None`` (the default), it will be intelligently decide whether to allow | ||||||
prereleases or not (based on the :attr:`prereleases` attribute, and | ||||||
whether the only versions matching are prereleases). | ||||||
|
@@ -965,7 +965,7 @@ def filter( | |||||
if self._specs: | ||||||
for spec in self._specs: | ||||||
iterable = spec.filter(iterable, prereleases=bool(prereleases)) | ||||||
return iterable | ||||||
return iter(iterable) | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could also do:
Suggested change
Works in the other cases as well. |
||||||
# If we do not have any specifiers, then we need to have a rough filter | ||||||
# which will filter out any pre-releases, unless there are no final | ||||||
# releases. | ||||||
|
@@ -987,6 +987,6 @@ def filter( | |||||
# If we've found no items except for pre-releases, then we'll go | ||||||
# ahead and use the pre-releases | ||||||
if not filtered and found_prereleases and prereleases is None: | ||||||
return found_prereleases | ||||||
return iter(found_prereleases) | ||||||
|
||||||
return filtered | ||||||
return iter(filtered) |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This loop looks weird. Is it essentially running
reduce
on itself?Not sure if it's really that much more readable, though. 😅