Le projet a été initialement réalisé en mode jupyter avec une connexion postgresql.
Les étapes pour faire fonctionner le jupyter sont dans le fichier jupyter
Les points saillants :
-
il faut créer des variables d'environement SPOTIFY_CLIENT_ID et SPOTIFY_CLIENT_SECRET, voir jupyter
-
il faut avoir une base de données postgresql et renseigner les variables d'environnements associées
Le "lancer tout" permet de lancer les traitements et d'alimenter la base de données
Voir les captures d'écran dataiku
- il faut créer des variables d'environement SPOTIFY_CLIENT_ID et SPOTIFY_CLIENT_SECRET, voir jupyter
- il faut avoir une base de données postgresql et renseigner les variables d'environnements
poetry install
ou dans mon cas windows
python -p poetry install
### configuration
playlist_ids=['79pUFoqsqWvOyqtO6ZCkrU', '2e2dR6QrjM3sCroLHprQQz']
sa = spotify_analyse(playlist_ids)
### récupération des populatrités
df_artist_popularity = sa.retrieve_artist_popularity()
# sauvegarde des populatrités
sa.store_artist_popularity(df_artist_popularity)
### récupération des artistes entree/sortie
df_artist_inout = sa.retrieve_artist_in_out()
### sauvegarde des artistes entree/sortie
sa.store_playlist_artist_inout_into_db(df_artist_inout)
cas exemple testés : fonction privée, variable privée, fonctions
pytest
ou dans mon cas windows
python -m pytest
coverage run -m pytest && coverage report -m
ou dans mon cas windows
python -m coverage run -m pytest && python -m coverage report -m
Les fonctions appelant la bdd ne sont pas testés, ce qui explique la faible couverure de tests, certains warning sont causés par la lib externe spotipy
------ 8 passed, 3 warnings in 9.44s -----
Name Stmts Miss Cover Missing
----------------------------------------------------------------------------
src\spotify_data_engineer\__init__.py 0 0 100%
src\spotify_data_engineer\spotify_analyse.py 187 94 50% 31-60, 64-87, 92-141, 164-165, 177-178, 188-201, 219-233, 236-241, 250, 293-299, 303-311, 315-323, 327-334
tests\__init__.py 0 0 100%
tests\test_spotify_analyse.py 83 4 95% 40-46
----------------------------------------------------------------------------
TOTAL 270 98 64%
il est aussi possible d'utliser la fonction get_artist_popularity_by_date
df_artist_in_out = pd.read_sql("SELECT * FROM playlist_artist_inout where date > '1980-09-06 04:28:57+00:00' AND date < '2023-09-06 04:28:57+00:00' AND status != 'stay'", engine)
df_artist_popularity_read = pd.read_sql('SELECT * FROM artist_popularity', engine)
beaucoup de travail encore....
quelques pistes :
- découper en classes le projet
- revoir les configuration de connexions bdd en doublons/triplons
- tests unitaires des bdds
- revoir l'utilisation de jupyter en me^me temps que du code pur
- arriver à avoir un environnement qui marche (ne pas utiliser windows?)
- arriver à activer le debugger python
- revoir les insertions en bdd et le to_csv qui ne marche pas bien sur mon poste
- faire fonctionner correctement poetry et pytest