Repository: 12rambau/pygadm (language: python)

Issue:
link the lib to pypackage



Discussion / hints:

Fix patch:
diff --git a/.copier-answers.yml b/.copier-answers.yml
new file mode 100644
index 0000000..72ad4e8
--- /dev/null
+++ b/.copier-answers.yml
@@ -0,0 +1,14 @@
+# Changes here will be overwritten by Copier
+_commit: 0.1.5
+_src_path: gh:12rambau/pypackage
+author_email: pierrick.rambaud49@gmai.com
+author_first_name: Pierrick
+author_last_name: Rambaud
+author_orcid: 0000-0001-8764-5749
+github_repo_name: pygadm
+github_user: 12rambau
+project_name: pyGADM
+project_slug: pygadm
+short_description:
+  Easy access to administrative boundary defined by GADM from Python
+  scripts
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index 9474279..56910d3 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -1,5 +1,9 @@
 {
   "name": "Python 3",
-  "image": "mcr.microsoft.com/devcontainers/python",
-  "postCreateCommand": "python -m pip install nox pre-commit commitizen && pre-commit install"
-}
\ No newline at end of file
+  "image": "mcr.microsoft.com/devcontainers/python:1-3.11-bullseye",
+  "features": {
+    "ghcr.io/devcontainers-contrib/features/nox:2": {},
+    "ghcr.io/devcontainers-contrib/features/pre-commit:2": {}
+  },
+  "postCreateCommand": "pre-commit install"
+}
diff --git a/.github/ISSUE_TEMPLATE/PULL_REQUEST_TEMPLATE/pr_template.md b/.github/ISSUE_TEMPLATE/PULL_REQUEST_TEMPLATE/pr_template.md
new file mode 100644
index 0000000..f9c309e
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/PULL_REQUEST_TEMPLATE/pr_template.md
@@ -0,0 +1,23 @@
+---
+name: Pull request template
+about: Create a pull request
+title: ""
+labels: ""
+assignees: ""
+---
+
+## reference the related issue
+
+PR should answer problem stated in the issue tracker. please open one before starting a PR
+
+## description of the changes
+
+Describe the changes you propose
+
+## mention
+
+@mentions of the person or team responsible for reviewing proposed changes
+
+## comments
+
+any other comments we should pay attention to
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..25ea003
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,24 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ""
+labels: ""
+assignees: ""
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+
+1. Go to '...'
+2. Click on '....'
+3. Scroll down to '....'
+4. See error
+
+**Screenshots**
+If applicable, add screenshots to help explain your problem.
+
+**Additional context**
+Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..2bc5d5f
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,19 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ""
+labels: ""
+assignees: ""
+---
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
diff --git a/.github/workflows/pypackage_check.yaml b/.github/workflows/pypackage_check.yaml
new file mode 100644
index 0000000..648f1a6
--- /dev/null
+++ b/.github/workflows/pypackage_check.yaml
@@ -0,0 +1,52 @@
+name: template update check
+
+on:
+  workflow_dispatch:
+  schedule:
+    - cron: "0 0 1 * *" # Run at 00:00 on the first day of each month
+
+jobs:
+  check_version:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v3
+      - uses: actions/setup-python@v4
+        with:
+          python-version: "3.10"
+      - name: install dependencies
+        run: pip install requests
+      - name: get latest pypackage release
+        id: get_latest_release
+        run: |
+          RELEASE=$(curl -s https://api.github.com/repos/12rambau/pypackage/releases | jq -r '.[0].tag_name')
+          echo "latest=$RELEASE" >> $GITHUB_OUTPUT
+          echo "latest release: $RELEASE"
+      - name: get current pypackage version
+        id: get_current_version
+        run: |
+          RELEASE=$(yq -r "._commit" .copier-answers.yml)
+          echo "current=$RELEASE" >> $GITHUB_OUTPUT
+          echo "current release: $RELEASE"
+      - name: open issue
+        if: steps.get_current_version.outputs.current != steps.get_latest_release.outputs.latest
+        uses: rishabhgupta/git-action-issue@v2
+        with:
+          token: ${{ secrets.GITHUB_TOKEN }}
+          title: "Update template to ${{ steps.get_latest_release.outputs.latest }}"
+          body: |
+            The package is based on the ${{ steps.get_current_version.outputs.current }} version of [@12rambau/pypackage](https://github.com/12rambau/pypackage).
+
+            The latest version of the template is ${{ steps.get_latest_release.outputs.latest }}.
+
+            Please consider updating the template to the latest version to include all the latest developments.
+
+            Run the following code in your project directory to update the template:
+
+            ```
+            copier update --trust --defaults --vcs-ref ${{ steps.get_latest_release.outputs.latest }}
+            ```
+
+            > **Note**
+            > You may need to reinstall ``copier`` and ``jinja2-time`` if they are not available in your environment.
+
+            After solving the merging issues you can push back the changes to your main branch.
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yaml
similarity index 56%
rename from .github/workflows/release.yml
rename to .github/workflows/release.yaml
index b908828..af4ca67 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yaml
@@ -9,16 +9,18 @@ jobs:
     runs-on: ubuntu-latest
 
     steps:
-      - uses: actions/checkout@v2
-      - uses: actions/setup-python@v2
+      - uses: actions/checkout@v3
+      - uses: actions/setup-python@v4
+        with:
+          python-version: "3.10"
       - name: Install dependencies
-        run: |
-          python -m pip install --upgrade pip
-          pip install setuptools wheel twine build
+        run: pip install twine build nox
+      - name: update citation date
+        run: nox -s release-date
       - name: Build and publish
         env:
           TWINE_USERNAME: __token__
           TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
         run: |
           python -m build
-          twine upload dist/*
\ No newline at end of file
+          twine upload dist/*
diff --git a/.github/workflows/unit.yaml b/.github/workflows/unit.yaml
index 761feff..5296788 100644
--- a/.github/workflows/unit.yaml
+++ b/.github/workflows/unit.yaml
@@ -1,4 +1,4 @@
-name: Build
+name: Unit tests
 
 on:
   push:
@@ -76,12 +76,12 @@ jobs:
       - uses: actions/setup-python@v4
         with:
           python-version: "3.10"
-      - name: Install nox
-        run: pip install nox coverage[toml]
+      - name: Install deps
+        run: pip install nox
       - name: test with pytest
         run: nox -s test
-      - name: coverage
-        run: coverage xml
+      - name: assess dead fixtures
+        run: nox -s dead-fixtures
       - name: codecov
         uses: codecov/codecov-action@v3
         with:
diff --git a/.gitignore b/.gitignore
index c5883b9..857afd2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,7 +2,6 @@
 __pycache__/
 *.py[cod]
 *$py.class
-*[Uu]ntitled*
 
 # C extensions
 *.so
@@ -51,6 +50,7 @@ coverage.xml
 *.py,cover
 .hypothesis/
 .pytest_cache/
+.ruff_cache/
 
 # Translations
 *.mo
@@ -71,7 +71,7 @@ instance/
 
 # Sphinx documentation
 docs/_build/
-docs/source/_api
+docs/api/
 
 # PyBuilder
 target/
@@ -130,11 +130,8 @@ dmypy.json
 # Pyre type checker
 .pyre/
 
-# visual studio files 
+# system IDE
 .vscode/
 
-# Mac OSX files 
-**/.DS_Store
-
-# ruff cache
-.ruff_cache
+# image tmp file
+*Zone.Identifier
\ No newline at end of file
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 00df7e4..67a3941 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -2,30 +2,60 @@ default_install_hook_types: [pre-commit, commit-msg]
 
 repos:
   - repo: "https://github.com/psf/black"
-    rev: 22.3.0
+    rev: "22.3.0"
     hooks:
       - id: black
         stages: [commit]
+
   - repo: "https://github.com/commitizen-tools/commitizen"
-    rev: v2.18.0
+    rev: "v2.18.0"
     hooks:
       - id: commitizen
         stages: [commit-msg]
+
   - repo: "https://github.com/kynan/nbstripout"
-    rev: 0.5.0
+    rev: "0.5.0"
     hooks:
       - id: nbstripout
         stages: [commit]
+
+  - repo: "https://github.com/pre-commit/mirrors-prettier"
+    rev: "v2.7.1"
+    hooks:
+      - id: prettier
+        stages: [commit]
+        exclude: tests\/test_.+\.
+
   - repo: https://github.com/charliermarsh/ruff-pre-commit
-    rev: v0.0.215
+    rev: "v0.0.215"
     hooks:
       - id: ruff
         stages: [commit]
-        args: ["--force-exclude"]
+
+  - repo: https://github.com/PyCQA/doc8
+    rev: "v1.1.1"
+    hooks:
+      - id: doc8
+        stages: [commit]
+
+  - repo: https://github.com/FHPythonUtils/LicenseCheck
+    rev: "2023.5.1"
+    hooks:
+      - id: licensecheck
+        stages: [commit]
+
   - repo: https://github.com/codespell-project/codespell
     rev: v2.2.4
     hooks:
       - id: codespell
         stages: [commit]
         additional_dependencies:
-        - tomli
\ No newline at end of file
+          - tomli
+
+  # Prevent committing inline conflict markers
+  - repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: v4.3.0
+    hooks:
+      - id: check-merge-conflict
+        stages: [commit]
+        args: [--assume-in-merge]
diff --git a/.readthedocs.yaml b/.readthedocs.yaml
index 20ca313..8237ac8 100644
--- a/.readthedocs.yaml
+++ b/.readthedocs.yaml
@@ -15,4 +15,4 @@ python:
     - method: pip
       path: .
       extra_requirements:
-        - doc
\ No newline at end of file
+        - doc
diff --git a/AUTHORS.rst b/AUTHORS.rst
new file mode 100644
index 0000000..0b31d2d
--- /dev/null
+++ b/AUTHORS.rst
@@ -0,0 +1,21 @@
+Thanks goes to these wonderful people (`emoji key <https://allcontributors.org/docs/en/emoji-key>`_):
+
+.. raw:: html
+
+    <table class="table table-bordered">
+      <tr>
+        <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
+        <td align="center">
+            <a href="#">
+               <img src="https://github.com/12rambau.png" width="70px;" alt="12rambau"/><br />
+               <sub><b>Pierrick Rambaud</b></sub>
+            </a>
+            <a href="#code" title="Code">💻</a>
+         </td>
+        <!-- ALL-CONTRIBUTORS-LIST:END -->
+      </tr>
+    </table>
+
+This project follows the `all-contributors <https://allcontributors.org>`_ specification.
+
+Contributions of any kind are welcome!
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 3738bc8..0000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,124 +0,0 @@
-## v0.5.1 (2023-09-21)
-
-### Fix
-
-- cache the parquet loading in a private method (#47)
-- cache the parquet loading in a private method
-
-## 0.5.0 (2023-08-31)
-
-### Feat
-
-- Use classes instead of function to create the dataframes (#42)
-- immplment the Items and Names as classes
-
-### Fix
-
-- use the patched version of pytest-regression (#45)
-- use the patched version of pytest-regression
-- remove autodoc typehint
-- use a deprecation cycle
-
-## 0.4.0 (2023-08-14)
-
-### Feat
-
-- access the whole list when calling `get_name`without parameters (#37)
-
-### Fix
-
-- get all the data names get all the data names when no parameter is set
-- solve documentation build issue with GEE (#40)
-
-### Refactor
-
-- clean never used file
-
-## 0.3.0 (2023-08-14)
-
-### Feat
-
-- display all levels information with 'complete' keyword (#32)
-- display all levels information with 'complete' keyword
-- add a devcontainer for codespace development (#29)
-- add a devcontainer for codespace development
-- add suggestion for wrongly set names/id (#23)
-- show the 5 closest options in the error
-
-### Fix
-
-- add commitizen to the dev container
-- don't use accent in error message
-- throw specific error for GADM server issues related to #22
-- install all hooks at once (#21)
-- install all hooks at once
-
-### Refactor
-
-- remove tests
-- use caching mechanism to accelerate download by x10 (#33)
-- use caching mechanism to accelerate download by x10
-- add codespell check
-
-## 0.2.0 (2023-02-02)
-
-### Feat
-
-- add the support for continents
-- use lists in the requests
-
-### Fix
-
-- udate database generation script
-- add last continents
-- ignore ruff cache
-- add north america
-- add europe and asia
-- increase coverage
-- build documentation in the appropriate folder Fix #1
-
-### Refactor
-
-- styling
-- edit database to avoid duplication now the database is a stair with first all the countries then all admin 1 etc. This ensure that when there is a duplication (e.g. Italy) it catches the country first
-- reduce size of continent list
-
-## 0.1.1 (2023-01-10)
-
-### Refactor
-
-- use ruff replace isort and flake8
-- remove .DS_Store legacy mac file
-- use brotli compression for database
-
-## 0.1.0 (2023-01-08)
-
-### Feat
-
-- aline the get_name behavior on get_items
-- automatic publishing
-- output a pandas dataframe
-- first version of the methods
-
-### Fix
-
-- search case insensitive
-- use json instead of geopackage format
-- remove execution of gee cells
-- make it work with gee
-- remove colorama dependency
-- unit.yml typo
-- remove jupyter_execute related to #1
-- remove vscode
-- add parquet file to distrib
-- use parquet pickle files have an incompatibility issue between pandas 1.2 - 1.3
-- use protocol 4 for the pickle compatibility issue with Python 3.7
-- don't assess dead-fixture because I don't use fixtures
-
-### Refactor
-
-- remove useless variable in the docs
-- use get_name in get_items
-- typo
-- only use shield.io badges
-- typo
diff --git a/CITATION.cff b/CITATION.cff
new file mode 100644
index 0000000..779f0c9
--- /dev/null
+++ b/CITATION.cff
@@ -0,0 +1,11 @@
+cff-version: "1.2.0"
+message: "If you use this software, please cite it as below."
+authors:
+  - family-names: "Rambaud"
+    given-names: "Pierrick"
+    orcid: "https://orcid.org/0000-0001-8764-5749"
+title: "pyGADM"
+version: "0.5.1"
+doi: ""
+date-released: "2023-12-22"
+url: "https://github.com/12rambau/pygadm"
diff --git a/CODE_OF_CONDUCT.rst b/CODE_OF_CONDUCT.rst
new file mode 100644
index 0000000..8d62350
--- /dev/null
+++ b/CODE_OF_CONDUCT.rst
@@ -0,0 +1,140 @@
+Contributor Covenant Code of Conduct
+====================================
+
+Our Pledge
+----------
+
+We as members, contributors, and leaders pledge to make participation in our
+community a harassment-free experience for everyone, regardless of age, body
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, religion, or sexual identity
+and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
+
+Our Standards
+-------------
+
+Examples of behavior that contributes to a positive environment for our
+community include:
+
+* Demonstrating empathy and kindness toward other people
+* Being respectful of differing opinions, viewpoints, and experiences
+* Giving and gracefully accepting constructive feedback
+* Accepting responsibility and apologizing to those affected by our mistakes,
+  and learning from the experience
+* Focusing on what is best not just for us as individuals, but for the
+  overall community
+
+Examples of unacceptable behavior include:
+
+* The use of sexualized language or imagery, and sexual attention or
+  advances of any kind
+* Trolling, insulting or derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or email
+  address, without their explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+  professional setting
+
+Enforcement Responsibilities
+----------------------------
+
+Community leaders are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
+
+Community leaders have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will communicate reasons for moderation
+decisions when appropriate.
+
+Scope
+-----
+
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official e-mail address,
+posting via an official social media account, or acting as an appointed
+representative at an online or offline event.
+
+Enforcement
+-----------
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported to the FAO team responsible for enforcement at
+pierrick.rambaud49@gmail.com.
+All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident.
+
+Enforcement Guidelines
+----------------------
+
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:
+
+Correction
+^^^^^^^^^^
+
+**Community Impact**: Use of inappropriate language or other behavior deemed
+unprofessional or unwelcome in the community.
+
+**Consequence**: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behavior was inappropriate. A public apology may be requested.
+
+Warning
+^^^^^^^
+
+**Community Impact**: A violation through a single incident or series
+of actions.
+
+**Consequence**: A warning with consequences for continued behavior. No
+interaction with the people involved, including unsolicited interaction with
+those enforcing the Code of Conduct, for a specified period of time. This
+includes avoiding interactions in community spaces as well as external channels
+like social media. Violating these terms may lead to a temporary or
+permanent ban.
+
+Temporary Ban
+^^^^^^^^^^^^^
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behavior.
+
+**Consequence**: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban.
+
+Permanent Ban
+^^^^^^^^^^^^^
+
+**Community Impact**: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behavior,  harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of public interaction within
+the community.
+
+Attribution
+-----------
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version 2.0, available at
+https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
+
+Community Impact Guidelines were inspired by [Mozilla's code of conduct
+enforcement ladder](https://github.com/mozilla/diversity).
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this code of conduct, see the FAQ at
+https://www.contributor-covenant.org/faq. Translations are available at
+https://www.contributor-covenant.org/translations.
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
new file mode 100644
index 0000000..9409b9d
--- /dev/null
+++ b/CONTRIBUTING.rst
@@ -0,0 +1,108 @@
+Contribute
+==========
+
+Thank you for your help improving **pyGADM**!
+
+**pyGADM** uses `nox <https://nox.thea.codes/en/stable/>`__ to automate several development-related tasks.
+Currently, the project uses four automation processes (called sessions) in ``noxfile.py``:
+
+-   ``mypy``: to perform a mypy check on the lib;
+-   ``test``: to run the test with pytest;
+-   ``docs``: to build the documentation in the ``build`` folder;
+-   ``lint``: to run the pre-commits in an isolated environment
+
+Every nox session is run in its own virtual environment, and the dependencies are installed automatically.
+
+To run a specific nox automation process, use the following command:
+
+.. code-block:: console
+
+   nox -s <session name>
+
+For example: ``nox -s test`` or ``nox -s docs``.
+
+Workflow for contributing changes
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+We follow a typical GitHub workflow of:
+
+-   Create a personal fork of this repo
+-   Create a branch
+-   Open a pull request
+-   Fix findings of various linters and checks
+-   Work through code review
+
+See the following sections for more details.
+
+Clone the repository
+^^^^^^^^^^^^^^^^^^^^
+
+First off, you'll need your own copy of **pyGADM** codebase. You can clone it for local development like so:
+
+Fork the repository so you have your own copy on GitHub. See the `GitHub forking guide for more information <https://docs.github.com/en/get-started/quickstart/fork-a-repo>`__.
+
+Then, clone the repository locally so that you have a local copy to work on:
+
+.. code-block:: console
+
+   git clone https://github.com/<YOUR USERNAME>/pygadm
+   cd pygadm
+
+Then install the development version of the extension:
+
+.. code-block:: console
+
+   pip install -e .[dev]
+
+This will install the **pyGADM** library, together with two additional tools:
+-   `pre-commit <https://pre-commit.com>`__ for automatically enforcing code standards and quality checks before commits.
+-   `nox <https://nox.thea.codes/en/stable/>`__, for automating common development tasks.
+
+Lastly, activate the pre-commit hooks by running:
+
+.. code-block:: console
+
+    pre-commit install
+
+This will install the necessary dependencies to run pre-commit every time you make a commit with Git.
+
+Contribute to the codebase
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Any larger updates to the codebase should include tests and documentation. The tests are located in the ``tests`` folder, and the documentation is located in the ``docs`` folder.
+
+To run the tests locally, use the following command:
+
+.. code-block:: console
+
+    nox -s test
+
+See :ref:`below <contributing-docs>` for more information on how to update the documentation.
+
+.. _contributing-docs:
+
+Contribute to the docs
+^^^^^^^^^^^^^^^^^^^^^^
+
+The documentation is built using `Sphinx <https://www.sphinx-doc.org/en/master/>`__ and deployed to `Read the Docs <https://readthedocs.org/>`__.
+
+To build the documentation locally, use the following command:
+
+.. code-block:: console
+
+    nox -s docs
+
+For each pull request, the documentation is built and deployed to make it easier to review the changes in the PR. To access the docs build from a PR, click on the "Read the Docs" preview in the CI/CD jobs.
+
+Release new version
+^^^^^^^^^^^^^^^^^^^
+
+To release a new version, start by pushing a new bump from the local directory:
+
+.. code-block::
+
+    cz bump
+
+The commitizen-tool will detect the semantic version name based on the existing commits messages.
+
+Then push to Github. In Github design a new release using the same tag name nad the ``release.yaml`` job will send it to pipy.
diff --git a/README.rst b/README.rst
index 29b6e87..0f82a55 100644
--- a/README.rst
+++ b/README.rst
@@ -1,11 +1,12 @@
-PyGADM
+
+pyGADM
 ======
 
-.. image:: https://img.shields.io/badge/License-MIT-yellow?logo=opensourceinitiative&logoColor=white
-    :target: https://opensource.org/licenses/MIT
+.. image:: https://img.shields.io/badge/License-MIT-yellow.svg?logo=opensourceinitiative&logoColor=white
+    :target: LICENSE
     :alt: License: MIT
 
-.. image:: https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow?logo=git&logoColor=white
+.. image:: https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg?logo=git&logoColor=white
    :target: https://conventionalcommits.org
    :alt: conventional commit
 
@@ -17,29 +18,28 @@ PyGADM
    :target: https://github.com/prettier/prettier
    :alt: prettier badge
 
-.. image:: https://img.shields.io/conda/vn/conda-forge/pygadm?logo=condaforge&logoColor=white
-   :target: https://anaconda.org/conda-forge/pygadm
-   :alt: Conda (channel only)
+.. image:: https://img.shields.io/badge/pre--commit-active-yellow?logo=pre-commit&logoColor=white
+    :target: https://pre-commit.com/
+    :alt: pre-commit
 
-.. image:: https://img.shields.io/pypi/v/pygadm?logo=pypi&logoColor=white
-   :target: https://pypi.org/project/pygadm/
-   :alt: PyPI
-
-.. image:: https://img.shields.io/readthedocs/pygadm?logo=readthedocs&logoColor=white
-    :target: https://pygadm.readthedocs.io/en/stable
-    :alt: Documentation Status
+.. image:: https://img.shields.io/pypi/v/pygadm?color=blue&logo=pypi&logoColor=white
+    :target: https://pypi.org/project/pygadm/
+    :alt: PyPI version
 
 .. image:: https://img.shields.io/github/actions/workflow/status/12rambau/pygadm/unit.yaml?logo=github&logoColor=white
-   :target: https://github.com/12rambau/pygadm/actions/workflows/unit.yaml
-   :alt: Build
+    :target: https://github.com/12rambau/pygadm/actions/workflows/unit.yaml
+    :alt: build
 
-.. image:: https://img.shields.io/codeclimate/maintainability/12rambau/pygadm?logo=codeclimate&logoColor=white
-   :target: https://codeclimate.com/github/12rambau/pygadm/maintainability
-   :alt: Maintainability
+.. image:: https://img.shields.io/codecov/c/github/12rambau/pygadm?logo=codecov&logoColor=white
+    :target: https://codecov.io/gh/12rambau/pygadm
+    :alt: Test Coverage
 
-.. image:: https://img.shields.io/codecov/c/github/12rambau/pygadm?label=codecov&logo=codecov&logoColor=white&token=O6ksUUazr4
-   :target: https://codecov.io/gh/12rambau/pygadm
-   :alt: Coverage
+.. image:: https://img.shields.io/readthedocs/pygadm?logo=readthedocs&logoColor=white
+    :target: https://pygadm.readthedocs.io/en/latest/
+    :alt: Documentation Status
+
+Overview
+--------
 
 Easy access to administrative boundary defined by GADM from a Python scripts.
 
@@ -64,3 +64,8 @@ and then request area of interest from their name or GADM Id:
    import pygadm
 
    gdf = pygadm.AdmItems(name="Singapore", content_level=1)
+
+Credits
+-------
+
+This package was created with `Copier <https://copier.readthedocs.io/en/latest/>`__ and the `@12rambau/pypackage <https://github.com/12rambau/pypackage>`__ 0.1.5 project template .
diff --git a/docs/_static/custom.css b/docs/_static/custom.css
index 537888f..d74a67a 100644
--- a/docs/_static/custom.css
+++ b/docs/_static/custom.css
@@ -1,14 +1,14 @@
 /*******************************************************************************
  *  make the footer inlined
  */
- .footer-item {
-    display: inline-block;
-  }
-  .footer-item:not(:last-child) {
-    border-right: 1px solid var(--pst-color-text-base);
-    margin-right: 0.5em;
-    padding-right: 0.5em;
-  }
+.footer-item {
+  display: inline-block;
+}
+.footer-item:not(:last-child) {
+  border-right: 1px solid var(--pst-color-text-base);
+  margin-right: 0.5em;
+  padding-right: 0.5em;
+}
 
 /*******************************************************************************
  * custom display of tables in jupyter-sphinx
@@ -26,4 +26,4 @@ html[data-theme="light"] {
 
 html[data-theme="dark"] {
   --pst-color-primary: #ec880e;
-}
\ No newline at end of file
+}
diff --git a/docs/_static/site.webmanifest b/docs/_static/site.webmanifest
index e5e581a..13a179e 100644
--- a/docs/_static/site.webmanifest
+++ b/docs/_static/site.webmanifest
@@ -1,14 +1,14 @@
 {
-    "name": "PyGADM",
-    "short_name": "PyGADM",
-    "icons": [
-        {
-            "src": "/android-chrome-96x96.png",
-            "sizes": "96x96",
-            "type": "image/png"
-        }
-    ],
-    "theme_color": "#ffffff",
-    "background_color": "#ffffff",
-    "display": "standalone"
+  "name": "PyGADM",
+  "short_name": "PyGADM",
+  "icons": [
+    {
+      "src": "/android-chrome-96x96.png",
+      "sizes": "96x96",
+      "type": "image/png"
+    }
+  ],
+  "theme_color": "#ffffff",
+  "background_color": "#ffffff",
+  "display": "standalone"
 }
diff --git a/docs/_template/pypackage-credit.html b/docs/_template/pypackage-credit.html
new file mode 100644
index 0000000..46a3ee0
--- /dev/null
+++ b/docs/_template/pypackage-credit.html
@@ -0,0 +1,5 @@
+<p class="pypackage-credit">
+  From
+  <a href="https://github.com/12rambau/pypackage">@12rambau/pypackage</a>
+  0.1.1 Copier project.
+</p>
diff --git a/docs/conf.py b/docs/conf.py
index 314e8c8..4d1bf16 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -37,7 +37,7 @@
     "jupyter_sphinx",
     "autoapi.extension",
 ]
-templates_path = ["_templates"]
+templates_path = ["_template"]
 exclude_patterns = ["**.ipynb_checkpoints"]  # when working in a Jupyter env.
 
 # -- Options for HTML output ---------------------------------------------------
@@ -60,6 +60,7 @@
         "image_light": "logo.png",
         "image_dark": "logo.png",
     },
+    "footer_end": ["theme-version", "pypackage-credit"],
     "icon_links": [
         {
             "name": "GitHub",
diff --git a/docs/setup.rst b/docs/setup.rst
index 24bf6fb..e53eb15 100644
--- a/docs/setup.rst
+++ b/docs/setup.rst
@@ -1,7 +1,7 @@
 Installation
 ============
 
-Stable release 
+Stable release
 --------------
 
 install it using either ``pip`` or ``conda``:
@@ -11,7 +11,7 @@ install it using either ``pip`` or ``conda``:
    .. tab-item:: pip
 
       .. code-block:: console
-   
+
          pip install pygadm
 
    .. tab-item:: conda
@@ -27,8 +27,8 @@ The source of ``pygadm`` can be installed from the `GitHub repo <https://github.
 
 .. code-block:: console
 
-   python -m pip install git+git://github.com/12rambau/pygadm.git#egg=pygadm 
-   
+   python -m pip install git+git://github.com/12rambau/pygadm.git#egg=pygadm
+
 local development
 -----------------
 
diff --git a/noxfile.py b/noxfile.py
index e919a8b..d799978 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -1,23 +1,37 @@
-"""Test process to run in isolated environments."""
+"""All the process that can be run using nox.
+
+The nox run are build in isolated environment that will be stored in .nox. to force the venv update, remove the .nox/xxx folder.
+"""
+import datetime
+import fileinput
 
 import nox
 
+nox.options.sessions = ["lint", "test", "docs", "mypy"]
+
 
 @nox.session(reuse_venv=True)
 def lint(session):
-    """Apply the pre-commit linting operation."""
+    """Apply the pre-commits."""
     session.install("pre-commit")
-    session.run("pre-commit", "run", "--a", *session.posargs)
+    session.run("pre-commit", "run", "--all-files", *session.posargs)
 
 
 @nox.session(reuse_venv=True)
 def test(session):
-    """Apply the tests on the lib."""
+    """Run all the test using the environment variable of the running machine."""
     session.install(".[test]")
     test_files = session.posargs or ["tests"]
     session.run("pytest", "--color=yes", "--cov", "--cov-report=xml", *test_files)
 
 
+@nox.session(reuse_venv=True, name="dead-fixtures")
+def dead_fixtures(session):
+    """Check for dead fixtures within the tests."""
+    session.install(".[test]")
+    session.run("pytest", "--dead-fixtures")
+
+
 @nox.session(reuse_venv=True)
 def docs(session):
     """Build the documentation."""
@@ -28,9 +42,30 @@ def docs(session):
     session.run("python", "tests/check_warnings.py")
 
 
-@nox.session(reuse_venv=True)
+@nox.session(name="mypy", reuse_venv=True)
 def mypy(session):
-    """Run the mypy evaluation of the lib."""
+    """Run a mypy check of the lib."""
     session.install("mypy")
     test_files = session.posargs or ["pygadm"]
     session.run("mypy", *test_files)
+
+
+@nox.session(reuse_venv=True)
+def stubgen(session):
+    """Generate stub files for the lib but requires human attention before merge."""
+    session.install("mypy")
+    package = session.posargs or ["pygadm"]
+    session.run("stubgen", "-p", package[0], "-o", "stubs", "--include-private")
+
+
+@nox.session(name="release-date", reuse_venv=True)
+def release_date(session):
+    """Update the release date of the citation file."""
+    current_date = datetime.datetime.now().strftime("%Y-%m-%d")
+
+    with fileinput.FileInput("CITATION.cff", inplace=True) as file:
+        for line in file:
+            if line.startswith("date-released:"):
+                print(f'date-released: "{current_date}"')
+            else:
+                print(line, end="")
diff --git a/pygadm/bin/refresh_database.py b/pygadm/bin/refresh_database.py
old mode 100755
new mode 100644
diff --git a/pygadm/data/gadm_continent.json b/pygadm/data/gadm_continent.json
index b4df226..ec27f02 100644
--- a/pygadm/data/gadm_continent.json
+++ b/pygadm/data/gadm_continent.json
@@ -1,23 +1,276 @@
 {
-    "africa": [
-        "DZA", "AGO", "BEN", "BWA", "BFA", "BDI", "CPV", "CMR", "CAF", "ESH", "TCD", "COM", "COG", "COD", "DJI", "EGY", "GNQ", "ERI", "SWZ", "ETH", "GAB", "GMB", "GHA", "GIN", "GNB", "CIV", "KEN", "LSO", "LBR", "LBY", "MDG", "MWI", "MLI", "MRT", "MUS", "MYT", "MAR", "MOZ", "NAM", "NER", "NGA", "REU", "RWA", "STP", "SEN", "SYC", "SLE", "SOM", "ZAF", "SSD", "SDN", "TZA", "TGO", "TUN", "UGA", "ZMB", "ZWE"
-    ],
-    "asia": [
-        "AFG", "ARM", "AZE", "BGD", "BTN", "IOT", "BHR", "BRN", "KHM", "CHN", "IND", "IDN", "IRN", "IRQ", "ISR", "JPN", "JOR", "KAZ", "KWT", "KGZ", "LAO", "LBN", "MYS", "MDV", "MNG", "MMR", "NPL", "PRK", "OMN", "PAK", "PSE", "PHL", "QAT", "RUS", "SAU", "SGP", "KOR", "LKA", "SYR", "THA", "TWN", "TJK", "TLS", "TKM", "ARE", "UZB", "VNM", "YEM", "SJM", "XCA", "XPI", "Z01", "Z02", "Z03", "Z04", "Z05", "Z06", "Z07", "Z08", "Z09"
-    ],
-    "europe": [
-        "ALA", "ALB", "AND", "AUT", "BLR", "BEL", "BIH", "BGR", "HRV", "CYP", "CZE", "DNK", "EST", "FIN", "FRA", "FRO", "GEO", "GIB", "GGY", "DEU", "GRC", "HUN", "ISL", "IRL", "ITA", "LVA", "LIE", "LTU", "LUX", "MLT", "MDA", "MCO", "MNE", "NLD", "MKD", "NOR", "POL", "PRT", "ROU", "SMR", "SRB", "SVK", "SVN", "ESP", "SWE", "CHE", "TUR", "UKR", "GBR", "VAT", "IMN", "JEY", "XAD", "ZNC", "XKO"
-    ],
-    "north america": [
-        "ATG", "BHS", "BRB", "BLZ", "CAN", "CRI", "CUB", "DMA", "DOM", "SLV", "GRD", "GTM", "HTI", "HND", "JAM", "MEX", "NIC", "PAN", "KNA", "LCA", "VCT", "TTO", "USA", "AIA", "ABW", "BMU", "BES", "VGB", "CYM", "XCL", "CUW", "GRL", "GLP", "MTQ", "MSR", "UMI", "PRI", "BLM", "MAF", "SPM", "SXM", "TCA", "VIR"
-    ],
-    "south america": [
-        "ARG", "BOL", "BRA", "CHL", "COL", "ECU", "GUY", "PRY", "PER", "SUR", "URY", "VEN", "BVT", "FLK", "GUF", "SGS", "SHN"
-    ],
-    "oceania": [
-        "AUS", "CCK", "CXR", "FJI", "KIR", "MHL", "FSM", "NRU", "NZL", "PLW", "PNG", "WSM", "SLB", "TON", "TUV", "VUT", "ASM", "COK", "PYF", "GUM", "NCL", "NIU", "NFK", "MNP", "PCN", "TKL", "WLF", "HMD", "XSP"
-    ],
-    "antartica": [
-        "ATA", "ATF"
-    ]
-}
\ No newline at end of file
+  "africa": [
+    "DZA",
+    "AGO",
+    "BEN",
+    "BWA",
+    "BFA",
+    "BDI",
+    "CPV",
+    "CMR",
+    "CAF",
+    "ESH",
+    "TCD",
+    "COM",
+    "COG",
+    "COD",
+    "DJI",
+    "EGY",
+    "GNQ",
+    "ERI",
+    "SWZ",
+    "ETH",
+    "GAB",
+    "GMB",
+    "GHA",
+    "GIN",
+    "GNB",
+    "CIV",
+    "KEN",
+    "LSO",
+    "LBR",
+    "LBY",
+    "MDG",
+    "MWI",
+    "MLI",
+    "MRT",
+    "MUS",
+    "MYT",
+    "MAR",
+    "MOZ",
+    "NAM",
+    "NER",
+    "NGA",
+    "REU",
+    "RWA",
+    "STP",
+    "SEN",
+    "SYC",
+    "SLE",
+    "SOM",
+    "ZAF",
+    "SSD",
+    "SDN",
+    "TZA",
+    "TGO",
+    "TUN",
+    "UGA",
+    "ZMB",
+    "ZWE"
+  ],
+  "asia": [
+    "AFG",
+    "ARM",
+    "AZE",
+    "BGD",
+    "BTN",
+    "IOT",
+    "BHR",
+    "BRN",
+    "KHM",
+    "CHN",
+    "IND",
+    "IDN",
+    "IRN",
+    "IRQ",
+    "ISR",
+    "JPN",
+    "JOR",
+    "KAZ",
+    "KWT",
+    "KGZ",
+    "LAO",
+    "LBN",
+    "MYS",
+    "MDV",
+    "MNG",
+    "MMR",
+    "NPL",
+    "PRK",
+    "OMN",
+    "PAK",
+    "PSE",
+    "PHL",
+    "QAT",
+    "RUS",
+    "SAU",
+    "SGP",
+    "KOR",
+    "LKA",
+    "SYR",
+    "THA",
+    "TWN",
+    "TJK",
+    "TLS",
+    "TKM",
+    "ARE",
+    "UZB",
+    "VNM",
+    "YEM",
+    "SJM",
+    "XCA",
+    "XPI",
+    "Z01",
+    "Z02",
+    "Z03",
+    "Z04",
+    "Z05",
+    "Z06",
+    "Z07",
+    "Z08",
+    "Z09"
+  ],
+  "europe": [
+    "ALA",
+    "ALB",
+    "AND",
+    "AUT",
+    "BLR",
+    "BEL",
+    "BIH",
+    "BGR",
+    "HRV",
+    "CYP",
+    "CZE",
+    "DNK",
+    "EST",
+    "FIN",
+    "FRA",
+    "FRO",
+    "GEO",
+    "GIB",
+    "GGY",
+    "DEU",
+    "GRC",
+    "HUN",
+    "ISL",
+    "IRL",
+    "ITA",
+    "LVA",
+    "LIE",
+    "LTU",
+    "LUX",
+    "MLT",
+    "MDA",
+    "MCO",
+    "MNE",
+    "NLD",
+    "MKD",
+    "NOR",
+    "POL",
+    "PRT",
+    "ROU",
+    "SMR",
+    "SRB",
+    "SVK",
+    "SVN",
+    "ESP",
+    "SWE",
+    "CHE",
+    "TUR",
+    "UKR",
+    "GBR",
+    "VAT",
+    "IMN",
+    "JEY",
+    "XAD",
+    "ZNC",
+    "XKO"
+  ],
+  "north america": [
+    "ATG",
+    "BHS",
+    "BRB",
+    "BLZ",
+    "CAN",
+    "CRI",
+    "CUB",
+    "DMA",
+    "DOM",
+    "SLV",
+    "GRD",
+    "GTM",
+    "HTI",
+    "HND",
+    "JAM",
+    "MEX",
+    "NIC",
+    "PAN",
+    "KNA",
+    "LCA",
+    "VCT",
+    "TTO",
+    "USA",
+    "AIA",
+    "ABW",
+    "BMU",
+    "BES",
+    "VGB",
+    "CYM",
+    "XCL",
+    "CUW",
+    "GRL",
+    "GLP",
+    "MTQ",
+    "MSR",
+    "UMI",
+    "PRI",
+    "BLM",
+    "MAF",
+    "SPM",
+    "SXM",
+    "TCA",
+    "VIR"
+  ],
+  "south america": [
+    "ARG",
+    "BOL",
+    "BRA",
+    "CHL",
+    "COL",
+    "ECU",
+    "GUY",
+    "PRY",
+    "PER",
+    "SUR",
+    "URY",
+    "VEN",
+    "BVT",
+    "FLK",
+    "GUF",
+    "SGS",
+    "SHN"
+  ],
+  "oceania": [
+    "AUS",
+    "CCK",
+    "CXR",
+    "FJI",
+    "KIR",
+    "MHL",
+    "FSM",
+    "NRU",
+    "NZL",
+    "PLW",
+    "PNG",
+    "WSM",
+    "SLB",
+    "TON",
+    "TUV",
+    "VUT",
+    "ASM",
+    "COK",
+    "PYF",
+    "GUM",
+    "NCL",
+    "NIU",
+    "NFK",
+    "MNP",
+    "PCN",
+    "TKL",
+    "WLF",
+    "HMD",
+    "XSP"
+  ],
+  "antartica": ["ATA", "ATF"]
+}
diff --git a/pyproject.toml b/pyproject.toml
index 6d65a57..b51ccb2 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,14 +1,16 @@
 [build-system]
-requires = ["setuptools>=61.2", "wheel"]
-build-backend = "setuptools.build_meta"
+requires = ["hatchling"]
+build-backend = "hatchling.build"
 
 [project]
 name = "pygadm"
 version = "0.5.1"
 description = "Easy access to administrative boundary defined by GADM from Python scripts"
-keywords = ["Python"]
+keywords = [
+  "Python"
+]
 classifiers = [
-    "Development Status :: 1 - Planning",
+    "Development Status :: 3 - Alpha",
     "Intended Audience :: Developers",
     "License :: OSI Approved :: MIT License",
     "Programming Language :: Python :: 3.8",
@@ -16,17 +18,17 @@ classifiers = [
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
 ]
-requires-python = ">=3.7.10"
+requires-python = ">=3.8"
 dependencies = [
-    "Deprecated",
-    "geopandas",
-    "pyarrow",
-    "requests-cache"
+  "deprecated>=1.2.14",
+  "geopandas",
+  "pyarrow",
+  "requests-cache"
 ]
 
 [[project.authors]]
 name = "Pierrick Rambaud"
-email = "pierrick.rambaud49@gmail.com"
+email = "pierrick.rambaud49@gmai.com"
 
 [project.license]
 text = "MIT"
@@ -37,65 +39,64 @@ content-type = "text/x-rst"
 
 [project.urls]
 Homepage = "https://github.com/12rambau/pygadm"
-Download = "https://github.com/12rambau/pygadm/archive/${metadata:version}.tar.gz"
 
 [project.optional-dependencies]
-dev = [
-    "pre-commit",
-    "commitizen",
-    "nox"
-]
 test = [
-    "pytest",
-    "pytest-sugar",
-    "pytest-cov",
-    "pytest-regressions>=2.4.3", # https://github.com/ESSS/pytest-regressions/issues/136
- ]
+  "pytest",
+  "pytest-sugar",
+  "pytest-cov",
+  "pytest-deadfixtures",
+  "pytest-regressions>=2.4.3", # https://github.com/ESSS/pytest-regressions/issues/136
+]
 doc = [
-    "sphinx<7", # https://github.com/pydata/pydata-sphinx-theme/issues/1404
-    "pydata-sphinx-theme",
-    "sphinx-copybutton",
-    "jupyter-sphinx",
-    "sphinx-design",
-    "ipyleaflet",
-    "geemap",
-    "sphinx-favicon",
-    "ipykernel",
-    "sphinx-autoapi",
-    "httplib2",
+  "sphinx<7",
+  "pydata-sphinx-theme",
+  "sphinx-copybutton",
+  "sphinx-design",
+  "sphinx-autoapi",
+  "jupyter-sphinx",
+  "ipyleaflet",
+  "geemap",
+  "sphinx-favicon",
+  "ipykernel",
+  "sphinx-autoapi",
+  "httplib2",
 ]
 
-[tool.setuptools]
-include-package-data = true
-packages = ["pygadm"]
-license-files = ["LICENSE"]
+[tool.hatch.build.targets.wheel]
+only-include = ["pygadm"]
 
-[tool.setuptools.package-data]
-pygadm = ["data/gadm_database.parquet", "data/gadm_continent.json"]
+[tool.hatch.envs.default]
+dependencies = [
+  "pre-commit",
+  "commitizen",
+  "nox"
+]
+post-install-commands = ["pre-commit install"]
 
 [tool.commitizen]
-changelog_file = "CHANGELOG.md"
 tag_format = "v$major.$minor.$patch$prerelease"
-update_changelog_on_bump = true
+update_changelog_on_bump = false
 version = "0.5.1"
-version_files = ["pyproject.toml:version", "pygadm/__init__.py:__version__"]
+version_files = [
+    "pyproject.toml:version",
+    "pygadm/__init__.py:__version__",
+    "CITATION.cff:version"
+]
 
 [tool.pytest.ini_options]
 testpaths = "tests"
 
-[tool.coverage.run]
-source = ["pygadm"]
-
 [tool.ruff]
+ignore-init-module-imports = true
 fix = true
 select = ["E", "F", "W", "I", "D", "RUF"]
 ignore = [
-    "E501",  # line too long | Black take care of it
+  "E501",  # line too long | Black take care of it
     "W605",  # invalid escape sequence | we escape specific characters for sphinx
     "D212", # Multi-line docstring | we use a different convention, too late
     "D101", # Missing docstring in public class | we use a different convention, too late
 ]
-exclude = ["setup.py"]
 
 [tool.ruff.flake8-quotes]
 docstring-quotes = "double"
@@ -103,8 +104,11 @@ docstring-quotes = "double"
 [tool.ruff.pydocstyle]
 convention = "google"
 
-[tool.codespell]
-skip = 'CHANGELOG.md,**/*.json,**/*.csv'
+[tool.coverage.run]
+source = ["pygadm"]
+
+[tool.doc8]
+ignore = ["D001"] # we follow a 1 line = 1 paragraph style
 
 [tool.mypy]
 scripts_are_modules = true
@@ -112,3 +116,9 @@ ignore_missing_imports = true
 install_types = true
 non_interactive = true
 warn_redundant_casts = true
+
+[tool.licensecheck]
+using = "PEP631"
+
+[tool.codespell]
+skip = 'CHANGELOG.md,**/*.json,**/*.csv'


Test patch:
diff --git a/test.ipynb b/test.ipynb
deleted file mode 100644
index 5fc307d..0000000
--- a/test.ipynb
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import pygadm\n",
-    "\n",
-    "pygadm.Names(admin=\"RDC\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.10.13"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}