diff --git a/pkgs/by-name/sw/swh/package.nix b/pkgs/by-name/sw/swh/package.nix new file mode 100644 index 000000000000..ef90e1d9cf34 --- /dev/null +++ b/pkgs/by-name/sw/swh/package.nix @@ -0,0 +1,24 @@ +{ + python3Packages, + writeShellApplication, + withSwhPythonPackages ? [ + python3Packages.swh-auth + python3Packages.swh-model + python3Packages.swh-scanner + python3Packages.swh-web-client + ], +}: + +let + python3' = python3Packages.python.withPackages (ps: with ps; [ swh-core ] ++ withSwhPythonPackages); +in +writeShellApplication { + name = "swh"; + text = '' + ${python3'}/bin/swh "$@" + ''; + meta = { + inherit (python3Packages.swh-core.meta) license mainProgram platforms; + description = "Software Heritage command-line client"; + }; +} diff --git a/pkgs/development/python-modules/attrs-strict/default.nix b/pkgs/development/python-modules/attrs-strict/default.nix new file mode 100644 index 000000000000..8f3e9a8548df --- /dev/null +++ b/pkgs/development/python-modules/attrs-strict/default.nix @@ -0,0 +1,42 @@ +{ + lib, + buildPythonPackage, + fetchPypi, + attrs, + setuptools, + setuptools-scm, +}: + +buildPythonPackage rec { + pname = "attrs-strict"; + version = "1.0.1"; + pyproject = true; + + src = fetchPypi { + inherit version; + pname = "attrs_strict"; + hash = "sha256-5wSGNiAUbF8qi2Ac1FdNFIkT2yb8Bjb5Qf5CEuQl6v4="; + }; + + build-system = [ + setuptools + setuptools-scm + ]; + + dependencies = [ + attrs + ]; + + pythonImportsCheck = [ "attrs_strict" ]; + + # No tests in the pypi archive + doCheck = false; + + meta = { + changelog = "https://github.com/bloomberg/attrs-strict/releases/tag/${version}"; + description = "Python package which contains runtime validation for attrs data classes based on the types existing in the typing module"; + homepage = "https://github.com/bloomberg/attrs-strict"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ drupol ]; + }; +} diff --git a/pkgs/development/python-modules/mirakuru/default.nix b/pkgs/development/python-modules/mirakuru/default.nix index b8739779aa77..573548da6825 100644 --- a/pkgs/development/python-modules/mirakuru/default.nix +++ b/pkgs/development/python-modules/mirakuru/default.nix @@ -51,11 +51,14 @@ buildPythonPackage rec { # > ps: vsz: requires entitlement # > ps: rss: requires entitlement # > ps: time: requires entitlement - disabledTests = lib.optionals stdenv.hostPlatform.isDarwin [ - "test_forgotten_stop" - "test_mirakuru_cleanup" - "test_daemons_killing" - ]; + disabledTests = + [ + "test_forgotten_stop" + ] + ++ lib.optionals stdenv.hostPlatform.isDarwin [ + "test_mirakuru_cleanup" + "test_daemons_killing" + ]; meta = with lib; { homepage = "https://pypi.org/project/mirakuru"; diff --git a/pkgs/development/python-modules/swh-auth/default.nix b/pkgs/development/python-modules/swh-auth/default.nix new file mode 100644 index 000000000000..5a5e7e4cc85b --- /dev/null +++ b/pkgs/development/python-modules/swh-auth/default.nix @@ -0,0 +1,66 @@ +{ + lib, + buildPythonPackage, + fetchFromGitLab, + setuptools, + setuptools-scm, + click, + python-keycloak, + python-jose, + pyyaml, + swh-core, + aiocache, + httpx, + pytestCheckHook, + pytest-django, + pytest-mock, + djangorestframework, + starlette, +}: + +buildPythonPackage rec { + pname = "swh-auth"; + version = "0.10.0"; + pyproject = true; + + src = fetchFromGitLab { + domain = "gitlab.softwareheritage.org"; + group = "swh"; + owner = "devel"; + repo = "swh-auth"; + tag = "v${version}"; + hash = "sha256-8ctd5D7zT66oVNZlvRIs8pN7Fe2BhTgC+S9p1HBDO9E="; + }; + + build-system = [ + setuptools + setuptools-scm + ]; + + dependencies = [ + click + python-keycloak + python-jose + pyyaml + swh-core + ]; + + pythonImportsCheck = [ "swh.auth" ]; + + nativeCheckInputs = [ + aiocache + djangorestframework + httpx + pytestCheckHook + pytest-django + pytest-mock + starlette + ]; + + meta = { + description = "Set of utility libraries related to user authentication in applications and services based on the use of Keycloak and OpenID Connect"; + homepage = "https://gitlab.softwareheritage.org/swh/devel/swh-auth"; + license = lib.licenses.gpl3Only; + maintainers = with lib.maintainers; [ drupol ]; + }; +} diff --git a/pkgs/development/python-modules/swh-core/default.nix b/pkgs/development/python-modules/swh-core/default.nix new file mode 100644 index 000000000000..b3ff2d4ac851 --- /dev/null +++ b/pkgs/development/python-modules/swh-core/default.nix @@ -0,0 +1,127 @@ +{ + lib, + stdenv, + buildPythonPackage, + fetchFromGitLab, + backports-entry-points-selectable, + click, + deprecated, + python-magic, + pyyaml, + requests, + sentry-sdk_2, + tenacity, + setuptools, + setuptools-scm, + flask, + hypothesis, + iso8601, + lzip, + msgpack, + psycopg, + pylzma, + pytestCheckHook, + pytest-aiohttp, + pytest-mock, + pytest-postgresql, + pytz, + requests-mock, + types-deprecated, + types-psycopg2, + types-pytz, + types-pyyaml, + types-requests, + unzip, + pkgs, # Only for pkgs.zstd +}: + +buildPythonPackage rec { + pname = "swh-core"; + version = "4.0.0"; + pyproject = true; + + src = fetchFromGitLab { + domain = "gitlab.softwareheritage.org"; + group = "swh"; + owner = "devel"; + repo = "swh-core"; + tag = "v${version}"; + hash = "sha256-kO4B25+oQrQ9sxmKJ5NMKTCCGztRaArFtD7QA8Bytts="; + }; + + build-system = [ + setuptools + setuptools-scm + ]; + + dependencies = [ + backports-entry-points-selectable + click + deprecated + python-magic + pyyaml + requests + sentry-sdk_2 + tenacity + ]; + + pythonImportsCheck = [ "swh.core" ]; + + __darwinAllowLocalNetworking = true; + + nativeCheckInputs = [ + flask + hypothesis + iso8601 + lzip + msgpack + psycopg + pylzma + pytestCheckHook + pytest-aiohttp + pytest-mock + pytest-postgresql + pytz + requests-mock + types-deprecated + types-psycopg2 + types-pytz + types-pyyaml + types-requests + unzip + pkgs.zstd + ]; + + disabledTests = + [ + # ValueError: Unable to configure handler 'systemd' + "test_logging_configure_from_yaml" + ] + ++ lib.optionals (stdenv.hostPlatform.isDarwin) [ + # FileExistsError: [Errno 17] File exists: + "test_uncompress_upper_archive_extension" + # AssertionError: |500 - 632.1152460000121| not within 100 + "test_timed_coroutine" + "test_timed_start_stop_calls" + "test_timed" + "test_timed_no_metric" + ]; + + disabledTestPaths = [ + # ModuleNotFoundError: No module named 'aiohttp_utils' + "swh/core/api/tests/test_async.py" + "swh/core/api/tests/test_rpc_server_asynchronous.py" + # ModuleNotFoundError: No module named 'systemd' + "swh/core/tests/test_logger.py" + # ModuleNotFoundError: No module named 'psycopg_pool' + "swh/core/db/tests" + ]; + + meta = { + description = "Low-level utilities and helpers used by almost all other modules in the stack"; + homepage = "https://gitlab.softwareheritage.org/swh/devel/swh-core"; + license = lib.licenses.gpl3Only; + mainProgram = "swh"; + maintainers = with lib.maintainers; [ drupol ]; + }; +} diff --git a/pkgs/development/python-modules/swh-model/default.nix b/pkgs/development/python-modules/swh-model/default.nix new file mode 100644 index 000000000000..31e0cba03ac2 --- /dev/null +++ b/pkgs/development/python-modules/swh-model/default.nix @@ -0,0 +1,84 @@ +{ + lib, + stdenv, + buildPythonPackage, + fetchFromGitLab, + setuptools, + setuptools-scm, + attrs, + attrs-strict, + dateutils, + deprecated, + hypothesis, + iso8601, + typing-extensions, + click, + dulwich, + aiohttp, + pytestCheckHook, + pytz, + types-click, + types-python-dateutil, + types-pytz, + types-deprecated, + +}: + +buildPythonPackage rec { + pname = "swh-model"; + version = "7.1.0"; + pyproject = true; + + src = fetchFromGitLab { + domain = "gitlab.softwareheritage.org"; + group = "swh"; + owner = "devel"; + repo = "swh-model"; + tag = "v${version}"; + hash = "sha256-I0DaSipE5TVFqAdGkNo4e66l1x4A26EYk0F4tKMy33k="; + }; + + build-system = [ + setuptools + setuptools-scm + ]; + + dependencies = [ + attrs + attrs-strict + click + dulwich + dateutils + deprecated + hypothesis + iso8601 + typing-extensions + ]; + + pythonImportsCheck = [ "swh.model" ]; + + nativeCheckInputs = [ + aiohttp + click + pytestCheckHook + pytz + types-click + types-python-dateutil + types-pytz + types-deprecated + ]; + + pytestFlagsArray = lib.optionals (stdenv.hostPlatform.isDarwin) [ + # OSError: [Errno 92] Illegal byte sequence + "--deselect swh/model/tests/test_cli.py::TestIdentify::test_exclude" + "--deselect swh/model/tests/test_from_disk.py::DirectoryToObjects::test_exclude" + "--deselect swh/model/tests/test_from_disk.py::DirectoryToObjects::test_exclude_trailing" + ]; + + meta = { + description = "Implementation of the Data model of the Software Heritage project, used to archive source code artifacts"; + homepage = "https://gitlab.softwareheritage.org/swh/devel/swh-model"; + license = lib.licenses.gpl3Only; + maintainers = with lib.maintainers; [ drupol ]; + }; +} diff --git a/pkgs/development/python-modules/swh-scanner/default.nix b/pkgs/development/python-modules/swh-scanner/default.nix new file mode 100644 index 000000000000..84aec2c17944 --- /dev/null +++ b/pkgs/development/python-modules/swh-scanner/default.nix @@ -0,0 +1,84 @@ +{ + lib, + buildPythonPackage, + fetchFromGitLab, + setuptools, + setuptools-scm, + requests, + ndjson, + flask, + importlib-metadata, + swh-core, + swh-model, + swh-auth, + swh-web-client, + beautifulsoup4, + pytestCheckHook, + pytest-flask, + pytest-mock, + types-beautifulsoup4, + types-pyyaml, + types-requests, +}: + +buildPythonPackage rec { + pname = "swh-scanner"; + version = "0.8.3"; + pyproject = true; + + src = fetchFromGitLab { + domain = "gitlab.softwareheritage.org"; + group = "swh"; + owner = "devel"; + repo = "swh-scanner"; + tag = "v${version}"; + hash = "sha256-baUUuYFapBD7iuDaDP8CSR9f4glVZcS5qBpZddVf7z8="; + }; + + build-system = [ + setuptools + setuptools-scm + ]; + + dependencies = [ + requests + ndjson + flask + importlib-metadata + swh-core + swh-model + swh-auth + swh-web-client + ]; + + pythonImportsCheck = [ "swh.scanner" ]; + + nativeCheckInputs = [ + beautifulsoup4 + pytestCheckHook + pytest-flask + pytest-mock + swh-core + swh-model + types-beautifulsoup4 + types-pyyaml + types-requests + ]; + + disabledTests = [ + # AttributeError: 'called_once' is not a valid assertion. Use a spec for the mock if 'called_once' is meant to be an attribute. + "test_scan_api_url_option_success" + ]; + + disabledTestPaths = [ + # pytestRemoveBytecodePhase fails with: "error (ignored): error: opening directory "/tmp/nix-build-python3.12-swh-scanner-0.8.3.drv-5/build/pytest-of-nixbld/pytest-0/test_randomdir_policy_info_cal0/big-directory/dir/dir/dir/ ......" + "swh/scanner/tests/test_policy.py" + ]; + + meta = { + description = "Implementation of the Data model of the Software Heritage project, used to archive source code artifacts"; + homepage = "https://gitlab.softwareheritage.org/swh/devel/swh-model"; + license = lib.licenses.gpl3Only; + maintainers = with lib.maintainers; [ drupol ]; + }; +} diff --git a/pkgs/development/python-modules/swh-web-client/default.nix b/pkgs/development/python-modules/swh-web-client/default.nix new file mode 100644 index 000000000000..79b68cc1b926 --- /dev/null +++ b/pkgs/development/python-modules/swh-web-client/default.nix @@ -0,0 +1,66 @@ +{ + lib, + buildPythonPackage, + fetchFromGitLab, + setuptools, + setuptools-scm, + click, + dateutils, + requests, + swh-auth, + swh-core, + swh-model, + pytestCheckHook, + pytest-mock, + requests-mock, + types-python-dateutil, + types-pyyaml, + types-requests, +}: + +buildPythonPackage rec { + pname = "swh-web-client"; + version = "0.9.0"; + pyproject = true; + + src = fetchFromGitLab { + domain = "gitlab.softwareheritage.org"; + group = "swh"; + owner = "devel"; + repo = "swh-web-client"; + tag = "v${version}"; + hash = "sha256-/h3TaEwo2+B89KFpIKi9LH0tlGplsv3y18pC0TKM0jA="; + }; + + build-system = [ + setuptools + setuptools-scm + ]; + + dependencies = [ + click + dateutils + requests + swh-auth + swh-core + swh-model + ]; + + pythonImportsCheck = [ "swh.web.client" ]; + + nativeCheckInputs = [ + pytestCheckHook + pytest-mock + requests-mock + types-python-dateutil + types-pyyaml + types-requests + ]; + + meta = { + description = "Client for Software Heritage Web applications, via their APIs"; + homepage = "https://gitlab.softwareheritage.org/swh/devel/swh-web-client"; + license = lib.licenses.gpl3Only; + maintainers = with lib.maintainers; [ drupol ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index ba4fe4aa1d7f..84089eace07f 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -1053,6 +1053,8 @@ self: super: with self; { attrs = callPackage ../development/python-modules/attrs { }; + attrs-strict = callPackage ../development/python-modules/attrs-strict { }; + aubio = callPackage ../development/python-modules/aubio { }; audible = callPackage ../development/python-modules/audible { }; @@ -17349,6 +17351,16 @@ self: super: with self; { swagger-ui-bundle = callPackage ../development/python-modules/swagger-ui-bundle { }; + swh-auth = callPackage ../development/python-modules/swh-auth { }; + + swh-core = callPackage ../development/python-modules/swh-core { }; + + swh-model = callPackage ../development/python-modules/swh-model { }; + + swh-scanner = callPackage ../development/python-modules/swh-scanner { }; + + swh-web-client = callPackage ../development/python-modules/swh-web-client { }; + swift = callPackage ../development/python-modules/swift { }; swifter = callPackage ../development/python-modules/swifter { };