From 36b7e89f199a81026caf98a1cabc4940d57cde9e Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Thu, 8 Oct 2020 12:20:06 +0300 Subject: [PATCH] python3.pkgs.androguard: rewrite Add an optional withGui flag to turn off gui as most of the time it's not needed since this is a python library. Use a GitHub tarball to optionally enable tests, currently disabled by default, but next release' tests should pass (tested the beta release tag). Wrap qt apps properly, without double wrapping, if gui is enabled. --- .../python-modules/androguard/default.nix | 70 +++++++++++++++++-- 1 file changed, 63 insertions(+), 7 deletions(-) diff --git a/pkgs/development/python-modules/androguard/default.nix b/pkgs/development/python-modules/androguard/default.nix index c7122781111..ec19f4730a5 100644 --- a/pkgs/development/python-modules/androguard/default.nix +++ b/pkgs/development/python-modules/androguard/default.nix @@ -1,13 +1,44 @@ -{ lib, buildPythonPackage, fetchPypi, future, networkx, pygments, lxml, colorama, matplotlib, - asn1crypto, click, pydot, ipython, pyqt5, pyperclip }: +{ lib +, fetchpatch +, buildPythonPackage +, fetchFromGitHub +, future +, networkx +, pygments +, lxml +, colorama +, matplotlib +, asn1crypto +, click +, pydot +, ipython +, pyqt5 +, pyperclip +, nose +, nose-timer +, mock +, python_magic +, codecov +, coverage +, qt5 +# This is usually used as a library, and it'd be a shame to force the gui +# libraries to the closure if gui is not desired. +, withGui ? false +# Tests take a very long time, and currently fail, but next release' tests +# shouldn't fail +, doCheck ? false +}: buildPythonPackage rec { version = "3.3.5"; pname = "androguard"; - src = fetchPypi { - inherit pname version; - sha256 = "f0655ca3a5add74c550951e79bd0bebbd1c5b239178393d30d8db0bd3202cda2"; + # No tests in pypi tarball + src = fetchFromGitHub { + repo = pname; + owner = pname; + rev = "v${version}"; + sha256 = "0zc8m1xnkmhz2v12ddn47q0c01p3sbna2v5npfxhcp88szswlr9y"; }; propagatedBuildInputs = [ @@ -21,12 +52,37 @@ buildPythonPackage rec { click pydot ipython + ] ++ lib.optionals withGui [ pyqt5 pyperclip ]; - # Tests are not shipped on PyPI. - doCheck = false; + checkInputs = [ + pyqt5 + pyperclip + nose + nose-timer + codecov + coverage + mock + python_magic + ]; + inherit doCheck; + + nativeBuildInputs = lib.optionals withGui [ qt5.wrapQtAppsHook ]; + + # If it won't be verbose, you'll see nothing going on for a long time. + checkPhase = '' + runHook preCheck + + nosetests --verbosity=3 + + runHook postCheck + ''; + + preFixup = lib.optionalString withGui '' + makeWrapperArgs+=("''${qtWrapperArgs[@]}") + ''; meta = { description = "Tool and python library to interact with Android Files";