diff --git a/pkgs/by-name/sp/spoolman/common.nix b/pkgs/by-name/sp/spoolman/common.nix new file mode 100644 index 000000000000..2985fb71551b --- /dev/null +++ b/pkgs/by-name/sp/spoolman/common.nix @@ -0,0 +1,25 @@ +{ lib, fetchFromGitHub }: +let + version = "0.22.1"; +in +{ + inherit version; + + src = fetchFromGitHub { + owner = "Donkie"; + repo = "Spoolman"; + rev = "v${version}"; + hash = "sha256-EVGpwcjEh4u8Vtgu2LypqMqArYLZe7oh1qYhGZpgjh0="; + }; + + meta = with lib; { + description = "Keep track of your inventory of 3D-printer filament spools"; + homepage = "https://github.com/Donkie/Spoolman"; + license = licenses.mit; + maintainers = with maintainers; [ + MayNiklas + pinpox + ]; + mainProgram = "spoolman"; + }; +} diff --git a/pkgs/by-name/sp/spoolman/frontend.nix b/pkgs/by-name/sp/spoolman/frontend.nix new file mode 100644 index 000000000000..9386853458e0 --- /dev/null +++ b/pkgs/by-name/sp/spoolman/frontend.nix @@ -0,0 +1,23 @@ +{ buildNpmPackage, callPackage }: +let + common = callPackage ./common.nix { }; +in + +buildNpmPackage { + pname = "spoolman-frontend"; + + inherit (common) version; + + src = "${common.src}/client"; + + npmDepsHash = "sha256-E4DvEOSHfwwM0C+vTRMDQbCNv2IDyFOFwfqszrI+uOA="; + + VITE_APIURL = "/api/v1"; + + installPhase = "cp -r dist $out"; + + meta = common.meta // { + description = "Spoolman frontend"; + mainProgram = "spoolman-frontend"; + }; +} diff --git a/pkgs/by-name/sp/spoolman/package.nix b/pkgs/by-name/sp/spoolman/package.nix new file mode 100644 index 000000000000..f31ed152bb19 --- /dev/null +++ b/pkgs/by-name/sp/spoolman/package.nix @@ -0,0 +1,79 @@ +{ + python312, + lib, + callPackage, + writeShellScript, + makeWrapper, +}: + +let + common = callPackage ./common.nix { }; + frontend = callPackage ./frontend.nix { }; + python = python312; +in + +python.pkgs.buildPythonPackage rec { + + pname = "spoolman"; + inherit (common) version src; + + pyproject = true; + + nativeBuildInputs = [ + makeWrapper + python.pkgs.pdm-backend + python.pkgs.pythonRelaxDepsHook + ]; + + pythonRelaxDeps = [ "setuptools" ]; + + postPatch = '' + substituteInPlace pyproject.toml --replace-fail psycopg2-binary psycopg2 + ''; + + propagatedBuildInputs = with python.pkgs; [ + uvloop + alembic + asyncpg + fastapi + hishel + httptools + httpx + aiosqlite + platformdirs + prometheus-client + psycopg2 + pydantic + scheduler + setuptools + sqlalchemy + sqlalchemy-cockroachdb + uvicorn + websockets + ]; + + pythonImportsCheck = [ "spoolman" ]; + + postInstall = + let + start_script = writeShellScript "start-spoolman" '' + ${lib.getExe python.pkgs.uvicorn} "$@" spoolman.main:app; + ''; + in + '' + mkdir -p $out/runpath/client/dist $out/bin + cp -r $src/* $out/runpath + cp -r ${frontend}/* $out/runpath/client/dist + + makeWrapper ${start_script} $out/bin/spoolman \ + --chdir $out/runpath \ + --prefix PYTHONPATH : "$out/${python.sitePackages}" \ + --prefix PYTHONPATH : "${python.pkgs.makePythonPath propagatedBuildInputs}" \ + --prefix PATH : "${python.pkgs.alembic}/bin" + ''; + + meta = common.meta // { + description = "Spoolman server"; + mainProgram = "spoolman"; + }; +} diff --git a/pkgs/development/python-modules/scheduler/default.nix b/pkgs/development/python-modules/scheduler/default.nix new file mode 100644 index 000000000000..9a4c6f6d36ae --- /dev/null +++ b/pkgs/development/python-modules/scheduler/default.nix @@ -0,0 +1,37 @@ +{ + lib, + buildPythonPackage, + fetchPypi, + setuptools, + wheel, + typeguard, +}: + +buildPythonPackage rec { + pname = "scheduler"; + version = "0.8.5"; + pyproject = true; + + src = fetchPypi { + inherit pname version; + hash = "sha256-8t1AUbD6cpETSoqoY88bSZmj7FuaF6c+7kJDJX2Lp4k="; + }; + + nativeBuildInputs = [ + setuptools + wheel + ]; + + propagatedBuildInputs = [ + typeguard + ]; + + pythonImportsCheck = [ "scheduler" ]; + + meta = with lib; { + description = "A simple in-process python scheduler library with asyncio, threading and timezone support. Use datetime standard library objects for planning of Jobs depending on time cycles, fixed times, weekdays, dates, weights, offsets and execution counts"; + homepage = "https://pypi.org/project/scheduler/"; + license = licenses.lgpl3; + maintainers = with maintainers; [ pinpox ]; + }; +} diff --git a/pkgs/development/python-modules/sqlalchemy-cockroachdb/default.nix b/pkgs/development/python-modules/sqlalchemy-cockroachdb/default.nix new file mode 100644 index 000000000000..0cbdb6651a97 --- /dev/null +++ b/pkgs/development/python-modules/sqlalchemy-cockroachdb/default.nix @@ -0,0 +1,37 @@ +{ + lib, + buildPythonPackage, + fetchPypi, + setuptools, + wheel, + sqlalchemy, +}: + +buildPythonPackage rec { + pname = "sqlalchemy-cockroachdb"; + version = "2.0.2"; + pyproject = true; + + src = fetchPypi { + inherit pname version; + hash = "sha256-EZdW65BYVdahE0W5nP6FMDGj/lmKnEvzWo3ayfif6Mw="; + }; + + nativeBuildInputs = [ + setuptools + wheel + ]; + + propagatedBuildInputs = [ + sqlalchemy + ]; + + pythonImportsCheck = [ "sqlalchemy_cockroachdb" ]; + + meta = with lib; { + description = "CockroachDB dialect for SQLAlchemy"; + homepage = "https://pypi.org/project/sqlalchemy-cockroachdb"; + license = licenses.asl20; + maintainers = with maintainers; [ pinpox ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 91f1fb0c6de2..c535be56dcdf 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -15539,6 +15539,8 @@ self: super: with self; { schedule = callPackage ../development/python-modules/schedule { }; + scheduler = callPackage ../development/python-modules/scheduler { }; + schema = callPackage ../development/python-modules/schema { }; schema-salad = callPackage ../development/python-modules/schema-salad { }; @@ -16568,6 +16570,8 @@ self: super: with self; { sqlalchemy-citext = callPackage ../development/python-modules/sqlalchemy-citext { }; + sqlalchemy-cockroachdb = callPackage ../development/python-modules/sqlalchemy-cockroachdb { }; + sqlalchemy-continuum = callPackage ../development/python-modules/sqlalchemy-continuum { }; sqlalchemy-file = callPackage ../development/python-modules/sqlalchemy-file { };