Fix install packages using pip (#1169)
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Sat, 23 Mar 2024 23:23:44 +0000 (00:23 +0100)
committerGitHub <noreply@github.com>
Sat, 23 Mar 2024 23:23:44 +0000 (00:23 +0100)
* Fix install packages using pip

* switch opensubsonic to pinned version

music_assistant/server/helpers/process.py
music_assistant/server/helpers/util.py
music_assistant/server/providers/opensubsonic/manifest.json
requirements_all.txt

index fba1d4773d5f0e8d50e223c49ce0e467e89a2dec..1dfc043d076076093f4cc19f413121f490de6529 100644 (file)
@@ -235,12 +235,19 @@ class AsyncProcess:
             task.cancel()
 
 
-async def check_output(shell_cmd: str) -> tuple[int, bytes]:
-    """Run shell subprocess and return output."""
-    proc = await asyncio.create_subprocess_shell(
-        shell_cmd,
-        stderr=asyncio.subprocess.STDOUT,
-        stdout=asyncio.subprocess.PIPE,
-    )
+async def check_output(args: str | list[str]) -> tuple[int, bytes]:
+    """Run subprocess and return output."""
+    if isinstance(args, str):
+        proc = await asyncio.create_subprocess_shell(
+            args,
+            stderr=asyncio.subprocess.STDOUT,
+            stdout=asyncio.subprocess.PIPE,
+        )
+    else:
+        proc = await asyncio.create_subprocess_exec(
+            *args,
+            stderr=asyncio.subprocess.STDOUT,
+            stdout=asyncio.subprocess.PIPE,
+        )
     stdout, _ = await proc.communicate()
     return (proc.returncode, stdout)
index 2236936ce532ff32d83b797e1ddee08a395841b8..c59219c7bd79184282832ec5ad48d1124a436df1 100644 (file)
@@ -18,6 +18,8 @@ from typing import TYPE_CHECKING
 import ifaddr
 import memory_tempfile
 
+from music_assistant.server.helpers.process import check_output
+
 if TYPE_CHECKING:
     from collections.abc import Iterator
 
@@ -31,15 +33,11 @@ HA_WHEELS = "https://wheels.home-assistant.io/musllinux/"
 async def install_package(package: str) -> None:
     """Install package with pip, raise when install failed."""
     LOGGER.debug("Installing python package %s", package)
-    cmd = f"python3 -m pip install --find-links {HA_WHEELS} {package}"
-    proc = await asyncio.create_subprocess_shell(
-        cmd, stderr=asyncio.subprocess.STDOUT, stdout=asyncio.subprocess.PIPE
-    )
-
-    stdout, _ = await proc.communicate()
+    args = ["python3", "-m", "pip", "install", "--find-links", HA_WHEELS, package]
+    return_code, output = await check_output(args)
 
-    if proc.returncode != 0:
-        msg = f"Failed to install package {package}\n{stdout.decode()}"
+    if return_code != 0:
+        msg = f"Failed to install package {package}\n{output.decode()}"
         raise RuntimeError(msg)
 
 
index 51950ed5d7325c0d8e742adf603c9bf687b63e9b..a0df00837bb56efdce995564782dcbdec5c0a7cd 100644 (file)
@@ -3,8 +3,12 @@
   "domain": "opensubsonic",
   "name": "Open Subsonic Media Server Library",
   "description": "Support for Open Subsonic based streaming providers in Music Assistant.",
-  "codeowners": ["@khers"],
-  "requirements": ["py-opensonic>=5.0.5"],
+  "codeowners": [
+    "@khers"
+  ],
+  "requirements": [
+    "py-opensonic==5.0.5"
+  ],
   "documentation": "https://music-assistant.io/music-providers/subsonic/",
   "multi_instance": true
 }
index bcd67adb21472108efe30463815b74420eb450d3..dac9414176d735903929189fc0a6ed96aab13506 100644 (file)
@@ -24,7 +24,7 @@ music-assistant-frontend==2.3.3
 orjson==3.9.15
 pillow==10.2.0
 plexapi==4.15.10
-py-opensonic>=5.0.5
+py-opensonic==5.0.5
 pyatv==0.14.5
 PyChromecast==14.0.1
 pycryptodome==3.20.0