Commit 24afa43a authored by Mickaël Desfrênes's avatar Mickaël Desfrênes
Browse files

remove manage.py

parent 24d0d9d1
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -2,10 +2,10 @@
install: ## installation des paquets et dépendances
	uv sync
	uv run pre-commit install
	uv run python src/manage.py migrate
	uv run python src/manage.py loadfixtures
	@read -p "Do you want to create a django superuser? [y/N] " c;	echo; if test "$$c" = "Y" || test "$$c" = "y"; then uv run python src/manage.py createsuperuser ; fi
	uv run python src/manage.py newjamaproject default
	uv run jama migrate
	uv run jama loadfixtures
	@read -p "Do you want to create a django superuser? [y/N] " c;	echo; if test "$$c" = "Y" || test "$$c" = "y"; then uv run jama createsuperuser ; fi
	uv run jama newjamaproject default
.PHONY: install

build-ui-front: ## compilation du front de l'appli ui
@@ -14,11 +14,11 @@ build-ui-front: ## compilation du front de l'appli ui
	@cp -r src/ui/front/node_modules/@shoelace-style/shoelace/dist/assets src/ui/front/dist/ui/

update: ## mise à jour des paquets et dépendances
	uv sync && uv run python src/manage.py migrate
	uv sync && uv run jama migrate
.PHONY: update

run: ## démarrage de l'environnement de développement
	uv run python src/manage.py runserver & uv run python src/manage.py run_huey
	uv run jama runserver & uv run jama run_huey
.PHONY: run

format: ## Formatage des sources avec Ruff
@@ -27,7 +27,7 @@ format: ## Formatage des sources avec Ruff
.PHONY: format

test: ## Lancer les tests
	cd src && uv run python manage.py test
	cd src && uv run jama test
.PHONY: test

help: ## Show this help
+38 −25
Original line number Diff line number Diff line
@@ -5,9 +5,9 @@ APIs et interfaces de stockage de médias.
## Pré-requis

- uv `curl -LsSf https://astral.sh/uv/install.sh | sh`
- imagemagick (convert)
- imagemagick
- pdftoppm, pdftotext (poppler-utils)
- vips
- vips (libvips-tools)
- tesseract

Optionnel:
@@ -16,8 +16,24 @@ Optionnel:
- une base de donnée PostgreSQL vide et un utilisateur ayant tous les droits dessus
- exiftool

## Installation

### Installation de JAMA, création d'un super-utilisateur et d'un projet de test

    make install

## Démarrage (développement)

    make run

Vous avez alors accès à la page d'accueil (par défaut http://localhost:8000) et à la page d'administration de django (par défaut http://localhost:8000/admin/)  

## Configuration

Au moment de l'installation, un fichier d'environnement est créé dans `$HOME/.jama/env`. Vous pouvez modifier
ce fichier pour modifier la configuration de Jama.

## Variables d'environnement / valeurs par défaut
Variables disponibles:

    CACHE_LOCATION="var/cache"
    JAMA_APPS=""
@@ -41,28 +57,24 @@ Optionnel:
    JAMA_SECRET="7d*_8c!d$vv963qpr45_x)@f2t-x6fu2&yi+m+d6s!p!lt+_j+"
    JAMA_SITE="http://localhost:8000/"
    JAMA_SQLITE_DB_PATH=""
    JAMA_STATIC_ROOT="var/static"  # dossier des ressources statiques (pour mise en production)
    JAMA_URL_BASE_PATH=""
    JAMA_USE_ARK="0"  # "1" pour activer les URLs ARK
    JAMA_USE_CACHALOT="0"  # "1" pour utiliser le cache de base de donnée
    JAMA_USE_MODSHIB="1"
    JAMA_USE_OAI="0"  # "1" pour activer les URLs OAI-PMH
    JAMA_USE_WEBP="0"  # "1" pour utiliser la compression webp pour le tuilage des images (vérifier la compatibilité du serveur IIIF)
    JAMA_USE_WEBP="0"  # "1" pour utiliser la compression webp pour le tuilage des images (vérifier la compatibilité du serveur IIIF: à ce jour, IIP server est ok, pas Cantaloupe)
    JAMA_VAR_DIR="var"  # Dossier par défaut pour toutes les données
    MODSHIB_SHOW_LOCAL_LOGIN="1"
    MODSHIB_SHOW_SSO_LOGIN="0"


> _Astuce_ : créer un fichier `.env` à la racine du projet avec l'ensemble des variables déclarées
### Utilisation avec PostgreSQL

```bash
JAMA_SITE="http://localhost:8000/"
JAMA_DEBUG="0"
...
```
Si vous prévoyez d'utiliser Jama avec un nombre important d'utilisateurs en simultané, il est 
préférable d'utiliser PostgreSQL plutôt que SQLite.

## Installation

### Base de données (développement), si JAMA_DB_ADAPTER est postgresql (passer si sqlite)
Crééz une base de données:

```bash
source .env
@@ -70,15 +82,18 @@ sudo -u postgres psql -p $JAMA_DB_PORT -dpostgres -t -c "CREATE ROLE $JAMA_DB_US
sudo -u postgres createdb -p $JAMA_DB_PORT -O $JAMA_DB_USER -E UTF8 $JAMA_DB_NAME;
```

### Installation de JAMA, création d'un super-utilisateur et d'un projet de test
Modifiez `$HOME/.jama/env`:

    make install

## Démarrage (développement)
    JAMA_DB_ADAPTER="postgresql"
    JAMA_DB_HOST="$JAMA_DB_HOST"
    JAMA_DB_NAME="$JAMA_DB_NAME"
    JAMA_DB_PASSWORD="$JAMA_DB_PASSWORD"
    JAMA_DB_PORT="$JAMA_DB_PORT"
    JAMA_DB_USER="$JAMA_DB_USER"

    make run
Lancez à nouveau l'installation:

Vous avez alors accès à la page d'accueil (par défaut http://localhost:8000) et à la page d'administration de django (par défaut http://localhost:8000/admin/)  
    make install

## Commandes CLI

@@ -87,7 +102,7 @@ Vous avez alors accès à la page d'accueil (par défaut http://localhost:8000)
Une commande permet d'ajouter des fichiers locaux à Jama au nom d'un
utilisateur Jama:

    uv run ./manage.py addlocalfiles /var/fichiers_a_ajouter/ jacques 1 --extensions .jpg .tif
    uv run jama addlocalfiles /var/fichiers_a_ajouter/ jacques 1 --extensions .jpg .tif

Ici, le dossier `fichiers_a_ajouter` sera parcouru récursivement et les fichiers
avec une extension _.jpg_ ou _.tif_ seront ajoutés dans Jama dans le project ayant l'identifiant 1,
@@ -109,7 +124,7 @@ Les enregistrements retournés correspondent aux collections Jama pour lesquelle

## Création d'un nouveau projet:

    (venv) code/jama: uv run python manage.py newjamaproject "mon projet"
    (venv) code/jama: uv run jama newjamaproject "mon projet"
    Projet "mon projet" créé avec le compte administrateur "admin_mon_projet" et la clef d'API "EOwy6laNTMBDUvH6pGuOvGdMEpYM2F9M"

## Étendre JAMA
@@ -178,11 +193,10 @@ Une possibilité est de préfixer le nom de la méthode avec le nom de votre app

## Relancer un tuilage en échec
```
$ uv run python manage.py shell
$ uv run jama repl
Python 3.13.1 (main, Jan 14 2025, 22:47:38) [Clang 19.1.6 ] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from resources.models import File
>>> f = File.objects.filter(title="the_failed_filename").first()
>>> f
<File: the_failed_filename>
@@ -192,11 +206,10 @@ Type "help", "copyright", "credits" or "license" for more information.

## Lister le nombre de tuilage manquant
```
$ uv run python manage.py shell
$ uv run jama repl
Python 3.13.1 (main, Jan 14 2025, 22:47:38) [Clang 19.1.6 ] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from resources.models import File
>>> File.objects.filter(tiled=False).count()
1481
```
+4 −0
Original line number Diff line number Diff line
@@ -51,6 +51,10 @@ dev = [
    "pre-commit>=4.1.0",
]

[project.scripts]
jama = 'jama.__main__:run'


[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
+1 −17
Original line number Diff line number Diff line
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""

import os
import sys
from dotenv import load_dotenv
from django.core.management.commands import runserver

load_dotenv()

runserver.Command.default_port = os.getenv("DJANGO_RUNSERVER_PORT") or "8000"
runserver.Command.default_addr = os.getenv("DJANGO_RUNSERVER_ADDR") or "127.0.0.1"
runserver.Command.default_addr_ipv6 = os.getenv("DJANGO_RUNSERVER_ADDR_IPV6") or "::1"


def main():
    """Run administrative tasks."""
def run():
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "jama.settings")
    try:
        from django.core.management import execute_from_command_line
@@ -25,7 +13,3 @@ def main():
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)


if __name__ == "__main__":
    main()
+12 −0
Original line number Diff line number Diff line
from django.core.management.base import BaseCommand
from django.conf import settings
from pathlib import Path


class Command(BaseCommand):
    def handle(self, *args, **options):
        for k in sorted(dir(settings)):
            if k.upper() == k:
                val = getattr(settings, k)
                if type(val) in [str, Path, bool, int, None]:
                    print(f"{k}: {val}")
Loading