From ee17bbadfed47af24572919d143f260c9c57bb36 Mon Sep 17 00:00:00 2001 From: seth Date: Sun, 23 Apr 2023 02:27:01 -0400 Subject: feat: add nix flake --- .gitignore | 3 +++ flake.lock | 26 ++++++++++++++++++++++++ flake.nix | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ nix/default.nix | 16 +++++++++++++++ nix/module.nix | 27 +++++++++++++++++++++++++ nix/server.nix | 13 ++++++++++++ tests/test_all.py | 13 ------------ 7 files changed, 144 insertions(+), 13 deletions(-) create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 nix/default.nix create mode 100644 nix/module.nix create mode 100644 nix/server.nix delete mode 100644 tests/test_all.py diff --git a/.gitignore b/.gitignore index 68bc17f..b6f78d8 100644 --- a/.gitignore +++ b/.gitignore @@ -158,3 +158,6 @@ cython_debug/ # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ + +# nix +result diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..2ae9b9a --- /dev/null +++ b/flake.lock @@ -0,0 +1,26 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1681920287, + "narHash": "sha256-+/d6XQQfhhXVfqfLROJoqj3TuG38CAeoT6jO1g9r1k0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "645bc49f34fa8eff95479f0345ff57e55b53437e", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable", + "type": "indirect" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..5d9942c --- /dev/null +++ b/flake.nix @@ -0,0 +1,59 @@ +{ + description = "silly little api"; + + inputs.nixpkgs.url = "nixpkgs/nixos-unstable"; + + outputs = { + self, + nixpkgs, + }: let + version = self.lastModifiedDate; + + systems = [ + "x86_64-linux" + "aarch64-linux" + "x86_64-darwin" + "aarch64-darwin" + ]; + + forAllSystems = nixpkgs.lib.genAttrs systems; + nixpkgsFor = forAllSystems (system: + import nixpkgs { + inherit system; + overlays = [self.overlays.default]; + }); + + packageFn = pkgs: let + inherit (pkgs) callPackage; + in { + guzzle-api = callPackage ./nix {inherit version;}; + guzzle-api-server = callPackage ./nix/server.nix {}; + }; + in { + devShells = forAllSystems (system: let + pkgs = nixpkgsFor.${system}; + inherit (pkgs) mkShell; + in { + default = mkShell { + packages = with pkgs.python311Packages; [ + python + fastapi + httpx + pydantic + pylint + toml + uvicorn + yapf + ]; + }; + }); + + nixosModules.guzzle_api = import ./nix/module.nix; + + packages = forAllSystems (system: let + pkgs = nixpkgsFor.${system}; + in {inherit (pkgs) guzzle-api guzzle-api-server;}); + + overlays.default = final: _: packageFn final; + }; +} diff --git a/nix/default.nix b/nix/default.nix new file mode 100644 index 0000000..fca9993 --- /dev/null +++ b/nix/default.nix @@ -0,0 +1,16 @@ +{ + lib, + python311Packages, + version, +}: +python311Packages.buildPythonPackage { + pname = "guzzle-api"; + inherit version; + + src = lib.cleanSource ../.; + format = "flit"; + doCheck = false; + + propagatedBuildInputs = with python311Packages; [fastapi pydantic uvicorn]; + propagatedNativeBuildInputs = with python311Packages; [flit-core]; +} diff --git a/nix/module.nix b/nix/module.nix new file mode 100644 index 0000000..0dff2d0 --- /dev/null +++ b/nix/module.nix @@ -0,0 +1,27 @@ +{ + config, + lib, + pkgs, + ... +}: let + cfg = config.services.guzzle-api; + inherit (lib) mkDefault mkEnableOption mkIf; +in { + options.services.guzzle-api.enable = mkEnableOption "enable guzzle-api"; + + config.systemd.services.guzzle-api = mkIf cfg.enable { + guzzle-api = { + enable = mkDefault true; + ports = mkDefault ["8080:80"]; + wantedBy = ["multi-user.target"]; + after = ["network.target"]; + script = '' + ${pkgs.guzzle-api-server} --host 0.0.0.0 --port 8000 + ''; + serviceConfig = mkDefault { + Restart = "always"; + Type = "simple"; + }; + }; + }; +} diff --git a/nix/server.nix b/nix/server.nix new file mode 100644 index 0000000..18e4673 --- /dev/null +++ b/nix/server.nix @@ -0,0 +1,13 @@ +{ + writeShellApplication, + python311, + guzzle-api, + ... +}: +writeShellApplication { + name = "guzzle-api-server"; + runtimeInputs = [(python311.withPackages (p: [p.uvicorn guzzle-api]))]; + text = '' + uvicorn guzzle_api.api:app "$@" + ''; +} diff --git a/tests/test_all.py b/tests/test_all.py deleted file mode 100644 index 3a405eb..0000000 --- a/tests/test_all.py +++ /dev/null @@ -1,13 +0,0 @@ -from fastapi.testclient import TestClient - -from guzzle_api.api import app - -client = TestClient(app) - -resp = client.get("/get_random_teawie").text -print(f"random:\n {resp}") - -resp = client.get("/list_teawies?limit=6").text -print(f"list:\n {resp}") - -tests = {"/list_teawies"} -- cgit v1.2.3