From cf479961cb5a5983badb12d835d1baa69cee9aac Mon Sep 17 00:00:00 2001 From: Jonas Heinrich Date: Sun, 20 Oct 2024 09:15:19 +0000 Subject: [PATCH] froide: init at 0-unstable-2024-11-22 --- .../fr/froide/django_42_storages.patch | 19 ++ pkgs/by-name/fr/froide/package.nix | 189 ++++++++++++++++++ .../python-modules/django-fsm/default.nix | 43 ++++ pkgs/top-level/python-packages.nix | 2 + 4 files changed, 253 insertions(+) create mode 100644 pkgs/by-name/fr/froide/django_42_storages.patch create mode 100644 pkgs/by-name/fr/froide/package.nix create mode 100644 pkgs/development/python-modules/django-fsm/default.nix diff --git a/pkgs/by-name/fr/froide/django_42_storages.patch b/pkgs/by-name/fr/froide/django_42_storages.patch new file mode 100644 index 0000000000000..28f7f25793fb5 --- /dev/null +++ b/pkgs/by-name/fr/froide/django_42_storages.patch @@ -0,0 +1,19 @@ +diff --git a/froide/settings.py b/froide/settings.py +index 428349cb..1e1bd7a8 100644 +--- a/froide/settings.py ++++ b/froide/settings.py +@@ -867,9 +867,11 @@ class Production(Base): + + ALLOWED_HOSTS = values.TupleValue(("example.com",)) + CELERY_TASK_ALWAYS_EAGER = values.BooleanValue(False) +- STATICFILES_STORAGE = ( +- "django.contrib.staticfiles.storage.ManifestStaticFilesStorage" +- ) ++ STORAGES = { ++ 'staticfiles': { ++ 'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage', ++ }, ++ } + + + class SSLSite(object): diff --git a/pkgs/by-name/fr/froide/package.nix b/pkgs/by-name/fr/froide/package.nix new file mode 100644 index 0000000000000..3c389f62d634c --- /dev/null +++ b/pkgs/by-name/fr/froide/package.nix @@ -0,0 +1,189 @@ +{ + lib, + python3, + fetchFromGitHub, + makeWrapper, + nixosTests, + gdal, + geos, + pnpm, + nodejs, + postgresql, + postgresqlTestHook, + playwright-driver, +}: +let + + python = python3.override { + packageOverrides = self: super: { + django = super.django.override { withGdal = true; }; + }; + }; + +in +python.pkgs.buildPythonApplication rec { + pname = "froide"; + version = "0-unstable-2024-11-22"; + pyproject = true; + + src = fetchFromGitHub { + owner = "okfde"; + repo = "froide"; + rev = "a90f5c4d40b46a161111eefdc84e5214e85715b0"; + hash = "sha256-Q+iNI3yqxqAtDONHY+SaZeMyjY6hqTxwy7YmiiY94+0="; + }; + + patches = [ ./django_42_storages.patch ]; + + pythonRelaxDeps = [ + "pikepdf" + "channels" + ]; + + build-system = [ python.pkgs.setuptools ]; + + nativeBuildInputs = [ + makeWrapper + pnpm.configHook + nodejs + ]; + + dependencies = with python.pkgs; [ + bleach + celery + celery-singleton + channels + coreapi + dj-database-url + django + django-celery-beat + django-celery-email + django-configurations + django-contrib-comments + django-crossdomainmedia + django-elasticsearch-dsl + django-filingcabinet + django-filter + # Project discontinued upstream + # https://github.com/okfde/froide/issues/893 + django-fsm + django-json-widget + django-leaflet + django-mfa3 + django-oauth-toolkit + django-parler + django-storages + django-taggit + django-treebeard + djangorestframework + djangorestframework-csv + djangorestframework-jsonp + drf-spectacular + drf-spectacular-sidecar + easy-thumbnails + elasticsearch + elasticsearch-dsl + geoip2 + icalendar + markdown + phonenumbers + pillow + pikepdf + psycopg + pygtail + pyisemail + pypdf + python-magic + python-mimeparse + python-slugify + requests + wand + weasyprint + websockets + ]; + + pnpmDeps = pnpm.fetchDeps { + inherit pname version src; + hash = "sha256-DMoaXNm5S64XBERHFnFM6IKBkzXRGDEYWSTruccK9Hc="; + }; + + postBuild = '' + pnpm run build + ''; + + installPhase = '' + runHook preInstall + mkdir -p $out + cp -r * $out/ + runHook postInstall + ''; + + postInstall = '' + makeWrapper $out/manage.py $out/bin/froide \ + --prefix PYTHONPATH : "$PYTHONPATH" \ + --set GDAL_LIBRARY_PATH "${gdal}/lib/libgdal.so" \ + --set GEOS_LIBRARY_PATH "${geos}/lib/libgeos_c.so" + ''; + + nativeCheckInputs = with python.pkgs; [ + (postgresql.withPackages (p: [ p.postgis ])) + postgresqlTestHook + pytest-django + pytest-playwright + pytestCheckHook + ]; + + checkInputs = with python.pkgs; [ + beautifulsoup4 + pytest-factoryboy + time-machine + ]; + + disabledTests = [ + # Requires network connection: elastic_transport.ConnectionError + "test_search_similar" + "test_search" + "test_list_requests" + "test_list_jurisdiction_requests" + "test_tagged_requests" + "test_publicbody_requests" + "test_feed" + "test_request_list_filter_pagination" + "test_request_list_path_filter" + "test_web_page" + "test_autocomplete" + "test_list_no_identical" + "test_set_status" + "test_make_not_logged_in_request" + "test_make_logged_in_request" + # TypeError: Pygtail.with_offsets() got an unexpected keyword argument + "test_email_signal" + "test_pygtail_log_append" + "test_bouncing_email" + "test_multiple_partial" + "test_logfile_rotation" + ]; + + preCheck = '' + export PGUSER="froide" + export postgresqlEnableTCP=1 + export postgresqlTestUserOptions="LOGIN SUPERUSER" + export GDAL_LIBRARY_PATH="${gdal}/lib/libgdal.so" + export GEOS_LIBRARY_PATH="${geos}/lib/libgeos_c.so" + export PLAYWRIGHT_BROWSERS_PATH="${playwright-driver.browsers}" + ''; + + passthru = { + tests = { + inherit (nixosTests) froide; + }; + }; + + meta = { + description = "Freedom of Information Portal"; + homepage = "https://github.com/okfde/froide"; + license = lib.licenses.mit; + maintainers = [ lib.maintainers.onny ]; + mainProgram = "froide"; + }; +} diff --git a/pkgs/development/python-modules/django-fsm/default.nix b/pkgs/development/python-modules/django-fsm/default.nix new file mode 100644 index 0000000000000..4af2c1b20ec9f --- /dev/null +++ b/pkgs/development/python-modules/django-fsm/default.nix @@ -0,0 +1,43 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + django, + pytestCheckHook, + pytest-django, + python, + setuptools, +}: + +buildPythonPackage rec { + pname = "django-fsm"; + version = "3.0.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "viewflow"; + repo = "django-fsm"; + rev = "refs/tags/${version}"; + hash = "sha256-woN0F4hTaPk8HTGNT6zQlZDJ9SCVRut9maKSlDmalUE="; + }; + + build-system = [ setuptools ]; + + dependencies = [ django ]; + + checkPhase = '' + ${python.interpreter} manage.py test + ''; + + # django.core.exceptions.ImproperlyConfigured: Requested setting DEBUG, but settings are not configured. + # pythonImportsCheck = [ "crossdomainmedia" ]; + + doCheck = false; + + meta = { + description = "Django application to retrieve user's IP address"; + homepage = "https://github.com/stefanw/django-crossdomainmedia"; + license = lib.licenses.mit; + maintainers = [ lib.maintainers.onny ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index c4cd60b6fad7b..3f8eb4d9eb4b0 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -3440,6 +3440,8 @@ self: super: with self; { django-formset-js-improved = callPackage ../development/python-modules/django-formset-js-improved { }; + django-fsm = callPackage ../development/python-modules/django-fsm { }; + django-graphiql-debug-toolbar = callPackage ../development/python-modules/django-graphiql-debug-toolbar { }; django-gravatar2 = callPackage ../development/python-modules/django-gravatar2 { };