Giter VIP home page Giter VIP logo

Comments (5)

arkid15r avatar arkid15r commented on August 9, 2024

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.

dsoprea avatar dsoprea commented on August 9, 2024

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.

arkid15r avatar arkid15r commented on August 9, 2024

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.

KJhellico avatar KJhellico commented on August 9, 2024

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.

dsoprea avatar dsoprea commented on August 9, 2024

@KJhellico Thanks. That's really useful.

from python-holidays.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.