From 61e6732b199e4c2ad976e33ee9490147eb212b2b Mon Sep 17 00:00:00 2001 From: Chris Tactic Date: Wed, 8 Nov 2023 18:40:00 +0100 Subject: [PATCH] #122: Improve documentation and conf tools (#126) suite de https://git.radiocampus.be/rc/aircox/pulls/122 en suivant les conventions de nommage. Co-authored-by: Christophe Siraut Reviewed-on: https://git.radiocampus.be/rc/aircox/pulls/126 Co-authored-by: Chris Tactic Co-committed-by: Chris Tactic --- .gitignore | 3 +++ README.md | 54 ++++++++++++++++++++++++++++++++----- docs/technicians.md | 25 ----------------- instance/settings/dev.py | 13 ++++++++- instance/settings/sample.py | 1 + requirements.txt | 2 +- 6 files changed, 65 insertions(+), 33 deletions(-) delete mode 100755 docs/technicians.md diff --git a/.gitignore b/.gitignore index fd1ca31..e78eae4 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ venv/ node_modules/ *.egg-info/ *.egg + +db.sqlite3 +instance/settings/settings.py diff --git a/README.md b/README.md index 7362de1..88fdcd3 100755 --- a/README.md +++ b/README.md @@ -1,10 +1,9 @@ ![](/logo.png) -Platform to manage a radio, schedules, website, and so on. We use the power of great tools like Django or Liquidsoap. +A platform to manage radio schedules, website content, and more. It uses the power of great tools like Django or Liquidsoap. This project is distributed under GPL version 3. More information in the LICENSE file, except for some files whose license is indicated inside source code. - ## Features * **streams**: multiple random music streams when no program is played. We also can specify a time range and frequency for each; * **diffusions**: generate diffusions time slot for programs that have schedule informations. Check for conflicts and rerun. @@ -15,7 +14,51 @@ This project is distributed under GPL version 3. More information in the LICENSE * **cms**: content management system. -## Scripts +## Architecture and concepts +Aircox is divided in two main modules: +* `aircox`: basics of Aircox (programs, diffusions, sounds, etc. management); interface for managing a website with Aircox elements (playlists, timetable, players on the website); +* `aircox_streamer`: interact with application to generate audio stream (LiquidSoap); + +## Development setup +Start installing a virtual environment : + +``` +virtualenv venv +source venv/bin/activate +pip install -r requirements.txt +pip install -r requirements_tests.txt +``` + +Then copy the default settings and initiate the database : + +``` +cp instance/settings/sample.py instance/settings/settings.py +python -c "from django.core.management.utils import get_random_secret_key; print('SECRET_KEY = \"%s\"' % get_random_secret_key())" >> instance/settings/settings.py +DJANGO_SETTINGS_MODULE=instance.settings.dev ./manage.py migrate +``` + +Finally test and run the instance using development settings, and point your browser to http://localhost:8000 : + +``` +DJANGO_SETTINGS_MODULE=instance.settings.dev pytest +DJANGO_SETTINGS_MODULE=instance.settings.dev ./manage.py runserver +``` + +Before requesting a merge, enable pre-commit : + +``` +pip install pre-commit +pre-commit install +``` + +## Installation +Running Aircox on production involves: +* Aircox modules and a running Django project; +* a supervisor for common tasks (sounds monitoring, stream control, etc.) -- `supervisord`; +* a wsgi and an HTTP server -- `gunicorn`, `nginx`; +* a database supported by Django (MySQL, SQLite, PostGresSQL); + +### Scripts Are included various configuration scripts that can be used to ease setup. They assume that the project is present in `/srv/apps/aircox`: @@ -27,7 +70,6 @@ The scripts are written with a combination of `cron`, `supervisord`, `nginx` and `gunicorn` in mind. -## Installation ### Dependencies For python dependencies take a peek at the `requirements.txt` file, plus dependencies specific to Django (e.g. for database: `mysqlclient` for MySql @@ -62,8 +104,8 @@ pip install -r requirements.txt ``` ### Configuration -You must write a settings.py file in the `instance` directory (you can just -copy and paste `instance/sample_settings.py`. There still is configuration +You must write a settings.py file in the `instance/settings` directory (you can just +copy and paste `instance/settings/sample.py`. There still is configuration required in this file, check it in for more info. diff --git a/docs/technicians.md b/docs/technicians.md deleted file mode 100755 index 6efab8b..0000000 --- a/docs/technicians.md +++ /dev/null @@ -1,25 +0,0 @@ - -# General information -Aircox is a set of Django applications that aims to provide a radio management solution, and is -written in Python 3.5. - -Running Aircox on production involves: -* Aircox modules and a running Django project; -* a supervisor for common tasks (sounds monitoring, stream control, etc.) -- `supervisord`; -* a wsgi and an HTTP server -- `gunicorn`, `nginx`; -* a database supported by Django (MySQL, SQLite, PostGresSQL); - -# Architecture and concepts -Aircox is divided in three main modules: -* `programs`: basics of Aircox (programs, diffusions, sounds, etc. management); -* `controllers`: interact with application to generate audio stream (LiquidSoap); -* `cms`: create a website with Aircox elements (playlists, timetable, players on the website); - - - - - -# Installation - - -# Configuration diff --git a/instance/settings/dev.py b/instance/settings/dev.py index 44d1d29..904cb67 100755 --- a/instance/settings/dev.py +++ b/instance/settings/dev.py @@ -7,6 +7,7 @@ try: except ImportError: pass +DEBUG = True LOCALE_PATHS = ["aircox/locale", "aircox_streamer/locale"] @@ -15,7 +16,7 @@ LOGGING = { "disable_existing_loggers": False, "formatters": { "timestamp": { - "format": "{asctime} {levelname} {message}", + "format": "{asctime} {module} {levelname} {message}", "style": "{", }, }, @@ -26,6 +27,10 @@ LOGGING = { }, }, "loggers": { + "root": { + "handlers": ["console"], + "level": os.getenv("DJANGO_LOG_LEVEL", "DEBUG"), + }, "aircox": { "handlers": ["console"], "level": os.getenv("DJANGO_LOG_LEVEL", "DEBUG"), @@ -40,3 +45,9 @@ LOGGING = { }, }, } + +CACHES = { + "default": { + "BACKEND": "django.core.cache.backends.locmem.LocMemCache", + } +} diff --git a/instance/settings/sample.py b/instance/settings/sample.py index 1edb036..0904565 100644 --- a/instance/settings/sample.py +++ b/instance/settings/sample.py @@ -10,6 +10,7 @@ For Django settings see: https://docs.djangoproject.com/en/3.1/topics/settings/ https://docs.djangoproject.com/en/3.1/ref/settings/ """ +from django.utils import timezone from zoneinfo import ZoneInfo from .prod import * diff --git a/requirements.txt b/requirements.txt index 65bdec7..7fcf089 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,5 +17,5 @@ dateutils~=0.6 mutagen~=1.45 Pillow~=9.0 psutil~=5.9 -PyYAML==5.4 +PyYAML==6.0.1 watchdog~=2.1