{
  lib,
  buildPythonPackage,
  fetchFromGitHub,
  fetchpatch,

  pythonOlder,

  setuptools,

  pytestCheckHook,
}:

buildPythonPackage rec {
  pname = "python-idzip";
  version = "0.3.9";
  pyproject = true;

  disabled = pythonOlder "3.7";

  src = fetchFromGitHub {
    owner = "bauman";
    repo = "python-idzip";
    rev = "refs/tags/${version}";
    hash = "sha256-ChzwC/Afn0qeo5anq4anIu2eI9i6XDnSvB7jAwY7rSw=";
  };

  patches = [
    # fix collision
    # https://github.com/bauman/python-idzip/pull/23
    (fetchpatch {
      name = "fix-bin-folder-collisions.patch";
      url = "https://patch-diff.githubusercontent.com/raw/bauman/python-idzip/pull/23.patch";
      hash = "sha256-4fPhLdY9MaH1aX6tqMT+NNNNDsyv87G0xBh4MC+5yQE=";
    })
  ];

  nativeBuildInputs = [ setuptools ];

  nativeCheckInputs = [ pytestCheckHook ];

  disabledTestPaths = [
    # need third-party files
    # https://github.com/bauman/python-idzip/blob/master/.github/workflows/test.yaml#L2https://github.com/bauman/python-idzip/blob/master/.github/workflows/test.yaml#L288
    "test/test_compressor.py"
    "test/test_decompressor.py"
    "test/test_lucky_cache.py"
    "test/test_readline.py"
    "test/test_seek_read_behavior.py"
    "test/test_zero_cache.py"
  ];

  disabledTests = [
    # Terminated
    # pop_var_context: head of shell_variables not a function context
    "test_bufferedio_compat"
  ];

  meta = with lib; {
    description = "Seekable, gzip compatible, compression format";
    mainProgram = "idzip";
    homepage = "https://github.com/bauman/python-idzip";
    changelog = "https://github.com/bauman/python-idzip/releases/tag/${version}";
    license = licenses.mit;
    maintainers = with maintainers; [ vizid ];
  };
}
