Repository: vacanza/holidays
Pull request #2158 (2024-12-05 20:23:49)

Align financial markets MIC codes with ISO 10383
<!--
  Thanks for contributing to holidays!
-->

## Proposed change

<!--
  Describe the big picture of your changes.
  Don't forget to link your PR to an existing issue if any.
-->

Align financial markets MIC codes with ISO 10383 (NYSE → XNYS, ECB → XECB).
Add consistency test for financial markets table in README.rst.

## Type of change

<!--
  Type of change you want to introduce. Please, check one (1) box only!
  If your PR requires multiple boxes to be checked, most likely it needs to
  be split into multiple PRs.
-->

- [ ] New country/market holidays support (thank you!)
- [ ] Supported country/market holidays update (calendar discrepancy fix, localization)
- [x] Existing code/documentation/test/process quality improvement (best practice, cleanup, refactoring, optimization)
- [ ] Dependency update (version deprecation/pin/upgrade)
- [ ] Bugfix (non-breaking change which fixes an issue)
- [ ] Breaking change (a code change causing existing functionality to break)
- [ ] New feature (new `holidays` functionality in general)

## Checklist

<!--
  Put an `x` in the boxes that apply. You can change them after PR is created.
-->

- [x] I've followed the [contributing guidelines][contributing-guidelines]
- [x] I've successfully run `make check`, all checks and tests are green

<!--
  Thanks again for your contribution!
-->

[contributing-guidelines]: https://github.com/vacanza/holidays/blob/dev/CONTRIBUTING.rst
[docs]: https://github.com/vacanza/holidays/tree/dev/docs/source


sonarcloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2158) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2158&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2158&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=vacanza_python-holidays&pullRequest=2158&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2158&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2158&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2158)


codecov[bot]: ## [Codecov](https://app.codecov.io/gh/vacanza/holidays/pull/2158?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 100.00%. Comparing base [(`e969609`)](https://app.codecov.io/gh/vacanza/holidays/commit/e9696094e22dcbdf35d436eb2f96022c3f6341bd?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza) to head [(`9f14895`)](https://app.codecov.io/gh/vacanza/holidays/commit/9f148955460a69e342678b17398913238e6dae94?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff            @@
##               dev     #2158   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          194       194           
  Lines        11557     11559    +2     
  Branches      1641      1641           
=========================================
+ Hits         11557     11559    +2     
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/vacanza/holidays/pull/2158?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).

arkid15r: Just for the record -- I've already implemented this change as a part of our `v1` standardization goal [here](https://github.com/vacanza/holidays/blob/v1/holidays/entities/ISO_10383/XNYS.py). Thanks for adding it to `v0` too!

Patch:
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 303c4f46..6c323a90 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -23,7 +23,7 @@ repos:
           - --py39-plus
 
   - repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: v0.8.1
+    rev: v0.8.2
     hooks:
       - id: ruff
       - id: ruff-format
diff --git a/README.rst b/README.rst
index 4c2404aa..1933fb4b 100644
--- a/README.rst
+++ b/README.rst
@@ -980,8 +980,12 @@ following financial markets are available:
      - Code
      - Info
      - Supported Languages
+   * - Brasil, Bolsa, Balcão
+     - BVMF
+     - Brazil Stock Exchange and Over-the-Counter Market holidays (same as ANBIMA holidays)
+     - en_US, **pt_BR**, uk
    * - European Central Bank
-     - ECB
+     - XECB
      - Trans-European Automated Real-time Gross Settlement (TARGET2)
      -
    * - ICE Futures Europe
@@ -992,10 +996,6 @@ following financial markets are available:
      - XNYS
      - NYSE market holidays (used by all other US-exchanges, including NASDAQ, etc.)
      -
-   * - Brasil, Bolsa, Balcão
-     - BVMF
-     - Brazil Stock Exchange and Over-the-Counter Market holidays (same as ANBIMA holidays)
-     - en_US, **pt_BR**, uk
 
 
 Contributions
diff --git a/holidays/financial/__init__.py b/holidays/financial/__init__.py
index 7f4c9b6c..114544eb 100644
--- a/holidays/financial/__init__.py
+++ b/holidays/financial/__init__.py
@@ -13,6 +13,6 @@
 # flake8: noqa: F401
 
 from .brasil_bolsa_balcao import BrasilBolsaBalcao, BVMF, B3
-from .european_central_bank import EuropeanCentralBank, ECB, TAR
+from .european_central_bank import EuropeanCentralBank, XECB, ECB, TAR
 from .ice_futures_europe import ICEFuturesEurope, IFEU
-from .ny_stock_exchange import NewYorkStockExchange, NYSE, XNYS
+from .ny_stock_exchange import NewYorkStockExchange, XNYS, NYSE
diff --git a/holidays/financial/european_central_bank.py b/holidays/financial/european_central_bank.py
index abc47eec..3a380af0 100644
--- a/holidays/financial/european_central_bank.py
+++ b/holidays/financial/european_central_bank.py
@@ -19,11 +19,12 @@ class EuropeanCentralBank(HolidayBase, ChristianHolidays, InternationalHolidays)
     """
     References:
         - https://en.wikipedia.org/wiki/TARGET2
+        - https://www.ecb.europa.eu/ecb/contacts/working-hours/html/index.en.html
         - https://www.ecb.europa.eu/press/pr/date/1999/html/pr990715_1.en.html
         - https://www.ecb.europa.eu/press/pr/date/2000/html/pr001214_4.en.html
     """
 
-    market = "ECB"
+    market = "XECB"
     start_year = 2000
 
     def __init__(self, *args, **kwargs):
@@ -36,12 +37,18 @@ class EuropeanCentralBank(HolidayBase, ChristianHolidays, InternationalHolidays)
         self._add_new_years_day("New Year's Day")
 
         self._add_good_friday("Good Friday")
+
         self._add_easter_monday("Easter Monday")
 
-        self._add_labor_day("1 May (Labour Day)")
+        self._add_labor_day("Labour Day")
 
         self._add_christmas_day("Christmas Day")
-        self._add_christmas_day_two("26 December")
+
+        self._add_christmas_day_two("Christmas Holiday")
+
+
+class XECB(EuropeanCentralBank):
+    pass
 
 
 class ECB(EuropeanCentralBank):
diff --git a/holidays/financial/ny_stock_exchange.py b/holidays/financial/ny_stock_exchange.py
index 9231c71f..3a1599b2 100644
--- a/holidays/financial/ny_stock_exchange.py
+++ b/holidays/financial/ny_stock_exchange.py
@@ -43,7 +43,7 @@ class NewYorkStockExchange(
     - https://web.archive.org/web/20211101162021/https://www.nyse.com/markets/hours-calendars
     """
 
-    market = "NYSE"
+    market = "XNYS"
     observed_label = "%s (observed)"
     start_year = 1863
 
diff --git a/holidays/registry.py b/holidays/registry.py
index 96818ded..4df09fc3 100644
--- a/holidays/registry.py
+++ b/holidays/registry.py
@@ -183,9 +183,9 @@ COUNTRIES: RegistryDict = {
 }
 
 FINANCIAL: RegistryDict = {
-    "european_central_bank": ("EuropeanCentralBank", "ECB", "TAR"),
+    "european_central_bank": ("EuropeanCentralBank", "XECB", "ECB", "TAR"),
     "ice_futures_europe": ("ICEFuturesEurope", "IFEU"),
-    "ny_stock_exchange": ("NewYorkStockExchange", "NYSE", "XNYS"),
+    "ny_stock_exchange": ("NewYorkStockExchange", "XNYS", "NYSE"),
     "brasil_bolsa_balcao": ("BrasilBolsaBalcao", "BVMF", "B3"),
 }
 
diff --git a/snapshots/financial/ECB.json b/snapshots/financial/XECB.json
similarity index 65%
rename from snapshots/financial/ECB.json
rename to snapshots/financial/XECB.json
index 905e15ef..0fe37a3d 100644
--- a/snapshots/financial/ECB.json
+++ b/snapshots/financial/XECB.json
@@ -2,308 +2,308 @@
     "2000-01-01": "New Year's Day",
     "2000-04-21": "Good Friday",
     "2000-04-24": "Easter Monday",
-    "2000-05-01": "1 May (Labour Day)",
+    "2000-05-01": "Labour Day",
     "2000-12-25": "Christmas Day",
-    "2000-12-26": "26 December",
+    "2000-12-26": "Christmas Holiday",
     "2000-12-31": "Additional closing day",
     "2001-01-01": "New Year's Day",
     "2001-04-13": "Good Friday",
     "2001-04-16": "Easter Monday",
-    "2001-05-01": "1 May (Labour Day)",
+    "2001-05-01": "Labour Day",
     "2001-12-25": "Christmas Day",
-    "2001-12-26": "26 December",
+    "2001-12-26": "Christmas Holiday",
     "2002-01-01": "New Year's Day",
     "2002-03-29": "Good Friday",
     "2002-04-01": "Easter Monday",
-    "2002-05-01": "1 May (Labour Day)",
+    "2002-05-01": "Labour Day",
     "2002-12-25": "Christmas Day",
-    "2002-12-26": "26 December",
+    "2002-12-26": "Christmas Holiday",
     "2003-01-01": "New Year's Day",
     "2003-04-18": "Good Friday",
     "2003-04-21": "Easter Monday",
-    "2003-05-01": "1 May (Labour Day)",
+    "2003-05-01": "Labour Day",
     "2003-12-25": "Christmas Day",
-    "2003-12-26": "26 December",
+    "2003-12-26": "Christmas Holiday",
     "2004-01-01": "New Year's Day",
     "2004-04-09": "Good Friday",
     "2004-04-12": "Easter Monday",
-    "2004-05-01": "1 May (Labour Day)",
+    "2004-05-01": "Labour Day",
     "2004-12-25": "Christmas Day",
-    "2004-12-26": "26 December",
+    "2004-12-26": "Christmas Holiday",
     "2005-01-01": "New Year's Day",
     "2005-03-25": "Good Friday",
     "2005-03-28": "Easter Monday",
-    "2005-05-01": "1 May (Labour Day)",
+    "2005-05-01": "Labour Day",
     "2005-12-25": "Christmas Day",
-    "2005-12-26": "26 December",
+    "2005-12-26": "Christmas Holiday",
     "2006-01-01": "New Year's Day",
     "2006-04-14": "Good Friday",
     "2006-04-17": "Easter Monday",
-    "2006-05-01": "1 May (Labour Day)",
+    "2006-05-01": "Labour Day",
     "2006-12-25": "Christmas Day",
-    "2006-12-26": "26 December",
+    "2006-12-26": "Christmas Holiday",
     "2007-01-01": "New Year's Day",
     "2007-04-06": "Good Friday",
     "2007-04-09": "Easter Monday",
-    "2007-05-01": "1 May (Labour Day)",
+    "2007-05-01": "Labour Day",
     "2007-12-25": "Christmas Day",
-    "2007-12-26": "26 December",
+    "2007-12-26": "Christmas Holiday",
     "2008-01-01": "New Year's Day",
     "2008-03-21": "Good Friday",
     "2008-03-24": "Easter Monday",
-    "2008-05-01": "1 May (Labour Day)",
+    "2008-05-01": "Labour Day",
     "2008-12-25": "Christmas Day",
-    "2008-12-26": "26 December",
+    "2008-12-26": "Christmas Holiday",
     "2009-01-01": "New Year's Day",
     "2009-04-10": "Good Friday",
     "2009-04-13": "Easter Monday",
-    "2009-05-01": "1 May (Labour Day)",
+    "2009-05-01": "Labour Day",
     "2009-12-25": "Christmas Day",
-    "2009-12-26": "26 December",
+    "2009-12-26": "Christmas Holiday",
     "2010-01-01": "New Year's Day",
     "2010-04-02": "Good Friday",
     "2010-04-05": "Easter Monday",
-    "2010-05-01": "1 May (Labour Day)",
+    "2010-05-01": "Labour Day",
     "2010-12-25": "Christmas Day",
-    "2010-12-26": "26 December",
+    "2010-12-26": "Christmas Holiday",
     "2011-01-01": "New Year's Day",
     "2011-04-22": "Good Friday",
     "2011-04-25": "Easter Monday",
-    "2011-05-01": "1 May (Labour Day)",
+    "2011-05-01": "Labour Day",
     "2011-12-25": "Christmas Day",
-    "2011-12-26": "26 December",
+    "2011-12-26": "Christmas Holiday",
     "2012-01-01": "New Year's Day",
     "2012-04-06": "Good Friday",
     "2012-04-09": "Easter Monday",
-    "2012-05-01": "1 May (Labour Day)",
+    "2012-05-01": "Labour Day",
     "2012-12-25": "Christmas Day",
-    "2012-12-26": "26 December",
+    "2012-12-26": "Christmas Holiday",
     "2013-01-01": "New Year's Day",
     "2013-03-29": "Good Friday",
     "2013-04-01": "Easter Monday",
-    "2013-05-01": "1 May (Labour Day)",
+    "2013-05-01": "Labour Day",
     "2013-12-25": "Christmas Day",
-    "2013-12-26": "26 December",
+    "2013-12-26": "Christmas Holiday",
     "2014-01-01": "New Year's Day",
     "2014-04-18": "Good Friday",
     "2014-04-21": "Easter Monday",
-    "2014-05-01": "1 May (Labour Day)",
+    "2014-05-01": "Labour Day",
     "2014-12-25": "Christmas Day",
-    "2014-12-26": "26 December",
+    "2014-12-26": "Christmas Holiday",
     "2015-01-01": "New Year's Day",
     "2015-04-03": "Good Friday",
     "2015-04-06": "Easter Monday",
-    "2015-05-01": "1 May (Labour Day)",
+    "2015-05-01": "Labour Day",
     "2015-12-25": "Christmas Day",
-    "2015-12-26": "26 December",
+    "2015-12-26": "Christmas Holiday",
     "2016-01-01": "New Year's Day",
     "2016-03-25": "Good Friday",
     "2016-03-28": "Easter Monday",
-    "2016-05-01": "1 May (Labour Day)",
+    "2016-05-01": "Labour Day",
     "2016-12-25": "Christmas Day",
-    "2016-12-26": "26 December",
+    "2016-12-26": "Christmas Holiday",
     "2017-01-01": "New Year's Day",
     "2017-04-14": "Good Friday",
     "2017-04-17": "Easter Monday",
-    "2017-05-01": "1 May (Labour Day)",
+    "2017-05-01": "Labour Day",
     "2017-12-25": "Christmas Day",
-    "2017-12-26": "26 December",
+    "2017-12-26": "Christmas Holiday",
     "2018-01-01": "New Year's Day",
     "2018-03-30": "Good Friday",
     "2018-04-02": "Easter Monday",
-    "2018-05-01": "1 May (Labour Day)",
+    "2018-05-01": "Labour Day",
     "2018-12-25": "Christmas Day",
-    "2018-12-26": "26 December",
+    "2018-12-26": "Christmas Holiday",
     "2019-01-01": "New Year's Day",
     "2019-04-19": "Good Friday",
     "2019-04-22": "Easter Monday",
-    "2019-05-01": "1 May (Labour Day)",
+    "2019-05-01": "Labour Day",
     "2019-12-25": "Christmas Day",
-    "2019-12-26": "26 December",
+    "2019-12-26": "Christmas Holiday",
     "2020-01-01": "New Year's Day",
     "2020-04-10": "Good Friday",
     "2020-04-13": "Easter Monday",
-    "2020-05-01": "1 May (Labour Day)",
+    "2020-05-01": "Labour Day",
     "2020-12-25": "Christmas Day",
-    "2020-12-26": "26 December",
+    "2020-12-26": "Christmas Holiday",
     "2021-01-01": "New Year's Day",
     "2021-04-02": "Good Friday",
     "2021-04-05": "Easter Monday",
-    "2021-05-01": "1 May (Labour Day)",
+    "2021-05-01": "Labour Day",
     "2021-12-25": "Christmas Day",
-    "2021-12-26": "26 December",
+    "2021-12-26": "Christmas Holiday",
     "2022-01-01": "New Year's Day",
     "2022-04-15": "Good Friday",
     "2022-04-18": "Easter Monday",
-    "2022-05-01": "1 May (Labour Day)",
+    "2022-05-01": "Labour Day",
     "2022-12-25": "Christmas Day",
-    "2022-12-26": "26 December",
+    "2022-12-26": "Christmas Holiday",
     "2023-01-01": "New Year's Day",
     "2023-04-07": "Good Friday",
     "2023-04-10": "Easter Monday",
-    "2023-05-01": "1 May (Labour Day)",
+    "2023-05-01": "Labour Day",
     "2023-12-25": "Christmas Day",
-    "2023-12-26": "26 December",
+    "2023-12-26": "Christmas Holiday",
     "2024-01-01": "New Year's Day",
     "2024-03-29": "Good Friday",
     "2024-04-01": "Easter Monday",
-    "2024-05-01": "1 May (Labour Day)",
+    "2024-05-01": "Labour Day",
     "2024-12-25": "Christmas Day",
-    "2024-12-26": "26 December",
+    "2024-12-26": "Christmas Holiday",
     "2025-01-01": "New Year's Day",
     "2025-04-18": "Good Friday",
     "2025-04-21": "Easter Monday",
-    "2025-05-01": "1 May (Labour Day)",
+    "2025-05-01": "Labour Day",
     "2025-12-25": "Christmas Day",
-    "2025-12-26": "26 December",
+    "2025-12-26": "Christmas Holiday",
     "2026-01-01": "New Year's Day",
     "2026-04-03": "Good Friday",
     "2026-04-06": "Easter Monday",
-    "2026-05-01": "1 May (Labour Day)",
+    "2026-05-01": "Labour Day",
     "2026-12-25": "Christmas Day",
-    "2026-12-26": "26 December",
+    "2026-12-26": "Christmas Holiday",
     "2027-01-01": "New Year's Day",
     "2027-03-26": "Good Friday",
     "2027-03-29": "Easter Monday",
-    "2027-05-01": "1 May (Labour Day)",
+    "2027-05-01": "Labour Day",
     "2027-12-25": "Christmas Day",
-    "2027-12-26": "26 December",
+    "2027-12-26": "Christmas Holiday",
     "2028-01-01": "New Year's Day",
     "2028-04-14": "Good Friday",
     "2028-04-17": "Easter Monday",
-    "2028-05-01": "1 May (Labour Day)",
+    "2028-05-01": "Labour Day",
     "2028-12-25": "Christmas Day",
-    "2028-12-26": "26 December",
+    "2028-12-26": "Christmas Holiday",
     "2029-01-01": "New Year's Day",
     "2029-03-30": "Good Friday",
     "2029-04-02": "Easter Monday",
-    "2029-05-01": "1 May (Labour Day)",
+    "2029-05-01": "Labour Day",
     "2029-12-25": "Christmas Day",
-    "2029-12-26": "26 December",
+    "2029-12-26": "Christmas Holiday",
     "2030-01-01": "New Year's Day",
     "2030-04-19": "Good Friday",
     "2030-04-22": "Easter Monday",
-    "2030-05-01": "1 May (Labour Day)",
+    "2030-05-01": "Labour Day",
     "2030-12-25": "Christmas Day",
-    "2030-12-26": "26 December",
+    "2030-12-26": "Christmas Holiday",
     "2031-01-01": "New Year's Day",
     "2031-04-11": "Good Friday",
     "2031-04-14": "Easter Monday",
-    "2031-05-01": "1 May (Labour Day)",
+    "2031-05-01": "Labour Day",
     "2031-12-25": "Christmas Day",
-    "2031-12-26": "26 December",
+    "2031-12-26": "Christmas Holiday",
     "2032-01-01": "New Year's Day",
     "2032-03-26": "Good Friday",
     "2032-03-29": "Easter Monday",
-    "2032-05-01": "1 May (Labour Day)",
+    "2032-05-01": "Labour Day",
     "2032-12-25": "Christmas Day",
-    "2032-12-26": "26 December",
+    "2032-12-26": "Christmas Holiday",
     "2033-01-01": "New Year's Day",
     "2033-04-15": "Good Friday",
     "2033-04-18": "Easter Monday",
-    "2033-05-01": "1 May (Labour Day)",
+    "2033-05-01": "Labour Day",
     "2033-12-25": "Christmas Day",
-    "2033-12-26": "26 December",
+    "2033-12-26": "Christmas Holiday",
     "2034-01-01": "New Year's Day",
     "2034-04-07": "Good Friday",
     "2034-04-10": "Easter Monday",
-    "2034-05-01": "1 May (Labour Day)",
+    "2034-05-01": "Labour Day",
     "2034-12-25": "Christmas Day",
-    "2034-12-26": "26 December",
+    "2034-12-26": "Christmas Holiday",
     "2035-01-01": "New Year's Day",
     "2035-03-23": "Good Friday",
     "2035-03-26": "Easter Monday",
-    "2035-05-01": "1 May (Labour Day)",
+    "2035-05-01": "Labour Day",
     "2035-12-25": "Christmas Day",
-    "2035-12-26": "26 December",
+    "2035-12-26": "Christmas Holiday",
     "2036-01-01": "New Year's Day",
     "2036-04-11": "Good Friday",
     "2036-04-14": "Easter Monday",
-    "2036-05-01": "1 May (Labour Day)",
+    "2036-05-01": "Labour Day",
     "2036-12-25": "Christmas Day",
-    "2036-12-26": "26 December",
+    "2036-12-26": "Christmas Holiday",
     "2037-01-01": "New Year's Day",
     "2037-04-03": "Good Friday",
     "2037-04-06": "Easter Monday",
-    "2037-05-01": "1 May (Labour Day)",
+    "2037-05-01": "Labour Day",
     "2037-12-25": "Christmas Day",
-    "2037-12-26": "26 December",
+    "2037-12-26": "Christmas Holiday",
     "2038-01-01": "New Year's Day",
     "2038-04-23": "Good Friday",
     "2038-04-26": "Easter Monday",
-    "2038-05-01": "1 May (Labour Day)",
+    "2038-05-01": "Labour Day",
     "2038-12-25": "Christmas Day",
-    "2038-12-26": "26 December",
+    "2038-12-26": "Christmas Holiday",
     "2039-01-01": "New Year's Day",
     "2039-04-08": "Good Friday",
     "2039-04-11": "Easter Monday",
-    "2039-05-01": "1 May (Labour Day)",
+    "2039-05-01": "Labour Day",
     "2039-12-25": "Christmas Day",
-    "2039-12-26": "26 December",
+    "2039-12-26": "Christmas Holiday",
     "2040-01-01": "New Year's Day",
     "2040-03-30": "Good Friday",
     "2040-04-02": "Easter Monday",
-    "2040-05-01": "1 May (Labour Day)",
+    "2040-05-01": "Labour Day",
     "2040-12-25": "Christmas Day",
-    "2040-12-26": "26 December",
+    "2040-12-26": "Christmas Holiday",
     "2041-01-01": "New Year's Day",
     "2041-04-19": "Good Friday",
     "2041-04-22": "Easter Monday",
-    "2041-05-01": "1 May (Labour Day)",
+    "2041-05-01": "Labour Day",
     "2041-12-25": "Christmas Day",
-    "2041-12-26": "26 December",
+    "2041-12-26": "Christmas Holiday",
     "2042-01-01": "New Year's Day",
     "2042-04-04": "Good Friday",
     "2042-04-07": "Easter Monday",
-    "2042-05-01": "1 May (Labour Day)",
+    "2042-05-01": "Labour Day",
     "2042-12-25": "Christmas Day",
-    "2042-12-26": "26 December",
+    "2042-12-26": "Christmas Holiday",
     "2043-01-01": "New Year's Day",
     "2043-03-27": "Good Friday",
     "2043-03-30": "Easter Monday",
-    "2043-05-01": "1 May (Labour Day)",
+    "2043-05-01": "Labour Day",
     "2043-12-25": "Christmas Day",
-    "2043-12-26": "26 December",
+    "2043-12-26": "Christmas Holiday",
     "2044-01-01": "New Year's Day",
     "2044-04-15": "Good Friday",
     "2044-04-18": "Easter Monday",
-    "2044-05-01": "1 May (Labour Day)",
+    "2044-05-01": "Labour Day",
     "2044-12-25": "Christmas Day",
-    "2044-12-26": "26 December",
+    "2044-12-26": "Christmas Holiday",
     "2045-01-01": "New Year's Day",
     "2045-04-07": "Good Friday",
     "2045-04-10": "Easter Monday",
-    "2045-05-01": "1 May (Labour Day)",
+    "2045-05-01": "Labour Day",
     "2045-12-25": "Christmas Day",
-    "2045-12-26": "26 December",
+    "2045-12-26": "Christmas Holiday",
     "2046-01-01": "New Year's Day",
     "2046-03-23": "Good Friday",
     "2046-03-26": "Easter Monday",
-    "2046-05-01": "1 May (Labour Day)",
+    "2046-05-01": "Labour Day",
     "2046-12-25": "Christmas Day",
-    "2046-12-26": "26 December",
+    "2046-12-26": "Christmas Holiday",
     "2047-01-01": "New Year's Day",
     "2047-04-12": "Good Friday",
     "2047-04-15": "Easter Monday",
-    "2047-05-01": "1 May (Labour Day)",
+    "2047-05-01": "Labour Day",
     "2047-12-25": "Christmas Day",
-    "2047-12-26": "26 December",
+    "2047-12-26": "Christmas Holiday",
     "2048-01-01": "New Year's Day",
     "2048-04-03": "Good Friday",
     "2048-04-06": "Easter Monday",
-    "2048-05-01": "1 May (Labour Day)",
+    "2048-05-01": "Labour Day",
     "2048-12-25": "Christmas Day",
-    "2048-12-26": "26 December",
+    "2048-12-26": "Christmas Holiday",
     "2049-01-01": "New Year's Day",
     "2049-04-16": "Good Friday",
     "2049-04-19": "Easter Monday",
-    "2049-05-01": "1 May (Labour Day)",
+    "2049-05-01": "Labour Day",
     "2049-12-25": "Christmas Day",
-    "2049-12-26": "26 December",
+    "2049-12-26": "Christmas Holiday",
     "2050-01-01": "New Year's Day",
     "2050-04-08": "Good Friday",
     "2050-04-11": "Easter Monday",
-    "2050-05-01": "1 May (Labour Day)",
+    "2050-05-01": "Labour Day",
     "2050-12-25": "Christmas Day",
-    "2050-12-26": "26 December"
+    "2050-12-26": "Christmas Holiday"
 }


Test patch:
diff --git a/snapshots/financial/NYSE.json b/snapshots/financial/XNYS.json
similarity index 100%
rename from snapshots/financial/NYSE.json
rename to snapshots/financial/XNYS.json
diff --git a/tests/financial/test_european_central_bank.py b/tests/financial/test_european_central_bank.py
index 3959e77a..eacba3c2 100644
--- a/tests/financial/test_european_central_bank.py
+++ b/tests/financial/test_european_central_bank.py
@@ -12,7 +12,7 @@
 
 from unittest import TestCase
 
-from holidays.financial.european_central_bank import EuropeanCentralBank, ECB, TAR
+from holidays.financial.european_central_bank import EuropeanCentralBank, XECB, ECB, TAR
 from tests.common import CommonFinancialTests
 
 
@@ -22,7 +22,7 @@ class TestEuropeanCentralBank(CommonFinancialTests, TestCase):
         super().setUpClass(EuropeanCentralBank, years=range(2000, 2100))
 
     def test_market_aliases(self):
-        self.assertAliases(EuropeanCentralBank, ECB, TAR)
+        self.assertAliases(EuropeanCentralBank, XECB, ECB, TAR)
 
     def test_no_holidays(self):
         self.assertNoHolidays(EuropeanCentralBank(years=1999))
@@ -34,6 +34,7 @@ class TestEuropeanCentralBank(CommonFinancialTests, TestCase):
         self.assertHolidayName("New Year's Day", (f"{year}-01-01" for year in range(2000, 2100)))
 
     def test_good_friday(self):
+        name = "Good Friday"
         dt = (
             "2000-04-21",
             "2010-04-02",
@@ -45,9 +46,11 @@ class TestEuropeanCentralBank(CommonFinancialTests, TestCase):
             "2023-04-07",
             "2024-03-29",
         )
-        self.assertHolidayName("Good Friday", dt)
+        self.assertHolidayName(name, dt)
+        self.assertHolidayName(name, range(2000, 2100))
 
     def test_easter_monday(self):
+        name = "Easter Monday"
         dt = (
             "2000-04-24",
             "2010-04-05",
@@ -59,18 +62,18 @@ class TestEuropeanCentralBank(CommonFinancialTests, TestCase):
             "2023-04-10",
             "2024-04-01",
         )
-        self.assertHolidayName("Easter Monday", dt)
+        self.assertHolidayName(name, dt)
 
     def test_labour_day(self):
-        self.assertHolidayName(
-            "1 May (Labour Day)", (f"{year}-05-01" for year in range(2000, 2100))
-        )
+        self.assertHolidayName("Labour Day", (f"{year}-05-01" for year in range(2000, 2100)))
 
     def test_christmas_day(self):
         self.assertHolidayName("Christmas Day", (f"{year}-12-25" for year in range(2000, 2100)))
 
     def test_26_december_day(self):
-        self.assertHolidayName("26 December", (f"{year}-12-26" for year in range(2000, 2100)))
+        self.assertHolidayName(
+            "Christmas Holiday", (f"{year}-12-26" for year in range(2000, 2100))
+        )
 
     def test_2015(self):
         self.assertHolidays(
@@ -78,7 +81,7 @@ class TestEuropeanCentralBank(CommonFinancialTests, TestCase):
             ("2015-01-01", "New Year's Day"),
             ("2015-04-03", "Good Friday"),
             ("2015-04-06", "Easter Monday"),
-            ("2015-05-01", "1 May (Labour Day)"),
+            ("2015-05-01", "Labour Day"),
             ("2015-12-25", "Christmas Day"),
-            ("2015-12-26", "26 December"),
+            ("2015-12-26", "Christmas Holiday"),
         )
diff --git a/tests/financial/test_ny_stock_exchange.py b/tests/financial/test_ny_stock_exchange.py
index e9a16ce7..31789982 100644
--- a/tests/financial/test_ny_stock_exchange.py
+++ b/tests/financial/test_ny_stock_exchange.py
@@ -31,7 +31,7 @@ from holidays.calendars.gregorian import (
     SAT,
     SUN,
 )
-from holidays.financial.ny_stock_exchange import NewYorkStockExchange, NYSE, XNYS
+from holidays.financial.ny_stock_exchange import NewYorkStockExchange, XNYS, NYSE
 from tests.common import CommonFinancialTests
 
 
@@ -41,7 +41,7 @@ class TestNewYorkStockExchange(CommonFinancialTests, TestCase):
         super().setUpClass(NewYorkStockExchange)
 
     def test_market_aliases(self):
-        self.assertAliases(NewYorkStockExchange, NYSE, XNYS)
+        self.assertAliases(NewYorkStockExchange, XNYS, NYSE)
 
     def test_no_holidays(self):
         self.assertNoHolidays(NewYorkStockExchange(years=1862))
@@ -444,13 +444,12 @@ class TestNewYorkStockExchange(CommonFinancialTests, TestCase):
         ]
 
         def _make_special_holiday_list(begin, end, days=None, weekends=False):
-            _list = [
+            return [
                 d
                 for d in (begin + td(days=n) for n in range((end - begin).days + 1))
                 if (weekends or d.weekday() not in {SAT, SUN})
                 and (days is None or d.weekday() in days)
             ]
-            return _list
 
         wwi_holidays = _make_special_holiday_list(date(1914, JUL, 31), date(1914, NOV, 27))
         oneoff_bank_holidays = _make_special_holiday_list(date(1933, MAR, 6), date(1933, MAR, 14))
diff --git a/tests/test_docs.py b/tests/test_docs.py
index ce86fb1c..da324f80 100644
--- a/tests/test_docs.py
+++ b/tests/test_docs.py
@@ -14,7 +14,14 @@ import re
 from pathlib import Path
 from unittest import TestCase
 
-from holidays import country_holidays, list_supported_countries, list_localized_countries
+from holidays import (
+    country_holidays,
+    financial_holidays,
+    list_localized_countries,
+    list_localized_financial,
+    list_supported_countries,
+    list_supported_financial,
+)
 from holidays.constants import PUBLIC
 
 
@@ -223,3 +230,109 @@ class TestReadme(TestCase):
                 "all supported categories: "
                 f"{', '.join(instance.supported_categories)}",
             )
+
+    def test_supported_markets_table(self):
+        # Parse table data.
+        columns_number = 4
+        market_mic_codes = set()
+        market_default_languages = {}
+        market_names = []
+        market_supported_languages = {}
+
+        table_content = [
+            line.strip()
+            for line in re.findall(
+                r"Info\s+- Supported Languages(.*)Contributions",
+                self.readme_content,
+                re.DOTALL,
+            )[0].split("\n")
+            if line
+        ]
+
+        for idx in range(0, len(table_content), columns_number):
+            # Market: 1st column.
+            name = (
+                table_content[idx]
+                .strip(" *-")
+                .translate(
+                    str.maketrans(
+                        {
+                            " ": "",
+                            ",": "",
+                            "ã": "a",
+                        }
+                    )
+                )
+                .lower()
+            )
+            market_names.append(name)
+
+            # Code: 2nd column.
+            market_code = table_content[idx + 1].strip(" -")
+            if market_code:
+                market_mic_codes.add(market_code)
+
+            # Supported Languages: 4th column.
+            supported_languages = table_content[idx + 3].strip(" -")
+            if supported_languages:
+                languages = []
+                for supported_language in supported_languages.split(","):
+                    supported_language = supported_language.strip()
+
+                    if "*" in supported_language:
+                        supported_language = supported_language.strip("*")
+                        market_default_languages[market_code] = supported_language
+                    languages.append(supported_language)
+
+                market_supported_languages[market_code] = languages
+
+        # Check the data.
+        self.assertEqual(
+            market_names,
+            sorted(market_names),
+            "The supported markets table must be sorted alphabetically by market name.\n"
+            + "\n".join(
+                (f"{c} != {s}" for c, s in zip(market_names, sorted(market_names)) if c != s)
+            ),
+        )
+
+        supported_markets = list_supported_financial(include_aliases=False)
+        localized_markets = list_localized_financial(include_aliases=False)
+        for market_code in supported_markets:
+            instance = financial_holidays(market_code)
+            market_name = instance.__class__.__base__.__name__
+
+            # Make sure market name is shown correctly.
+            self.assertIn(
+                market_name.lower(),
+                market_names,
+                f"Market '{market_name}' name is not shown correctly in the table.",
+            )
+
+            # Make sure market MIC code is shown correctly.
+            self.assertIn(
+                instance.market,
+                market_mic_codes,
+                f"Market '{market_name}' MIC code is not shown correctly in the table.",
+            )
+
+            # Make sure supported languages are shown correctly.
+            if market_code in localized_markets:
+                supported_languages = localized_markets[market_code]
+                self.assertEqual(
+                    supported_languages,
+                    market_supported_languages.get(market_code),
+                    f"Market {market_name} supported languages are not "
+                    "shown correctly in the table. The column must contain "
+                    "all supported languages: "
+                    f"{', '.join(instance.supported_languages)}",
+                )
+
+                self.assertEqual(
+                    market_default_languages.get(market_code),
+                    instance.default_language,
+                    f"Market {market_name} default language is not shown "
+                    "correctly in the table. Use **language** format "
+                    "to specify the market default language: "
+                    f"**{instance.default_language}**.",
+                )
diff --git a/tests/test_utils.py b/tests/test_utils.py
index 2e3aa50f..ed235653 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -70,22 +70,22 @@ class TestCountryHolidays(unittest.TestCase):
 
 class TestFinancialHolidays(unittest.TestCase):
     def setUp(self):
-        self.holidays = financial_holidays("NYSE")
+        self.holidays = financial_holidays("XNYS")
 
     def test_market(self):
-        self.assertEqual(self.holidays.market, "NYSE")
+        self.assertEqual(self.holidays.market, "XNYS")
 
     def test_market_single_year(self):
-        h = financial_holidays("NYSE", years=2021)
+        h = financial_holidays("XNYS", years=2021)
         self.assertEqual(h.years, {2021})
 
     def test_market_years(self):
-        h = financial_holidays("NYSE", years=(2015, 2016))
+        h = financial_holidays("XNYS", years=(2015, 2016))
         self.assertEqual(h.years, {2015, 2016})
 
     def test_exceptions(self):
         self.assertRaises(NotImplementedError, lambda: financial_holidays("XXXX"))
-        self.assertRaises(NotImplementedError, lambda: financial_holidays("NYSE", subdiv="XXXX"))
+        self.assertRaises(NotImplementedError, lambda: financial_holidays("XNYS", subdiv="XXXX"))
 
 
 class TestAllInSameYear(unittest.TestCase):
@@ -223,13 +223,11 @@ class TestListSupportedEntities(unittest.TestCase):
     def test_list_supported_financial(self):
         supported_financial = list_supported_financial(include_aliases=False)
 
-        self.assertIn("ECB", supported_financial)
-        self.assertIn("IFEU", supported_financial)
-        self.assertIn("NYSE", supported_financial)
-        self.assertIn("BVMF", supported_financial)
+        for code in ("BVMF", "IFEU", "XECB", "XNYS"):
+            self.assertIn(code, supported_financial)
 
-        nyse = supported_financial["NYSE"]
-        self.assertIsInstance(nyse, list)
+        xnys = supported_financial["XNYS"]
+        self.assertIsInstance(xnys, list)
 
         financial_files = [
             path for path in Path("holidays/financial").glob("*.py") if path.stem != "__init__"