agenda_culturel/README.md
2025-04-28 16:00:13 +02:00

94 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Agenda culturel
L'agenda culturel est un projet django créé à partir de [Django Docker Quickstard](https://github.com/godd0t/django-docker-quickstart/) pour faciliter son développement et déploiement. Il est distribué sous licence AGPL.
Une instance de démonstration est disponible à l'adresse https://pommesdelune.fr/.
Parmi les outils et ressources sur lesquelles s'appuie l'agenda culturel, on peut lister:
- [Django](https://www.djangoproject.com/)
- [redis](https://redis.io/)
- [celery](https://docs.celeryq.dev/en/stable/)
- [Selenium](https://www.selenium.dev/)
- [Feather icons](https://feathericons.com/)
- [Pico CSS](https://picocss.com/)
- [chronostring](https://forge.chapril.org/jmtrivial/chronostring) (des mêmes auteurs)
## Installation
Pour installer une version de développement, reportez-vous à la documentation de [Django Docker Quickstard](https://github.com/godd0t/django-docker-quickstart/). En résumé:
- `git pull`
- `cp env.example .env`
- `make build-dev`
Vous devriez ensuite pouvoir accéder au site local via http://localhost:8000.
On peut aussi peupler les catégories avec un choix de catégories élémentaires:
- `make create-categories`
On peut aussi peupler les positions de référence qui serviront aux recherches géographiques avec la commande, après avoir éventuellement modifié le fichier [communes.json](./src/scripts/communes.json) qui contient pour l'exemple toutes les communes récupérées depuis [public.opendatasoft.com](https://public.opendatasoft.com/explore/dataset/georef-france-commune/export/?flg=fr-fr&disjunctive.reg_name&disjunctive.dep_name&disjunctive.arrdep_name&disjunctive.ze2020_name&disjunctive.bv2022_name&disjunctive.epci_name&disjunctive.ept_name&disjunctive.com_name&disjunctive.ze2010_name&disjunctive.com_is_mountain_area&sort=year&refine.dep_name=Puy-de-D%C3%B4me&location=9,45.51597,3.05969&basemap=jawg.light):
- `make create-reference-locations`
Une fois l'installation réussie, la configuration du site est possible en allant modifier l'objet "Configuration du site" (`siteconfiguration`) dans l'administration de django. Il est également nécessaire (pas encore d'unification des deux facettes) de configurer un site (`Site`) en choisissant un nom et une url (nécessaire notamment pour le sitemap).
## Utilisation d'un proxy socket
On peut activer à la main (pour l'instant) un proxy type socket pour l'import d'événements.
- se connecter au docker du celery worker : `docker exec -it agenda_culturel-celery-worker bash`
- mettre à jour les dépôts `apt update`
- installer le client ssh `apt install ssh-client`
- créer un socket ssh `ssh -D 12345 USER@HOST`
- modifier le drapeau proxy dans le constructeur de [downloader.py](src/agenda_culturel/import_tasks/downloader.py).
## Notes aux développeurs
Pour bénéficier de la vérification du code avant commit, installer `pre-commit` avec la commande `pre-commit install` pour bénéficier du hook préparé dans `.pre-commit-config.yaml`.
### Ajout d'une nouvelle source _custom_
Pour ajouter une nouvelle source custom:
- ajouter un fichier dans `src/agenda_culturel/import_tasks/custom_extractors` (ou `src/agenda_culturel/import_tasks/generic_extractors` s'il s'agit d'un format de source qui est réutilisable) en s'inspirant des autres fichiers présents. Il existe de nombreuses facilités dans les classes mères correspondantes
- s'inspirer des scripts présents dans `experimentations/` pour créer son propre script de test
- quand l'import fonctionne de manière indépendante dans ces expérimentations, il est tant de l'ajouter au site internet:
- ajouter à la classe `RecurrentImport.PROCESSOR` présente dans le fichier `src/agenda_culturel/models.py` une entrée correspondant à cette source pour qu'elle soit proposée aux utilisateurs
- ajouter à la fonction `run_recurrent_import` présente dans le fichier `src/agenda_culturel/celery.py` le test correspondant à cet ajout, pour lancer le bon extracteur
- se rendre sur le site, page administration, et ajouter un import récurrent correspondant à cette nouvelle source
### Récupérer un dump du prod sur un serveur dev
- sur le serveur de prod:
- `docker exec -i agenda_culturel-backend python3 manage.py dumpdata --natural-foreign --natural-primary --format=json --exclude=admin.logentry --indent=2 > fixtures/postgres-backup-20241101.json` (à noter qu'ici on oublie les comptes, qu'il faudra recréer)
- sur le serveur de dev:
- On récupère le dump json `scp $SERVEUR:$PATH/fixtures/postgres-backup-20241101.json src/fixtures/`
- `scripts/reset-database.sh FIXTURE COMMIT``FIXTURE` est le timestamp dans le nom de la fixture, et `COMMIT` est l'ID du commit git correspondant à celle en prod sur le serveur au moment de la création de la fixture
On peut ensuite modifier le mot de passe de l'utilisateur root qui a tous les droits:
- `docker exec -it agenda_culturel-backend python3 manage.py changepassword root`
À noter que les images ne sont pas récupérées. Les images des catégories peuvent être récupérées par la commande:
- `cp src/agenda_culturel/migrations/images/* src/media/`
Si la migration de la base de données s'est bien executée, mais qu'aucun événement n'est affiché sur l'interface utilisateur, il faut vider le cache côté administration:
- Page _Administrer_ > dans le menu sur la droite nommé _Administration_ > _Configuration interne_ > _Vider le cache_.
[Ou en utilisant ce lien direct](http://localhost:8008/cache/clear). (en étant connecté avec les droits suffisants)
### Complètement réinitialiser une instance
- `docker compose down --rmi all --volumes`
- `make build-dev`
### Projets similaires
* [hackeragenda](https://github.com/YoloSwagTeam/hackeragenda)
* [mobilizon](https://framagit.org/kaihuri/mobilizon)
* [koalagator](https://github.com/koalagator/koalagator)
* [gathio](https://gath.io/)