Skip to content

Commit

Permalink
Merge branch 'remote-beta' into add-algeria
Browse files Browse the repository at this point in the history
  • Loading branch information
abh31000 committed May 11, 2023
2 parents 1e316d1 + af76470 commit 00165ac
Show file tree
Hide file tree
Showing 41 changed files with 3,263 additions and 1,537 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ jobs:
name: dist
path: dist
- name: Publish Package
uses: pypa/[email protected].5
uses: pypa/[email protected].6
with:
user: __token__
password: ${{ secrets.pypi_password }}
25 changes: 12 additions & 13 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,22 +1,21 @@
build/*
dist/
venv/
MANIFEST
.coverage
.github_token
.gitpod.yml
.idea
.tox
.venv
.vscode/
*.code-workspace
*.DS_Store
*.egg-info
*.mo
*.pot
*.pyc
*.DS_Store
build/*
coverage.lcov
.tox
.venv
dist/
docs/build
holidays/locale/pot

# IDE Stuff
.idea
.vscode/
*.code-workspace
MANIFEST
Pipfile
.gitpod.yml
venv/
18 changes: 18 additions & 0 deletions CHANGES
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
Version 0.25
============

Released ???????? ??, ????

- Introduce entity lazy loading, #1087 (@arkid15r)
- Update Andorra holidays: fix AD-08 holiday, #1149 (@KJhellico)
- Update Canada holidays localization: fix `th` tests and translation, #1147 (@PPsyrius)
- Update Chile tests, #1150 (@KJhellico)
- Update Russia holidays: add 2023 bridge holidays, #1142 (@leeloo-1337)
- Update holiday groups: extend Easter methods, #1136 (@arkid15r)
- Add Islamic calendar class code generator, #1128 (@KJhellico)
- Add release notes generator, #1129 (@arkid15r)
- Migrate Brazil holidays to holiday groups and subdivision holidays methods, #1137 (@KJhellico)
- Migrate Slovakia holidays to holiday groups, #1143 (@kasya)
- Unify code structure for Malaysia and Singapore, #1134 (@arkid15r)
- Use a method per subdivision approach for [a-i] countries, #1133 (@arkid15r)

Version 0.24
============

Expand Down
4 changes: 2 additions & 2 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ subdivisions are available:
- None
* - France
- FR
- Départements: Alsace-Moselle, Guadeloupe, Guyane, La Réunion, Martinique, Mayotte, Métropole, Nouvelle-Calédonie, Polynésie Française, Saint-Barthélémy, Saint-Martin, Wallis-et-Futuna
- Départements: BL, GES, GP, GY, MF, MQ, NC, PF, RE, WF, YT
* - Georgia
- GE
- None
Expand Down Expand Up @@ -284,7 +284,7 @@ subdivisions are available:
- None
* - Italy
- IT
- Provinces: AG, AL, AN, AO, AP, AQ, AR, AT, AV, BA, BG, BI, BL, BN, BO, BR, BS, BT, BZ, CA, CB, CE, CH, CL, CN, CO, CR, CS, CT, CZ, EN, FC, FE, FG, FI, FM, FR, GE, GO, GR, IM, IS, KR, LC, LE, LI, LO, LT, LU, MB, MC, ME, MI, MN, MO, MS, MT, NA, NO, NU, OR, PA, PC, PD, PE, PG, PI, PN, PO, PR, PT, PU, PV, PZ, RA, RC, RE, RG, RI, RM, RN, RO, SA, SI, SO, SP, SR, SS, SU, SV, TA, TE, TN, TO, TP, TR, TS, TV, UD, VA, VB, VC, VE, VI, VR, VT, VV. Cities: Andria, Barletta, Cesena, Forlì, Pesaro, Trani, Urbino
- Provinces: AG, AL, AN, AO, AP, AQ, AR, AT, AV, BA, BG, BI, BL, BN, BO, BR, BS, BT, BZ, CA, CB, CE, CH, CL, CN, CO, CR, CS, CT, CZ, EN, FC, FE, FG, FI, FM, FR, GE, GO, GR, IM, IS, KR, LC, LE, LI, LO, LT, LU, MB, MC, ME, MI, MN, MO, MS, MT, NA, NO, NU, OR, PA, PC, PD, PE, PG, PI, PN, PO, PR, PT, PU, PV, PZ, RA, RC, RE, RG, RI, RM, RN, RO, SA, SI, SO, SP, SR, SS, SU, SV, TA, TE, TN, TO, TP, TR, TS, TV, UD, VA, VB, VC, VE, VI, VR, VT, VV. Cities: Andria, Barletta, Cesena, Forli, Pesaro, Trani, Urbino
* - Jamaica
- JM
- None
Expand Down
9 changes: 6 additions & 3 deletions holidays/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,12 @@
# License: MIT (see LICENSE file)

from holidays.constants import *
from holidays.countries import *
from holidays.financial import *
from holidays.holiday_base import *
from holidays.registry import EntityLoader
from holidays.utils import *

__version__ = "0.24"
__version__ = "0.25"


EntityLoader.load("countries", globals())
EntityLoader.load("financial", globals())
8 changes: 4 additions & 4 deletions holidays/countries/albania.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

from datetime import timedelta as td

from holidays.calendars import GREGORIAN_CALENDAR, JULIAN_CALENDAR
from holidays.calendars import JULIAN_CALENDAR
from holidays.constants import JAN, MAR, SEP, OCT, NOV, DEC
from holidays.holiday_base import HolidayBase
from holidays.holiday_groups import ChristianHolidays, IslamicHolidays
Expand Down Expand Up @@ -56,9 +56,9 @@ def _populate(self, year):

# Easter.
observed_dates.add(self._add_easter_sunday("Catholic Easter"))
self._set_calendar(JULIAN_CALENDAR)
observed_dates.add(self._add_easter_sunday("Orthodox Easter"))
self._set_calendar(GREGORIAN_CALENDAR)
observed_dates.add(
self._add_easter_sunday("Orthodox Easter", JULIAN_CALENDAR)
)

# May Day.
observed_dates.add(self._add_labor_day("May Day"))
Expand Down
135 changes: 76 additions & 59 deletions holidays/countries/andorra.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,13 @@
from datetime import date
from datetime import timedelta as td

from dateutil.easter import easter

from holidays.calendars import _get_nth_weekday_from, _get_nth_weekday_of_month
from holidays.constants import JAN, MAR, MAY, JUL, AUG, SEP, NOV, DEC, FRI, SAT
from holidays.constants import MAR, JUL, AUG, SEP, FRI, SAT
from holidays.holiday_base import HolidayBase
from holidays.holiday_groups import ChristianHolidays, InternationalHolidays


class Andorra(HolidayBase):
class Andorra(HolidayBase, ChristianHolidays, InternationalHolidays):
"""
References:
- https://en.wikipedia.org/wiki/Public_holidays_in_Andorra
Expand All @@ -37,90 +36,108 @@ class Andorra(HolidayBase):
"08", # Escaldes-Engordany.
)

def __init__(self, *args, **kwargs) -> None:
ChristianHolidays.__init__(self)
InternationalHolidays.__init__(self)
super().__init__(*args, **kwargs)

def _populate(self, year: int) -> None:
super()._populate(year)

# New Year's Day.
self[date(year, JAN, 1)] = "New Year's Day"
self._add_new_years_day("New Year's Day")

# Epiphany.
self[date(year, JAN, 6)] = "Epiphany"

easter_sunday = easter(year)
self._add_epiphany_day("Epiphany")

# Carnival.
self[easter_sunday + td(days=-47)] = "Carnival"
self._add_carnival_tuesday("Carnival")

# Constitution Day.
self[date(year, MAR, 14)] = "Constitution Day"
self._add_holiday("Constitution Day", MAR, 14)

# Good Friday.
self[easter_sunday + td(days=-2)] = "Good Friday"
self._add_good_friday("Good Friday")

# Easter Sunday.
self[easter_sunday + td(days=+1)] = "Easter Monday"
self._add_easter_monday("Easter Monday")

# Labour Day.
self[date(year, MAY, 1)] = "Labour Day"
# Labor Day.
self._add_labor_day("Labor Day")

# Whit Monday.
self[easter_sunday + td(days=+50)] = "Whit Monday"
self._add_whit_monday("Whit Monday")

# Assumption Day.
self[date(year, AUG, 15)] = "Assumption Day"
self._add_assumption_of_mary_day("Assumption Day")

# National Day.
self[date(year, SEP, 8)] = "National Day"
self._add_holiday("National Day", SEP, 8)

# All Saints' Day.
self[date(year, NOV, 1)] = "All Saints' Day"
self._add_all_saints_day("All Saints' Day")

# Immaculate Conception Day.
self[date(year, DEC, 8)] = "Immaculate Conception Day"
self._add_immaculate_conception_day("Immaculate Conception Day")

# Christmas Day.
self[date(year, DEC, 25)] = "Christmas Day"
self._add_christmas_day("Christmas Day")

# Saint Stephen's Day.
self[date(year, DEC, 26)] = "Saint Stephen's Day"

# Parish local holidays.
third_sat_of_july = _get_nth_weekday_of_month(3, SAT, JUL, year)
last_fri_of_july = _get_nth_weekday_from(-1, FRI, date(year, JUL, 29))
first_sat_of_august = _get_nth_weekday_of_month(1, SAT, AUG, year)

parish_holidays_mapping = {
"02": ((third_sat_of_july, 3, "Canillo Annual Festival"),),
"03": ((date(year, AUG, 15), 2, "Encamp Annual Festival"),),
"04": ((date(year, AUG, 15), 2, "La Massana Annual Festival"),),
"05": ((date(year, AUG, 15), 2, "Ordino Annual Festival"),),
"06": (
(
last_fri_of_july,
4,
"Sant Julià de Lòria Annual Festival",
),
),
"07": (
(
first_sat_of_august,
3,
"Andorra la Vella Annual Festival",
),
),
"08": (
(date(year, JUL, 25), 2, "Escaldes–Engordany Annual Festival"),
),
}

if self.subdiv:
for (
holiday_date,
num_days,
holiday_name,
) in parish_holidays_mapping[self.subdiv]:
for delta in range(num_days):
self[holiday_date + td(days=delta)] = holiday_name
self._add_christmas_day_two("Saint Stephen's Day")

# Canillo.
def _add_subdiv_02_holidays(self):
name = "Canillo Annual Festival"
third_sat_of_july = _get_nth_weekday_of_month(3, SAT, JUL, self._year)
self._add_holiday(name, third_sat_of_july)
self._add_holiday(name, third_sat_of_july + td(days=+1))
self._add_holiday(name, third_sat_of_july + td(days=+2))

# Encamp.
def _add_subdiv_03_holidays(self):
name = "Encamp Annual Festival"
aug_15 = self._add_holiday(name, AUG, 15)
self._add_holiday(name, aug_15 + td(days=+1))

# La Massana.
def _add_subdiv_04_holidays(self):
name = "La Massana Annual Festival"
aug_15 = self._add_holiday(name, AUG, 15)
self._add_holiday(name, aug_15 + td(days=+1))

# Ordino.
def _add_subdiv_05_holidays(self):
name = "Ordino Annual Festival"
aug_15 = self._add_holiday(name, AUG, 15)
self._add_holiday(name, aug_15 + td(days=+1))

# Sant Julià de Lòria.
def _add_subdiv_06_holidays(self):
name = "Sant Julià de Lòria Annual Festival"
last_fri_of_july = _get_nth_weekday_from(
-1, FRI, date(self._year, JUL, 29)
)
self._add_holiday(name, last_fri_of_july)
self._add_holiday(name, last_fri_of_july + td(days=+1))
self._add_holiday(name, last_fri_of_july + td(days=+2))
self._add_holiday(name, last_fri_of_july + td(days=+3))

# Andorra la Vella.
def _add_subdiv_07_holidays(self):
name = "Andorra la Vella Annual Festival"
first_sat_of_august = _get_nth_weekday_of_month(
1, SAT, AUG, self._year
)
self._add_holiday(name, first_sat_of_august)
self._add_holiday(name, first_sat_of_august + td(days=+1))
self._add_holiday(name, first_sat_of_august + td(days=+2))

# Escaldes-Engordany.
def _add_subdiv_08_holidays(self):
name = "Escaldes-Engordany Annual Festival"
jul_25 = self._add_holiday(name, JUL, 25)
self._add_holiday(name, jul_25 + td(days=+1))


class AD(Andorra):
Expand Down
Loading

0 comments on commit 00165ac

Please sign in to comment.