Commit Graph

302 Commits

Author SHA1 Message Date
jo f394336efc chore: move isort config to pyproject.toml 2022-12-07 15:59:52 +02:00
jo 5738edb49c chore: split test and coverage tasks 2022-12-07 15:59:52 +02:00
Jonas L 696666475c
fix: remove systemd ProtectHome feature (#2244)
Fix #2242
2022-10-19 12:37:39 +02:00
Jonas L 959c0378d6
fix: remove systemd ProtectHome feature (#2243)
Fix #2242
2022-10-19 12:27:02 +02:00
Jonas L 7f4ce865d4
docs(playout): add simple inputs pipeline schema (#2240) 2022-10-17 11:57:08 +02:00
Jonas L 730548b891
test: liquidsoap package from ppa is version 1.4.2 (#2233)
The PPA was previously not properly installed in the dev container.

Partial cherry-pick from 499f4d37ed
2022-10-12 16:16:47 +02:00
jo 4ada25a3ff fix(playout): add types
This reverts commit d6348d5575.
2022-10-11 09:28:52 +02:00
jo 0e1dfaa9ff refactor: upgrade code to Python 3.8 2022-10-11 09:28:52 +02:00
jo ea8131ec43 feat: drop Python 3.7 support 2022-10-10 23:49:10 +02:00
jo 182d1616af chore: add snapshot target 2022-10-10 23:29:21 +02:00
jo 1742890370 fix(playout): remove outdated liquidsoap code
Fixes #1482
2022-10-10 23:29:21 +02:00
Jonas L 499f4d37ed
test: liquidsoap package from ppa is version 1.4.2 (#2223)
The PPA was previously not properly installed in the dev container.
2022-10-10 21:14:41 +02:00
jo 5817750b62 feat: drop Liquidsoap 1.3 support 2022-10-10 20:11:33 +02:00
jo ace9365e92 feat: drop Liquidsoap 1.1 support 2022-10-10 20:11:33 +02:00
jo 7d514a9306 chore: list distribution releases by release date
Old releases should be popped from the left/top and new releases should be added to the right/bottom of any distro release list.
2022-10-10 20:11:33 +02:00
jo 5eda6093f4 feat: drop Debian Buster support
Fixes #2036
2022-10-10 20:11:33 +02:00
jo d29d837d01 feat: drop Python 3.6 support 2022-10-10 20:11:33 +02:00
jo 448cff7600 feat: drop Ubuntu Bionic support
Fixes #2035
2022-10-10 20:11:33 +02:00
Jonas L 96ded62c32
chore: release 3.0.0 (#2216) 2022-10-10 17:51:15 +02:00
renovate[bot] 019b4686ae chore(deps): update dependency mutagen to >=1.45.1,<1.47 2022-10-10 12:21:55 +02:00
jo 04490676f6 chore: release 3.0.0-beta.2 2022-10-03 12:43:38 +02:00
Jonas L c9bc3a1298
feat: extra systemd service hardening (#2197) 2022-09-27 13:17:43 +02:00
Jonas L 4c18cf5ef2
feat: systemd service hardening (#2186) 2022-09-27 11:51:17 +02:00
Jonas L 956d19ec95
fix: start playout service after liquidsoap (#2164)
Do not set a hard requirement on the service, only define the startup order.
2022-09-26 13:20:11 +02:00
jo ddae3202cc chore: release 3.0.0-beta.1 2022-09-23 13:41:14 +02:00
jo bdc2e92454 chore: release 3.0.0-beta.0 2022-09-16 16:32:00 +02:00
jo a79980e65f feat(playout): move message handling to main thread 2022-09-16 13:16:06 +02:00
jo b1c2e34ceb fix(playout): remove shutdown_handler 2022-09-16 13:16:06 +02:00
jo 64b3d164c9 refactor(playout): move daemon flag to thread class 2022-09-16 12:33:44 +02:00
jo d79cf00800 chore(playout): add types-backports dependency 2022-09-16 12:33:44 +02:00
Jonas L 45a131b668
chore: update outdated readmes (#2131) 2022-09-12 20:45:37 +02:00
jo 2afb766b41 chore: outdated python packages versions 2022-09-12 10:48:43 +02:00
Jonas L 36264ed4a5
test(playout): use snapshot testing tool (#2115) 2022-09-09 16:57:22 +02:00
Jonas L 03902f6aef
fix(playout): also shutdown on SIGTERM (#2104) 2022-09-08 12:41:56 +02:00
Jonas L 8b5749ec98
ci: build test images for debian bookworm (#2097) 2022-09-07 23:17:46 +02:00
Jonas L ef1de34111
fix(playout): missing live show events (#2087) 2022-09-06 14:09:04 +02:00
jo 37b8b17ed3 feat(playout): allow liquidsoap listen address configuration 2022-09-06 13:21:54 +02:00
jo c8cb100645 feat(playout): liquidsoap boostrap using new api endpoints 2022-09-06 13:21:54 +02:00
jo 2fa045a8ef feat(playout): remove stream_setting update handler 2022-09-06 13:21:54 +02:00
jo f5a83dbabb feat(playout): allow updating message_offline value 2022-09-06 13:21:54 +02:00
jo 314c70a208 feat(playout): stats collector using stream config 2022-09-06 13:21:54 +02:00
jo b9368d1b7b feat(playout): build liquidsoap entrypoint with stream config 2022-09-06 13:21:54 +02:00
Jonas L 510d55c7c1
feat(playout): improve generate_*_events (#2088) 2022-09-05 18:41:04 +02:00
jo 9b40885d9f fix(playout): py39 compatibility zoneinfo import 2022-09-01 19:17:33 +02:00
jo d6348d5575 fix(playout): py36 compatibility broken typings
This partially reverts commit 5505222df6.
2022-09-01 19:17:33 +02:00
jo cfcfcc82e4 chore: revert pin setuptools to <64.0.0 for build backend
This reverts commit 2bde574487.
2022-08-25 09:51:36 +02:00
jo 5505222df6 refactor(playout): rename vars and add typing 2022-08-21 16:13:34 +02:00
jo 1d59310156 refactor(playout): simplify legacy api check 2022-08-21 16:13:34 +02:00
jo a9cd1fb3df refactor(playout): move liq io to liq_client 2022-08-18 08:36:41 +02:00
jo fd2381624a refactor(playout): use vars setter in liq client 2022-08-18 08:36:41 +02:00
jo da6458caea feat(playout): integrate new liquisoap client 2022-08-17 13:18:13 +02:00
jo 624a60c4af feat(playout): create liquidsoap client 2022-08-17 13:18:13 +02:00
jo 3ea085d351 chore: add python docker-* targets
This allow testing in a similar context to the github CI.
2022-08-17 13:18:13 +02:00
Jonas L bddbdf716c
chore(playout): remove unused code (#2058) 2022-08-14 19:56:48 +02:00
Jonas L a730c1b1a4
fix(playout): add thread names (#2056) 2022-08-14 19:55:39 +02:00
Jonas L 8897d390e1
fix(playout): use stream download when fetching files (#2048) 2022-08-12 15:14:19 +02:00
Jonas L 1147853c63
feat(shared): pass config data via init (#2042) 2022-08-12 15:12:39 +02:00
jo 2bde574487 chore: pin setuptools to <64.0.0 for build backend 2022-08-11 22:16:00 +02:00
Jonas L 4019367abc
feat(playout): rewrite stats collector (#2028)
- Replace defusedxml with lxml
2022-08-09 21:14:19 +02:00
jo 02c16de2ab chore(playout): add missing requests types 2022-08-09 21:08:29 +02:00
jo 39941b0fd4 chore(playout): add missing python-dateutil dependency 2022-08-09 21:08:29 +02:00
Jonas L 9413bd5a29
refactor(playout): improve exceptions handling (#2027) 2022-08-09 21:05:21 +02:00
Jonas L b465629977
chore: disable pylint logging-fstring-interpolation format (#2033) 2022-08-09 20:30:44 +02:00
Jonas L d95a77655a
fix(playout): replace deprecated harbor.bind_addr (#2025)
Only for liquidsoap >=1.3.3
2022-08-07 08:50:42 +02:00
jo 406d42323a feat: move stream stats status to pref table 2022-08-07 08:50:06 +02:00
Jonas L e408237be1
refactor(playout): remove unused variable (#2021) 2022-08-06 07:19:47 +02:00
Jonas L 140cf4427b
test: enable logs when running pytest (#2008) 2022-07-31 11:23:27 +02:00
jo 22868ce158 chore: remove chdir in setup.py files 2022-07-27 15:35:57 +02:00
jo b93e1e5570 chore: install local python deps in editable mode 2022-07-27 15:35:57 +02:00
Jonas L e97b06496a
feat(api): don't use hyperlinked serializers (#1984) 2022-07-27 09:54:57 +02:00
jo d9725003c5 feat(playout): integrate api-client v2 calls 2022-07-26 15:14:45 +02:00
Jonas L 77f5c9951e
chore: improve setuptools find_packages (#1985) 2022-07-25 21:19:41 +02:00
Jonas L 368350b269
feat(playout): use single clients instance (#1980)
- Use legacy_client across playout code to make the difference between the old and new clients.
- Setup clients during initialization, and pass clients down to the different apps.
2022-07-22 16:26:43 +02:00
jo 473e770e8a feat: rename AirtimeApiClient to ApiClient 2022-07-22 15:00:38 +02:00
jo 8cb9bd5f32 chore(playout): update api-client imports 2022-07-22 15:00:38 +02:00
jo 71b3f7f065 chore: remove schedule unused independent_event 2022-07-20 12:05:01 +02:00
Jonas L 7e2f2d60f0
chore(playout): restructure modules (#1971) 2022-07-18 15:11:47 +02:00
jo 57046e2a9d chore(api): rename schedule models fields 2022-07-18 00:04:54 +02:00
Jonas L 96af028daa
feat(playout): replace pytz with zoneinfo (#1969) 2022-07-17 22:59:49 +02:00
jo bec5772f8b chore(playout): update defusedxml version range 2022-07-17 21:25:37 +02:00
jo f3af8e1163 chore(playout): remove explicit amqplib 2022-07-17 21:25:37 +02:00
jo 30c202786f chore: update requests version range 2022-07-17 21:25:37 +02:00
jo f256f9bd10 chore: update mutagen version range 2022-07-17 21:25:37 +02:00
jo 5729b116c0 chore(playout): pin kombu version to 4.6.11
This forces to use the same version as the worker.
Previously playout installed kombu>=5.2 and got instanlty
reverted back to 4.6.11 when the worker was installed.
2022-07-17 21:25:37 +02:00
jo 80218f33eb chore: rewrite extract-requirements to python
Using python ast to guess requirements in the setup.py file.
2022-07-17 21:25:37 +02:00
jo 28857fbf49 refactor(playout): remove date_interval_to_seconds function
Replace date_interval_to_seconds function with
either timedelta.total_seconds() or seconds_between().
2022-07-17 13:29:03 +02:00
jo db3f9bed82 chore(playout): remove module docstring 2022-07-17 13:29:03 +02:00
jo ad5dc6caf8 refactor(playout): log level setup 2022-07-17 13:29:03 +02:00
jo 8ef6784a39 refactor(playout): use pathlib to build the path 2022-07-17 13:29:03 +02:00
jo 2bc7d64cc4 feat(playout): use liquidsoap version functions
- remove "packaging" package
2022-07-17 13:29:03 +02:00
jo 58ad40f997 chore(playout): use 'entrypoint' generic module name 2022-07-17 13:29:03 +02:00
jo bd8b17a2cd chore(playout): remove unused liquidsoap.cfg 2022-07-17 11:02:36 +02:00
jo 86a9af1bc1 chore(playout): move liquidsoap package in a module 2022-07-17 11:02:36 +02:00
jo 2f205544c2 feat: use dedicated 'libretime' user
BREAKING CHANGE: The default `www-data` user has been replaced by a dedicated  `libretime` user to run the services. Be sure to change the ownership of the libretime files.
2022-07-07 10:51:07 +02:00
jo b8056a9f7a chore(playout): use EventKind enum 2022-07-01 13:16:57 +02:00
jo 97b723d0a5 chore(playout): rename variables 2022-07-01 13:16:57 +02:00
jo 2ad65bba8c chore(playout): use comments instead of docstrings 2022-07-01 13:16:57 +02:00
jo fa136fad97 chore: explicit schedule file metadata dict values 2022-07-01 11:07:26 +02:00
jo 34864b8623 chore(playout): update file fields 2022-06-29 13:51:07 +02:00
Jonas L 6ef941b3f2
chore(shared): explicit function name time_fromisoformat (#1917) 2022-06-25 17:10:59 +02:00
jo 1faf5a724b chore: move api client get_schedule to playout 2022-06-24 17:56:24 +02:00
jo 510e978952 feat: add systemd libretime.target
- add wanted by
- instantly start services in vagrant
2022-06-08 23:23:08 +02:00
jo ee98387264 feat(installer): rewrite install script
- remove unused root packages.ini
- write config to yaml file
- allow to set public_url during install
- force icecast start right after package install
- move config file in place at the end of installation

BREAKING CHANGE: The bash installer has been rewritten, the flags and
options changed, please run `./install --help` to get more details.
2022-06-08 23:23:08 +02:00
jo aed6d2f294 feat: change config dir path to /etc/libretime
BREAKING: The configuration directory changed from `/etc/airtime` to
`/etc/libretime`. Please rename your configuration directory accordingly.
2022-06-08 23:23:08 +02:00
jo 604ff20239 feat: change config filename to config.yml
BREAKING: The configuration file name changed from `airtime.conf` to
`config.yml`. Please rename your configuration file accordingly.
2022-06-08 23:23:08 +02:00
Jonas L a73084e612
feat(playout): remove unused liquidsoap_prepare_terminate.py (#1854)
Related to cde6db812f
2022-05-21 18:37:54 +02:00
jo bc6b43c43c feat: rotate logs using libretime user 2022-05-05 09:42:34 +02:00
jo f58e51ec84 fix(playout): disable playout-notify log rotation
Let logrotate handle liquidsoap.log log rotation.

Fix #1546
2022-05-05 09:42:34 +02:00
Jonas L d098671f3b
feat: replace click envar with auto_envvar_prefix (#1829) 2022-05-05 09:41:32 +02:00
Jonas L 5f4badcdeb
ci: build test images for ubuntu jammy (#1743) 2022-04-09 16:18:12 +02:00
Jonas L fef38fb131
chore: rename api_client to api-client (#1727) 2022-04-04 10:25:38 +02:00
Jonas L 8c96c0a094
feat: remove unused python3-venv package (#1728) 2022-04-02 05:41:43 +02:00
Jonas L 331df277b4
docs: fix and update links (#1714) 2022-03-29 13:07:38 +02:00
Jonas L be25dea447
fix(playout): add locales to libretime-playout-notify calls (#1715)
Fix python36 encoding runtime error that was failing on bionic,
see https://click.palletsprojects.com/en/8.1.x/unicode-support/ for
details.

Fixes #1606
2022-03-29 13:04:44 +02:00
jo b38596f56e fix(playout): remove stream_buffer_start in event dispatch
Related to 9fc4552cfe
2022-03-06 15:17:44 +02:00
jo f2b9bd6fed chore(playout): api_client schedule data log entry 2022-03-06 15:17:44 +02:00
Jonas L d55e58e416
chore: auto generate requirements.txt (#1651)
- force LC_ALL for the sort command
2022-02-28 20:02:01 +02:00
jo 90e0bcb6f8 test(playout): add bandit linter check 2022-02-14 21:01:35 +02:00
jo 6419435601 style: format code using black 2022-02-09 17:24:36 +02:00
jo 9fc4552cfe fix(playout): properly populate scheduled_now_webstream
If scheduled_now_webstream is an empty array, the webstream will automatically be stopped, so we need to make sure the scheduled_now_webstream is aways properly populated.
2022-02-02 17:13:52 +02:00
jo 51378e1e6f fix(playout): only exclude ended file event
The webstream schedule logic seem to rely on already ended events to check if the stream running is the right one.
We should not exclude these webstream events from the schedule.
2022-02-02 15:15:24 +02:00
jo 348d2d81f0 fix(playout): proper logger format string 2022-02-02 15:15:24 +02:00
Jonas L ff2c733170
feat(playout): change liquidsoap working dir (#1547)
BREAKING CHANGE: When running liquidsoap as a systemd service, the working directory is now /var/lib/libretime/playout.
2022-01-31 11:13:49 +02:00
jo 32cb67806a chore: add pyupgrade pre-commit hook
- add --py3-plus flag to pyupgrade hook
- add --py36-plus flag to pyupgrade hook
2022-01-27 10:37:48 +02:00
jo 9de82bb568 chore: make linters config consistent in pyproject.toml
- remove mypy config from makefile
2022-01-26 10:15:35 +02:00
jo 7988b7467b test: allow to set python linters to fail per app 2022-01-26 10:15:35 +02:00
jo 0f8cb1a5ed chore: set python build system in pyproject.toml
- fix local package install
- local packages requirement url format
2022-01-26 10:15:35 +02:00
jo 441028a1d2 chore: make setup.py file chdir consistent 2022-01-26 10:15:35 +02:00
Jonas L 1924919e18
fix(shared): type is required for default config submodel (#1536)
We cannot load submodels values from environment variables without having the submodel type annotations.
2022-01-24 15:24:16 +02:00
jo 13852bb6db refactor(playout): remove unused imports 2022-01-24 12:46:40 +02:00
jo 1c50b28500 refactor(playout): move constants in config 2022-01-24 12:46:40 +02:00
jo fa7692071c feat(playout): load config using shared helpers
- backport >=py38 Literal type
- update configuration sample
- add missing config filepath to systemd service
- make config sections optional

BREAKING CHANGE: the playout config schema has been changed like the following:
- the top section 'pypo' was renamed to 'playout'
- the 'playout.ls_*' entries were renamed to 'playout.liquidsoap_*'
- the 'playout.*_dir' entries were removed
- the 'playout.api_client' entry was removed
- the 'playout.record_file_type' entry was renamed to 'playout.record_file_format'
- the 'playout.base_recorded_files' entry was removed
- the 'playout.poll_interval' entry was removed
- the 'playout.push_interval' entry was removed
- the 'playout.cue_style' entry was removed
2022-01-24 12:46:40 +02:00
jo 12f96f5043 feat(playout): change playout working directory
- use working dir for storing files

BREAKING CHANGE:  the playout working directory changed from '/var/tmp/airtime/pypo/' to '/var/lib/libretime/playout' when running with systemd and the current directory by default.
2022-01-24 12:46:40 +02:00
Jonas L 1561353b20
feat(shared): allow cli parametrized decorators (#1527) 2022-01-20 07:30:35 +02:00
Jonas L 5364911922
feat(playout): migrate notify cli to click (#1519)
Fixes #1502

- replace notify option parser with click
- refactor call from liquidsoap to playout-notify

BREAKING CHANGE: the libretime-layout-notify log file in '/var/log/airtime/pypo-liquidsoap/notify.log' was removed and merged into the existing '/var/log/libretime/liquidsoap.log' log file.
2022-01-17 11:51:32 +02:00
jo b37f4f7509 fix(playout): optional log_file for liquidsoap 2022-01-14 19:36:40 +02:00
Jonas L 5c72f714a8
feat(playout): enhance playout logging (#1495)
Some initial work on modernizing the playout app. This replace any custom logger or
logging based logger with the logging tools from libretime_shared.logging and loguru.

Removed all the thread/function assigned logger (self.logger = ...), as this makes it
part of the logic (passing logger though function args) as it should not.

Of a dedicated logger is required for a specific task, it should use
the create_task_logger function.

- refactor: remove dead code
- refactor: remove py2 specific fix
- feat: remove unused test command
- feat: setup shared cli and logging tools
- feat: replace logging with loguru
- feat: setup shared cli and logging tools for notify
- fix: warn method deos not exist
- feat: make cli setup the entrypoint
- fix: install shared modules globally in production
  use extra_requires to load local packages in dev environement
- feat: configure log path in systemd service
- feat: default behavior is to log to console only
- feat: create log dir during install
- chore: add comment
- fix: don't create useless dir in install
- fix: move notify logs to /var/log/libretime dir
- fix: update setup_logger attrs
- style: linting
- fix: replace verbosity flag with log-level flag
- feat: use shared logging tool in liquidsoap
- fix: pass logger down to api client
- feat: allow custom log_filepath in liquidsoap config
- chore: add pylintrc to playout
- refactor: fix pylint errors
- feat: set liquidsoap log filepath in systemd service
- fix: missing setup entrypoint update

BREAKING CHANGE: for playout and liquidsoap the default log file path changed to None
and will only log to the console when developing / testing. Unless you are running the
app as a systemd service (production) the default logs filepaths changed:
from "/var/log/airtime/pypo/pypo.log" to "/var/log/libretime/playout.log" and
from "/var/log/airtime/pypo-liquidsoap/ls_script.log" to "/var/log/libretime/liquidsoap.log"

BREAKING CHANGE: for playout-notify the default log file path changed
from "/var/log/airtime/pypo/notify.log" to "/var/log/libretime/playout-notify.log"
2022-01-13 17:11:37 +02:00
Jonas L 0d25a330cf
chore: rename common section to python (#1509)
this will make the section more explicite,
in addition, this allow to exclude python deps
on docker images for example.
2022-01-13 07:12:50 +02:00
jo aa4be97312 chore: move liquidsoap logrotate in install dir 2022-01-04 09:18:58 +02:00
jo b6795432b6 chore: fix linting in libretime_playout 2022-01-04 09:18:58 +02:00
jo a3ad6cecc4 chore: fixes after libretime_playout rename 2022-01-04 09:18:58 +02:00
jo 318b36b6b2 chore: rename pypo dir to libretime_playout 2022-01-04 09:18:58 +02:00
jo 61a1abce0d chore: fixes after libretime_liquidsoap rename 2022-01-04 09:18:58 +02:00
jo 4be0210026 chore: rename liquidsoap dir to libretime_liquidsoap 2022-01-04 09:18:58 +02:00
jo c04287b7c4 chore: fixes after libretime_api_client rename 2022-01-04 09:18:58 +02:00
Kyle Robbertze 17daeebd25 fix: assume api client is installed
Until pip out-of-tree dependencies work with our setup and we can update
to newer versions of our dependencies, assume api client is installed
without explicitly adding it as a dependency. The install script
installs api_client anyway

Fixes: #1435
2021-12-03 00:59:40 +01:00
Kyle Robbertze 452dd64970 fix: declare pypo.notify module
Fixes: #1428
2021-11-08 20:58:23 +01:00
Kyle Robbertze 7182390000
feat: add support for Ubuntu Focal 20.04 (#1168)
Co-authored-by: Valerio Bozzolan <gnu@linux.it>
2021-11-04 09:55:50 +02:00
Jonas L 7384dd7a2f
feature: Use setuptools entrypoints (#1409)
* Use console_scripts entrypoint for libretimeapi

* Use console_scripts entrypoint for playout
2021-10-18 09:44:39 +02:00
Jonas L 30b3470a06
Better format enforcing (#1391)
* Add shared python format-check target

* Add .format-check to api lint target

* Format api code with makefile format target

* Add .format-check to tools lint target

* Add .format-check to analyzer lint target

* Format analyzer code with makefile format target

* Add .format-check to celery lint target

* Add .format-check to api_client lint target

* Format api_client code with makefile format target

* Add .format-check to playout lint target

* Run CI linting in parallel

* Disable isort in pre-commit
2021-10-17 16:24:37 +02:00
jo 19c816f294 Update paths after playout move 2021-10-17 08:02:47 +00:00
jo ca12ca5c41 Move python_apps/pypo/ to playout/ 2021-10-17 08:02:47 +00:00