diff --git a/flake.lock b/flake.lock index 5fabb77..47b9b29 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1743597898, - "narHash": "sha256-b5vow3e30Y/gQud8P65d36KEnF56ukED46bJYB5QVGI=", + "lastModified": 1746524425, + "narHash": "sha256-gCxWQCeQXYKDCW3y18HDo/aWbAtbjvljAkmyJBGRLOk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3d9f74651d01b73e9c46d89bf17d5103e48ab307", + "rev": "1032a46ffe4ba4f56919a9643443a9a6791811ed", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix deleted file mode 100644 index 6d4643e..0000000 --- a/flake.nix +++ /dev/null @@ -1,80 +0,0 @@ -{ - description = "Invoiceplane invoice template development shell"; - - inputs.nixpkgs.url = "nixpkgs/master"; - - outputs = { self, nixpkgs, ... }@inputs: - let - pkgs = nixpkgs.legacyPackages.x86_64-linux; - start = - pkgs.writeShellScriptBin "start" '' - set -e - export NIXPKGS_ALLOW_INSECURE=1 - export QEMU_NET_OPTS="hostfwd=tcp::8080-:80" - ${pkgs.nixos-shell}/bin/nixos-shell --flake . - ''; - in { - nixosConfigurations.vm = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - specialArgs.inputs = inputs; - pkgs = import nixpkgs { - overlays = [ - (self: super: { - froide-govplan = super.froide-govplan.overrideAttrs (oldAttrs: rec { - src = ./.; - #pkgs.fetchFromGitHub { - # owner = "onny"; - # repo = "froide-govplan"; - # rev = "81697ce37cfdee7b5d0f667c50b13062ed9786c3"; - # hash = "sha256-ooHGlCKgZL+TMh6OtopKtbkV0MhT4udLCOIC+C3Ytdw="; - #}; - postInstall = oldAttrs.postInstall + '' - 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/ - ''; - }); - }) - ]; - }; - modules = [ - ({ lib, config, pkgs, ... }: { - - virtualisation = { - memorySize = 8000; - diskSize = 4096; - cores = 4; - }; - - disabledModules = [ "services/web-apps/froide-govplan.nix" ]; - - imports = [ ./froide-govplan.nix ]; - - services.froide-govplan = { - enable = true; - package = pkgs.froide-govplan; - settings = { - DEBUG = lib.mkForce true; - CSRF_TRUSTED_ORIGINS = [ "http://localhost:8080" ]; - }; - }; - - nixos-shell.mounts.extraMounts = { - "/var/lib/froide-govplan/templates" = { - target = /home/onny/projects/froide-govplan/froide_govplan/templates; - cache = "none"; - }; - }; - - system.stateVersion = "25.05"; - services.getty.autologinUser = "root"; - }) - ]; - }; - - packages = { inherit start; }; - defaultPackage.x86_64-linux = start; - - }; -} - diff --git a/froide-govplan.nix b/froide-govplan.nix index cd064c4..6e4f236 100644 --- a/froide-govplan.nix +++ b/froide-govplan.nix @@ -12,6 +12,7 @@ let pkg = cfg.package.overridePythonAttrs (old: { src = ./.; + dependencies = old.dependencies ++ [ cfg.package.python.pkgs.mastodon-py ]; postInstall = old.postInstall + '' @@ -196,7 +197,36 @@ in wantedBy = [ "multi-user.target" ]; environment = { - PYTHONPATH = pkg.pythonPath; + 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"; } diff --git a/froide_govplan/apps.py b/froide_govplan/apps.py index 93dbf54..45ca5c5 100644 --- a/froide_govplan/apps.py +++ b/froide_govplan/apps.py @@ -1,7 +1,6 @@ from django.apps import AppConfig from django.utils.translation import gettext_lazy as _ - class FroideGovPlanConfig(AppConfig): name = "froide_govplan" verbose_name = _("GovPlan App") @@ -18,3 +17,5 @@ class FroideGovPlanConfig(AppConfig): api_router.register( r"governmentplan", GovernmentPlanViewSet, basename="governmentplan" ) + + from . import signals \ No newline at end of file diff --git a/froide_govplan/signals.py b/froide_govplan/signals.py new file mode 100644 index 0000000..41c7daa --- /dev/null +++ b/froide_govplan/signals.py @@ -0,0 +1,35 @@ +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 + +def strip_html_tags(text): + tag_re = re.compile(r'<[^>]+>') + return tag_re.sub('', text) + +def post_to_mastodon(text): + mastodon = Mastodon( + access_token=settings.MASTODON_ACCESS_TOKEN, + api_base_url=settings.MASTODON_API_BASE_URL + ) + mastodon.status_post(text) + +@receiver(post_save, sender=GovernmentPlanUpdate) +def send_mastodon_toot_update(sender, instance, created, **kwargs): + if created and instance.public: + transaction.on_commit(lambda: post_to_mastodon( + f"Neue Entwicklung im Verwaltungsvorhaben: {instance.plan.title}!\n\n" + f"{instance.title}: {strip_html_tags(instance.content)}\n\n" + f"Mehr Informationen: {instance.plan.reference} #karlsruhe" + )) + +@receiver(post_save, sender=GovernmentPlan) +def send_mastodon_toot_plan(sender, instance, created, **kwargs): + if created and instance.public: + transaction.on_commit(lambda: post_to_mastodon( + f"Neues Verwaltungsvorhaben '{instance.title}' wurde aufgenommen.\n\n" + f"Mehr Informationen: {instance.reference} #karlsruhe" + )) diff --git a/froide_govplan/static/froide_govplan/images/avatar.webp b/froide_govplan/static/froide_govplan/images/avatar.webp new file mode 100644 index 0000000..d325898 Binary files /dev/null and b/froide_govplan/static/froide_govplan/images/avatar.webp differ diff --git a/froide_govplan/static/froide_govplan/images/header.webp b/froide_govplan/static/froide_govplan/images/header.webp new file mode 100644 index 0000000..0107082 Binary files /dev/null and b/froide_govplan/static/froide_govplan/images/header.webp differ