From fe62f1c4d5f90c028eb6ccc4116c38b605654f83 Mon Sep 17 00:00:00 2001 From: ahuston-0 Date: Sun, 28 Jul 2024 14:15:06 -0400 Subject: [PATCH] format python, add poetry shell Signed-off-by: ahuston-0 --- app/common.py | 4 ++-- app/flake_show.py | 21 +++++++++++++-------- flake.nix | 27 ++++++++++++++++++++++++--- shell.nix | 6 ++++++ 4 files changed, 45 insertions(+), 13 deletions(-) diff --git a/app/common.py b/app/common.py index aad88b1..a003891 100644 --- a/app/common.py +++ b/app/common.py @@ -21,7 +21,7 @@ def configure_logger(level: str = "INFO") -> None: ) -def bash_wrapper(command: str, path:str = '.') -> tuple[str, int]: +def bash_wrapper(command: str, path: str = ".") -> tuple[str, int]: """Execute a bash command and capture the output. Args: @@ -33,7 +33,7 @@ def bash_wrapper(command: str, path:str = '.') -> tuple[str, int]: the error output (stderr) as a string (optional), and the return code as an integer. """ # This is a acceptable risk - process = Popen(command.split(), stdout=PIPE, stderr=PIPE,cwd = path) # noqa: S603 + process = Popen(command.split(), stdout=PIPE, stderr=PIPE, cwd=path) # noqa: S603 output, _ = process.communicate() return output.decode(), process.returncode diff --git a/app/flake_show.py b/app/flake_show.py index abfa6a0..cc34f52 100644 --- a/app/flake_show.py +++ b/app/flake_show.py @@ -4,24 +4,29 @@ import json from app.common import bash_wrapper import shutil -def traverse_json_base(json_dict:dict ,path: list[str]): + +def traverse_json_base(json_dict: dict, path: list[str]): final_paths = [] - for (key,value) in json_dict.items(): - if isinstance(value,dict): + for key, value in json_dict.items(): + if isinstance(value, dict): keys = value.keys() - if 'type' in keys and value['type'] in ['nixos-configuration','derivation']: - final_paths += ['.'.join(path + [key])] + if "type" in keys and value["type"] in [ + "nixos-configuration", + "derivation", + ]: + final_paths += [".".join(path + [key])] else: - final_paths += traverse_json_base(value,path+[key]) + final_paths += traverse_json_base(value, path + [key]) return final_paths def traverse_json(json_dict: dict): - return traverse_json_base(json_dict,[]) + return traverse_json_base(json_dict, []) + def get_derivations(path_to_flake: str): nix_path = shutil.which("nix") - flake_show = bash_wrapper(f"{nix_path} flake show --json", path = path_to_flake) + flake_show = bash_wrapper(f"{nix_path} flake show --json", path=path_to_flake) if flake_show[1] != 0: raise RuntimeError("flake show returned non-zero exit code") flake_show_json = json.loads(flake_show[0]) diff --git a/flake.nix b/flake.nix index 0fee803..62deca6 100644 --- a/flake.nix +++ b/flake.nix @@ -23,7 +23,7 @@ self, nixpkgs, flake-utils, - poetry2nix, + pre-commit-hooks, ... }@inputs: flake-utils.lib.eachDefaultSystem ( @@ -31,11 +31,30 @@ let # see https://github.com/nix-community/poetry2nix/tree/master#api for more functions and examples. pkgs = nixpkgs.legacyPackages.${system}; - inherit (poetry2nix.lib.mkPoetry2Nix { inherit pkgs; }) mkPoetryApplication; + poetry2nix = inputs.poetry2nix.lib.mkPoetry2Nix { inherit pkgs; }; + + overrides = poetry2nix.overrides.withDefaults ( + _final: prev: { + # prefer binary wheels instead of source distributions for rust based dependencies + # avoids needing to build them from source. technically a security risk + polars = prev.polars.override { preferWheel = true; }; + ruff = prev.ruff.override { preferWheel = true; }; + greenlet = prev.greenlet.override { preferWheel = true; }; + sqlalchemy = prev.sqlalchemy.override { preferWheel = true; }; + } + ); + + poetryConfig = { + inherit overrides; + projectDir = self; + python = pkgs.python312; + }; in rec { packages = { - myapp = mkPoetryApplication { projectDir = self; }; + myapp = poetry2nix.mkPoetryApplication poetryConfig // { + develop = true; + }; default = self.packages.${system}.myapp; }; @@ -44,6 +63,8 @@ devShells = import ./shell.nix { inherit self + poetryConfig + poetry2nix inputs system checks diff --git a/shell.nix b/shell.nix index 3fe8424..f560e1b 100644 --- a/shell.nix +++ b/shell.nix @@ -1,5 +1,7 @@ { self, + poetryConfig, + poetry2nix, inputs, checks, system, @@ -24,6 +26,7 @@ let treefmt statix nixfmt-rfc-style + ruff ]; }; @@ -32,6 +35,8 @@ let # pull in python/poetry dependencies poetry = pkgs.mkShell { packages = [ pkgs.poetry ]; }; + + poetry2nixshell = poetry2nix.mkPoetryEnv poetryConfig; in { default = pkgs.mkShell { @@ -40,6 +45,7 @@ in rad-dev app poetry + poetry2nixshell ]; }; }