lalcs / jpholiday Goto Github PK
View Code? Open in Web Editor NEW日本の祝日を取得するライブラリ
License: MIT License
日本の祝日を取得するライブラリ
License: MIT License
最新のRelease versionがv0.1.8
である一方で、最新のTag versionがv0.18
であり、現状不一致です。
最新のTag versionをv0.1.8
にそろえていただけませんでしょうか
こんにちは。
いつも利用しておりまして、大変助かっております。
ありがとうございます!
表題の通り2021年の一部休日の日付がずれていると思いご連絡しました。
手元の結果
(datetime.date(2021, 7, 19), '海の日'),
(datetime.date(2021, 8, 11), '山の日'),
(datetime.date(2021, 10, 11), 'スポーツの日'),
正しくは以下と思います。
(datetime.date(2021, 7, 22), '海の日'),
(datetime.date(2021, 7, 23), 'スポーツの日'),
(datetime.date(2021, 8, 8), '山の日'),
jpholiday を利用させて頂いております。 必要になる都度、祝日判定処理を自前で実装していたのですが、ライブラリ化して頂いているので大変、助かっております (作者の方に感謝いたします)。 オンラインのカレンダー情報を利用するライブラリを見かけたのですが、接続先の影響 (URL 変更やフォーマット変更) を受けてしまう為、「ローカルのみで動作する」という方針も有り難いです。
a08df7a でユニットテストを実行したところ、Fail するようです。 他の年のユニットテストも Fail するようなのですが、他の方の環境ですとテスト結果は如何でしょうか?
# python -m unittest tests/test_year_2020.py
FFF
======================================================================
FAIL: test_count_month (tests.test_year_2020.TestYear2020)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/root/jpholiday/tests/test_year_2020.py", line 36, in test_count_month
self.assertEqual(len(jpholiday.month_holidays(2020, 1)), 2)
AssertionError: 0 != 2
======================================================================
FAIL: test_count_year (tests.test_year_2020.TestYear2020)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/root/jpholiday/tests/test_year_2020.py", line 53, in test_count_year
self.assertEqual(len(jpholiday.year_holidays(2020)), 18)
AssertionError: 0 != 18
======================================================================
FAIL: test_holiday (tests.test_year_2020.TestYear2020)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/root/jpholiday/tests/test_year_2020.py", line 13, in test_holiday
self.assertEqual(jpholiday.is_holiday_name(datetime.date(2020, 1, 1)), '元日')
AssertionError: None != '元日'
----------------------------------------------------------------------
Ran 3 tests in 0.005s
FAILED (failures=3)
法律制定年この辺に不備があったようです。
例として:
天皇誕生日(平成以降)
jpholiday.year_holidays(1948)-->(datetime.date(1948, 12, 23), '天皇誕生日'):X
振替休日(1973年以降)
jpholiday.year_holidays(1971)-->(datetime.date(1971, 10, 11), '体育の日 振替休日'):X
ご確認よろしくお願いします。
便利なライブラリ、ありがとうございます。令和対応まで感謝です。
jpholidayの対応範囲ではないことを知りつつもリクエストさせていただきたいです。
今は自作しているのですが、jpholidayにこの機能があればいいなと思いました。
もしくは、jpholidayをwrapしたそのようなライブラリがあれば、教えていただきたいです。
jpholiday を活用させてもらっています。
0.1.5 から 0.1.7 にアップデートしてから、アプリケーションのテストでエラーが発生するようになり、調べていたところ
e4e51f8#diff-3eb44a14116fd7cebc4b4c3347aaca4726cad6b18d083021f8227080181367e0R106-R115
こちらの変更で型チェックが入るようになったのが原因でした。
freezegun という Fake の date オブジェクトを生成するテストツールと合わせて使っているのですが、次のテストコードで _to_date()
関数から JPHolidayTypeError
が送出されるエラーを再現できます。
class TestFreezegun(unittest.TestCase):
def setUp(self) -> None:
self.the_date = datetime.date(2020, 7, 24)
@freezegun.freeze_time('2020-7-24')
def test_freezegun_date(self):
today = datetime.date.today()
self.assertTrue(jpholiday.is_holiday(today))
# this raises "jpholiday.exception.JPHolidayTypeError: is type datetime or date only."
self.assertTrue(jpholiday.is_holiday(self.the_date))
_to_date()
関数内の型チェックを type(value) is ...
から isinstance(value, ...)
関数を使う形に変更すれば、上記のテストも通るようになります。
freezegun を使うと、datetime.date
や datetime.datetime
が FakeDate
や FakeDatetime
といったクラスに置き換えられるのですが、タイミングによって(上のテストの例だと setUp()
で生成された datetime.date
)は置き換えられないため、is
左辺の type(value)
は素の datetime.date
で、右辺の datetime.date
は FakeDate
なため if 文が True にならないためにエラーになります。
if type(value) is datetime.date:
return value
if type(value) is datetime.datetime:
return value.date()
上のコードが下のように変更されると自分の問題は解決するのですが、ご検討いただけると幸いです。
if isinstance(value, datetime.datetime):
return value.date()
if isinstance(value, datetime.date):
return value
いつもお世話になっております。
ライブラリを0.1.0にupgradeして使用した所、
祝日取得でFalse(nameはNone)が返るようになっていました。
0.0.7では正常に取得出来ていた内容です。
ご検討頂けますと幸いです。
>pip list
Package Version
---------- -------
jpholiday 0.1.0
pip 20.0.2
setuptools 41.2.0
>python
Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> import jpholiday
>>> jpholiday.is_holiday(datetime.date(2020, 1, 1))
False
>>> jpholiday.is_holiday_name(datetime.date(2020, 1, 1))
>>>
>>> ^Z
>pip install jpholiday==0.0.7
Collecting jpholiday==0.0.7
Using cached jpholiday-0.0.7-py3-none-any.whl (6.3 kB)
Installing collected packages: jpholiday
Attempting uninstall: jpholiday
Found existing installation: jpholiday 0.1.0
Uninstalling jpholiday-0.1.0:
Successfully uninstalled jpholiday-0.1.0
Successfully installed jpholiday-0.0.7
>pip list
Package Version
---------- -------
jpholiday 0.0.7
pip 20.0.2
setuptools 41.2.0
>python
Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> import jpholiday
>>> jpholiday.is_holiday(datetime.date(2020, 1, 1))
True
>>> jpholiday.is_holiday_name(datetime.date(2020, 1, 1))
'元日'
内閣府の国民の祝日データと合わない日
jpholidayのバージョン: 0.1.4
私事ですが、ここ数日でpython-shukujitsuというライブラリを書いたので、それとこのjpholidayとのクロスバリデーションを実施したところ、上記の4日間、jpholidayでのみ祝日と判定されました。
いずれの日もゴールデンウィーク期間中の日曜日、もしくは水曜日ですので、振替休日等の計算に何かしらのコーナーケースや例外があるのかもしれないと感じました。以上、ご報告までに。
・海の日
・山の日
・スポーツの日
がないのは仕様ですか?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.