{ lib
, python3
, fetchFromGitHub
, installShellFiles
}:

python3.pkgs.buildPythonApplication rec {
  pname = "ripe-atlas-tools";
  version = "3.1.0";

  src = fetchFromGitHub {
    owner = "RIPE-NCC";
    repo = "ripe-atlas-tools";
    rev = "refs/tags/v${version}";
    hash = "sha256-aETSDXCVteTruRKV/8Aw3R/bprB6txOsXrFvoZOxIus=";
  };

  postPatch = ''
    # This mapping triggers network access on docs generation: https://github.com/RIPE-NCC/ripe-atlas-tools/issues/235
    sed -i '/^intersphinx_mapping/d' docs/conf.py
    # TODO: Ensure user-agent is picked up during build, remove me when https://github.com/RIPE-NCC/ripe-atlas-tools/pull/236
    echo "include ripe/atlas/tools/user-agent" >> MANIFEST.in
  '';

  nativeBuildInputs = with python3.pkgs; [
    sphinx-rtd-theme
    sphinxHook
    installShellFiles
  ];

  propagatedBuildInputs = with python3.pkgs; [
    ipy
    pyopenssl
    python-dateutil
    pyyaml
    requests
    ripe-atlas-cousteau
    ripe-atlas-sagan
    typing-extensions
    tzlocal
    ujson
  ];

  preBuild = ''
    echo "RIPE Atlas Tools [NixOS ${version}" > ripe/atlas/tools/user-agent
  '';

  postInstall = ''
    installShellCompletion --cmd ripe-atlas --bash ./ripe-atlas-bash-completion.sh
  '';

  pythonImportsCheck = [
    "ripe.atlas.tools"
  ];

  nativeCheckInputs = with python3.pkgs; [
    pytestCheckHook
  ];

  disabledTests = [
    # Network tests: https://github.com/RIPE-NCC/ripe-atlas-tools/issues/234
    "test_arg_from_file"
    "test_arg_from_stdin"
    # We injected our user-agent so the tests will fail
    "test_user_agent_mac"
    "test_user_agent_windows"
    "test_user_agent_xdg_absent"
    "test_user_agent_xdg_present"
  ];

  disabledTestPaths = [
    # Relies on `ripe-atlas` being available in the PATH, installed with autocompletions
    "tests/test_bash_completion.py"
    # AS lookups are not mocked up: https://github.com/RIPE-NCC/ripe-atlas-tools/blob/master/tests/renderers/test_traceroute_aspath.py#L26
    "tests/renderers/test_traceroute_aspath.py"
    # We already build Sphinx so we do not need to test it
    "tests/test_docs.py"
  ];

  HOME = "$TMPDIR"; # for cache generation.

  # Necessary because it confuse the tests when it does "from ripe.atlas.sagan import X"
  # version.py is used by Sphinx tests.
  preCheck = ''
    rm -rf ripe
    mkdir -p ripe/atlas/tools
    echo "__version__ = \"${version}\"" > ripe/atlas/tools/version.py
  '';

  meta = with lib; {
    description = "RIPE ATLAS project tools";
    homepage = "https://github.com/RIPE-NCC/ripe-atlas-tools";
    changelog = "https://github.com/RIPE-NCC/ripe-atlas-tools/blob/v${version}/CHANGES.rst";
    license = licenses.gpl3Only;
    maintainers = with maintainers; [ raitobezarius ];
  };
}
