From c5fe0157b066ee2e7da1044c24d298fc885cf16f Mon Sep 17 00:00:00 2001 From: Kiara Grouwstra <kiara@procolix.eu> Date: Wed, 19 Mar 2025 08:57:56 +0100 Subject: [PATCH] factor reading env vars out to settings.py --- panel/src/panel/settings.py | 8 ++++++++ panel/src/panel/views.py | 17 ++++++++--------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/panel/src/panel/settings.py b/panel/src/panel/settings.py index 4209f80a..f289b0fc 100644 --- a/panel/src/panel/settings.py +++ b/panel/src/panel/settings.py @@ -184,3 +184,11 @@ if user_settings_file is not None: spec.loader.exec_module(module) sys.modules["user_settings"] = module from user_settings import * # noqa: F403 # pyright: ignore [reportMissingImports] + +# non-Django application settings + +# a dir of nix supporting experimental feature `configurable-impure-env`. +nix_bin_dir=f"{env.get("NIX_DIR")}/bin/" +# path of the root flake to trigger nixops from, see #94. +# to deploy this should be specified, for dev just use a relative path. +repo_dir = env.get("REPO_DIR") or f"{os.getcwd()}/.." diff --git a/panel/src/panel/views.py b/panel/src/panel/views.py index 85918e26..0bc869d3 100644 --- a/panel/src/panel/views.py +++ b/panel/src/panel/views.py @@ -1,5 +1,4 @@ from enum import Enum -import os import json import subprocess @@ -9,7 +8,7 @@ from django.contrib.auth.models import User from django.views.generic import TemplateView, DetailView from django.views.generic.edit import FormView -from panel import models +from panel import models, settings from panel.configuration import forms @@ -47,9 +46,6 @@ class ConfigurationForm(LoginRequiredMixin, FormView): # Check for deploy button if "deploy" in self.request.POST.keys(): submission = obj.parsed_value.model_dump_json() - # in dev we can use a relative path, for deployed versions we must explicitly - # specify our root flake as the directory to trigger nixops from, see #94. - cwd = os.getenv("REPO_DIR") or f"{os.getcwd()}/.." # FIXME: let the user specify these from the form (#190) dummy_user = { "initialUser": { @@ -62,9 +58,8 @@ class ConfigurationForm(LoginRequiredMixin, FormView): # serialize back and forth now we still need to manually inject the dummy user deployment = json.dumps(dummy_user | json.loads(submission)) env = { - # use nix as implicit lix from a dev shell lacks configurable-impure-env - "PATH": f"{os.getenv("NIX_DIR")}/bin/", - # environment variable we use to pass in form info to our deployment + "PATH": settings.nix_bin_dir, + # pass in form info to our deployment "DEPLOYMENT": deployment, } cmd = [ @@ -78,7 +73,11 @@ class ConfigurationForm(LoginRequiredMixin, FormView): "apply", "test", ] - subprocess.run(cmd, cwd=cwd, env=env) + subprocess.run( + cmd, + cwd=settings.repo_dir, + env=env, + ) return obj # TODO(@fricklerhandwerk):