Files
pdf2csv/Makefile
2025-11-04 17:04:01 +01:00

136 lines
4.3 KiB
Makefile

.PHONY: help build run run-verbose test clean install dev
# Variables
IMAGE_NAME = pdf2csv
IMAGE_TAG = latest
CONTAINER_NAME = pdf2csv-converter
DATA_DIR = ./data
help: ## Affiche cette aide
@echo "Commandes disponibles :"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}'
build: ## Construit l'image Docker
@echo "Construction de l'image Docker..."
docker build -t $(IMAGE_NAME):$(IMAGE_TAG) .
@echo "Image construite : $(IMAGE_NAME):$(IMAGE_TAG)"
run: ## Lance la conversion (PDFs dans ./data)
@echo "Lancement de la conversion..."
@mkdir -p $(DATA_DIR)
docker run --rm \
--name $(CONTAINER_NAME) \
-v $(PWD)/$(DATA_DIR):/data \
$(IMAGE_NAME):$(IMAGE_TAG)
run-verbose: ## Lance la conversion en mode verbeux
@echo "Lancement de la conversion (mode verbeux)..."
@mkdir -p $(DATA_DIR)
docker run --rm \
--name $(CONTAINER_NAME) \
-v $(PWD)/$(DATA_DIR):/data \
$(IMAGE_NAME):$(IMAGE_TAG) --verbose
run-custom: ## Lance avec configuration personnalisée (utilise .env)
@echo "Lancement avec configuration personnalisée..."
@mkdir -p $(DATA_DIR)
docker run --rm \
--name $(CONTAINER_NAME) \
-v $(PWD)/$(DATA_DIR):/data \
--env-file .env \
$(IMAGE_NAME):$(IMAGE_TAG) --verbose
run-no-clean: ## Lance sans nettoyer les fichiers temporaires
@echo "Lancement (conservation des fichiers temporaires)..."
@mkdir -p $(DATA_DIR)
docker run --rm \
--name $(CONTAINER_NAME) \
-v $(PWD)/$(DATA_DIR):/data \
$(IMAGE_NAME):$(IMAGE_TAG) --no-clean --verbose
test: build ## Construit et teste avec des PDFs d'exemple
@echo "Test de l'application..."
@mkdir -p test_data
@echo "Placez des PDFs dans ./test_data/ puis appuyez sur Entrée"
@read dummy
docker run --rm \
--name $(CONTAINER_NAME)-test \
-v $(PWD)/test_data:/data \
$(IMAGE_NAME):$(IMAGE_TAG) --verbose
clean: ## Nettoie les fichiers générés
@echo "Nettoyage..."
@rm -rf $(DATA_DIR)/*_brut.csv
@rm -rf $(DATA_DIR)/*_final.csv
@rm -rf $(DATA_DIR)/fusion_total.csv
@rm -rf test_data/
@echo "Nettoyage terminé"
clean-all: clean ## Nettoie tout (y compris l'image Docker)
@echo "Nettoyage complet..."
docker rmi $(IMAGE_NAME):$(IMAGE_TAG) 2>/dev/null || true
@echo "Nettoyage complet terminé"
install: ## Installe les dépendances Python localement
@echo "Installation des dépendances..."
pip install -r requirements.txt
@echo "Dépendances installées"
dev: install ## Configure l'environnement de développement
@echo "Configuration de l'environnement de développement..."
@mkdir -p $(DATA_DIR)
@mkdir -p test_data
@if [ ! -f .env ]; then cp config.example.env .env; echo "Fichier .env créé"; fi
@echo "Environnement de développement prêt"
@echo ""
@echo "Commandes utiles :"
@echo " python convert.py ./data --verbose"
@echo " python convert.py --help"
shell: ## Ouvre un shell dans le conteneur
@echo "Ouverture d'un shell..."
docker run --rm -it \
--name $(CONTAINER_NAME)-shell \
-v $(PWD)/$(DATA_DIR):/data \
--entrypoint /bin/bash \
$(IMAGE_NAME):$(IMAGE_TAG)
logs: ## Affiche les logs du dernier run
@echo "Logs du dernier conteneur..."
@docker logs $(CONTAINER_NAME) 2>/dev/null || echo "Aucun conteneur en cours"
status: ## Affiche le statut de l'environnement
@echo "Statut de l'environnement"
@echo ""
@echo "Image Docker :"
@docker images $(IMAGE_NAME):$(IMAGE_TAG) --format " - {{.Repository}}:{{.Tag}} ({{.Size}})" || echo " Image non construite"
@echo ""
@echo "Répertoire de données :"
@if [ -d $(DATA_DIR) ]; then \
echo " $(DATA_DIR) existe"; \
echo " PDFs : $$(find $(DATA_DIR) -name '*.pdf' 2>/dev/null | wc -l)"; \
echo " CSVs : $$(find $(DATA_DIR) -name '*.csv' 2>/dev/null | wc -l)"; \
else \
echo " $(DATA_DIR) n'existe pas"; \
fi
@echo ""
@echo "Configuration :"
@if [ -f .env ]; then \
echo " Fichier .env présent"; \
else \
echo " Fichier .env absent (utilise config.example.env)"; \
fi
example: ## Crée un exemple de configuration
@echo "Création d'un exemple..."
@cp config.example.env .env
@mkdir -p $(DATA_DIR)
@echo "Fichier .env créé"
@echo "Répertoire $(DATA_DIR) créé"
@echo ""
@echo "Prochaines étapes :"
@echo " 1. Placez vos PDFs dans ./$(DATA_DIR)/"
@echo " 2. (Optionnel) Éditez .env pour personnaliser"
@echo " 3. Lancez : make run"