1{
2 lib,
3 buildPythonPackage,
4 fetchFromGitHub,
5 passlib,
6 pip,
7 pytestCheckHook,
8 pythonOlder,
9 setuptools,
10 setuptools-git,
11 twine,
12 watchdog,
13 webtest,
14 wheel,
15}:
16
17buildPythonPackage rec {
18 pname = "pypiserver";
19 version = "2.0.1";
20 format = "setuptools";
21
22 disabled = pythonOlder "3.7";
23
24 src = fetchFromGitHub {
25 owner = pname;
26 repo = pname;
27 rev = "refs/tags/v${version}";
28 hash = "sha256-Eh/3URt7pcJhoDDLRP8iHyjlPsE5E9M/0Hixqi5YNdg=";
29 };
30
31 nativeBuildInputs = [
32 setuptools
33 setuptools-git
34 wheel
35 ];
36
37 propagatedBuildInputs = [ pip ];
38
39 passthru.optional-dependencies = {
40 passlib = [ passlib ];
41 cache = [ watchdog ];
42 };
43
44 __darwinAllowLocalNetworking = true;
45
46 # Tests need these permissions in order to use the FSEvents API on macOS.
47 sandboxProfile = ''
48 (allow mach-lookup (global-name "com.apple.FSEvents"))
49 '';
50
51 preCheck = ''
52 export HOME=$TMPDIR
53 '';
54
55 nativeCheckInputs = [
56 pip
57 pytestCheckHook
58 setuptools
59 twine
60 webtest
61 ] ++ lib.flatten (builtins.attrValues passthru.optional-dependencies);
62
63 disabledTests = [
64 # Fails to install the package
65 "test_hash_algos"
66 "test_pip_install_authed_succeeds"
67 "test_pip_install_open_succeeds"
68 ];
69
70 disabledTestPaths = [
71 # Test requires docker service running
72 "docker/test_docker.py"
73 ];
74
75 pythonImportsCheck = [ "pypiserver" ];
76
77 meta = with lib; {
78 description = "Minimal PyPI server for use with pip/easy_install";
79 mainProgram = "pypi-server";
80 homepage = "https://github.com/pypiserver/pypiserver";
81 changelog = "https://github.com/pypiserver/pypiserver/releases/tag/v${version}";
82 license = with licenses; [
83 mit
84 zlib
85 ];
86 maintainers = with maintainers; [ austinbutler ];
87 };
88}