From b7b9f11c8985628c7bd5d04b70b864b9ce99507f Mon Sep 17 00:00:00 2001 From: Jennifer Graul Date: Wed, 12 Jul 2023 14:34:31 +0200 Subject: [PATCH] irrd: init at 4.3.0.post1 Co-authored-by: Yureka --- pkgs/servers/misc/irrd/default.nix | 159 ++++++++++++++++++ .../servers/misc/irrd/irrd-asgiref-3.8.0.diff | 51 ++++++ pkgs/top-level/all-packages.nix | 2 + 3 files changed, 212 insertions(+) create mode 100644 pkgs/servers/misc/irrd/default.nix create mode 100644 pkgs/servers/misc/irrd/irrd-asgiref-3.8.0.diff diff --git a/pkgs/servers/misc/irrd/default.nix b/pkgs/servers/misc/irrd/default.nix new file mode 100644 index 000000000000..1ba0c158331f --- /dev/null +++ b/pkgs/servers/misc/irrd/default.nix @@ -0,0 +1,159 @@ +{ lib +, python3 +, fetchPypi +, git +, postgresql +, postgresqlTestHook +, redis +}: + +let + py = python3.override { + packageOverrides = final: prev: { + sqlalchemy = prev.sqlalchemy.overridePythonAttrs (oldAttrs: rec { + version = "1.3.24"; + src = fetchPypi { + inherit (oldAttrs) pname; + inherit version; + hash = "sha256-67t3fL+TEjWbiXv4G6ANrg9ctp+6KhgmXcwYpvXvdRk="; + }; + doCheck = false; + }); + starlette = prev.starlette.overridePythonAttrs (oldAttrs: rec { + version = "0.20.4"; + src = fetchPypi { + inherit (oldAttrs) pname; + inherit version; + hash = "sha256-QvzzEi+Zj+/OPixa1+Xtvw8Cz2hdZGqDoI1ARyavUIQ="; + }; + nativeBuildInputs = with final; [ + setuptools + ]; + doCheck = false; + }); + ariadne = prev.ariadne.overridePythonAttrs (oldAttrs: rec { + version = "0.17.1"; + src = fetchPypi { + inherit (oldAttrs) pname; + inherit version; + hash = "sha256-B98wl/NkNOyq99AKsVQem9TZ0meOnvg7IdWIEAI2vy8="; + }; + nativeBuildInputs = with final; [ + setuptools + ]; + doCheck = false; + }); + alembic = prev.alembic.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.3.0.post1"; + format = "setuptools"; + + src = fetchPypi { + inherit pname version; + hash = "sha256-hayfdcYAgIopfUiAR/AUWMuTzwpXvXuq6iPp9uhWN1M="; + }; + + patches = [ + ./irrd-asgiref-3.8.0.diff + ]; + + pythonRelaxDeps = true; + nativeBuildInputs = with python3.pkgs; [ + pythonRelaxDepsHook + ]; + postPatch = '' + substituteInPlace setup.py --replace psycopg2-binary psycopg2 + ''; + + nativeCheckInputs = [ + git + redis + postgresql + postgresqlTestHook + ] ++ (with py.pkgs; [ + pytest-asyncio + pytest-freezegun + pytestCheckHook + ]); + + 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 + ] ++ py.pkgs.uvicorn.optional-dependencies.standard; + + preCheck = '' + redis-server & + REDIS_PID=$! + + while ! redis-cli --scan ; do + echo waiting for redis + sleep 1 + done + + export IRRD_DATABASE_URL="postgres:///$PGDATABASE" + export IRRD_REDIS_URL="redis://localhost/1" + ''; + + 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 = with maintainers; [ netali yuka ]; + }; +} + diff --git a/pkgs/servers/misc/irrd/irrd-asgiref-3.8.0.diff b/pkgs/servers/misc/irrd/irrd-asgiref-3.8.0.diff new file mode 100644 index 000000000000..0b81cbc6613d --- /dev/null +++ b/pkgs/servers/misc/irrd/irrd-asgiref-3.8.0.diff @@ -0,0 +1,51 @@ +diff --git a/irrd/server/graphql/schema_builder.py b/irrd/server/graphql/schema_builder.py +index 65ddf5d..b3b385a 100644 +--- a/irrd/server/graphql/schema_builder.py ++++ b/irrd/server/graphql/schema_builder.py +@@ -31,32 +31,32 @@ def build_executable_schema(): + """ + schema = SchemaGenerator() + +- schema.rpsl_object_type.set_type_resolver(sta(resolve_rpsl_object_type, False)) +- schema.rpsl_contact_union_type.set_type_resolver(sta(resolve_rpsl_object_type, False)) ++ schema.rpsl_object_type.set_type_resolver(sta(resolve_rpsl_object_type, thread_sensitive=False)) ++ schema.rpsl_contact_union_type.set_type_resolver(sta(resolve_rpsl_object_type, thread_sensitive=False)) + +- schema.query_type.set_field("rpslObjects", sta(resolve_rpsl_objects, False)) +- schema.query_type.set_field("databaseStatus", sta(resolve_database_status, False)) +- schema.query_type.set_field("asnPrefixes", sta(resolve_asn_prefixes, False)) +- schema.query_type.set_field("asSetPrefixes", sta(resolve_as_set_prefixes, False)) +- schema.query_type.set_field("recursiveSetMembers", sta(resolve_recursive_set_members, False)) ++ schema.query_type.set_field("rpslObjects", sta(resolve_rpsl_objects, thread_sensitive=False)) ++ schema.query_type.set_field("databaseStatus", sta(resolve_database_status, thread_sensitive=False)) ++ schema.query_type.set_field("asnPrefixes", sta(resolve_asn_prefixes, thread_sensitive=False)) ++ schema.query_type.set_field("asSetPrefixes", sta(resolve_as_set_prefixes, thread_sensitive=False)) ++ schema.query_type.set_field("recursiveSetMembers", sta(resolve_recursive_set_members, thread_sensitive=False)) + +- schema.rpsl_object_type.set_field("mntByObjs", sta(resolve_rpsl_object_mnt_by_objs, False)) +- schema.rpsl_object_type.set_field("journal", sta(resolve_rpsl_object_journal, False)) ++ schema.rpsl_object_type.set_field("mntByObjs", sta(resolve_rpsl_object_mnt_by_objs, thread_sensitive=False)) ++ schema.rpsl_object_type.set_field("journal", sta(resolve_rpsl_object_journal, thread_sensitive=False)) + for object_type in schema.object_types: + if "adminCObjs" in schema.graphql_types[object_type.name]: +- object_type.set_field("adminCObjs", sta(resolve_rpsl_object_adminc_objs, False)) ++ object_type.set_field("adminCObjs", sta(resolve_rpsl_object_adminc_objs, thread_sensitive=False)) + for object_type in schema.object_types: + if "techCObjs" in schema.graphql_types[object_type.name]: +- object_type.set_field("techCObjs", sta(resolve_rpsl_object_techc_objs, False)) ++ object_type.set_field("techCObjs", sta(resolve_rpsl_object_techc_objs, thread_sensitive=False)) + for object_type in schema.object_types: + if "mbrsByRefObjs" in schema.graphql_types[object_type.name]: +- object_type.set_field("mbrsByRefObjs", sta(resolve_rpsl_object_members_by_ref_objs, False)) ++ object_type.set_field("mbrsByRefObjs", sta(resolve_rpsl_object_members_by_ref_objs, thread_sensitive=False)) + for object_type in schema.object_types: + if "memberOfObjs" in schema.graphql_types[object_type.name]: +- object_type.set_field("memberOfObjs", sta(resolve_rpsl_object_member_of_objs, False)) ++ object_type.set_field("memberOfObjs", sta(resolve_rpsl_object_member_of_objs, thread_sensitive=False)) + for object_type in schema.object_types: + if "membersObjs" in schema.graphql_types[object_type.name]: +- object_type.set_field("membersObjs", sta(resolve_rpsl_object_members_objs, False)) ++ object_type.set_field("membersObjs", sta(resolve_rpsl_object_members_objs, thread_sensitive=False)) + + @schema.asn_scalar_type.value_parser + def parse_asn_scalar(value): diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 00d99a8a8af0..877a88a0ff10 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -9220,6 +9220,8 @@ with pkgs; iroh = callPackage ../applications/networking/iroh { }; + irrd = callPackage ../servers/misc/irrd { }; + ised = callPackage ../tools/misc/ised { }; isl = isl_0_20;