diff options
Diffstat (limited to 'nixpkgs/pkgs/servers/misc/irrd/default.nix')
-rw-r--r-- | nixpkgs/pkgs/servers/misc/irrd/default.nix | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/misc/irrd/default.nix b/nixpkgs/pkgs/servers/misc/irrd/default.nix new file mode 100644 index 000000000000..e6cc723ab4dc --- /dev/null +++ b/nixpkgs/pkgs/servers/misc/irrd/default.nix @@ -0,0 +1,162 @@ +{ lib +, python3 +, fetchPypi +, fetchFromGitHub +, fetchpatch +, git +, postgresql +, postgresqlTestHook +, redis +}: + +let + py = python3.override { + packageOverrides = final: prev: { + # sqlalchemy 1.4.x or 2.x are not supported + sqlalchemy = prev.sqlalchemy.overridePythonAttrs (oldAttrs: rec { + version = "1.3.24"; + src = fetchPypi { + inherit (oldAttrs) pname; + inherit version; + hash = "sha256-67t3fL+TEjWbiXv4G6ANrg9ctp+6KhgmXcwYpvXvdRk="; + }; + doCheck = false; + }); + alembic = prev.alembic.overridePythonAttrs (lib.const { + doCheck = false; + }); + factory-boy = prev.factory-boy.overridePythonAttrs (lib.const { + doCheck = false; + }); + beautifultable = prev.beautifultable.overridePythonAttrs (oldAttrs: rec { + version = "0.8.0"; + src = fetchPypi { + inherit (oldAttrs) pname; + inherit version; + hash = "sha256-1E2VUbvte/qIZ1Mk+E77mqhXOE1E6fsh61MPCgutuBU="; + }; + doCheck = false; + }); + }; + }; +in + +py.pkgs.buildPythonPackage rec { + pname = "irrd"; + version = "4.4.2"; + format = "pyproject"; + + src = fetchFromGitHub { + owner = "irrdnet"; + repo = "irrd"; + rev = "v${version}"; + hash = "sha256-vZSuBP44ZvN0mu2frcaQNZN/ilvKWIY9ETnrStzSnG0="; + }; + patches = [ + # replace poetry dependency with poetry-core + # https://github.com/irrdnet/irrd/pull/884 + (fetchpatch { + url = "https://github.com/irrdnet/irrd/commit/4fb6e9b50d65729aff2d0a94c2e9b4e2daadea85.patch"; + hash = "sha256-DcE6VZfJkbHnPiEdYDpXea7S/8P0SmdvvJ42hywnpf0="; + }) + ]; + + nativeBuildInputs = with python3.pkgs; [ + poetry-core + ]; + + nativeCheckInputs = [ + git + redis + postgresql + postgresqlTestHook + ] ++ (with py.pkgs; [ + pytest-asyncio + pytest-freezegun + pytestCheckHook + smtpdfix + ]); + + propagatedBuildInputs = with py.pkgs; [ + python-gnupg + passlib + bcrypt + ipy + ordered-set + beautifultable + pyyaml + datrie + setproctitle + python-daemon + pid + py.pkgs.redis + hiredis + coredis + requests + pytz + ariadne + uvicorn + starlette + psutil + asgiref + pydantic + typing-extensions + py-radix-sr + psycopg2 + sqlalchemy + alembic + ujson + wheel + websockets + limits + factory-boy + webauthn + wtforms + imia + starlette-wtf + zxcvbn + pyotp + asgi-logger + wtforms-bootstrap5 + email-validator + ] ++ py.pkgs.uvicorn.optional-dependencies.standard; + + preCheck = '' + redis-server & + REDIS_PID=$! + + while ! redis-cli --scan ; do + echo waiting for redis + sleep 1 + done + + export SMTPD_HOST=127.0.0.1 + export IRRD_DATABASE_URL="postgres:///$PGDATABASE" + export IRRD_REDIS_URL="redis://localhost/1" + ''; + + # required for test_object_writing_and_status_checking + postgresqlTestSetupPost = '' + echo "track_commit_timestamp=on" >> $PGDATA/postgresql.conf + pg_ctl restart + ''; + + postCheck = '' + kill $REDIS_PID + ''; + + # skip tests that require internet access + disabledTests = [ + "test_020_dash_o_noop" + "test_050_non_json_response" + ]; + + meta = with lib; { + changelog = "https://irrd.readthedocs.io/en/v${version}/releases/"; + description = "An Internet Routing Registry database server, processing IRR objects in the RPSL format"; + license = licenses.mit; + homepage = "https://github.com/irrdnet/irrd"; + maintainers = teams.wdz.members; + }; +} + |