dbus2mqtt 0.5.0__tar.gz → 0.5.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of dbus2mqtt might be problematic. Click here for more details.
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.github/workflows/ci.yml +1 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.github/workflows/docker-dev.yml +1 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.github/workflows/trivy.yml +1 -1
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.pre-commit-config.yaml +3 -3
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/PKG-INFO +3 -3
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/README.md +1 -1
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docker/Dockerfile.dev +1 -1
- dbus2mqtt-0.5.0/docs/examples/home_assistant_media_player.md → dbus2mqtt-0.5.1/docs/examples/home_assistant_media_player/mqtt_mediaplayer.yaml +0 -78
- dbus2mqtt-0.5.1/docs/examples/home_assistant_media_player.md +82 -0
- dbus2mqtt-0.5.1/docs/examples/linux_desktop/notify.json +13 -0
- dbus2mqtt-0.5.1/docs/examples/linux_desktop/notify_with_actions_and_hints.json +13 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/examples/linux_desktop.md +6 -32
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/flows/flow_triggers.md +4 -4
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/mkdocs.yml +2 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/pyproject.toml +1 -1
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/config/__init__.py +16 -10
- dbus2mqtt-0.5.1/src/dbus2mqtt/config/jsonarparse.py +38 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/__init__.py +1 -2
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/uv.lock +0 -125
- dbus2mqtt-0.5.0/src/dbus2mqtt/config/jsonarparse.py +0 -32
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.dockerignore +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.env.example +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.github/release-drafter.yml +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.github/scripts/release-versions.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.github/workflows/deploy-docs.yml +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.github/workflows/docker-stable.yml +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.github/workflows/pre-commit.yml +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.github/workflows/publish.yml +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.github/workflows/release-drafter.yml +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.gitignore +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.markdownlint.json +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.python-version +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.vscode/launch.json +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.vscode/settings.json +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/.yamllint.yml +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/LICENSE +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docker/Dockerfile.pypi +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/assets/favicon.svg +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/assets/logo-dark-img.svg +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/assets/logo-dark-text.png +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/assets/logo-dark-text.svg +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/assets/logo-light-img.svg +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/assets/logo-light-text.svg +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/developer/debugging_dbus.md +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/developer/index.md +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/examples/bluez.md +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/examples/bluez.yaml +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/examples/connman-config.md +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/examples/connman-config.yaml +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/examples/dbus2mqtt_internal_state.md +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/examples/dbus2mqtt_internal_state.yaml +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/examples/home_assistant_media_player.yaml +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/examples/index.md +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/examples/linux_desktop.yaml +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/flows/flow_actions.md +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/flows/index.md +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/hooks.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/index.md +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/overrides/main.html +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/setup.md +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/stylesheets/extra.css +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/subscriptions.md +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/docs/templating/index.md +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/renovate.json +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/__init__.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/__main__.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/dbus/dbus_client.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/dbus/dbus_types.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/dbus/dbus_util.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/dbus/introspection_patches/mpris_playerctl.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/dbus/introspection_patches/mpris_vlc.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/event_broker.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/flow/__init__.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/flow/actions/context_set.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/flow/actions/log_action.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/flow/actions/mqtt_publish.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/flow/flow_processor.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/main.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/mqtt/mqtt_client.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/template/dbus_template_functions.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/template/templating.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/config/fixtures/payload_template_jinja_expressions.yaml +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/config/fixtures/payload_template_off.yaml +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/config/fixtures/schedule_cron_trigger.yaml +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/config/test_config.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/config/test_examples.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/conftest.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/dbus/test_dbus_client.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/dbus/test_dbus_client_mqtt_command.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/dbus/test_dbus_utils.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/flow/actions/test_context_set.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/flow/actions/test_log.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/flow/actions/test_mqtt_publish.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/flow/test_flow_processor.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/flow/triggers/test_dbus_client_triggers.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/flow/triggers/test_mqtt_client_triggers.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/template/test_templating.py +0 -0
- {dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/template/test_templating_config.py +0 -0
|
@@ -33,7 +33,7 @@ repos:
|
|
|
33
33
|
- --strict
|
|
34
34
|
|
|
35
35
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
36
|
-
rev: v0.12.
|
|
36
|
+
rev: v0.12.12
|
|
37
37
|
hooks:
|
|
38
38
|
- id: ruff
|
|
39
39
|
args:
|
|
@@ -42,12 +42,12 @@ repos:
|
|
|
42
42
|
- I
|
|
43
43
|
|
|
44
44
|
- repo: https://github.com/astral-sh/uv-pre-commit
|
|
45
|
-
rev: 0.8.
|
|
45
|
+
rev: 0.8.15
|
|
46
46
|
hooks:
|
|
47
47
|
- id: uv-lock
|
|
48
48
|
|
|
49
49
|
- repo: https://github.com/RobertCraigie/pyright-python
|
|
50
|
-
rev: v1.1.
|
|
50
|
+
rev: v1.1.405
|
|
51
51
|
hooks:
|
|
52
52
|
- id: pyright
|
|
53
53
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dbus2mqtt
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.1
|
|
4
4
|
Summary: General purpose DBus to MQTT bridge - expose signals, methods and properties over MQTT - featuring jinja based templating, payload enrichment and MPRIS / BlueZ / Home Assistant ready examples
|
|
5
5
|
Project-URL: Documentation, https://jwnmulder.github.io/dbus2mqtt
|
|
6
6
|
Project-URL: Source, https://github.com/jwnmulder/dbus2mqtt
|
|
@@ -17,6 +17,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
21
|
Classifier: Topic :: Home Automation
|
|
21
22
|
Requires-Python: >=3.10
|
|
22
23
|
Requires-Dist: apscheduler>=3.11.0
|
|
@@ -27,7 +28,6 @@ Requires-Dist: jinja2-ansible-filters>=1.3.2
|
|
|
27
28
|
Requires-Dist: jinja2>=3.1.6
|
|
28
29
|
Requires-Dist: jsonargparse>=4.38.0
|
|
29
30
|
Requires-Dist: paho-mqtt>=2.1.0
|
|
30
|
-
Requires-Dist: pydantic>=2.11.3
|
|
31
31
|
Requires-Dist: python-dotenv>=1.1.0
|
|
32
32
|
Requires-Dist: pyyaml>=6.0.2
|
|
33
33
|
Description-Content-Type: text/markdown
|
|
@@ -122,4 +122,4 @@ See [subscriptions](https://jwnmulder.github.io/dbus2mqtt/subscriptions.html) fo
|
|
|
122
122
|
|
|
123
123
|
For more advanced use-cases, dbus2mqtt has support for flows and Jinja2 based templates. A reference of all supported flow triggers and actions can be found on [flows](https://jwnmulder.github.io/dbus2mqtt/flows/index.html)
|
|
124
124
|
|
|
125
|
-
Jinja templating documentation can be found here: [templating](templating/index.
|
|
125
|
+
Jinja templating documentation can be found here: [templating](https://jwnmulder.github.io/dbus2mqtt/templating/index.html)
|
|
@@ -88,4 +88,4 @@ See [subscriptions](https://jwnmulder.github.io/dbus2mqtt/subscriptions.html) fo
|
|
|
88
88
|
|
|
89
89
|
For more advanced use-cases, dbus2mqtt has support for flows and Jinja2 based templates. A reference of all supported flow triggers and actions can be found on [flows](https://jwnmulder.github.io/dbus2mqtt/flows/index.html)
|
|
90
90
|
|
|
91
|
-
Jinja templating documentation can be found here: [templating](templating/index.
|
|
91
|
+
Jinja templating documentation can be found here: [templating](https://jwnmulder.github.io/dbus2mqtt/templating/index.html)
|
|
@@ -20,7 +20,7 @@ RUN --mount=type=cache,target=/root/.cache/uv \
|
|
|
20
20
|
--mount=type=bind,source=pyproject.toml,target=pyproject.toml \
|
|
21
21
|
uv sync --frozen --no-install-project --no-dev
|
|
22
22
|
|
|
23
|
-
ADD src/ pyproject.toml uv.lock README.md /app
|
|
23
|
+
ADD src/ pyproject.toml uv.lock README.md /app/
|
|
24
24
|
RUN --mount=type=cache,target=/root/.cache/uv \
|
|
25
25
|
uv sync --frozen --no-dev
|
|
26
26
|
|
|
@@ -1,80 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
hide:
|
|
3
|
-
- toc
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Mediaplayer integration with Home Assistant
|
|
7
|
-
|
|
8
|
-
With dbus2mqtt as a bridge between MPRIS players and Home Assistant, it becomes possible to control Linux based media players via Home Assistant.
|
|
9
|
-
|
|
10
|
-
The Media Player Remote Interfacing Specification (MPRIS) is a standard for controlling Linux media players. It provides a mechanism for compliant media players discovery, basic playback and media player state control as well as a tracklist interface which is used to add context to the current item.
|
|
11
|
-
|
|
12
|
-
Pre-requisites:
|
|
13
|
-
|
|
14
|
-
* Home-Assistant with a working MQTT setup
|
|
15
|
-
* The community Home-Assistant plugin [github.com/Sennevds/media_player.template](https://github.com/Sennevds/media_player.template)
|
|
16
|
-
|
|
17
|
-
## Features
|
|
18
|
-
|
|
19
|
-
* dbus subscription using `org.mpris.MediaPlayer2.*` wildcard to support multiple concurrent MRPIS players
|
|
20
|
-
* Every 5 seconds, the state of the `first` known MPRIS player is published to MQTT topic `dbus2mqtt/org.mpris.MediaPlayer2/state`
|
|
21
|
-
* Every MPRIS property update immediately publishes the state to MQTT topic `dbus2mqtt/org.mpris.MediaPlayer2/state`
|
|
22
|
-
* Support for player commands (see below)
|
|
23
|
-
|
|
24
|
-
## Setup activities
|
|
25
|
-
|
|
26
|
-
* Configure the MQTT Sensor and player configuration in Home Assistant with the configuration listed below
|
|
27
|
-
* Config dbus2mqtt using the supplied [home_assistant_media_player.yaml](https://github.com/jwnmulder/dbus2mqtt/blob/main/docs/examples/home_assistant_media_player.yaml)
|
|
28
|
-
|
|
29
|
-
To run, execute the following commands
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
dbus2mqtt --config docs/examples/home_assistant_media_player.yaml
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## Tested configurations
|
|
36
|
-
|
|
37
|
-
The following MPRIS players are known to work with Home Assistant.
|
|
38
|
-
|
|
39
|
-
| Application | Play<br />Pause<br /> | Stop | Next<br />Previous | Seek<br />SetPosition | Volume | Quit | Media Info | Media Image | Notes |
|
|
40
|
-
|--------------|-----------------------|------|--------------------|------|--------|------|------------|-------------|-------------------|
|
|
41
|
-
| `Firefox` | ✅ | ✅ | ✅ | ✅ | | ❌ | ✅ | ✅ | |
|
|
42
|
-
| `VLC` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | |
|
|
43
|
-
| `Chromium` | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✔️ | Images not working when Chromium is running as snap |
|
|
44
|
-
| `Kodi` | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | Requires Kodi plugin [MediaPlayerRemoteInterface](https://github.com/wastis/MediaPlayerRemoteInterface) |
|
|
45
|
-
|
|
46
|
-
!!! note
|
|
47
|
-
More players that support MPRIS (but have not been tested) can be found here: <https://wiki.archlinux.org/title/MPRIS>
|
|
48
|
-
|
|
49
|
-
## Player commands
|
|
50
|
-
|
|
51
|
-
The following table lists player commands, their descriptions, and an example JSON payload for invoking them via MQTT.
|
|
52
|
-
|
|
53
|
-
Dbus methods can be invoked by sendig the JSON payload to MQTT topic `dbus2mqtt/org.mpris.MediaPlayer2/command`. Method calls will be done for all matching players. The same applies to property updates.
|
|
54
|
-
|
|
55
|
-
| Method<br />Property | Description | Example MQTT JSON Payload |
|
|
56
|
-
|---------------|------------------------------------------|------------------------------------------------|
|
|
57
|
-
| `Play` | Starts playback | `#!json { "method": "Play" }` |
|
|
58
|
-
| `Pause` | Pauses playback | `#!json { "method": "Pause" }` |
|
|
59
|
-
| `PlayPause` | Toggles between play and pause | `#!json { "method": "PlayPause" }` |
|
|
60
|
-
| `Stop` | Stops playback | `#!json { "method": "Stop" }` |
|
|
61
|
-
| `Next` | Next | `#!json { "method": "Next" }` |
|
|
62
|
-
| `Previous` | Previous | `#!json { "method": "Previous" }` |
|
|
63
|
-
| `Seek` | Seek forward or backward in micro seconds | `#!json { "method": "Seek", "args": [60000000] }` |
|
|
64
|
-
| `Volume` | Set volume (double between 0 and 1) | `#!json { "property": "Volume", "value": 1.0 }` |
|
|
65
|
-
| `SetPosition` | Set / seek to position in micro seconds. First arguments needs to be trackid which can be determined via Metadata.mpris:trackid | `#!json { "method": "SetPosition", "args": ["/org/mpris/MediaPlayer2/firefox", 170692139] }` |
|
|
66
|
-
| `Quit` | Quits the media player | `#!json { "method": "Quit" }` |
|
|
67
|
-
|
|
68
|
-
For an overview of MPRIS commands have a look at <https://mpris2.readthedocs.io/en/latest/interfaces.html#mpris2.MediaPlayer2>
|
|
69
|
-
|
|
70
|
-
## Home Assistant configuration
|
|
71
|
-
|
|
72
|
-
The configuration shown below creates a few components in Home Assistant
|
|
73
|
-
|
|
74
|
-
* Media Player
|
|
75
|
-
* MQTT sensor listening on topic `dbus2mqtt/org.mpris.MediaPlayer2/state`
|
|
76
|
-
|
|
77
|
-
```yaml+jinja
|
|
78
1
|
mqtt:
|
|
79
2
|
sensor:
|
|
80
3
|
- name: MPRIS Media Player
|
|
@@ -198,4 +121,3 @@ media_player:
|
|
|
198
121
|
topic: dbus2mqtt/org.mpris.MediaPlayer2/command
|
|
199
122
|
payload: >
|
|
200
123
|
{"property": "Volume", "value": {{ [0, (state_attr('sensor.mpris_media_player', 'Volume') - 0.1)] | max }} }
|
|
201
|
-
```
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
hide:
|
|
3
|
+
- toc
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Mediaplayer integration with Home Assistant
|
|
7
|
+
|
|
8
|
+
With dbus2mqtt as a bridge between MPRIS players and Home Assistant, it becomes possible to control Linux based media players via Home Assistant.
|
|
9
|
+
|
|
10
|
+
The Media Player Remote Interfacing Specification (MPRIS) is a standard for controlling Linux media players. It provides a mechanism for compliant media players discovery, basic playback and media player state control as well as a tracklist interface which is used to add context to the current item.
|
|
11
|
+
|
|
12
|
+
Pre-requisites:
|
|
13
|
+
|
|
14
|
+
* Home-Assistant with a working MQTT setup
|
|
15
|
+
* The community Home-Assistant plugin [github.com/Sennevds/media_player.template](https://github.com/Sennevds/media_player.template)
|
|
16
|
+
|
|
17
|
+
## Features
|
|
18
|
+
|
|
19
|
+
* dbus subscription using `org.mpris.MediaPlayer2.*` wildcard to support multiple concurrent MRPIS players
|
|
20
|
+
* Every 5 seconds, the state of the `first` known MPRIS player is published to MQTT topic `dbus2mqtt/org.mpris.MediaPlayer2/state`
|
|
21
|
+
* Every MPRIS property update immediately publishes the state to MQTT topic `dbus2mqtt/org.mpris.MediaPlayer2/state`
|
|
22
|
+
* Support for player commands (see below)
|
|
23
|
+
|
|
24
|
+
## Setup activities
|
|
25
|
+
|
|
26
|
+
* Configure the MQTT Sensor and player configuration in Home Assistant with the configuration listed below
|
|
27
|
+
* Config dbus2mqtt using the supplied [home_assistant_media_player.yaml](https://github.com/jwnmulder/dbus2mqtt/blob/main/docs/examples/home_assistant_media_player.yaml)
|
|
28
|
+
|
|
29
|
+
To run, execute the following commands
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
dbus2mqtt --config docs/examples/home_assistant_media_player.yaml
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Tested configurations
|
|
36
|
+
|
|
37
|
+
The following MPRIS players are known to work with Home Assistant.
|
|
38
|
+
|
|
39
|
+
| Application | Play<br />Pause<br /> | Stop | Next<br />Previous | Seek<br />SetPosition | Volume | Quit | Media Info | Media Image | Notes |
|
|
40
|
+
|--------------|-----------------------|------|--------------------|------|--------|------|------------|-------------|-------------------|
|
|
41
|
+
| `Firefox` | ✅ | ✅ | ✅ | ✅ | | ❌ | ✅ | ✅ | |
|
|
42
|
+
| `VLC` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | |
|
|
43
|
+
| `Chromium` | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✔️ | Images not working when Chromium is running as snap |
|
|
44
|
+
| `Kodi` | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | Requires Kodi plugin [MediaPlayerRemoteInterface](https://github.com/wastis/MediaPlayerRemoteInterface) |
|
|
45
|
+
|
|
46
|
+
!!! note
|
|
47
|
+
More players that support MPRIS (but have not been tested) can be found here: <https://wiki.archlinux.org/title/MPRIS>
|
|
48
|
+
|
|
49
|
+
## Player commands
|
|
50
|
+
|
|
51
|
+
The following table lists player commands, their descriptions, and an example JSON payload for invoking them via MQTT.
|
|
52
|
+
|
|
53
|
+
Dbus methods can be invoked by sendig the JSON payload to MQTT topic `dbus2mqtt/org.mpris.MediaPlayer2/command`. Method calls will be done for all matching players. The same applies to property updates.
|
|
54
|
+
|
|
55
|
+
| Method<br />Property | Description | Example MQTT JSON Payload |
|
|
56
|
+
|---------------|------------------------------------------|------------------------------------------------|
|
|
57
|
+
| `Play` | Starts playback | `#!json { "method": "Play" }` |
|
|
58
|
+
| `Pause` | Pauses playback | `#!json { "method": "Pause" }` |
|
|
59
|
+
| `PlayPause` | Toggles between play and pause | `#!json { "method": "PlayPause" }` |
|
|
60
|
+
| `Stop` | Stops playback | `#!json { "method": "Stop" }` |
|
|
61
|
+
| `Next` | Next | `#!json { "method": "Next" }` |
|
|
62
|
+
| `Previous` | Previous | `#!json { "method": "Previous" }` |
|
|
63
|
+
| `Seek` | Seek forward or backward in micro seconds | `#!json { "method": "Seek", "args": [60000000] }` |
|
|
64
|
+
| `Volume` | Set volume (double between 0 and 1) | `#!json { "property": "Volume", "value": 1.0 }` |
|
|
65
|
+
| `SetPosition` | Set / seek to position in micro seconds. First arguments needs to be trackid which can be determined via Metadata.mpris:trackid | `#!json { "method": "SetPosition", "args": ["/org/mpris/MediaPlayer2/firefox", 170692139] }` |
|
|
66
|
+
| `Quit` | Quits the media player | `#!json { "method": "Quit" }` |
|
|
67
|
+
|
|
68
|
+
For an overview of MPRIS commands have a look at <https://mpris2.readthedocs.io/en/latest/interfaces.html#mpris2.MediaPlayer2>
|
|
69
|
+
|
|
70
|
+
## Home Assistant configuration
|
|
71
|
+
|
|
72
|
+
Besides setting up `dbus2mqtt`, Home Assistant needs to be configured as well. The configuration shown below creates the necessary components in Home Assistant for controlling MPRIS Media Players. Three components will be setup.
|
|
73
|
+
|
|
74
|
+
* MQTT sensor listening on topic `dbus2mqtt/org.mpris.MediaPlayer2/state`
|
|
75
|
+
* MQTT image listening on topic `dbus2mqtt/org.mpris.MediaPlayer2/artUrlImage`
|
|
76
|
+
* Media Player
|
|
77
|
+
|
|
78
|
+
```yaml+jinja title='config/packages/mqtt_mediaplayer.yaml'
|
|
79
|
+
--8<-- "docs/examples/home_assistant_media_player/mqtt_mediaplayer.yaml"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Source: [mqtt_mediaplayer.yaml](https://github.com/jwnmulder/dbus2mqtt/blob/main/docs/examples/home_assistant_media_player/mqtt_mediaplayer.yaml)
|
|
@@ -5,8 +5,6 @@ hide:
|
|
|
5
5
|
|
|
6
6
|
# Linux Desktop
|
|
7
7
|
|
|
8
|
-
## Introduction
|
|
9
|
-
|
|
10
8
|
Use dbus2mqtt to interface with your Linux desktop
|
|
11
9
|
|
|
12
10
|
Pre-requisites:
|
|
@@ -29,40 +27,16 @@ uv run dbus2mqtt --config docs/examples/linux_desktop.yaml
|
|
|
29
27
|
|
|
30
28
|
Trigger a desktop notification by sending one of the following example payloads to `dbus2mqtt/Notifications/command`
|
|
31
29
|
|
|
32
|
-
|
|
30
|
+
Example notification with no timeout
|
|
33
31
|
|
|
34
32
|
```json
|
|
35
|
-
|
|
36
|
-
"method": "Notify",
|
|
37
|
-
"args": [
|
|
38
|
-
"dbus2mqtt",
|
|
39
|
-
0,
|
|
40
|
-
"dialog-information",
|
|
41
|
-
"dbus2mqtt",
|
|
42
|
-
"Message from <b><i>dbus2mqtt</i></b>",
|
|
43
|
-
[],
|
|
44
|
-
{},
|
|
45
|
-
0
|
|
46
|
-
]
|
|
47
|
-
}
|
|
33
|
+
--8<-- "docs/examples/linux_desktop/notify.json"
|
|
48
34
|
```
|
|
49
35
|
|
|
50
|
-
|
|
36
|
+
Example notification with actions and hints, that automatically disappears after 5 seconds
|
|
51
37
|
|
|
52
38
|
```json
|
|
53
|
-
|
|
54
|
-
"method": "Notify",
|
|
55
|
-
"args": [
|
|
56
|
-
"dbus2mqtt",
|
|
57
|
-
0,
|
|
58
|
-
"dialog-information",
|
|
59
|
-
"dbus2mqtt",
|
|
60
|
-
"Message from <b><i>dbus2mqtt</i></b>",
|
|
61
|
-
["ok", "OK", "cancel", "Cancel"],
|
|
62
|
-
{ "urgency": 1, "category": "device" },
|
|
63
|
-
5000
|
|
64
|
-
]
|
|
65
|
-
}
|
|
39
|
+
--8<-- "docs/examples/linux_desktop/notify_with_actions_and_hints.json"
|
|
66
40
|
```
|
|
67
41
|
|
|
68
42
|
Further references:
|
|
@@ -70,7 +44,7 @@ Further references:
|
|
|
70
44
|
* <https://specifications.freedesktop.org/notification-spec/1.3/>
|
|
71
45
|
* <https://specifications.freedesktop.org/icon-naming-spec/latest/>
|
|
72
46
|
|
|
73
|
-
## Gnome SessionManager
|
|
47
|
+
<!-- ## Gnome SessionManager
|
|
74
48
|
|
|
75
49
|
!!! note
|
|
76
50
|
work in progress
|
|
@@ -79,4 +53,4 @@ The following table lists the supported commands, their descriptions, and an exa
|
|
|
79
53
|
|
|
80
54
|
dbus methods can be invoked by sendig the JSON payload to MQTT topic `dbus2mqtt/SessionManager/command`.
|
|
81
55
|
|
|
82
|
-
For an overview of commands have a look at <https://docs.flatpak.org/en/latest/portal-api-reference.html>
|
|
56
|
+
For an overview of commands have a look at <https://docs.flatpak.org/en/latest/portal-api-reference.html> -->
|
|
@@ -81,16 +81,13 @@ When triggered, the following context parameters are available
|
|
|
81
81
|
filter: "{{ payload.get('action') == 'Mute' }}"
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
-
Listens for MQTT
|
|
84
|
+
Listens for MQTT messages on the configured topic. The message payload is expected to be JSON formatted
|
|
85
85
|
|
|
86
86
|
| key | description |
|
|
87
87
|
|------|-------------|
|
|
88
88
|
| topic | topic to subscribe to, e.g. 'dbus2mqtt/org.mpris.MediaPlayer2/flow-trigger' |
|
|
89
89
|
| filter | A templated string that must evaluate to a boolean result. When False, the flow is not triggered |
|
|
90
90
|
|
|
91
|
-
!!! note
|
|
92
|
-
If `topic` overlaps with `subscription[].interfaces[].mqtt_command_topic` and the JSON payload structure follows `mqtt_command_topic` layout, a dbus call will be executed as well.
|
|
93
|
-
|
|
94
91
|
When triggered, the following context parameters are available
|
|
95
92
|
|
|
96
93
|
| name | type | description |
|
|
@@ -112,3 +109,6 @@ flows:
|
|
|
112
109
|
msg: |
|
|
113
110
|
Flow triggered by MQTT message, payload.action={{ payload.get('action') }}
|
|
114
111
|
```
|
|
112
|
+
|
|
113
|
+
!!! note
|
|
114
|
+
If `topic` overlaps with `subscription[].interfaces[].mqtt_command_topic` and the JSON payload structure follows `mqtt_command_topic` layout, a dbus call will be executed as well. Similar, warnings will be logged if a message does not match any flow or D-Bus method.
|
|
@@ -34,6 +34,7 @@ classifiers = [
|
|
|
34
34
|
"Programming Language :: Python :: 3.11",
|
|
35
35
|
"Programming Language :: Python :: 3.12",
|
|
36
36
|
"Programming Language :: Python :: 3.13",
|
|
37
|
+
"Programming Language :: Python :: 3.14",
|
|
37
38
|
]
|
|
38
39
|
|
|
39
40
|
requires-python = ">=3.10"
|
|
@@ -47,7 +48,6 @@ dependencies = [
|
|
|
47
48
|
"jinja2-ansible-filters>=1.3.2",
|
|
48
49
|
"jsonargparse>=4.38.0",
|
|
49
50
|
"paho-mqtt>=2.1.0",
|
|
50
|
-
"pydantic>=2.11.3",
|
|
51
51
|
"python-dotenv>=1.1.0",
|
|
52
52
|
"pyyaml>=6.0.2",
|
|
53
53
|
]
|
|
@@ -3,9 +3,9 @@ import uuid
|
|
|
3
3
|
import warnings
|
|
4
4
|
|
|
5
5
|
from dataclasses import dataclass, field
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import Any, Literal
|
|
7
7
|
|
|
8
|
-
from
|
|
8
|
+
from jsonargparse.typing import SecretStr
|
|
9
9
|
|
|
10
10
|
from dbus2mqtt.template.templating import TemplateEngine
|
|
11
11
|
|
|
@@ -98,10 +98,15 @@ class FlowTriggerMqttMessageConfig:
|
|
|
98
98
|
return template_engine.render_template(self.filter, bool, trigger_context)
|
|
99
99
|
return True
|
|
100
100
|
|
|
101
|
-
FlowTriggerConfig =
|
|
102
|
-
FlowTriggerScheduleConfig
|
|
103
|
-
|
|
104
|
-
|
|
101
|
+
FlowTriggerConfig = (
|
|
102
|
+
FlowTriggerScheduleConfig
|
|
103
|
+
| FlowTriggerDbusSignalConfig
|
|
104
|
+
| FlowTriggerBusNameAddedConfig
|
|
105
|
+
| FlowTriggerBusNameRemovedConfig
|
|
106
|
+
| FlowTriggerObjectAddedConfig
|
|
107
|
+
| FlowTriggerObjectRemovedConfig
|
|
108
|
+
| FlowTriggerMqttMessageConfig
|
|
109
|
+
)
|
|
105
110
|
|
|
106
111
|
@dataclass
|
|
107
112
|
class FlowActionContextSetConfig:
|
|
@@ -124,10 +129,11 @@ class FlowActionLogConfig:
|
|
|
124
129
|
type: Literal["log"] = "log"
|
|
125
130
|
level: Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] = "INFO"
|
|
126
131
|
|
|
127
|
-
FlowActionConfig =
|
|
128
|
-
FlowActionMqttPublishConfig
|
|
129
|
-
|
|
130
|
-
|
|
132
|
+
FlowActionConfig = (
|
|
133
|
+
FlowActionMqttPublishConfig
|
|
134
|
+
| FlowActionContextSetConfig
|
|
135
|
+
| FlowActionLogConfig
|
|
136
|
+
)
|
|
131
137
|
|
|
132
138
|
@dataclass
|
|
133
139
|
class FlowConfig:
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
import jsonargparse
|
|
4
|
+
|
|
5
|
+
from yaml import YAMLError
|
|
6
|
+
|
|
7
|
+
default_yaml_loader = jsonargparse.get_loader("yaml")
|
|
8
|
+
def _custom_yaml_load(stream: str) -> Any:
|
|
9
|
+
|
|
10
|
+
v = stream.strip()
|
|
11
|
+
|
|
12
|
+
# jsonargparse tries to parse yaml 1.1 boolean like values
|
|
13
|
+
# Without this, str:"{'PlaybackStatus': 'Off'}" would become dict:{'PlaybackStatus': False}
|
|
14
|
+
if v in ['on', 'On', 'off', 'Off', 'TRUE', 'FALSE', 'True', 'False']:
|
|
15
|
+
return stream
|
|
16
|
+
|
|
17
|
+
# Delegate to default yaml loader from jsonargparse
|
|
18
|
+
return default_yaml_loader(stream)
|
|
19
|
+
|
|
20
|
+
def new_argument_parser() -> jsonargparse.ArgumentParser:
|
|
21
|
+
|
|
22
|
+
# register out custom yaml loader for jsonargparse
|
|
23
|
+
jsonargparse.set_loader(
|
|
24
|
+
mode="yaml_custom",
|
|
25
|
+
loader_fn=_custom_yaml_load,
|
|
26
|
+
exceptions=(YAMLError,),
|
|
27
|
+
json_superset=True
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
# unless specified otherwise, load config from config.yaml
|
|
31
|
+
parser = jsonargparse.ArgumentParser(
|
|
32
|
+
default_config_files=["config.yaml"],
|
|
33
|
+
default_env=True,
|
|
34
|
+
env_prefix=False,
|
|
35
|
+
parser_mode="yaml_custom"
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
return parser
|
|
@@ -2,15 +2,6 @@ version = 1
|
|
|
2
2
|
revision = 2
|
|
3
3
|
requires-python = ">=3.10"
|
|
4
4
|
|
|
5
|
-
[[package]]
|
|
6
|
-
name = "annotated-types"
|
|
7
|
-
version = "0.7.0"
|
|
8
|
-
source = { registry = "https://pypi.org/simple" }
|
|
9
|
-
sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" }
|
|
10
|
-
wheels = [
|
|
11
|
-
{ url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" },
|
|
12
|
-
]
|
|
13
|
-
|
|
14
5
|
[[package]]
|
|
15
6
|
name = "apscheduler"
|
|
16
7
|
version = "3.11.0"
|
|
@@ -223,7 +214,6 @@ dependencies = [
|
|
|
223
214
|
{ name = "jinja2-ansible-filters" },
|
|
224
215
|
{ name = "jsonargparse" },
|
|
225
216
|
{ name = "paho-mqtt" },
|
|
226
|
-
{ name = "pydantic" },
|
|
227
217
|
{ name = "python-dotenv" },
|
|
228
218
|
{ name = "pyyaml" },
|
|
229
219
|
]
|
|
@@ -254,7 +244,6 @@ requires-dist = [
|
|
|
254
244
|
{ name = "jinja2-ansible-filters", specifier = ">=1.3.2" },
|
|
255
245
|
{ name = "jsonargparse", specifier = ">=4.38.0" },
|
|
256
246
|
{ name = "paho-mqtt", specifier = ">=2.1.0" },
|
|
257
|
-
{ name = "pydantic", specifier = ">=2.11.3" },
|
|
258
247
|
{ name = "python-dotenv", specifier = ">=1.1.0" },
|
|
259
248
|
{ name = "pyyaml", specifier = ">=6.0.2" },
|
|
260
249
|
]
|
|
@@ -690,108 +679,6 @@ wheels = [
|
|
|
690
679
|
{ url = "https://files.pythonhosted.org/packages/7b/d7/7831438e6c3ebbfa6e01a927127a6cb42ad3ab844247f3c5b96bea25d73d/psutil-6.1.1-cp37-abi3-win_amd64.whl", hash = "sha256:f35cfccb065fff93529d2afb4a2e89e363fe63ca1e4a5da22b603a85833c2649", size = 254444, upload-time = "2024-12-19T18:22:11.335Z" },
|
|
691
680
|
]
|
|
692
681
|
|
|
693
|
-
[[package]]
|
|
694
|
-
name = "pydantic"
|
|
695
|
-
version = "2.11.7"
|
|
696
|
-
source = { registry = "https://pypi.org/simple" }
|
|
697
|
-
dependencies = [
|
|
698
|
-
{ name = "annotated-types" },
|
|
699
|
-
{ name = "pydantic-core" },
|
|
700
|
-
{ name = "typing-extensions" },
|
|
701
|
-
{ name = "typing-inspection" },
|
|
702
|
-
]
|
|
703
|
-
sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload-time = "2025-06-14T08:33:17.137Z" }
|
|
704
|
-
wheels = [
|
|
705
|
-
{ url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload-time = "2025-06-14T08:33:14.905Z" },
|
|
706
|
-
]
|
|
707
|
-
|
|
708
|
-
[[package]]
|
|
709
|
-
name = "pydantic-core"
|
|
710
|
-
version = "2.33.2"
|
|
711
|
-
source = { registry = "https://pypi.org/simple" }
|
|
712
|
-
dependencies = [
|
|
713
|
-
{ name = "typing-extensions" },
|
|
714
|
-
]
|
|
715
|
-
sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" }
|
|
716
|
-
wheels = [
|
|
717
|
-
{ url = "https://files.pythonhosted.org/packages/e5/92/b31726561b5dae176c2d2c2dc43a9c5bfba5d32f96f8b4c0a600dd492447/pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8", size = 2028817, upload-time = "2025-04-23T18:30:43.919Z" },
|
|
718
|
-
{ url = "https://files.pythonhosted.org/packages/a3/44/3f0b95fafdaca04a483c4e685fe437c6891001bf3ce8b2fded82b9ea3aa1/pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d", size = 1861357, upload-time = "2025-04-23T18:30:46.372Z" },
|
|
719
|
-
{ url = "https://files.pythonhosted.org/packages/30/97/e8f13b55766234caae05372826e8e4b3b96e7b248be3157f53237682e43c/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d", size = 1898011, upload-time = "2025-04-23T18:30:47.591Z" },
|
|
720
|
-
{ url = "https://files.pythonhosted.org/packages/9b/a3/99c48cf7bafc991cc3ee66fd544c0aae8dc907b752f1dad2d79b1b5a471f/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572", size = 1982730, upload-time = "2025-04-23T18:30:49.328Z" },
|
|
721
|
-
{ url = "https://files.pythonhosted.org/packages/de/8e/a5b882ec4307010a840fb8b58bd9bf65d1840c92eae7534c7441709bf54b/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02", size = 2136178, upload-time = "2025-04-23T18:30:50.907Z" },
|
|
722
|
-
{ url = "https://files.pythonhosted.org/packages/e4/bb/71e35fc3ed05af6834e890edb75968e2802fe98778971ab5cba20a162315/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b", size = 2736462, upload-time = "2025-04-23T18:30:52.083Z" },
|
|
723
|
-
{ url = "https://files.pythonhosted.org/packages/31/0d/c8f7593e6bc7066289bbc366f2235701dcbebcd1ff0ef8e64f6f239fb47d/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2", size = 2005652, upload-time = "2025-04-23T18:30:53.389Z" },
|
|
724
|
-
{ url = "https://files.pythonhosted.org/packages/d2/7a/996d8bd75f3eda405e3dd219ff5ff0a283cd8e34add39d8ef9157e722867/pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a", size = 2113306, upload-time = "2025-04-23T18:30:54.661Z" },
|
|
725
|
-
{ url = "https://files.pythonhosted.org/packages/ff/84/daf2a6fb2db40ffda6578a7e8c5a6e9c8affb251a05c233ae37098118788/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac", size = 2073720, upload-time = "2025-04-23T18:30:56.11Z" },
|
|
726
|
-
{ url = "https://files.pythonhosted.org/packages/77/fb/2258da019f4825128445ae79456a5499c032b55849dbd5bed78c95ccf163/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a", size = 2244915, upload-time = "2025-04-23T18:30:57.501Z" },
|
|
727
|
-
{ url = "https://files.pythonhosted.org/packages/d8/7a/925ff73756031289468326e355b6fa8316960d0d65f8b5d6b3a3e7866de7/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b", size = 2241884, upload-time = "2025-04-23T18:30:58.867Z" },
|
|
728
|
-
{ url = "https://files.pythonhosted.org/packages/0b/b0/249ee6d2646f1cdadcb813805fe76265745c4010cf20a8eba7b0e639d9b2/pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22", size = 1910496, upload-time = "2025-04-23T18:31:00.078Z" },
|
|
729
|
-
{ url = "https://files.pythonhosted.org/packages/66/ff/172ba8f12a42d4b552917aa65d1f2328990d3ccfc01d5b7c943ec084299f/pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640", size = 1955019, upload-time = "2025-04-23T18:31:01.335Z" },
|
|
730
|
-
{ url = "https://files.pythonhosted.org/packages/3f/8d/71db63483d518cbbf290261a1fc2839d17ff89fce7089e08cad07ccfce67/pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7", size = 2028584, upload-time = "2025-04-23T18:31:03.106Z" },
|
|
731
|
-
{ url = "https://files.pythonhosted.org/packages/24/2f/3cfa7244ae292dd850989f328722d2aef313f74ffc471184dc509e1e4e5a/pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246", size = 1855071, upload-time = "2025-04-23T18:31:04.621Z" },
|
|
732
|
-
{ url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823, upload-time = "2025-04-23T18:31:06.377Z" },
|
|
733
|
-
{ url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792, upload-time = "2025-04-23T18:31:07.93Z" },
|
|
734
|
-
{ url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338, upload-time = "2025-04-23T18:31:09.283Z" },
|
|
735
|
-
{ url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998, upload-time = "2025-04-23T18:31:11.7Z" },
|
|
736
|
-
{ url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200, upload-time = "2025-04-23T18:31:13.536Z" },
|
|
737
|
-
{ url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890, upload-time = "2025-04-23T18:31:15.011Z" },
|
|
738
|
-
{ url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359, upload-time = "2025-04-23T18:31:16.393Z" },
|
|
739
|
-
{ url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883, upload-time = "2025-04-23T18:31:17.892Z" },
|
|
740
|
-
{ url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074, upload-time = "2025-04-23T18:31:19.205Z" },
|
|
741
|
-
{ url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538, upload-time = "2025-04-23T18:31:20.541Z" },
|
|
742
|
-
{ url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909, upload-time = "2025-04-23T18:31:22.371Z" },
|
|
743
|
-
{ url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786, upload-time = "2025-04-23T18:31:24.161Z" },
|
|
744
|
-
{ url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload-time = "2025-04-23T18:31:25.863Z" },
|
|
745
|
-
{ url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload-time = "2025-04-23T18:31:27.341Z" },
|
|
746
|
-
{ url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload-time = "2025-04-23T18:31:28.956Z" },
|
|
747
|
-
{ url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload-time = "2025-04-23T18:31:31.025Z" },
|
|
748
|
-
{ url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload-time = "2025-04-23T18:31:32.514Z" },
|
|
749
|
-
{ url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload-time = "2025-04-23T18:31:33.958Z" },
|
|
750
|
-
{ url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload-time = "2025-04-23T18:31:39.095Z" },
|
|
751
|
-
{ url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload-time = "2025-04-23T18:31:41.034Z" },
|
|
752
|
-
{ url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload-time = "2025-04-23T18:31:42.757Z" },
|
|
753
|
-
{ url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload-time = "2025-04-23T18:31:44.304Z" },
|
|
754
|
-
{ url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload-time = "2025-04-23T18:31:45.891Z" },
|
|
755
|
-
{ url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload-time = "2025-04-23T18:31:47.819Z" },
|
|
756
|
-
{ url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload-time = "2025-04-23T18:31:49.635Z" },
|
|
757
|
-
{ url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload-time = "2025-04-23T18:31:51.609Z" },
|
|
758
|
-
{ url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload-time = "2025-04-23T18:31:53.175Z" },
|
|
759
|
-
{ url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload-time = "2025-04-23T18:31:54.79Z" },
|
|
760
|
-
{ url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload-time = "2025-04-23T18:31:57.393Z" },
|
|
761
|
-
{ url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload-time = "2025-04-23T18:31:59.065Z" },
|
|
762
|
-
{ url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload-time = "2025-04-23T18:32:00.78Z" },
|
|
763
|
-
{ url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload-time = "2025-04-23T18:32:02.418Z" },
|
|
764
|
-
{ url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload-time = "2025-04-23T18:32:04.152Z" },
|
|
765
|
-
{ url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload-time = "2025-04-23T18:32:06.129Z" },
|
|
766
|
-
{ url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload-time = "2025-04-23T18:32:08.178Z" },
|
|
767
|
-
{ url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload-time = "2025-04-23T18:32:10.242Z" },
|
|
768
|
-
{ url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload-time = "2025-04-23T18:32:12.382Z" },
|
|
769
|
-
{ url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload-time = "2025-04-23T18:32:14.034Z" },
|
|
770
|
-
{ url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload-time = "2025-04-23T18:32:15.783Z" },
|
|
771
|
-
{ url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload-time = "2025-04-23T18:32:18.473Z" },
|
|
772
|
-
{ url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload-time = "2025-04-23T18:32:20.188Z" },
|
|
773
|
-
{ url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload-time = "2025-04-23T18:32:22.354Z" },
|
|
774
|
-
{ url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload-time = "2025-04-23T18:32:25.088Z" },
|
|
775
|
-
{ url = "https://files.pythonhosted.org/packages/30/68/373d55e58b7e83ce371691f6eaa7175e3a24b956c44628eb25d7da007917/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa", size = 2023982, upload-time = "2025-04-23T18:32:53.14Z" },
|
|
776
|
-
{ url = "https://files.pythonhosted.org/packages/a4/16/145f54ac08c96a63d8ed6442f9dec17b2773d19920b627b18d4f10a061ea/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29", size = 1858412, upload-time = "2025-04-23T18:32:55.52Z" },
|
|
777
|
-
{ url = "https://files.pythonhosted.org/packages/41/b1/c6dc6c3e2de4516c0bb2c46f6a373b91b5660312342a0cf5826e38ad82fa/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d", size = 1892749, upload-time = "2025-04-23T18:32:57.546Z" },
|
|
778
|
-
{ url = "https://files.pythonhosted.org/packages/12/73/8cd57e20afba760b21b742106f9dbdfa6697f1570b189c7457a1af4cd8a0/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e", size = 2067527, upload-time = "2025-04-23T18:32:59.771Z" },
|
|
779
|
-
{ url = "https://files.pythonhosted.org/packages/e3/d5/0bb5d988cc019b3cba4a78f2d4b3854427fc47ee8ec8e9eaabf787da239c/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c", size = 2108225, upload-time = "2025-04-23T18:33:04.51Z" },
|
|
780
|
-
{ url = "https://files.pythonhosted.org/packages/f1/c5/00c02d1571913d496aabf146106ad8239dc132485ee22efe08085084ff7c/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec", size = 2069490, upload-time = "2025-04-23T18:33:06.391Z" },
|
|
781
|
-
{ url = "https://files.pythonhosted.org/packages/22/a8/dccc38768274d3ed3a59b5d06f59ccb845778687652daa71df0cab4040d7/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052", size = 2237525, upload-time = "2025-04-23T18:33:08.44Z" },
|
|
782
|
-
{ url = "https://files.pythonhosted.org/packages/d4/e7/4f98c0b125dda7cf7ccd14ba936218397b44f50a56dd8c16a3091df116c3/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c", size = 2238446, upload-time = "2025-04-23T18:33:10.313Z" },
|
|
783
|
-
{ url = "https://files.pythonhosted.org/packages/ce/91/2ec36480fdb0b783cd9ef6795753c1dea13882f2e68e73bce76ae8c21e6a/pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808", size = 2066678, upload-time = "2025-04-23T18:33:12.224Z" },
|
|
784
|
-
{ url = "https://files.pythonhosted.org/packages/7b/27/d4ae6487d73948d6f20dddcd94be4ea43e74349b56eba82e9bdee2d7494c/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8", size = 2025200, upload-time = "2025-04-23T18:33:14.199Z" },
|
|
785
|
-
{ url = "https://files.pythonhosted.org/packages/f1/b8/b3cb95375f05d33801024079b9392a5ab45267a63400bf1866e7ce0f0de4/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593", size = 1859123, upload-time = "2025-04-23T18:33:16.555Z" },
|
|
786
|
-
{ url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852, upload-time = "2025-04-23T18:33:18.513Z" },
|
|
787
|
-
{ url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484, upload-time = "2025-04-23T18:33:20.475Z" },
|
|
788
|
-
{ url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896, upload-time = "2025-04-23T18:33:22.501Z" },
|
|
789
|
-
{ url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475, upload-time = "2025-04-23T18:33:24.528Z" },
|
|
790
|
-
{ url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013, upload-time = "2025-04-23T18:33:26.621Z" },
|
|
791
|
-
{ url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715, upload-time = "2025-04-23T18:33:28.656Z" },
|
|
792
|
-
{ url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" },
|
|
793
|
-
]
|
|
794
|
-
|
|
795
682
|
[[package]]
|
|
796
683
|
name = "pygments"
|
|
797
684
|
version = "2.19.2"
|
|
@@ -1069,18 +956,6 @@ wheels = [
|
|
|
1069
956
|
{ url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" },
|
|
1070
957
|
]
|
|
1071
958
|
|
|
1072
|
-
[[package]]
|
|
1073
|
-
name = "typing-inspection"
|
|
1074
|
-
version = "0.4.1"
|
|
1075
|
-
source = { registry = "https://pypi.org/simple" }
|
|
1076
|
-
dependencies = [
|
|
1077
|
-
{ name = "typing-extensions" },
|
|
1078
|
-
]
|
|
1079
|
-
sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload-time = "2025-05-21T18:55:23.885Z" }
|
|
1080
|
-
wheels = [
|
|
1081
|
-
{ url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload-time = "2025-05-21T18:55:22.152Z" },
|
|
1082
|
-
]
|
|
1083
|
-
|
|
1084
959
|
[[package]]
|
|
1085
960
|
name = "tzdata"
|
|
1086
961
|
version = "2025.2"
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import jsonargparse
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
def _custom_yaml_load(stream):
|
|
5
|
-
if isinstance(stream, str):
|
|
6
|
-
v = stream.strip()
|
|
7
|
-
|
|
8
|
-
# jsonargparse tries to parse yaml 1.1 boolean like values
|
|
9
|
-
# Without this, str:"{'PlaybackStatus': 'Off'}" would become dict:{'PlaybackStatus': False}
|
|
10
|
-
if v in ['on', 'On', 'off', 'Off', 'TRUE', 'FALSE', 'True', 'False']:
|
|
11
|
-
return stream
|
|
12
|
-
|
|
13
|
-
# Anoyingly, values starting with {{ and ending with }} are working with the default yaml_loader
|
|
14
|
-
# from jsonargparse. Somehow its not when we use the custom yaml loader.
|
|
15
|
-
# This fixes it
|
|
16
|
-
first_line = v.splitlines()[0].strip()
|
|
17
|
-
if "#" not in first_line and ("{{" in first_line or first_line.startswith("{%")):
|
|
18
|
-
return stream
|
|
19
|
-
|
|
20
|
-
# Delegate to default yaml loader from jsonargparse
|
|
21
|
-
yaml_loader = jsonargparse.get_loader("yaml")
|
|
22
|
-
return yaml_loader(stream)
|
|
23
|
-
|
|
24
|
-
def new_argument_parser() -> jsonargparse.ArgumentParser:
|
|
25
|
-
|
|
26
|
-
# register out custom yaml loader for jsonargparse
|
|
27
|
-
jsonargparse.set_loader("yaml_custom", _custom_yaml_load)
|
|
28
|
-
|
|
29
|
-
# unless specified otherwise, load config from config.yaml
|
|
30
|
-
parser = jsonargparse.ArgumentParser(default_config_files=["config.yaml"], default_env=True, env_prefix=False, parser_mode="yaml_custom")
|
|
31
|
-
|
|
32
|
-
return parser
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/src/dbus2mqtt/dbus/introspection_patches/mpris_playerctl.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dbus2mqtt-0.5.0 → dbus2mqtt-0.5.1}/tests/config/fixtures/payload_template_jinja_expressions.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|