Skip to content

Commit 5586cc9

Browse files
authored
Merge pull request #2741 from vacanza/dev
v0.77
2 parents 894bdee + 6096cad commit 5586cc9

File tree

157 files changed

+51353
-315
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

157 files changed

+51353
-315
lines changed

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,9 @@ Your PR description goes here.
3333
Put an `x` in the boxes that apply. You can change them after PR is created.
3434
-->
3535

36-
- [ ] I've followed the [contributing guidelines][contributing-guidelines]
37-
- [ ] I've successfully run `make check`, all checks and tests are green
36+
- [ ] I've read and followed the [contributing guidelines](https://github.com/vacanza/holidays/blob/dev/CONTRIBUTING.md).
37+
- [ ] I've run `make check` locally; all checks and tests passed.
3838

3939
<!--
4040
Thanks again for your contribution!
4141
-->
42-
43-
[contributing-guidelines]: https://github.com/vacanza/holidays/blob/dev/CONTRIBUTING.md
44-
[docs]: https://github.com/vacanza/holidays/tree/dev/docs/source

.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
__pycache__
12
.coverage
23
.github_token
34
.gitpod.yml
@@ -16,8 +17,6 @@ coverage.lcov
1617
coverage.xml
1718
dist/
1819
docs/auto_gen_files/
19-
docs/build
20-
docs/source/_autosummary
2120
holidays/locale/pot/*.pot
2221
MANIFEST
2322
Pipfile

.pre-commit-config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ repos:
2525
- --py39-plus
2626

2727
- repo: https://github.com/astral-sh/ruff-pre-commit
28-
rev: v0.12.2
28+
rev: v0.12.4
2929
hooks:
3030
- id: ruff-check
3131
- id: ruff-format
@@ -47,7 +47,7 @@ repos:
4747
exclude: ^(docs)
4848

4949
- repo: https://github.com/pre-commit/mirrors-mypy
50-
rev: v1.16.1
50+
rev: v1.17.0
5151
hooks:
5252
- id: mypy
5353
additional_dependencies:

CHANGES.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,30 @@
1+
# Version 0.77
2+
3+
Released July 21, 2025
4+
5+
- Refactor US holidays: consolidate duplicate `self._year` triggers (#2726 by @PPsyrius)
6+
- Add Cabo Verde holidays (#2654 by @Prateekshit73, @prateekshit-v, @sindhuraks)
7+
- Add Cayman Islands holidays (#2706 by @Abheelash-Mishra)
8+
- Add Central African Republic holidays (#2687 by @Prateekshit73, @arkid15r, @prateekshit-v)
9+
- Add Christmas Island holidays (#2623 by @anshonweb, @arkid15r)
10+
- Add Democratic Republic of the Congo holidays (#2702 by @Prateekshit73, @prateekshit-v)
11+
- Add Faroe Islands holidays (#2719 by @KJhellico, @arkid15r, @Shrot101)
12+
- Add Gibraltar holidays (#2720 by @Wasif-Shahzad, @arkid15r, @KJhellico)
13+
- Add Lebanon holidays (#2700 by @kritibirda26, @arkid15r)
14+
- Add Mali holidays (#2725 by @kritibirda26, @arkid15r)
15+
- Add Montserrat holidays (#2714 by @Wasif-Shahzad, @arkid15r, @KJhellico)
16+
- Add Niue holidays (#2737 by @Abheelash-Mishra, @arkid15r)
17+
- Add Norfolk Island holidays (#2716 by @anshonweb, @arkid15r)
18+
- Add Palestine holidays (#2701 by @Wasif-Shahzad)
19+
- Add Saint Vincent and the Grenadines holidays (#2608 by @waqar2403, @arkid15r, @PPsyrius)
20+
- Add Tokelau holidays (#2727 by @anshonweb, @arkid15r, @KJhellico)
21+
- Fix missing `StaticHolidays` in some countries (#2729 by @KJhellico)
22+
- Improve some variable naming (#2708 by @arkid15r)
23+
- Optimize dict in/get cases (#2707 by @arkid15r)
24+
- Update Georgia holidays (#2735 by @KJhellico)
25+
- Update Peru holidays: add 2023+ holidays (#2730 by @kplrm, @KJhellico)
26+
- Document `_add_holiday_*` pattern (#2721 by @williambdean, @arkid15r)
27+
128
# Version 0.76
229

330
Released July 7, 2025

CONTRIBUTORS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ Daniel Musketa
3535
Daniël Niemeijer
3636
David Hotham
3737
Devaraj K
38+
Diego Rosaperez
3839
Diogo Rosa
3940
Dorian Monnier
4041
Douglas Franklin
@@ -139,7 +140,9 @@ Shalom Donga
139140
Shaurya Uppal
140141
Sho Hirose
141142
Shreyansh Pande
143+
Shreyas Smarth
142144
Simon Gurcke
145+
Sindhura Kumbakonam Subramanian
143146
Sugato Ray
144147
Sylvain Pasche
145148
Sylvia van Os

README.md

Lines changed: 106 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ and detailed information.
105105

106106
## Available Countries
107107

108-
We currently support 208 country codes. The standard way to refer to a country is by using its [ISO
108+
We currently support 223 country codes. The standard way to refer to a country is by using its [ISO
109109
3166-1 alpha-2 code](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes), the same used
110110
for domain names, and for a subdivision its [ISO 3166-2
111111
code](https://en.wikipedia.org/wiki/ISO_3166-2). Some countries have common or foreign names or
@@ -385,6 +385,13 @@ any) in brackets, available languages and additional holiday categories. All cou
385385
<td></td>
386386
</tr>
387387
<tr>
388+
<td>Cabo Verde</td>
389+
<td>CV</td>
390+
<td>Municipalities: BR (Brava), BV (Boa Vista), CA (Santa Catarina), CF (Santa Catarina do Fogo), CR (Santa Cruz), MA (Maio), MO (Mosteiros), PA (Paul), PN (Porto Novo), PR (Praia), RB (Ribeira Brava), RG (Ribeira Grande), RS (Ribeira Grande de Santiago), SD (São Domingos), SF (São Filipe), SL (Sal), SM (São Miguel), SO (São Lourenço dos Órgãos), SS (São Salvador do Mundo), SV (São Vicente), TA (Tarrafal), TS (Tarrafal de São Nicolau)</td>
391+
<td>de, en_US, es, fr, <strong>pt_CV</strong></td>
392+
<td>OPTIONAL</td>
393+
</tr>
394+
<tr>
388395
<td>Cambodia</td>
389396
<td>KH</td>
390397
<td></td>
@@ -406,6 +413,20 @@ any) in brackets, available languages and additional holiday categories. All cou
406413
<td>GOVERNMENT, OPTIONAL</td>
407414
</tr>
408415
<tr>
416+
<td>Cayman Islands</td>
417+
<td>KY</td>
418+
<td></td>
419+
<td><strong>en_GB</strong>, en_US</td>
420+
<td></td>
421+
</tr>
422+
<tr>
423+
<td>Central African Republic</td>
424+
<td>CF</td>
425+
<td></td>
426+
<td>en_US, <strong>fr</strong></td>
427+
<td></td>
428+
</tr>
429+
<tr>
409430
<td>Chad</td>
410431
<td>TD</td>
411432
<td></td>
@@ -427,6 +448,13 @@ any) in brackets, available languages and additional holiday categories. All cou
427448
<td>HALF_DAY</td>
428449
</tr>
429450
<tr>
451+
<td>Christmas Island</td>
452+
<td>CX</td>
453+
<td></td>
454+
<td><strong>en_CX</strong>, en_US</td>
455+
<td></td>
456+
</tr>
457+
<tr>
430458
<td>Cocos Islands</td>
431459
<td>CC</td>
432460
<td></td>
@@ -525,6 +553,13 @@ any) in brackets, available languages and additional holiday categories. All cou
525553
<td></td>
526554
</tr>
527555
<tr>
556+
<td>DR Congo</td>
557+
<td>CD</td>
558+
<td></td>
559+
<td>en_US, <strong>fr</strong></td>
560+
<td></td>
561+
</tr>
562+
<tr>
528563
<td>Ecuador</td>
529564
<td>EC</td>
530565
<td></td>
@@ -581,6 +616,13 @@ any) in brackets, available languages and additional holiday categories. All cou
581616
<td>GOVERNMENT, WORKDAY</td>
582617
</tr>
583618
<tr>
619+
<td>Faroe Islands</td>
620+
<td>FO</td>
621+
<td></td>
622+
<td>da, en_US, <strong>fo</strong>, is, no, sv</td>
623+
<td>HALF_DAY</td>
624+
</tr>
625+
<tr>
584626
<td>Fiji</td>
585627
<td>FJ</td>
586628
<td></td>
@@ -651,6 +693,13 @@ any) in brackets, available languages and additional holiday categories. All cou
651693
<td></td>
652694
</tr>
653695
<tr>
696+
<td>Gibraltar</td>
697+
<td>GI</td>
698+
<td></td>
699+
<td><strong>en_GB</strong>, en_US</td>
700+
<td></td>
701+
</tr>
702+
<tr>
654703
<td>Greece</td>
655704
<td>GR</td>
656705
<td></td>
@@ -875,6 +924,13 @@ any) in brackets, available languages and additional holiday categories. All cou
875924
<td></td>
876925
</tr>
877926
<tr>
927+
<td>Lebanon</td>
928+
<td>LB</td>
929+
<td></td>
930+
<td><strong>ar</strong>, en_US</td>
931+
<td>BANK, GOVERNMENT</td>
932+
</tr>
933+
<tr>
878934
<td>Lesotho</td>
879935
<td>LS</td>
880936
<td></td>
@@ -945,6 +1001,13 @@ any) in brackets, available languages and additional holiday categories. All cou
9451001
<td></td>
9461002
</tr>
9471003
<tr>
1004+
<td>Mali</td>
1005+
<td>ML</td>
1006+
<td></td>
1007+
<td>en_US, <strong>fr</strong></td>
1008+
<td></td>
1009+
</tr>
1010+
<tr>
9481011
<td>Malta</td>
9491012
<td>MT</td>
9501013
<td></td>
@@ -1029,6 +1092,13 @@ any) in brackets, available languages and additional holiday categories. All cou
10291092
<td>CATHOLIC, HEBREW, ISLAMIC, ORTHODOX, WORKDAY</td>
10301093
</tr>
10311094
<tr>
1095+
<td>Montserrat</td>
1096+
<td>MS</td>
1097+
<td></td>
1098+
<td><strong>en_MS</strong>, en_US</td>
1099+
<td></td>
1100+
</tr>
1101+
<tr>
10321102
<td>Morocco</td>
10331103
<td>MA</td>
10341104
<td></td>
@@ -1106,6 +1176,20 @@ any) in brackets, available languages and additional holiday categories. All cou
11061176
<td></td>
11071177
</tr>
11081178
<tr>
1179+
<td>Niue</td>
1180+
<td>NU</td>
1181+
<td></td>
1182+
<td><strong>en_NU</strong>, en_US</td>
1183+
<td></td>
1184+
</tr>
1185+
<tr>
1186+
<td>Norfolk Island</td>
1187+
<td>NF</td>
1188+
<td></td>
1189+
<td><strong>en_NF</strong>, en_US</td>
1190+
<td></td>
1191+
</tr>
1192+
<tr>
11091193
<td>Northern Mariana Islands (the)</td>
11101194
<td>MP</td>
11111195
<td>Can also be loaded as country US, subdivision MP</td>
@@ -1148,6 +1232,13 @@ any) in brackets, available languages and additional holiday categories. All cou
11481232
<td>ARMED_FORCES, HALF_DAY</td>
11491233
</tr>
11501234
<tr>
1235+
<td>Palestine</td>
1236+
<td>PS</td>
1237+
<td></td>
1238+
<td><strong>ar</strong>, en_US</td>
1239+
<td>CATHOLIC, ORTHODOX</td>
1240+
</tr>
1241+
<tr>
11511242
<td>Panama</td>
11521243
<td>PA</td>
11531244
<td></td>
@@ -1267,6 +1358,13 @@ any) in brackets, available languages and additional holiday categories. All cou
12671358
<td></td>
12681359
</tr>
12691360
<tr>
1361+
<td>Saint Vincent and the Grenadines</td>
1362+
<td>VC</td>
1363+
<td></td>
1364+
<td>en_US, <strong>en_VC</strong></td>
1365+
<td></td>
1366+
</tr>
1367+
<tr>
12701368
<td>Samoa</td>
12711369
<td>WS</td>
12721370
<td></td>
@@ -1449,6 +1547,13 @@ any) in brackets, available languages and additional holiday categories. All cou
14491547
<td>WORKDAY</td>
14501548
</tr>
14511549
<tr>
1550+
<td>Tokelau</td>
1551+
<td>TK</td>
1552+
<td></td>
1553+
<td><strong>en_TK</strong>, en_US, tkl</td>
1554+
<td></td>
1555+
</tr>
1556+
<tr>
14521557
<td>Tonga</td>
14531558
<td>TO</td>
14541559
<td></td>

SECURITY.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
| Version | Supported |
66
|---------| ------------------ |
7-
| 0.76 | :white_check_mark: |
8-
| < 0.76 | :x: |
7+
| 0.77 | :white_check_mark: |
8+
| < 0.77 | :x: |
99

1010
## Reporting a Vulnerability
1111

docs/examples.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,41 @@ for a country that is not supported yet:
338338
>>> hdays = NewCountryHolidays()
339339
```
340340

341+
We can use the `self._add_holiday_*` methods to specify holidays:
342+
343+
``` python
344+
>>> class MovingHolidays(holidays.HolidayBase):
345+
>>> def _populate(self, year):
346+
>>> super()._populate(year)
347+
>>>
348+
>>> self._add_holiday_3rd_mon_of_jan("Martin Luther King Jr. Day")
349+
>>> self._add_holiday_last_fri_of_feb("Last Friday of February")
350+
>>> self._add_holiday_1st_mon_before_dec_25("Monday before Christmas")
351+
>>> moving = MovingHolidays(years=2025)
352+
```
353+
354+
The supported `_add_holiday_*` patterns are:
355+
356+
- `_add_holiday_<month>_<day>` for fixed-date holidays
357+
- `_add_holiday_<last/nth>_<weekday>_of_<month>` for holidays that occur on a specific weekday of a month
358+
- `_add_holiday_<n>_day(s)_<past/prior>_<last/nth>_<weekday>_of_<month>`
359+
- `_add_holiday_<nth>_<weekday>_<before/from>_<month>_<day>`
360+
- `_add_holiday_<n>_day(s)_<prior/past>_easter` (requires inheritance from `ChristianHolidays` holidays group)
361+
362+
Some examples of these methods would be:
363+
364+
- `_add_holiday_jan_1`
365+
- `_add_holiday_last_mon_of_feb`
366+
- `_add_holiday_1st_thu_of_nov`
367+
- `_add_holiday_2_days_prior_2nd_mon_of_jan`
368+
- `_add_holiday_1_day_past_last_fri_of_dec`
369+
- `_add_holiday_1st_tue_from_dec_25`
370+
- `_add_holiday_2nd_fri_before_jun_15`
371+
- `_add_holiday_2_days_prior_easter` (make sure to derive from `ChristianHolidays`)
372+
- `_add_holiday_1_day_past_easter` (make sure to derive from `ChristianHolidays`)
373+
374+
You can find the implementation details at `HolidayBase.__getattr__` method.
375+
341376
We can also include holidays for a subdivision (e.g. prov/state) in our new class:
342377

343378
``` python

0 commit comments

Comments
 (0)