Repository: vacanza/python-holidays

Issue:
Clean up package build log warnings
Take care of a bunch of

```
  check.warn(importable)
/private/var/folders/wr/zbdvblqs5fqff7xr1gqgg03c0000gn/T/build-env-v7q9lxn2/lib/python3.11/site-packages/setuptools/command/build_py.py:204: _Warning: Package 'holidays.locale.uk.LC_MESSAGES' is absent from the `packages` configuration.
!!

        ********************************************************************************
        ############################
        # Package would be ignored #
        ############################
        Python recognizes 'holidays.locale.uk.LC_MESSAGES' as an importable package[^1],
        but it is absent from setuptools' `packages` configuration.

        This leads to an ambiguous overall configuration. If you want to distribute this
        package, please make sure that 'holidays.locale.uk.LC_MESSAGES' is explicitly added
        to the `packages` configuration field.

        Alternatively, you can also rely on setuptools' discovery methods
        (for example by using `find_namespace_packages(...)`/`find_namespace:`
        instead of `find_packages(...)`/`find:`).

        You can read more about "package discovery" on setuptools documentation page:

        - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html

        If you don't want 'holidays.locale.uk.LC_MESSAGES' to be distributed and are
        already explicitly excluding 'holidays.locale.uk.LC_MESSAGES' via
        `find_namespace_packages(...)/find_namespace` or `find_packages(...)/find`,
        you can try to use `exclude_package_data`, or `include-package-data=False` in
        combination with a more fine grained `package-data` configuration.

        You can read more about "package data files" on setuptools documentation page:

        - https://setuptools.pypa.io/en/latest/userguide/datafiles.html


        [^1]: For Python, any directory (with suitable naming) can be imported,
              even if it does not contain any `.py` files.
              On the other hand, currently there is no concept of package data
              directory, all directories are treated like packages.
        ********************************************************************************

!!
  check.warn(importable)
```

warning messages generated during `make package` command run.


Discussion:

Resolving patch:
diff --git a/holidays/holiday_base.py b/holidays/holiday_base.py
--- a/holidays/holiday_base.py
+++ b/holidays/holiday_base.py
@@ -579,12 +579,12 @@ def __repr__(self) -> str:
             parts.append(f"holidays.financial_holidays({self.market!r}")
             parts.append(")")
         elif hasattr(self, "country"):
-            if parts:
-                parts.append(" + ")
             parts.append(f"holidays.country_holidays({self.country!r}")
             if self.subdiv:
                 parts.append(f", subdiv={self.subdiv!r}")
             parts.append(")")
+        else:
+            parts.append("holidays.HolidayBase()")
 
         return "".join(parts)
 


Test patch:
diff --git a/requirements/tests.txt b/requirements/tests.txt
--- a/requirements/tests.txt
+++ b/requirements/tests.txt
@@ -1,5 +1,6 @@
 # Test requirements.
 coverage
+importlib-metadata
 pytest
 pytest-cov
 pytest-xdist
diff --git a/tests/test_holiday_base.py b/tests/test_holiday_base.py
--- a/tests/test_holiday_base.py
+++ b/tests/test_holiday_base.py
@@ -705,12 +705,15 @@ def test_partial(self):
 
 
 class TestRepr(unittest.TestCase):
-    def test_country(self):
-        hb = CountryStub1()
-        self.assertEqual(repr(hb), "holidays.country_holidays('CS1')")
+    def test_base(self):
+        self.assertEqual(repr(HolidayBase()), "holidays.HolidayBase()")
 
-        hb = CountryStub1(subdiv="Subdiv1")
-        self.assertEqual(repr(hb), "holidays.country_holidays('CS1', subdiv='Subdiv1')")
+    def test_country(self):
+        self.assertEqual(repr(CountryStub1()), "holidays.country_holidays('CS1')")
+        self.assertEqual(
+            repr(CountryStub1(subdiv="Subdiv1")),
+            "holidays.country_holidays('CS1', subdiv='Subdiv1')",
+        )
 
     def test_market(self):
         self.assertEqual(repr(MarketStub1()), "holidays.financial_holidays('MS1')")
diff --git a/tests/test_package.py b/tests/test_package.py
new file mode 100644
--- /dev/null
+++ b/tests/test_package.py
@@ -0,0 +1,43 @@
+#  python-holidays
+#  ---------------
+#  A fast, efficient Python library for generating country, province and state
+#  specific sets of holidays on the fly. It aims to make determining whether a
+#  specific date is a holiday as fast and flexible as possible.
+#
+#  Authors: dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/dr-prodigy/python-holidays
+#  License: MIT (see LICENSE file)
+
+from unittest import TestCase
+
+from importlib_metadata import metadata
+
+import holidays
+
+
+class TestPackage(TestCase):
+    def test_metadata(self):
+        ph_metadata = metadata("holidays")
+
+        for attr_name, attr_value in {
+            "name": "holidays",
+            "summary": "Generate and work with holidays in Python",
+            "version": holidays.__version__,
+        }.items():
+            self.assertIn(attr_name, ph_metadata)
+            self.assertEqual(ph_metadata[attr_name], attr_value, attr_name)
+
+        for attr_name in (
+            "author-email",
+            "classifier",
+            "description",
+            "keywords",
+            "license",
+            "license-file",
+            "maintainer-email",
+            "project-url",
+            "requires-python",
+        ):
+            self.assertIn(attr_name, ph_metadata)
+            self.assertTrue(ph_metadata[attr_name], attr_name)