diff --git a/flake.lock b/flake.lock index 471ca20..e2486de 100644 --- a/flake.lock +++ b/flake.lock @@ -2,16 +2,16 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1758070117, - "narHash": "sha256-uLwwHFCZnT1c3N3biVe/0hCkag2GSrf9+M56+Okf+WY=", + "lastModified": 1773222311, + "narHash": "sha256-BHoB/XpbqoZkVYZCfXJXfkR+GXFqwb/4zbWnOr2cRcU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e9b7f2ff62b35f711568b1f0866243c7c302028d", + "rev": "0590cd39f728e129122770c029970378a79d076a", "type": "github" }, "original": { "id": "nixpkgs", - "ref": "nixos-25.05", + "ref": "nixos-25.11", "type": "indirect" } }, diff --git a/flake.nix b/flake.nix index cfad560..4e34de1 100644 --- a/flake.nix +++ b/flake.nix @@ -1,7 +1,7 @@ { description = "Invoiceplane invoice template development shell"; - inputs.nixpkgs.url = "nixpkgs/nixos-25.05"; + inputs.nixpkgs.url = "nixpkgs/nixos-25.11"; outputs = { self, nixpkgs, ... }@inputs: @@ -77,7 +77,7 @@ }; }; - system.stateVersion = "25.05"; + system.stateVersion = "25.11"; services.getty.autologinUser = "root"; } ) diff --git a/froide-govplan.nix b/froide-govplan.nix index 6e4f236..a77d60e 100644 --- a/froide-govplan.nix +++ b/froide-govplan.nix @@ -13,15 +13,13 @@ let pkg = cfg.package.overridePythonAttrs (old: { src = ./.; dependencies = old.dependencies ++ [ cfg.package.python.pkgs.mastodon-py ]; - postInstall = - old.postInstall - + '' - ln -s ${settingsFile} $out/${pkg.python.sitePackages}/froide_govplan/project/extra_settings.py + postInstall = old.postInstall + '' + ln -s ${settingsFile} $out/${pkg.python.sitePackages}/froide_govplan/project/extra_settings.py - rm -r $out/${pkgs.python3.sitePackages}/froide_govplan/templates - ln -sf /var/lib/froide-govplan/templates $out/${pkgs.python3.sitePackages}/froide_govplan/templates - cp -r froide_govplan/static $out/${pkgs.python3.sitePackages}/froide_govplan/ - ''; + rm -r $out/${pkgs.python3.sitePackages}/froide_govplan/templates + ln -sf /var/lib/froide-govplan/templates $out/${pkgs.python3.sitePackages}/froide_govplan/templates + cp -r froide_govplan/static $out/${pkgs.python3.sitePackages}/froide_govplan/ + ''; }); froide-govplan = pkgs.writeShellApplication { @@ -169,9 +167,9 @@ in systemd = { services = { - postgresql.serviceConfig.ExecStartPost = + postgresql-setup.serviceConfig.ExecStartPost = let - sqlFile = pkgs.writeText "immich-pgvectors-setup.sql" '' + sqlFile = pkgs.writeText "froide-govplan-postgis-setup.sql" '' CREATE EXTENSION IF NOT EXISTS postgis; ''; in @@ -190,49 +188,51 @@ in Group = "govplan"; }; after = [ - "postgresql.service" + "postgresql.target" "network.target" "systemd-tmpfiles-setup.service" ]; wantedBy = [ "multi-user.target" ]; - environment = - { - PYTHONPATH = pkg.python.pkgs.makePythonPath (with pkg.python.pkgs; [ + environment = { + PYTHONPATH = pkg.python.pkgs.makePythonPath ( + with pkg.python.pkgs; + [ - bleach - django-admin-sortable2 - django-cms - django-filer - django-mfa3 - django-mptt - django-oauth-toolkit - django-sekizai - django-tinymce - django-treebeard - djangocms-alias - # Downgrade to last working version - (toPythonModule ( - pkgs.froide.overridePythonAttrs (prev: { - nativeBuildInputs = [ pkgs.makeBinaryWrapper ]; - postBuild = ""; - doCheck = false; - pnpmDeps = null; - src = prev.src.override { - rev = "a78a4054f9f37b0a5109a6d8cfbbda742f86a8ca"; - hash = "sha256-gtOssbsVf3nG+pmLPgvh4685vHh2x+jlXiTjU+JhQa8="; - }; - }) - )) - psycopg - mastodon-py - (toPythonModule (pkg)) - ]); - GDAL_LIBRARY_PATH = "${pkgs.gdal}/lib/libgdal.so"; - GEOS_LIBRARY_PATH = "${pkgs.geos}/lib/libgeos_c.so"; - } - // lib.optionalAttrs (cfg.secretKeyFile != null) { - SECRET_KEY_FILE = cfg.secretKeyFile; - }; + bleach + django-admin-sortable2 + django-cms + django-filer + django-mfa3 + django-mptt + django-oauth-toolkit + django-sekizai + django-tinymce + django-treebeard + djangocms-alias + # Downgrade to last working version + (toPythonModule ( + pkgs.froide.overridePythonAttrs (prev: { + nativeBuildInputs = [ pkgs.makeBinaryWrapper ]; + postBuild = ""; + doCheck = false; + pnpmDeps = null; + src = prev.src.override { + rev = "a78a4054f9f37b0a5109a6d8cfbbda742f86a8ca"; + hash = "sha256-gtOssbsVf3nG+pmLPgvh4685vHh2x+jlXiTjU+JhQa8="; + }; + }) + )) + psycopg + mastodon-py + (toPythonModule (pkg)) + ] + ); + GDAL_LIBRARY_PATH = "${pkgs.gdal}/lib/libgdal.so"; + GEOS_LIBRARY_PATH = "${pkgs.geos}/lib/libgeos_c.so"; + } + // lib.optionalAttrs (cfg.secretKeyFile != null) { + SECRET_KEY_FILE = cfg.secretKeyFile; + }; preStart = '' # Auto-migrate on first run or if the package has changed versionFile="${cfg.dataDir}/src-version" diff --git a/froide_govplan/signals.py b/froide_govplan/signals.py index 550024d..c88dbc1 100644 --- a/froide_govplan/signals.py +++ b/froide_govplan/signals.py @@ -2,17 +2,21 @@ from django.db.models.signals import post_save from django.dispatch import receiver from django.conf import settings from django.db import transaction -from mastodon import Mastodon from .models import GovernmentPlanUpdate, GovernmentPlan import re import html +if not settings.DEBUG: + from mastodon import Mastodon + def strip_html_tags(text): tag_re = re.compile(r'<[^>]+>') plain_text = tag_re.sub('', text) return html.unescape(plain_text) def post_to_mastodon(text): + if settings.DEBUG: + return mastodon = Mastodon( access_token=settings.MASTODON_ACCESS_TOKEN, api_base_url=settings.MASTODON_API_BASE_URL diff --git a/froide_govplan/urls.py b/froide_govplan/urls.py index 12f9d6a..de63191 100644 --- a/froide_govplan/urls.py +++ b/froide_govplan/urls.py @@ -29,6 +29,10 @@ urlpatterns = [ path( pgettext_lazy("url part", "/plan//"), GovPlanDetailView.as_view(), + ), + path( + pgettext_lazy("url part", "/plan/"), + GovPlanDetailView.as_view(), name="plan", ), path( @@ -41,9 +45,17 @@ urlpatterns = [ GovPlanProposeUpdateView.as_view(), name="propose_planupdate", ), + path( + pgettext_lazy("url part", "/vorhaben/"), + GovPlanDetailView.as_view(), + ), path( pgettext_lazy("url part", "//"), GovPlanSectionDetailView.as_view(), + ), + path( + pgettext_lazy("url part", "/"), + GovPlanSectionDetailView.as_view(), name="section", ), ]