Comments (5)
Hi @dsoprea
Thanks for bringing this up!
This is misleading. It's a dictionary-like object.
I agree w/ you on this. It's 100% dict-like object.
If you don't want to change/fix this, then at least don't aggressively imply that the data will be there and ready as soon as you instantiate the class. It's confusing and this proper handling is not documented.
However this one is something I have a different angle on. Could you specify what made you think that the dictionary would be populated w/ holidays? Originally holidays
package was designed w/ performance in mind. Having said that I don't think that behavior is going to be changed/fixed.
I'm mostly interested on documentation improvement related to this part:
at least don't aggressively imply that the data will be there and ready as soon as you instantiate the class.
Thanks for your help!
from python-holidays.
A dictionary is thought of as a static type (a static one not an immutable one, to be clear). By nature of returning a dictionary, you assume that there are no other steps to be taken for it to have data. Especially when the dataset is already specific and thought of as being fairly static. If you tell me that you're going to essentially give me a "dictionary of holidays" but what you give me will always be an empty dictionary of holidays due to undocumented behavior then I'd consider that a broken design.
I don't think we're thinking of performance the right way. You've already overloaded the concept of dictionaries and are doing some lazy-loading. If, however, the developer is calling keys()
or values()
(or copying/materializing via dict()
), they are clearly signaling the library to lazy-load, and the library currently does nothing. Currently, they need to hardcode a lookup of a specific holiday, even though they may actually want all of them, to get things moving because the library doesn't actually support it right after initialization. That's also broken, to me. There is an innate understanding that if I ask for all of the holidays then I am willing to wait for it.
from python-holidays.
I thought we both agreed it's not a dict but a dict-like object. It seem that your whole case is built upon this misleading comment that needs to be fixed.
Also I beg to disagree on your "undocumented behavior" comment.
I believe your ideas would be helpful to consider while implementing holidays v1. Maybe even v0
could use some sort of eager population flag (w/o changing the default behavior).
As you can see this project could use external contributor's help. Please let us know if you're willing to help with that.
from python-holidays.
It's also initially empty, which is unexpected when you just refer to it as a dictionary:
>>> x = holidays.US() >>> dict(x) {}
You can just initialize holidays
object with required years interval when creating it:
x = holidays.US(years=2024)
or
x = holidays.US(years=range(2000, 2025))
and it will contain required values.
from python-holidays.
@KJhellico Thanks. That's really useful.
from python-holidays.
Related Issues (20)
- Mississippi Holiday - Confederate Memorial Day - Calculation incorrect HOT 2
- CI/CD fails for some Python versions on macOS
- The calculation of the lunar start date throws a TypeError exception for Thailand and Cambodia HOT 4
- Carnaval missing in Brazil after 0.25 HOT 2
- South Korea holiday question HOT 1
- May 17th, 2024 is a holiday in Georgia HOT 5
- Holidays for UK not returning all holidays HOT 2
- Election Day public holiday missing from South African public holidays HOT 2
- Lacking some holidays on Brazillian calendar HOT 3
- ه HOT 1
- Kings Birthday Australia Issue HOT 3
- How to check for holidays within an interval of time HOT 3
- Missing Holiday Brazil (20/11)
- Wrong holiday date for Venice HOT 1
- Object inconsistency HOT 3
- Documentation for holidays.US(years=array_of_years) ? HOT 1
- Refactor Aruba/Curaçao as NL subdivision HOT 2
- 2024-08-26 should be a holiday in GB HOT 2
- Taiwan's labor day is 5/1 every year, it is holiday.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from python-holidays.