Giter Site home page Giter Site logo

noam74 / pass-culture-api Goto Github PK

View Code? Open in Web Editor NEW

This project forked from pass-culture/pass-culture-api

0.0 1.0 0.0 109.35 MB

API pour l'application Pass Culture

License: Mozilla Public License 2.0

Python 96.61% Mako 0.01% Shell 0.09% HTML 0.91% PLpgSQL 2.38% Dockerfile 0.01%

pass-culture-api's Introduction

pass-culture-api

Coverage Status

C'est le backend de l'application Pass Culture.

Dans le cadre du projet pass-culure, l'api pass culture est lançée via docker-compose et en utilisant le fichier docker-compose-app.yml du répertoire parent de api, soit pass-culture-main.

Plus de détails sur le lancement de l'infra docker-compose sont accessibles dans le README dans https://github.com/pass-culture/pass-culture-main.

Swagger

L'api pass culture dispose d'un swagger accessible via ce lien : http://localhost:/apidoc/swagger
C'est une api générée et fonctionnelle.
Elle ne contient toutefois pas les endpoints de l'api publique.

Il existe une ancienne api très incomplète et non utilisable (A décommissioner) http://localhost/api/doc

Installation et Tests

  • Installation des requirements

    • Avec venv (ou virtualenv si vous préférez)
      python3.9 -m venv ./venv
      source venv/bin/activate 
      pip install -e .
      pip install -r requirements.txt
  • Lancement des tests

    • Prérequis aux lancement des tests

      • Lancement de la base de donnée pc-postgres-test (spécifique aux tests) et du cache redis via docker-compose
        docker-compose -f ../docker-compose-app.yml up -d postgres-test redis
    • Lancement des tests depuis la ligne de commande

      python -m pytest # Pour lancer tous les tests
      python -m pytest tests/scripts/offerer/generate_and_save_api_key_for_offerer_test.py # Pour lancer un test en particulier
    • Lancement des tests depuis PyCharm(IntelliJ)

      Configurer le working directory par défaut pour être toujours à la racine de ce projet pycharm-test-config

  • Écriture des tests

    • Les tests utilisent leur propre base de données Si un test a besoin d'accéder à la base de donnée, il faut le décorer avec @pytest.mark.usefixtures("db_session") pour encapsuler le test dans une transation et éviter des colisions entre différents tests

    les différentes fixtures utilisées dans les tests sont définies dans tests/conftest.py

Dépendances

  • La combinaison pylint-astroid a parfois quelques soucis : elle est pour l'instant figée à 2.8.3 pour pylint et 2.5.6 pour astroid. Ceci pourra être modifié quand ces problèmes seront réglés côté pylint/astroid.

Démarrage du serveur back api

  • Option 1 : Lancement du serveur back api depuis le script pc présent dans le dossier parent https://github.com/pass-culture/pass-culture-main

  • Option 2 : Procédure de lancement en local pour pouvoir débugger via son ide préféré, se connecter à la DB etc...

    • Un fichier docker compose complet est fourni dans le dossier parent et il est conseillé de l'utiliser car il est maintenu à jour.
    • Lancement de la base de donnée pc-postgres et du cache redis via docker-compose
      docker-compose -f ../docker-compose-app.yml up -d postgres redis
    • A titre informatif, si toutefois vous vouliez lançer la DB et le redis vous même, vous pourriez aussi faire (équivalement du docker compose)
      docker run -d --name postgres -p 5434:5432 \
          --env-file ../env_file \
          -v postgres_local_data:/var/lib/postgresql/data \
          circleci/postgres:12.3-postgis
      
      docker run -d --name redis -p 6379:6379 \
          -v redis_local_data:/data \
          scalingo/redis redis-server 
    • Jouer les migrations DB
      Si la base de donnée n'a pas été initialisée (En d'autre terme si vous n'avez jamais fait par exemple de docker-compose -f ../docker-compose-app.yml up ) alors vous devez suivre les étapes suivantes pour l'initialisation
      • Créer une variable d'environnement pour SQLAlchemy
      export DATABASE_URL=postgresql://pass_culture:passq@localhost:5434/pass_culture
        source venv/bin/activate # Au cas ou vous l'auriez oublié :P
        python src/pcapi/install_database_extensions.py
        alembic upgrade head
      • Injecter les données de tests (sandbox)
      python -m nltk.downloader punkt stopwords   # Cette ligne c'est pour downloader les médiations (images thumbnail des offres) 
      python src/pcapi/scripts/pc.py sandbox -n industrial
      • Lancer l'appli
      PORT=80 python src/pcapi/app.py

Authentification Back Api

L'api back ne permet pas de s'authentifier directement. Il est possible de s'authentifier depis l'un des deux fronts :

  • Webapp
  • Pro

Une fois authentifié depuis l'un des deux fronts, un cookie de session est stocké et le back reconnait le cookie.

Connexions au bases de données (DB NAVIGATOR par exemple)

Il est possible de se connecter aux bases de données lançées via docker compose en utiilisant les informations ci-dessous

  • pc-postgres

    • user : pass_culture
    • password : passq
    • port : 5434
    • database : pass_culture
  • pc-postgres-test

    • user : pytest
    • password : pytest
    • port : 5433
    • database : pass_culture

Debugging

Pour Debugger sous IntelliJ Pycharm, configurer la configuration de lancement python en précisant :

  • Le script à lancer : scr/pcapi/app.py

  • Les variable d'environnement DATABASE_URL et PORT (Sinon le port sera 5000)

  • Le répertoire de lancement (Working directory) qui doit pointer vers api

    pycharm-test-config

Linter et hooks

Black et ISort permettent le reformattage du code et des imports. Ils sont lançés automatiquement à chaque commit une fois les hooks de gitlab configurés en local. Pour les configurer vous pouvez utiliser le script pc :

cd .. # Se placer sur le dossier pass-culture-main
./pc install-hooks # le script pc va créer les liens vers pre-push et pre-commit dans le .git/modules/api/hooks 

Problèmes rencontrés

  • Erreur durant le pip install -r requirements
Install openssl with brew install openssl if you don't have it already.
add openssl path to LIBRARY_PATH :
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
install psycopg2 with pip pip3 install psycopg2

pass-culture-api's People

Contributors

abel-andre avatar sofcalca avatar ledoux avatar dbaty avatar akhilian avatar viconnex avatar xordoquy avatar aliochka avatar victorenaud avatar apibrac avatar francois-seguin avatar ahmedahma avatar dzen avatar asagot-ansa avatar schable avatar jeremieb-pass avatar cgaunet avatar mbrandone avatar faustinemassin avatar rlecellier avatar edupedup avatar yacine-pc avatar lixxday avatar antoinewg avatar ymedaghri avatar g4vroche avatar mmachado-pass avatar augnustin avatar benstirrup avatar camilsadiki avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.