summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--flake.lock26
-rw-r--r--flake.nix59
-rw-r--r--nix/default.nix16
-rw-r--r--nix/module.nix27
-rw-r--r--nix/server.nix13
-rw-r--r--tests/test_all.py13
7 files changed, 144 insertions, 13 deletions
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"}