From ab4df25a5e20cce46fea461d3683744cb3d8543b Mon Sep 17 00:00:00 2001
From: Neda Moeini <neda.moeini@geant.org>
Date: Fri, 11 Apr 2025 11:31:43 +0200
Subject: [PATCH] Refactor code structure and add tox configuration for linting
 and type checking

---
 mapping_provider/__init__.py   |  5 +++--
 mapping_provider/api/common.py |  4 ++--
 pyproject.toml                 | 12 ++++++++++++
 requirements.txt               |  5 ++++-
 setup.py                       |  2 +-
 tox.ini                        | 12 ++++++++++++
 6 files changed, 34 insertions(+), 6 deletions(-)
 create mode 100644 pyproject.toml
 create mode 100644 tox.ini

diff --git a/mapping_provider/__init__.py b/mapping_provider/__init__.py
index b716184..aa309f9 100644
--- a/mapping_provider/__init__.py
+++ b/mapping_provider/__init__.py
@@ -1,10 +1,11 @@
 """Initializes the FastAPI application."""
-from xml.sax.handler import version
 
 from fastapi import FastAPI
+
 from mapping_provider.api.common import router as version_router
 
-def create_app():
+
+def create_app() -> FastAPI:
     """Create a FastAPI application."""
     app = FastAPI(
         title="Mapping provider",
diff --git a/mapping_provider/api/common.py b/mapping_provider/api/common.py
index f1395f2..9c528b0 100644
--- a/mapping_provider/api/common.py
+++ b/mapping_provider/api/common.py
@@ -1,4 +1,4 @@
-from importlib.metadata import version, PackageNotFoundError
+from importlib.metadata import PackageNotFoundError, version
 
 from fastapi import APIRouter
 
@@ -6,7 +6,7 @@ router = APIRouter()
 
 
 @router.get("/version")
-def get_version():
+def get_version() -> dict[str, str]:
     """Get the version of the package."""
     try:
         return {"version": version("mapping_provider")}
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..cdeac56
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,12 @@
+[tool.ruff]
+line-length = 120
+target-version = "py313"
+select = ["E", "F", "I", "B", "UP", "N"]
+fixable = ["ALL"]
+exclude = ["tests", "docs", "build"]
+
+[tool.mypy]
+python_version = "3.13"
+strict = true
+warn_unused_ignores = true
+warn_return_any = true
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
index 590f2f4..010ed04 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,3 +1,6 @@
 fastapi
 uvicorn[standard]
-sphinx
\ No newline at end of file
+sphinx
+ruff
+mypy
+tox
\ No newline at end of file
diff --git a/setup.py b/setup.py
index 5a84dbf..5e5209c 100644
--- a/setup.py
+++ b/setup.py
@@ -1,4 +1,4 @@
-from setuptools import setup, find_packages
+from setuptools import find_packages, setup
 
 setup(
     name="mapping-provider",
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000..d9de39c
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,12 @@
+[tox]
+envlist = lint, typecheck
+
+[testenv:lint]
+description = Lint code with Ruff
+deps = ruff
+commands = ruff check mapping_provider
+
+[testenv:typecheck]
+description = Type-check code with mypy
+deps = mypy
+commands = mypy mapping_provider
\ No newline at end of file
-- 
GitLab