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 support for more lookup types to pop_named (as in get_named method) #2140

Draft
wants to merge 2 commits into
base: dev
Choose a base branch
from
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions holidays/holiday_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -1026,13 +1026,21 @@ def pop(self, key: DateLike, default: Union[str, Any] = None) -> Union[str, Any]

return dict.pop(self, self.__keytransform__(key), default)

def pop_named(self, name: str) -> list[date]:
def pop_named(self, name: str, lookup: str = "icontains") -> list[date]:
Copy link
Collaborator

Choose a reason for hiding this comment

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

Could you update the method's documentation with the new param too?

Copy link
Author

@wth-d wth-d Nov 27, 2024

Choose a reason for hiding this comment

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

Changed the method's docstring
(the part for the lookup param is copied over from docstring of the get_named method)

"""Remove (no longer treat at as holiday) all dates matching the
provided holiday name. The match will be made case insensitively and
provided holiday name. By default, the match will be made case insensitively and
partial matches will be removed.

:param name:
The holiday's name to try to match.
:param lookup:
The holiday name lookup type:
contains - case sensitive contains match;
exact - case sensitive exact match;
startswith - case sensitive starts with match;
icontains - case insensitive contains match;
iexact - case insensitive exact match;
istartswith - case insensitive starts with match;

:return:
A list of dates removed.
Expand All @@ -1041,7 +1049,9 @@ def pop_named(self, name: str) -> list[date]:
KeyError if date is not a holiday and default is not given.
"""
use_exact_name = HOLIDAY_NAME_DELIMITER in name
if not (dts := self.get_named(name, split_multiple_names=not use_exact_name)):
if not (
dts := self.get_named(name, lookup=lookup, split_multiple_names=not use_exact_name)
Copy link
Collaborator

Choose a reason for hiding this comment

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

It'd be also great to have some tests added too

):
raise KeyError(name)

popped = []
Expand Down