add fastapi

This commit is contained in:
Anish Lakhwara 2022-11-20 18:29:07 +10:00
commit 585caaf327
5 changed files with 183 additions and 0 deletions

18
basic_test.py Normal file
View file

@ -0,0 +1,18 @@
import os
from pytest import mark
def test_one():
assert 2 + 2 == 4
def test_nonstandard_module():
import numpy as np
assert np.linspace(1,2).shape == (50,)
@mark.skipif(os.getenv('GITHUB_ACTIONS') != 'true',
reason = 'Not running on GHA')
def test_version():
import sys
vi = sys.version_info
found = f'python{vi.major}{vi.minor}'
expected = os.getenv('EXPECTED_PY')
assert(found == expected)

60
flake.lock Normal file
View file

@ -0,0 +1,60 @@
{
"nodes": {
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1641205782,
"narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-utils": {
"locked": {
"lastModified": 1642700792,
"narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "846b2ae0fc4cc943637d3d1def4454213e203cba",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1655200170,
"narHash": "sha256-/yzkX+10sJhYNIcTtZ5ObS+nh/HrJp01XLaubzbRDcU=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "9ff91ce2e4c5d70551d4c8fd8830931c6c6b26b8",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-22.05",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

86
flake.nix Normal file
View file

@ -0,0 +1,86 @@
# The core functionality is provided here using flakes. Legacy support for
# `nix-shell` is provided by a wrapper in `shell.nix`.
# TODO Hacking around the Qt problems
# TODO PyPI package not in nixpkgs
{
description = "Python development environment";
inputs = {
# Version pinning is managed in flake.lock. Upgrading can be done with
# something like
#
# nix flake lock --update-input nixpkgs
nixpkgs .url = "github:nixos/nixpkgs/nixos-22.05";
flake-utils .url = "github:numtide/flake-utils";
flake-compat = {
url = "github:edolstra/flake-compat";
flake = false;
};
};
outputs = { self, nixpkgs, flake-utils, ... }:
# Option 1: try to support each default system
flake-utils.lib.eachDefaultSystem # NB Some packages in nixpkgs are not supported on some systems
# Option 2: try to support selected systems
# flake-utils.lib.eachSystem ["x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin"]
(system:
let
pkgs = import nixpkgs {
inherit system;
# Any overlays you need can go here
overlays = [ ];
};
# ----- A Python interpreter with the packages that interest us -------
python-with-all-my-packages = (python:
(python.withPackages (ps: [
ps.pytest
ps.fastapi
])));
in
rec {
#devShell = self.devShells.${ system }.python310; # does not need `rec`
devShell = devShells.python310;
devShells =
builtins.listToAttrs (
builtins.map
(
pythonVersion: {
name = pythonVersion;
value = pkgs.mkShell {
buildInputs = [
(python-with-all-my-packages pkgs.${ pythonVersion })
pkgs.just
pkgs.cowsay
];
packages = [
pkgs.python3Packages.python-lsp-server
pkgs.lolcat
pkgs.exa
];
shellHook =
''
export PS1="${pythonVersion} devshell> "
alias foo='cowsay Foo'
alias bar='exa -l | lolcat'
alias baz='cowsay What is the difference between buildIntputs and packages? | lolcat'
'';
};
}
) [ "python37" "python38" "python39" "python310" ]
);
}
);
}

4
justfile Normal file
View file

@ -0,0 +1,4 @@
# -*-Makefile-*-
test colours='':
pytest -v {{colours}}

15
shell.nix Normal file
View file

@ -0,0 +1,15 @@
# Adapts flake.nix to support legacy `nix-shell`
(import
(
let
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
in
fetchTarball {
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
sha256 = lock.nodes.flake-compat.locked.narHash;
}
)
{
src = ./.;
}).shellNix