From 33910708dd00b1e9ba65601847e2d4e0bf8c0002 Mon Sep 17 00:00:00 2001 From: inexcode Date: Thu, 25 Aug 2022 22:27:14 +0400 Subject: [PATCH] SelfPrivacy API 2.0 --- default.nix | 35 ++++++++- pkgs/selfprivacy-graphql-api/default.nix | 61 +++++++++++++++ strawberry-graphql.patch | 96 ++++++++++++++++++++++++ 3 files changed, 190 insertions(+), 2 deletions(-) create mode 100644 pkgs/selfprivacy-graphql-api/default.nix create mode 100644 strawberry-graphql.patch diff --git a/default.nix b/default.nix index 7843e34..c8189c0 100644 --- a/default.nix +++ b/default.nix @@ -1,7 +1,38 @@ let - pkgs = import {}; + pkgs = import { }; in self: super: rec { - selfprivacy-api = super.callPackage ./pkgs/selfprivacy-api {}; + python39 = super.python39.override { + packageOverrides = python-self: python-super: { + strawberry_graphql = python-super.buildPythonPackage rec { + pname = "strawberry-graphql"; + version = "0.123.0"; + format = "pyproject"; + patches = [ + ./strawberry-graphql.patch + ]; + propagatedBuildInputs = with self.python39Packages; [ + typing-extensions + graphql-core + python-multipart + python-dateutil + flask + pydantic + pygments + poetry + ]; + src = python-super.fetchPypi { + inherit pname version; + sha256 = "sha256-KsmZ5Xv8tUg6yBxieAEtvoKoRG60VS+iVGV0X6oCExo="; + }; + }; + }; + }; + pythonPackages = python39.pkgs; + selfprivacy-api = super.callPackage ./pkgs/selfprivacy-api {}; + selfprivacy-graphql-api = super.callPackage ./pkgs/selfprivacy-graphql-api { + nixpkgs = pkgs; + pythonPkgs = pythonPackages; + }; } diff --git a/pkgs/selfprivacy-graphql-api/default.nix b/pkgs/selfprivacy-graphql-api/default.nix new file mode 100644 index 0000000..b65b0f1 --- /dev/null +++ b/pkgs/selfprivacy-graphql-api/default.nix @@ -0,0 +1,61 @@ +{ nixpkgs ? import { }, pythonPkgs ? nixpkgs.pkgs.python39Packages }: + +let + inherit (nixpkgs) pkgs; + inherit pythonPkgs; + + selfprivacy-graphql-api = + { buildPythonPackage + , fetchPypi + , setuptools + , portalocker + , pytz + , pytest + , pytest-mock + , pytest-datadir + , huey + , gevent + , mnemonic + , pydantic + , typing-extensions + , strawberry_graphql + , psutil + , fastapi + , uvicorn + }: + pythonPkgs.buildPythonApplication rec { + pname = "selfprivacy-graphql-api"; + version = "2.0.0"; + src = builtins.fetchGit { + url = "https://git.selfprivacy.org/SelfPrivacy/selfprivacy-rest-api.git"; + rev = "0e68ef1386e44872f41741edd24b81e29013ee39"; + }; + propagatedBuildInputs = [ + setuptools + portalocker + pytz + pytest + pytest-mock + pytest-datadir + huey + gevent + mnemonic + pydantic + typing-extensions + strawberry_graphql + psutil + fastapi + uvicorn + ]; + meta = { + description = '' + SelfPrivacy Server Management API + ''; + }; + passthru = { + pythonPath = pythonPkgs.makePythonPath propagatedBuildInputs; + }; + }; + drv = pythonPkgs.callPackage selfprivacy-graphql-api { }; +in +drv diff --git a/strawberry-graphql.patch b/strawberry-graphql.patch new file mode 100644 index 0000000..b64a7ab --- /dev/null +++ b/strawberry-graphql.patch @@ -0,0 +1,96 @@ +diff --git a/pyproject.toml b/pyproject.toml +index 0cbf2ef..7736e92 100644 +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -51,7 +51,6 @@ python-multipart = "^0.0.5" + sanic = {version = ">=20.12.2,<22.0.0", optional = true} + aiohttp = {version = "^3.7.4.post0", optional = true} + fastapi = {version = ">=0.65.2", optional = true} +-"backports.cached-property" = "^1.0.1" + + [tool.poetry.dev-dependencies] + pytest = "^7.1" +diff --git a/strawberry/directive.py b/strawberry/directive.py +index 491e390..26ba345 100644 +--- a/strawberry/directive.py ++++ b/strawberry/directive.py +@@ -1,10 +1,10 @@ + from __future__ import annotations + + import dataclasses ++from functools import cached_property + import inspect + from typing import Any, Callable, List, Optional, TypeVar + +-from backports.cached_property import cached_property + from typing_extensions import Annotated + + from graphql import DirectiveLocation +diff --git a/strawberry/extensions/tracing/datadog.py b/strawberry/extensions/tracing/datadog.py +index 01fba20..7c06950 100644 +--- a/strawberry/extensions/tracing/datadog.py ++++ b/strawberry/extensions/tracing/datadog.py +@@ -1,8 +1,8 @@ + import hashlib ++from functools import cached_property + from inspect import isawaitable + from typing import Optional + +-from backports.cached_property import cached_property + from ddtrace import tracer + + from strawberry.extensions import Extension +diff --git a/strawberry/field.py b/strawberry/field.py +index 80ed12a..f1bf2e9 100644 +--- a/strawberry/field.py ++++ b/strawberry/field.py +@@ -1,5 +1,6 @@ + import builtins + import dataclasses ++from functools import cached_property + import inspect + import sys + from typing import ( +@@ -18,7 +19,6 @@ from typing import ( + overload, + ) + +-from backports.cached_property import cached_property + from typing_extensions import Literal + + from strawberry.annotation import StrawberryAnnotation +diff --git a/strawberry/types/fields/resolver.py b/strawberry/types/fields/resolver.py +index c5b3edd..f4112ce 100644 +--- a/strawberry/types/fields/resolver.py ++++ b/strawberry/types/fields/resolver.py +@@ -1,6 +1,7 @@ + from __future__ import annotations as _ + + import builtins ++from functools import cached_property + import inspect + import sys + import warnings +@@ -22,7 +23,6 @@ from typing import ( # type: ignore[attr-defined] + _eval_type, + ) + +-from backports.cached_property import cached_property + from typing_extensions import Annotated, Protocol, get_args, get_origin + + from strawberry.annotation import StrawberryAnnotation +diff --git a/strawberry/types/info.py b/strawberry/types/info.py +index a172c04..475a3ee 100644 +--- a/strawberry/types/info.py ++++ b/strawberry/types/info.py +@@ -1,9 +1,8 @@ + import dataclasses ++from functools import cached_property + import warnings + from typing import TYPE_CHECKING, Any, Dict, Generic, List, Optional, TypeVar, Union + +-from backports.cached_property import cached_property +- + from graphql import GraphQLResolveInfo, OperationDefinitionNode + from graphql.language import FieldNode + from graphql.pyutils.path import Path