Stabilisation de Aircox #87

Closed
opened 2023-03-23 14:32:53 +00:00 by thomas · 5 comments
Owner

Ce ticket reprend la liste des différentes étapes pour stabiliser Aircox.

Infos pratiques

  • Pour chaque point pris en charge par quelqu'un, un ticket doit être créé pour le suivit (ajouter le milestone 1.0. N'hésitez pas à référencer ce ticket dans la description, par facilité de suivi.
  • Pour chaque ticket créer une branche dont le nom suit la convention dev-1.0-N-X: ou N est le numéro de l'issue et X une description éventuelle.
  • Chaque branche fais l'objet d'un pull request référançant l'issue ou les issues qui sont résolue par lui. (merge into develop-1.0)
  • Lors de l'ajout de nouveau code, le code doit systématiquement être testé (soit avoir des tests unitaires pour chaque méthode).
  • Introduction sur le Unit testing
  • Si possible, chaque méthode doit être testée (unit test), si nécessaire des tests d'intégration doivent être créés.
  • Le framework de test par préférence est pytest + pytest-django, même s'il existe déjà du code de test utilisant le framework de Django.
  • Le projet utilise pre-commit pour le code quality & format.

Organisation du code:

  • pour chaque fichier de code, un fichier de test correspondant préfixé par test_
  • quand plusieurs classes sont testées, les tests sont regroupés dans des classes préfixées par Test (par exemple: class TestProgram:)

Project Setup

  • Documentation improvement !120
  • Packaging !127

Code Quality & Improvements

  • réorganiser les fichiers de settings
  • utiliser la classe settings (disponible ici)[https://github.com/bkfox/django_fox/blob/main/fox/utils/settings.py]. Cela implique de:
    • renommer les variables en accords
    • vérifier tous les usages des settings dans tout le code
    • adapter les settings pour RC lors du déploiement cf !89
  • BaseRerun, Schedule, Diffusion dans des modules spécifiques !93
  • Warning: RuntimeWarning: DateTimeField Diffusion.start received a naive datetime`
  • abbréviation 1er, 2em, 3em !96
  • time zone: use python ZoneInfo !94
  • upload sound files from HTTP !124
  • limit users to display their own programs !121
  • rich text editor integration
  • UI bugs:
    • Play button in recently !119

Tests

  • réorganiser la structure des fichiers/dossiers pour le test !88
  • utiliser pytest pour les tests déjà existants !88
  • CI/CL Pipeline ? => Later version
  • aircox:
    • admin :
      • admin_site, mixins, filters !112
    • converters !112
    • management
    • middleware
    • models:
    • templatetags => Later version
    • utils !112
    • views:
  • aircox_streamer:
    • connector
    • controllers: metadata, source, queue_source, streamer, streamers, monitor
    • management
    • views
    • viewsets
Ce ticket reprend la liste des différentes étapes pour stabiliser Aircox. # Infos pratiques - Pour chaque point pris en charge par quelqu'un, un ticket doit être créé pour le suivit (ajouter le milestone `1.0`. N'hésitez pas à référencer ce ticket dans la description, par facilité de suivi. - Pour chaque ticket créer une branche dont le nom suit la convention `dev-1.0-N-X`: ou N est le numéro de l'issue et X une description éventuelle. - Chaque branche fais l'objet d'un pull request référançant l'issue ou les issues qui sont résolue par lui. (merge into `develop-1.0`) - Lors de l'ajout de nouveau code, le code doit systématiquement être testé (soit avoir des tests unitaires pour chaque méthode). - [Introduction sur le Unit testing](https://www.testim.io/blog/unit-testing-best-practices/) - Si possible, chaque méthode doit être testée (unit test), si nécessaire des tests d'intégration doivent être créés. - Le framework de test par préférence est `pytest` + `pytest-django`, même s'il existe déjà du code de test utilisant le framework de Django. - Le projet utilise `pre-commit` pour le code quality & format. Organisation du code: - pour chaque fichier de code, un fichier de test correspondant préfixé par `test_` - quand plusieurs classes sont testées, les tests sont regroupés dans des classes préfixées par `Test` (par exemple: `class TestProgram:`) # Project Setup - [x] Documentation improvement !120 - [x] Packaging !127 # Code Quality & Improvements - [x] réorganiser les fichiers de settings - [x] utiliser la classe settings (disponible ici)[https://github.com/bkfox/django_fox/blob/main/fox/utils/settings.py]. Cela implique de: - [x] renommer les variables en accords - [x] vérifier tous les usages des settings dans tout le code - [x] adapter les settings pour RC lors du déploiement cf !89 - [x] `BaseRerun`, `Schedule`, `Diffusion` dans des modules spécifiques !93 - [x] Warning: RuntimeWarning: DateTimeField Diffusion.start received a naive datetime` - [x] abbréviation 1er, 2em, 3em !96 - [x] time zone: use python ZoneInfo !94 - [x] upload sound files from HTTP !124 - [x] limit users to display their own programs !121 - [x] rich text editor integration - [ ] UI bugs: - Play button in recently !119 # Tests - [x] réorganiser la structure des fichiers/dossiers pour le test !88 - [x] utiliser pytest pour les tests déjà existants !88 - [ ] ~~CI/CL Pipeline ?~~ => Later version - [x] `aircox`: - [x] `admin` : - [x] `admin_site`, `mixins`, `filters` !112 - [x] `converters` !112 - [x] `management` - [x] `middleware` - [x] `models`: - [x] `episode` !98 , `rerun`, `schedule` !93 - [x] `station` ~~!100~~, `page` ~~!101~~ - [x] `signals` !112 - [ ] ~~`templatetags`~~ => Later version - [x] `utils` !112 - [x] `views`: - [x] `base`, `mixins` !112 - [x] `aircox_streamer`: - [x] `connector` - [x] `controllers`: `metadata`, `source`, `queue_source`, `streamer`, `streamers`, `monitor` - [x] ~~`management`~~ - [x] ~~`views`~~ - [x] `viewsets`
thomas added this to the 1.0 milestone 2023-03-23 14:32:53 +00:00
Author
Owner

@rc/gnuragistes est-ce que vous savez si c'est possible de mettre en place un pipeline CI/CD sur Gitea?

@rc/gnuragistes est-ce que vous savez si c'est possible de mettre en place un pipeline CI/CD sur Gitea?
Owner

J'ai choisi Gitea pour sa simplicité et parce qu'il n'y avait pas de CI/CD.

Ce n'est donc pas moi qui mettrai ça en place.

Libre à vous de changer d'outil évidemment !

J'ai choisi Gitea pour sa simplicité et parce qu'il n'y avait pas de CI/CD. Ce n'est donc pas moi qui mettrai ça en place. Libre à vous de changer d'outil évidemment !
Author
Owner

On verra ça plus tard :) je vais déjà réorganiser un peu le code pour les tests

On verra ça plus tard :) je vais déjà réorganiser un peu le code pour les tests
thomas added the
amélioration
label 2023-03-28 11:55:25 +00:00
thomas added the
stabilisation
label 2023-06-18 19:29:45 +00:00
Author
Owner

Code coverage - 2023/08/23

aircox

---------- coverage: platform linux, python 3.11.3-final-0 -----------
Name                                                                           Stmts   Miss  Cover
--------------------------------------------------------------------------------------------------
aircox/__init__.py                                                                 0      0   100%
aircox/admin/__init__.py                                                          11      0   100%
aircox/admin/article.py                                                            7      0   100%
aircox/admin/diffusion.py                                                         32      7    78%
aircox/admin/episode.py                                                           28     10    64%
aircox/admin/filters.py                                                           29      5    83%
aircox/admin/log.py                                                                7      0   100%
aircox/admin/page.py                                                              71     18    75%
aircox/admin/program.py                                                           29      5    83%
aircox/admin/schedule.py                                                          31      9    71%
aircox/admin/sound.py                                                             72     22    69%
aircox/admin/station.py                                                           12      0   100%
aircox/admin_site.py                                                              28      3    89%
aircox/apps.py                                                                     7      0   100%
aircox/conf.py                                                                    69     15    78%
aircox/controllers/__init__.py                                                     0      0   100%
aircox/controllers/diffusion_monitor.py                                           31      0   100%
aircox/controllers/log_archiver.py                                                57      4    93%
aircox/controllers/playlist_import.py                                             54      9    83%
aircox/controllers/sound_file.py                                                 116     59    49%
aircox/controllers/sound_monitor.py                                              146     52    64%
aircox/controllers/sound_stats.py                                                 69      9    87%
aircox/converters.py                                                              31      0   100%
aircox/filters.py                                                                 19      4    79%
aircox/forms.py                                                                   13      0   100%
aircox/middleware.py                                                              30      6    80%
aircox/migrations/0001_initial.py                                                 11      0   100%
aircox/migrations/0002_auto_20200526_1516.py                                       4      0   100%
aircox/migrations/0003_auto_20200530_1116.py                                       7      0   100%
aircox/migrations/0004_auto_20200921_2356.py                                       6      0   100%
aircox/migrations/0005_auto_20220318_1205.py                                       7      0   100%
aircox/migrations/0006_alter_sound_file.py                                         5      0   100%
aircox/migrations/0007_sound_is_downloadable_alter_page_pub_date_and_more.py       5      0   100%
aircox/migrations/0008_alter_diffusion_options_track_album_and_more.py             4      0   100%
aircox/migrations/0009_track_year.py                                               4      0   100%
aircox/migrations/0010_alter_track_album.py                                        4      0   100%
aircox/migrations/0011_usersettings.py                                             6      0   100%
aircox/migrations/0012_alter_sound_file_alter_station_default.py                   5      0   100%
aircox/migrations/__init__.py                                                      0      0   100%
aircox/models/__init__.py                                                         12      0   100%
aircox/models/article.py                                                          10      0   100%
aircox/models/diffusion.py                                                       111     31    72%
aircox/models/episode.py                                                          48      5    90%
aircox/models/log.py                                                             101     45    55%
aircox/models/page.py                                                            161     28    83%
aircox/models/program.py                                                          77     18    77%
aircox/models/rerun.py                                                            45      2    96%
aircox/models/schedule.py                                                         93      0   100%
aircox/models/signals.py                                                          64     15    77%
aircox/models/sound.py                                                           135     39    71%
aircox/models/station.py                                                          74     16    78%
aircox/models/user_settings.py                                                     8      0   100%
aircox/serializers/__init__.py                                                     4      0   100%
aircox/serializers/admin.py                                                       18      4    78%
aircox/serializers/log.py                                                         41     18    56%
aircox/serializers/sound.py                                                       12      0   100%
aircox/test.py                                                                   170     23    86%
aircox/tests/__init__.py                                                           2      0   100%
aircox/tests/admin/__init__.py                                                     0      0   100%
aircox/tests/admin/test_filters.py                                                31      0   100%
aircox/tests/conftest.py                                                          75      0   100%
aircox/tests/controllers/test_diffusion_monitor.py                                33      1    97%
aircox/tests/controllers/test_log_archiver.py                                     54      0   100%
aircox/tests/controllers/test_playlist_import.py                                  29      0   100%
aircox/tests/controllers/test_sound_file.py                                       41      0   100%
aircox/tests/controllers/test_sound_monitor.py                                   153     32    79%
aircox/tests/controllers/test_sound_stats.py                                      61      0   100%
aircox/tests/management/__init__.py                                                0      0   100%
aircox/tests/management/_test_sound_monitor.py                                    54     54     0%
aircox/tests/models/test_diffusion.py                                             14      0   100%
aircox/tests/models/test_episode.py                                               49      4    92%
aircox/tests/models/test_rerun.py                                                 73      0   100%
aircox/tests/models/test_schedule.py                                              95      0   100%
aircox/tests/models/test_signals.py                                               66      0   100%
aircox/tests/test_admin_site.py                                                   29      0   100%
aircox/tests/test_converters.py                                                   37      0   100%
aircox/tests/test_middleware.py                                                   34      0   100%
aircox/tests/test_utils.py                                                        28      0   100%
aircox/tests/views/__init__.py                                                     0      0   100%
aircox/tests/views/conftest.py                                                    23      1    96%
aircox/tests/views/test_base.py                                                   48      0   100%
aircox/tests/views/test_mixins.py                                                111      0   100%
aircox/urls.py                                                                    14      0   100%
aircox/utils.py                                                                   32      2    94%
aircox/views/__init__.py                                                          10      0   100%
aircox/views/admin.py                                                             31     10    68%
aircox/views/article.py                                                           14      2    86%
aircox/views/base.py                                                              42      0   100%
aircox/views/diffusion.py                                                         20      6    70%
aircox/views/episode.py                                                           18      3    83%
aircox/views/home.py                                                              45     27    40%
aircox/views/log.py                                                               58     26    55%
aircox/views/mixins.py                                                            67      4    94%
aircox/views/page.py                                                              88     38    57%
aircox/views/program.py                                                           37     12    68%
aircox/viewsets.py                                                                61     21    66%
--------------------------------------------------------------------------------------------------
TOTAL                                                                           3928    724    82%

aircox_streamer

---------- coverage: platform linux, python 3.11.3-final-0 -----------
Name                                                  Stmts   Miss  Cover
-------------------------------------------------------------------------
aircox_streamer/__init__.py                               0      0   100%
aircox_streamer/apps.py                                   3      0   100%
aircox_streamer/connector.py                             68      9    87%
aircox_streamer/controllers/__init__.py                   8      0   100%
aircox_streamer/controllers/metadata.py                  58      3    95%
aircox_streamer/controllers/monitor.py                  109      2    98%
aircox_streamer/controllers/sources.py                   86      5    94%
aircox_streamer/controllers/streamer.py                 107      6    94%
aircox_streamer/controllers/streamers.py                 40      8    80%
aircox_streamer/serializers.py                           47      9    81%
aircox_streamer/tests/__init__.py                         0      0   100%
aircox_streamer/tests/conftest.py                       162      1    99%
aircox_streamer/tests/fake_modules/__init__.py           19      1    95%
aircox_streamer/tests/fake_modules/atexit.py              6      0   100%
aircox_streamer/tests/fake_modules/psutil.py              8      0   100%
aircox_streamer/tests/fake_modules/subprocess.py         28      0   100%
aircox_streamer/tests/test_connector.py                  53      0   100%
aircox_streamer/tests/test_controllers_metadata.py       44      0   100%
aircox_streamer/tests/test_controllers_monitor.py       186      0   100%
aircox_streamer/tests/test_controllers_sources.py        89      0   100%
aircox_streamer/tests/test_controllers_streamer.py      111      1    99%
aircox_streamer/tests/test_controllers_streamers.py      26     14    46%
aircox_streamer/tests/test_viewsets.py                  122      0   100%
aircox_streamer/urls.py                                  13     13     0%
aircox_streamer/views.py                                 11     11     0%
aircox_streamer/viewsets.py                              97      8    92%
-------------------------------------------------------------------------
TOTAL                                                  1501     91    94%
# Code coverage - 2023/08/23 ## `aircox` ``` ---------- coverage: platform linux, python 3.11.3-final-0 ----------- Name Stmts Miss Cover -------------------------------------------------------------------------------------------------- aircox/__init__.py 0 0 100% aircox/admin/__init__.py 11 0 100% aircox/admin/article.py 7 0 100% aircox/admin/diffusion.py 32 7 78% aircox/admin/episode.py 28 10 64% aircox/admin/filters.py 29 5 83% aircox/admin/log.py 7 0 100% aircox/admin/page.py 71 18 75% aircox/admin/program.py 29 5 83% aircox/admin/schedule.py 31 9 71% aircox/admin/sound.py 72 22 69% aircox/admin/station.py 12 0 100% aircox/admin_site.py 28 3 89% aircox/apps.py 7 0 100% aircox/conf.py 69 15 78% aircox/controllers/__init__.py 0 0 100% aircox/controllers/diffusion_monitor.py 31 0 100% aircox/controllers/log_archiver.py 57 4 93% aircox/controllers/playlist_import.py 54 9 83% aircox/controllers/sound_file.py 116 59 49% aircox/controllers/sound_monitor.py 146 52 64% aircox/controllers/sound_stats.py 69 9 87% aircox/converters.py 31 0 100% aircox/filters.py 19 4 79% aircox/forms.py 13 0 100% aircox/middleware.py 30 6 80% aircox/migrations/0001_initial.py 11 0 100% aircox/migrations/0002_auto_20200526_1516.py 4 0 100% aircox/migrations/0003_auto_20200530_1116.py 7 0 100% aircox/migrations/0004_auto_20200921_2356.py 6 0 100% aircox/migrations/0005_auto_20220318_1205.py 7 0 100% aircox/migrations/0006_alter_sound_file.py 5 0 100% aircox/migrations/0007_sound_is_downloadable_alter_page_pub_date_and_more.py 5 0 100% aircox/migrations/0008_alter_diffusion_options_track_album_and_more.py 4 0 100% aircox/migrations/0009_track_year.py 4 0 100% aircox/migrations/0010_alter_track_album.py 4 0 100% aircox/migrations/0011_usersettings.py 6 0 100% aircox/migrations/0012_alter_sound_file_alter_station_default.py 5 0 100% aircox/migrations/__init__.py 0 0 100% aircox/models/__init__.py 12 0 100% aircox/models/article.py 10 0 100% aircox/models/diffusion.py 111 31 72% aircox/models/episode.py 48 5 90% aircox/models/log.py 101 45 55% aircox/models/page.py 161 28 83% aircox/models/program.py 77 18 77% aircox/models/rerun.py 45 2 96% aircox/models/schedule.py 93 0 100% aircox/models/signals.py 64 15 77% aircox/models/sound.py 135 39 71% aircox/models/station.py 74 16 78% aircox/models/user_settings.py 8 0 100% aircox/serializers/__init__.py 4 0 100% aircox/serializers/admin.py 18 4 78% aircox/serializers/log.py 41 18 56% aircox/serializers/sound.py 12 0 100% aircox/test.py 170 23 86% aircox/tests/__init__.py 2 0 100% aircox/tests/admin/__init__.py 0 0 100% aircox/tests/admin/test_filters.py 31 0 100% aircox/tests/conftest.py 75 0 100% aircox/tests/controllers/test_diffusion_monitor.py 33 1 97% aircox/tests/controllers/test_log_archiver.py 54 0 100% aircox/tests/controllers/test_playlist_import.py 29 0 100% aircox/tests/controllers/test_sound_file.py 41 0 100% aircox/tests/controllers/test_sound_monitor.py 153 32 79% aircox/tests/controllers/test_sound_stats.py 61 0 100% aircox/tests/management/__init__.py 0 0 100% aircox/tests/management/_test_sound_monitor.py 54 54 0% aircox/tests/models/test_diffusion.py 14 0 100% aircox/tests/models/test_episode.py 49 4 92% aircox/tests/models/test_rerun.py 73 0 100% aircox/tests/models/test_schedule.py 95 0 100% aircox/tests/models/test_signals.py 66 0 100% aircox/tests/test_admin_site.py 29 0 100% aircox/tests/test_converters.py 37 0 100% aircox/tests/test_middleware.py 34 0 100% aircox/tests/test_utils.py 28 0 100% aircox/tests/views/__init__.py 0 0 100% aircox/tests/views/conftest.py 23 1 96% aircox/tests/views/test_base.py 48 0 100% aircox/tests/views/test_mixins.py 111 0 100% aircox/urls.py 14 0 100% aircox/utils.py 32 2 94% aircox/views/__init__.py 10 0 100% aircox/views/admin.py 31 10 68% aircox/views/article.py 14 2 86% aircox/views/base.py 42 0 100% aircox/views/diffusion.py 20 6 70% aircox/views/episode.py 18 3 83% aircox/views/home.py 45 27 40% aircox/views/log.py 58 26 55% aircox/views/mixins.py 67 4 94% aircox/views/page.py 88 38 57% aircox/views/program.py 37 12 68% aircox/viewsets.py 61 21 66% -------------------------------------------------------------------------------------------------- TOTAL 3928 724 82% ``` ## `aircox_streamer` ``` ---------- coverage: platform linux, python 3.11.3-final-0 ----------- Name Stmts Miss Cover ------------------------------------------------------------------------- aircox_streamer/__init__.py 0 0 100% aircox_streamer/apps.py 3 0 100% aircox_streamer/connector.py 68 9 87% aircox_streamer/controllers/__init__.py 8 0 100% aircox_streamer/controllers/metadata.py 58 3 95% aircox_streamer/controllers/monitor.py 109 2 98% aircox_streamer/controllers/sources.py 86 5 94% aircox_streamer/controllers/streamer.py 107 6 94% aircox_streamer/controllers/streamers.py 40 8 80% aircox_streamer/serializers.py 47 9 81% aircox_streamer/tests/__init__.py 0 0 100% aircox_streamer/tests/conftest.py 162 1 99% aircox_streamer/tests/fake_modules/__init__.py 19 1 95% aircox_streamer/tests/fake_modules/atexit.py 6 0 100% aircox_streamer/tests/fake_modules/psutil.py 8 0 100% aircox_streamer/tests/fake_modules/subprocess.py 28 0 100% aircox_streamer/tests/test_connector.py 53 0 100% aircox_streamer/tests/test_controllers_metadata.py 44 0 100% aircox_streamer/tests/test_controllers_monitor.py 186 0 100% aircox_streamer/tests/test_controllers_sources.py 89 0 100% aircox_streamer/tests/test_controllers_streamer.py 111 1 99% aircox_streamer/tests/test_controllers_streamers.py 26 14 46% aircox_streamer/tests/test_viewsets.py 122 0 100% aircox_streamer/urls.py 13 13 0% aircox_streamer/views.py 11 11 0% aircox_streamer/viewsets.py 97 8 92% ------------------------------------------------------------------------- TOTAL 1501 91 94% ```
thomas added reference develop-1.0 2024-04-05 16:55:24 +00:00
Author
Owner

Bon ben la checklist est bonne, on va pouvoir passer en QA

Bon ben la checklist est bonne, on va pouvoir passer en QA
Sign in to join this conversation.
No description provided.