diff --git a/pkgs/by-name/ca/calibre-web/package.nix b/pkgs/by-name/ca/calibre-web/package.nix index c3f125261ca8..6e7fe46c42fa 100644 --- a/pkgs/by-name/ca/calibre-web/package.nix +++ b/pkgs/by-name/ca/calibre-web/package.nix @@ -1,57 +1,24 @@ -{ lib -, fetchFromGitHub -, nixosTests -, nix-update-script -, python3 +{ + lib, + stdenv, + fetchFromGitHub, + nix-update-script, + nixosTests, + python3Packages, }: -let - python = python3.override { - self = python; - packageOverrides = self: super: { - sqlalchemy = super.sqlalchemy_1_4; - }; - }; -in -python.pkgs.buildPythonApplication rec { +python3Packages.buildPythonApplication rec { pname = "calibre-web"; - version = "0.6.22"; + version = "0.6.24"; + pyproject = true; src = fetchFromGitHub { owner = "janeczku"; repo = "calibre-web"; - rev = version; - hash = "sha256-nWZmDasBH+DW/+Cvw510mOv11CXorRnoBwNFpoKPErY="; + tag = version; + hash = "sha256-DYhlD3ly6U/e5cDlsubDyW1uKeCtB+HrpagJlNDJhyI="; }; - propagatedBuildInputs = with python.pkgs; [ - advocate - apscheduler - babel - bleach - chardet - flask - flask-babel - flask-limiter - flask-login - flask-principal - flask-simpleldap - flask-wtf - iso-639 - jsonschema - lxml - pypdf - python-magic - pytz - regex - requests - sqlalchemy - tornado - unidecode - wand - werkzeug - ]; - patches = [ # default-logger.patch switches default logger to /dev/stdout. Otherwise calibre-web tries to open a file relative # to its location, which can't be done as the store is read-only. Log file location can later be configured using UI @@ -69,24 +36,121 @@ python.pkgs.buildPythonApplication rec { mv cps.py src/calibreweb/__init__.py mv cps src/calibreweb - substituteInPlace setup.cfg \ - --replace-fail "cps = calibreweb:main" "calibre-web = calibreweb:main" + substituteInPlace pyproject.toml \ + --replace-fail 'cps = "calibreweb:main"' 'calibre-web = "calibreweb:main"' ''; - # Upstream repo doesn't provide any tests. - doCheck = false; + build-system = [ python3Packages.setuptools ]; + + dependencies = with python3Packages; [ + apscheduler + babel + bleach + chardet + cryptography + flask + flask-babel + flask-httpauth + flask-limiter + flask-principal + flask-wtf + iso-639 + lxml + netifaces-plus + pycountry + pypdf + python-magic + pytz + regex + requests + sqlalchemy + tornado + unidecode + urllib3 + wand + ]; + + optional-dependencies = { + comics = with python3Packages; [ + comicapi + natsort + ]; + + gdrive = with python3Packages; [ + gevent + google-api-python-client + greenlet + httplib2 + oauth2client + pyasn1-modules + # https://github.com/NixOS/nixpkgs/commit/bf28e24140352e2e8cb952097febff0e94ea6a1e + # pydrive2 + pyyaml + rsa + uritemplate + ]; + + gmail = with python3Packages; [ + google-api-python-client + google-auth-oauthlib + ]; + + # We don't support the goodreads feature, as the `goodreads` package is + # archived and depends on other long unmaintained packages (rauth & nose) + # goodreads = [ ]; + + kobo = with python3Packages; [ jsonschema ]; + + ldap = with python3Packages; [ + flask-simpleldap + python-ldap + ]; + + metadata = with python3Packages; [ + faust-cchardet + html2text + markdown2 + mutagen + py7zr + pycountry + python-dateutil + rarfile + scholarly + ]; + + oauth = with python3Packages; [ + flask-dance + sqlalchemy-utils + ]; + }; + + pythonRelaxDeps = [ + "apscheduler" + "bleach" + "cryptography" + "flask" + "flask-limiter" + "lxml" + "pypdf" + "regex" + ]; + + nativeCheckInputs = lib.flatten (lib.attrValues optional-dependencies); + + pythonImportsCheck = [ "calibreweb" ]; passthru = { - tests.calibre-web = nixosTests.calibre-web; + tests = lib.optionalAttrs stdenv.hostPlatform.isLinux { inherit (nixosTests) calibre-web; }; updateScript = nix-update-script { }; }; - meta = with lib; { + meta = { description = "Web app for browsing, reading and downloading eBooks stored in a Calibre database"; homepage = "https://github.com/janeczku/calibre-web"; - license = licenses.gpl3Plus; - maintainers = with maintainers; [ pborzenkov ]; - platforms = platforms.all; + changelog = "https://github.com/janeczku/calibre-web/releases/tag/${src.tag}"; + license = lib.licenses.gpl3Plus; + maintainers = with lib.maintainers; [ pborzenkov ]; mainProgram = "calibre-web"; + platforms = lib.platforms.all; }; } diff --git a/pkgs/development/python-modules/comicapi/default.nix b/pkgs/development/python-modules/comicapi/default.nix new file mode 100644 index 000000000000..4a6721359728 --- /dev/null +++ b/pkgs/development/python-modules/comicapi/default.nix @@ -0,0 +1,83 @@ +{ + lib, + stdenv, + buildPythonPackage, + fetchFromGitHub, + importlib-metadata, + natsort, + pillow, + py7zr, + pycountry, + pyicu, + pytestCheckHook, + pythonOlder, + rapidfuzz, + rarfile, + setuptools, + setuptools-scm, + text2digits, + wheel, + wordninja, +}: + +buildPythonPackage rec { + pname = "comicapi"; + version = "3.2.0"; + pyproject = true; + + disabled = pythonOlder "3.8"; + + src = fetchFromGitHub { + owner = "comictagger"; + repo = "comicapi"; + rev = "2bf8332114e49add0bbc0fd3d85bdbba02de3d1a"; + hash = "sha256-Cd3ILy/4PqWUj1Uu9of9gCpdVp2R6CXjPOuSXgrB894="; + }; + + build-system = [ + setuptools + setuptools-scm + wheel + ]; + + dependencies = [ + importlib-metadata + natsort + pillow + pycountry + rapidfuzz + text2digits + wordninja + ]; + + optional-dependencies = { + _7z = [ py7zr ]; + + all = [ + py7zr + rarfile + ] ++ lib.optional (stdenv.hostPlatform.isDarwin || stdenv.hostPlatform.isLinux) pyicu; + + cbr = [ rarfile ]; + + icu = lib.optional (stdenv.hostPlatform.isDarwin || stdenv.hostPlatform.isLinux) pyicu; + }; + + nativeCheckInputs = [ pytestCheckHook ] ++ lib.flatten (lib.attrValues optional-dependencies); + + pythonRelaxDeps = [ "pycountry" ]; + + disabledTests = [ + # AssertionError + "test_copy_from_archive" + ]; + + pythonImportsCheck = [ "comicapi" ]; + + meta = { + description = "Comic archive (cbr/cbz/cbt) and metadata utilities"; + homepage = "https://github.com/comictagger/comicapi"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ getchoo ]; + }; +} diff --git a/pkgs/development/python-modules/flask-dance/default.nix b/pkgs/development/python-modules/flask-dance/default.nix new file mode 100644 index 000000000000..5c6a15fe48e0 --- /dev/null +++ b/pkgs/development/python-modules/flask-dance/default.nix @@ -0,0 +1,95 @@ +{ + lib, + betamax, + blinker, + buildPythonPackage, + coverage, + fetchFromGitHub, + flask, + flask-caching, + flask-login, + flask-sqlalchemy, + flit, + freezegun, + oauthlib, + pallets-sphinx-themes, + pillow, + pytest, + pytest-mock, + pytestCheckHook, + requests, + requests-oauthlib, + responses, + sphinx, + sphinxcontrib-seqdiag, + sphinxcontrib-spelling, + sqlalchemy, + urlobject, + werkzeug, +}: + +buildPythonPackage rec { + pname = "flask-dance"; + version = "7.1.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "singingwolfboy"; + repo = "flask-dance"; + tag = "v${version}"; + hash = "sha256-rKHC0G5S7l52QSrbbweMii68AZuBAgf6tYsJdPKIeUk="; + }; + + build-system = [ flit ]; + + dependencies = [ + flask + oauthlib + requests + requests-oauthlib + urlobject + werkzeug + ]; + + optional-dependencies = { + docs = [ + betamax + pallets-sphinx-themes + pillow + sphinx + sphinxcontrib-seqdiag + sphinxcontrib-spelling + sqlalchemy + ]; + + signals = [ blinker ]; + + sqla = [ sqlalchemy ]; + + test = [ + betamax + coverage + flask-caching + flask-login + flask-sqlalchemy + freezegun + oauthlib + pytest + pytest-mock + responses + sqlalchemy + ]; + }; + + nativeCheckInputs = [ pytestCheckHook ] ++ lib.flatten (lib.attrValues optional-dependencies); + + pythonImportsCheck = [ "flask_dance" ]; + + meta = { + description = "Doing the OAuth dance with style using Flask, requests, and oauthlib"; + homepage = "https://github.com/singingwolfboy/flask-dance"; + changelog = "https://github.com/singingwolfboy/flask-dance/releases/tag/${src.tag}"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ getchoo ]; + }; +} diff --git a/pkgs/development/python-modules/netifaces-plus/default.nix b/pkgs/development/python-modules/netifaces-plus/default.nix new file mode 100644 index 000000000000..dcce0b372d18 --- /dev/null +++ b/pkgs/development/python-modules/netifaces-plus/default.nix @@ -0,0 +1,37 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + pythonOlder, + setuptools, + wheel, +}: + +buildPythonPackage rec { + pname = "netifaces-plus"; + version = "0.12.4"; + pyproject = true; + + disabled = pythonOlder "3.6"; + + src = fetchFromGitHub { + owner = "tsukumijima"; + repo = "netifaces-plus"; + tag = "release_${lib.replaceStrings [ "." ] [ "_" ] version}"; + hash = "sha256-3CYAe0doWMagcUIN9+ikH9gEST9AqglSQDlZsKOMnC8="; + }; + + build-system = [ + setuptools + wheel + ]; + + pythonImportsCheck = [ "netifaces" ]; + + meta = { + description = "Portable network interface information"; + homepage = "https://github.com/tsukumijima/netifaces-plus"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ getchoo ]; + }; +} diff --git a/pkgs/development/python-modules/scholarly/default.nix b/pkgs/development/python-modules/scholarly/default.nix new file mode 100644 index 000000000000..39f24bbc2781 --- /dev/null +++ b/pkgs/development/python-modules/scholarly/default.nix @@ -0,0 +1,69 @@ +{ + lib, + arrow, + beautifulsoup4, + bibtexparser, + buildPythonPackage, + deprecated, + fake-useragent, + fetchFromGitHub, + free-proxy, + httpx, + python-dotenv, + requests, + selenium, + setuptools, + sphinx-rtd-theme, + stem, + typing-extensions, + wheel, +}: + +buildPythonPackage rec { + pname = "scholarly"; + version = "1.7.11"; + pyproject = true; + + src = fetchFromGitHub { + owner = "scholarly-python-package"; + repo = "scholarly"; + tag = "v${version}"; + hash = "sha256-yvew63tGwSjwseHK7wDqm26xiyCztUzxMqBpwwLD798="; + }; + + build-system = [ + setuptools + wheel + ]; + + dependencies = [ + arrow + beautifulsoup4 + bibtexparser + deprecated + fake-useragent + free-proxy + httpx + python-dotenv + requests + selenium + sphinx-rtd-theme + typing-extensions + ]; + + optional-dependencies = { + tor = [ stem ]; + }; + + nativeCheckInputs = lib.flatten (lib.attrValues optional-dependencies); + + pythonImportsCheck = [ "scholarly" ]; + + meta = { + description = "Retrieve author and publication information from Google Scholar"; + homepage = "https://scholarly.readthedocs.io/"; + changelog = "https://github.com/scholarly-python-package/scholarly/releases/tag/${src.tag}"; + license = lib.licenses.unlicense; + maintainers = with lib.maintainers; [ getchoo ]; + }; +} diff --git a/pkgs/development/python-modules/text2digits/default.nix b/pkgs/development/python-modules/text2digits/default.nix new file mode 100644 index 000000000000..2dd59134a1aa --- /dev/null +++ b/pkgs/development/python-modules/text2digits/default.nix @@ -0,0 +1,32 @@ +{ + lib, + buildPythonPackage, + fetchPypi, + pypaInstallHook, + setuptoolsBuildHook, +}: + +buildPythonPackage rec { + pname = "text2digits"; + version = "0.1.0"; + pyproject = false; + + src = fetchPypi { + inherit pname version; + hash = "sha256-oB2NyNVxediIulid9A4Ccw878t2JKrIsN1OOR5lyi7I="; + }; + + nativeBuildInputs = [ + pypaInstallHook + setuptoolsBuildHook + ]; + + pythonImportsCheck = [ "text2digits" ]; + + meta = { + description = "Converts text such as 'twenty three' to number/digit '23' in any sentence"; + homepage = "https://github.com/ShailChoksi/text2digits"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ getchoo ]; + }; +} diff --git a/pkgs/development/python-modules/urlobject/default.nix b/pkgs/development/python-modules/urlobject/default.nix new file mode 100644 index 000000000000..5c0a1371c101 --- /dev/null +++ b/pkgs/development/python-modules/urlobject/default.nix @@ -0,0 +1,37 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + pypaInstallHook, + setuptoolsBuildHook, +}: + +buildPythonPackage rec { + pname = "urlobject"; + version = "2.4.3"; + pyproject = false; + + src = fetchFromGitHub { + owner = "zacharyvoase"; + repo = "urlobject"; + tag = "v${version}"; + hash = "sha256-4UuQZTkVre8jXlchW7/TjeaADYvLnGMpGbJR/sdeKv4="; + }; + + nativeBuildInputs = [ + pypaInstallHook + setuptoolsBuildHook + ]; + + # Tests use `nose` + doInstallCheck = false; + + pythonImportsCheck = [ "urlobject" ]; + + meta = { + description = "Python library for manipulating URLs (and some URIs) in a more natural way"; + homepage = "http://zacharyvoase.github.com/urlobject"; + license = lib.licenses.unlicense; + maintainers = with lib.maintainers; [ getchoo ]; + }; +} diff --git a/pkgs/development/python-modules/wordninja/default.nix b/pkgs/development/python-modules/wordninja/default.nix new file mode 100644 index 000000000000..69617bc2bafc --- /dev/null +++ b/pkgs/development/python-modules/wordninja/default.nix @@ -0,0 +1,34 @@ +{ + lib, + buildPythonPackage, + fetchPypi, + setuptools, + setuptools-scm, + wheel, +}: + +buildPythonPackage rec { + pname = "wordninja"; + version = "2.0.0"; + pyproject = true; + + src = fetchPypi { + inherit pname version; + hash = "sha256-GhzH7BRq0Z1vcZQe6CrvPTEiFwDw2L+EQTbPjfedKBo="; + }; + + build-system = [ + setuptools + setuptools-scm + wheel + ]; + + pythonImportsCheck = [ "wordninja" ]; + + meta = { + description = "Probabilistically split concatenated words using NLP based on English Wikipedia unigram frequencies"; + homepage = "https://github.com/keredson/wordninja"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ getchoo ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index d3b0a6296202..0b97a88a7f24 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -2196,6 +2196,8 @@ self: super: with self; { inherit (pkgs) secp256k1; }; + comicapi = callPackage ../development/python-modules/comicapi { }; + comicon = callPackage ../development/python-modules/comicon { }; command-runner = callPackage ../development/python-modules/command-runner { }; @@ -4800,6 +4802,8 @@ self: super: with self; { flask-cors = callPackage ../development/python-modules/flask-cors { }; + flask-dance = callPackage ../development/python-modules/flask-dance { }; + flask-dramatiq = callPackage ../development/python-modules/flask-dramatiq { }; flask-elastic = callPackage ../development/python-modules/flask-elastic { }; @@ -9424,6 +9428,8 @@ self: super: with self; { netifaces2 = callPackage ../development/python-modules/netifaces2 { }; + netifaces-plus = callPackage ../development/python-modules/netifaces-plus { }; + netmiko = callPackage ../development/python-modules/netmiko { }; netio = callPackage ../development/python-modules/netio { }; @@ -14846,6 +14852,8 @@ self: super: with self; { schiene = callPackage ../development/python-modules/schiene { }; + scholarly = callPackage ../development/python-modules/scholarly { }; + schwifty = callPackage ../development/python-modules/schwifty { }; scienceplots = callPackage ../development/python-modules/scienceplots { }; @@ -16476,6 +16484,8 @@ self: super: with self; { texsoup = callPackage ../development/python-modules/texsoup { }; + text2digits = callPackage ../development/python-modules/text2digits { }; + textblob = callPackage ../development/python-modules/textblob { }; textfsm = callPackage ../development/python-modules/textfsm { }; @@ -18118,6 +18128,8 @@ self: super: with self; { urlmatch = callPackage ../development/python-modules/urlmatch { }; + urlobject = callPackage ../development/python-modules/urlobject { }; + urlpy = callPackage ../development/python-modules/urlpy { }; urwid = callPackage ../development/python-modules/urwid { }; @@ -18614,6 +18626,8 @@ self: super: with self; { wordfreq = callPackage ../development/python-modules/wordfreq { }; + wordninja = callPackage ../development/python-modules/wordninja { }; + world-bank-data = callPackage ../development/python-modules/world-bank-data { }; worldengine = callPackage ../development/python-modules/worldengine { };