Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

python312Packages.{mss,pyvirtualdisplay}: modernize, enable tests on linux #351482

Merged
merged 2 commits into from
Oct 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 43 additions & 7 deletions pkgs/development/python-modules/mss/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,28 @@
buildPythonPackage,
fetchPypi,
pythonOlder,
stdenv,
substituteAll,

# build-system
hatchling,

# native dependencies
xorg,

# tests
lsof,
pillow,
pytest-cov-stub,
pytest,
pyvirtualdisplay,
xvfb-run,
}:

buildPythonPackage rec {
pname = "mss";
version = "9.0.2";
format = "setuptools";
pyproject = true;

disabled = pythonOlder "3.6";

Expand All @@ -17,13 +33,33 @@ buildPythonPackage rec {
hash = "sha256-yWpOxzIk2n2yK8B+88+qGPi4aQDRhy4pETu87wCToh4=";
};

prePatch = ''
# By default it attempts to build Windows-only functionality
rm src/mss/windows.py
'';
patches = lib.optionals stdenv.isLinux [
(substituteAll {
src = ./linux-paths.patch;
x11 = "${xorg.libX11}/lib/libX11.so";
xfixes = "${xorg.libXfixes}/lib/libXfixes.so";
xrandr = "${xorg.libXrandr}/lib/libXrandr.so";
})
];

# Skipping tests due to most relying on DISPLAY being set
doCheck = false;
build-system = [ hatchling ];

doCheck = stdenv.isLinux;

nativeCheckInputs = [
lsof
pillow
pytest-cov-stub
pytest
pyvirtualdisplay
xvfb-run
];

checkPhase = ''
runHook preCheck
xvfb-run pytest -k "not test_grab_with_tuple and not test_grab_with_tuple_percents and not test_resource_leaks"
runHook postCheck
'';

pythonImportsCheck = [ "mss" ];

Expand Down
17 changes: 17 additions & 0 deletions pkgs/development/python-modules/mss/linux-paths.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
diff --git a/src/mss/linux.py b/src/mss/linux.py
index 6dac52b..c90bd93 100644
--- a/src/mss/linux.py
+++ b/src/mss/linux.py
@@ -185,9 +185,9 @@ class XWindowAttributes(Structure):


_ERROR = {}
-_X11 = find_library("X11")
-_XFIXES = find_library("Xfixes")
-_XRANDR = find_library("Xrandr")
+_X11 = "@x11@"
+_XFIXES = "@xfixes@"
+_XRANDR = "@xrandr@"


@CFUNCTYPE(c_int, POINTER(Display), POINTER(XErrorEvent))
44 changes: 39 additions & 5 deletions pkgs/development/python-modules/pyvirtualdisplay/default.nix
Original file line number Diff line number Diff line change
@@ -1,25 +1,59 @@
{
lib,
stdenv,
buildPythonPackage,
fetchPypi,
substituteAll,
xorg,

# build-system
setuptools,

# tests
easyprocess,
entrypoint2,
pillow,
psutil,
pytest-xdist,
pytestCheckHook,
vncdo,
}:

buildPythonPackage rec {
pname = "pyvirtualdisplay";
version = "3.0";
format = "setuptools";

propagatedBuildInputs = [ easyprocess ];
pyproject = true;

src = fetchPypi {
pname = "PyVirtualDisplay";
inherit version;
hash = "sha256-CXVbw86263JfsH7KVCX0PyNY078I4A0qm3kqGu3RYVk=";
};

# requires X server
doCheck = false;
patches = lib.optionals stdenv.isLinux [
(substituteAll {
src = ./paths.patch;
xauth = lib.getExe xorg.xauth;
xdpyinfo = lib.getExe xorg.xdpyinfo;
})
];

build-system = [ setuptools ];

doCheck = stdenv.isLinux;

nativeCheckInputs = [
easyprocess
entrypoint2
pillow
psutil
pytest-xdist
pytestCheckHook
(vncdo.overridePythonAttrs { doCheck = false; })
xorg.xorgserver
xorg.xmessage
xorg.xvfb
];

meta = with lib; {
description = "Python wrapper for Xvfb, Xephyr and Xvnc";
Expand Down
35 changes: 35 additions & 0 deletions pkgs/development/python-modules/pyvirtualdisplay/paths.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
diff --git a/pyvirtualdisplay/abstractdisplay.py b/pyvirtualdisplay/abstractdisplay.py
index dd93943..c694209 100644
--- a/pyvirtualdisplay/abstractdisplay.py
+++ b/pyvirtualdisplay/abstractdisplay.py
@@ -242,7 +242,7 @@ class AbstractDisplay(object):

try:
xdpyinfo = subprocess.Popen(
- ["xdpyinfo"],
+ ["@xdpyinfo@"],
env=self._env(),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
diff --git a/pyvirtualdisplay/xauth.py b/pyvirtualdisplay/xauth.py
index ce0f804..7734e21 100644
--- a/pyvirtualdisplay/xauth.py
+++ b/pyvirtualdisplay/xauth.py
@@ -14,7 +14,7 @@ def is_installed():
"""
try:
xauth = subprocess.Popen(
- ["xauth", "-V"],
+ ["@xauth@", "-V"],
# env=self._env(),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
@@ -43,7 +43,7 @@ def call(*args):
Call xauth with the given args.
"""
xauth = subprocess.Popen(
- ["xauth"] + list(args),
+ ["@xauth@"] + list(args),
# env=self._env(),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,