diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index fb85df8808f1e..11eb45bbcaa99 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -440,6 +440,7 @@ in { pyload = handleTest ./pyload.nix {}; oci-containers = handleTestOn ["aarch64-linux" "x86_64-linux"] ./oci-containers.nix {}; odoo = handleTest ./odoo.nix {}; + odoo17 = handleTest ./odoo.nix { package = pkgs.odoo17; }; odoo16 = handleTest ./odoo.nix { package = pkgs.odoo16; }; odoo15 = handleTest ./odoo.nix { package = pkgs.odoo15; }; # 9pnet_virtio used to mount /nix partition doesn't support diff --git a/pkgs/by-name/od/odoo/package.nix b/pkgs/by-name/od/odoo/package.nix index fd3768bcd7428..8c7477c074ea5 100644 --- a/pkgs/by-name/od/odoo/package.nix +++ b/pkgs/by-name/od/odoo/package.nix @@ -1,29 +1,17 @@ { lib , fetchgit , fetchzip -, python310 +, python312 , rtlcss , wkhtmltopdf , nixosTests -, odoo_version ? "17.0" -, odoo_release ? "20240610" }: let - python = python310.override { + odoo_version = "18.0"; + odoo_release = "20241010"; + python = python312.override { self = python; - packageOverrides = final: prev: { - # requirements.txt fixes docutils at 0.17; the default 0.21.1 tested throws exceptions - docutils-0_17 = prev.docutils.overridePythonAttrs (old: rec { - version = "0.17"; - src = fetchgit { - url = "git://repo.or.cz/docutils.git"; - rev = "docutils-${version}"; - hash = "sha256-O/9q/Dg1DBIxKdNBOhDV16yy5ez0QANJYMjeovDoWX8="; - }; - buildInputs = with prev; [setuptools]; - }); - }; }; in python.pkgs.buildPythonApplication rec { pname = "odoo"; @@ -34,13 +22,10 @@ in python.pkgs.buildPythonApplication rec { src = fetchzip { # find latest version on https://nightly.odoo.com/${odoo_version}/nightly/src url = "https://nightly.odoo.com/${odoo_version}/nightly/src/odoo_${version}.zip"; - name = "${pname}-${version}"; - hash = "sha256-blibGJyaz+MxMazOXhPbGBAJWZoGubirwSnjVYyLBJs="; # odoo + name = "odoo-${version}"; + hash = "sha256-TUfLyB0m8XyEiS493Q/ECgSJutAd1rtWX93f3mwfOK0="; # odoo }; - # needs some investigation - doCheck = false; - makeWrapperArgs = [ "--prefix" "PATH" ":" "${lib.makeBinPath [ wkhtmltopdf rtlcss ]}" ]; @@ -50,7 +35,8 @@ in python.pkgs.buildPythonApplication rec { chardet cryptography decorator - docutils-0_17 # sphinx has a docutils requirement >= 18 + docutils + distutils ebaysdk freezegun geoip2 diff --git a/pkgs/by-name/od/odoo/update.sh b/pkgs/by-name/od/odoo/update.sh index e9c50ccb50815..2265f9048c0e3 100755 --- a/pkgs/by-name/od/odoo/update.sh +++ b/pkgs/by-name/od/odoo/update.sh @@ -1,9 +1,15 @@ #!/usr/bin/env nix-shell #!nix-shell -i bash -p curl gnused nix coreutils nix-prefetch +# shellcheck shell=bash set -euo pipefail -VERSION="17.0" # must be incremented manually +SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")" +PKG=$(basename "$SCRIPT_DIR") + +LATEST="18" # increment manually +VERSION="${PKG/#odoo}" +VERSION="${VERSION:-$LATEST}.0" RELEASE="$( curl "https://nightly.odoo.com/$VERSION/nightly/src/" | @@ -12,15 +18,15 @@ RELEASE="$( )" latestVersion="$VERSION.$RELEASE" -currentVersion=$(nix-instantiate --eval -E "with import ./. {}; odoo.version or (lib.getVersion odoo)" | tr -d '"') +currentVersion=$(nix-instantiate --eval -E "with import ./. {}; $PKG.version or (lib.getVersion $PKG)" | tr -d '"') if [[ "$currentVersion" == "$latestVersion" ]]; then - echo "odoo is up-to-date: $currentVersion" + echo "$PKG is up-to-date: $currentVersion" exit 0 fi -cd "$(dirname "${BASH_SOURCE[0]}")" +cd "$SCRIPT_DIR" -sed -ri "s| hash.+ # odoo| hash = \"$(nix-prefetch -q fetchzip --url "https://nightly.odoo.com/${VERSION}/nightly/src/odoo_${latestVersion}.zip")\"; # odoo|g" package.nix -sed -ri "s|, odoo_version \? .+|, odoo_version ? \"$VERSION\"|" package.nix -sed -ri "s|, odoo_release \? .+|, odoo_release ? \"$RELEASE\"|" package.nix +sed -ri "s| hash.+ # odoo| hash = \"$(nix-prefetch -q fetchzip --option extra-experimental-features flakes --url "https://nightly.odoo.com/${VERSION}/nightly/src/odoo_${latestVersion}.zip")\"; # odoo|g" package.nix +sed -ri "s|odoo_version = .+|odoo_version = \"$VERSION\";|" package.nix +sed -ri "s|odoo_release = .+|odoo_release = \"$RELEASE\";|" package.nix diff --git a/pkgs/by-name/od/odoo15/package.nix b/pkgs/by-name/od/odoo15/package.nix index ca2a1444a02c6..be0f9a690660f 100644 --- a/pkgs/by-name/od/odoo15/package.nix +++ b/pkgs/by-name/od/odoo15/package.nix @@ -1,13 +1,20 @@ -{ lib, fetchFromGitHub, fetchzip, python310, rtlcss, wkhtmltopdf -, nixosTests }: +{ lib +, fetchFromGitHub +, fetchzip +, python310 +, rtlcss +, wkhtmltopdf +, nixosTests +}: let + odoo_version = "15.0"; + odoo_release = "20241010"; python = python310.override { self = python; packageOverrides = self: super: { pypdf2 = super.pypdf2.overridePythonAttrs (old: rec { version = "1.28.6"; - format = "setuptools"; src = fetchFromGitHub { owner = "py-pdf"; @@ -17,43 +24,25 @@ let hash = "sha256-WnRbsy/PJcotZqY9mJPLadrYqkXykOVifLIbDyNf4s4="; }; + dependencies = [ self.setuptools ]; + nativeCheckInputs = with self; [ pytestCheckHook pillow ]; }); - flask = super.flask.overridePythonAttrs (old: rec { - version = "2.1.3"; - src = old.src.override { - inherit version; - hash = "sha256-FZcuUBffBXXD1sCQuhaLbbkCWeYgrI1+qBOjlrrVtss="; - }; - }); - werkzeug = super.werkzeug.overridePythonAttrs (old: rec { - version = "2.1.2"; - src = old.src.override { - inherit version; - hash = "sha256-HOCOgJPtZ9Y41jh5/Rujc1gX96gN42dNKT9ZhPJftuY="; - }; - }); }; }; - - odoo_version = "15.0"; - odoo_release = "20230816"; in python.pkgs.buildPythonApplication rec { - pname = "odoo15"; + pname = "odoo"; version = "${odoo_version}.${odoo_release}"; format = "setuptools"; - # latest release is at https://github.com/odoo/docker/blob/master/15.0/Dockerfile + # latest release is at https://github.com/odoo/docker/blob/5fb6a842747c296099d9384587cd89640eb7a615/15.0/Dockerfile#L58 src = fetchzip { url = "https://nightly.odoo.com/${odoo_version}/nightly/src/odoo_${version}.zip"; - name = "${pname}-${version}"; - hash = "sha256-h81JA0o44DVtl/bZ52rGQfg54TigwQcNpcMjQbi0zIQ="; # odoo + name = "odoo-${version}"; + hash = "sha256-Hkre6mghEiLrDwfB1BxGbqEm/zruHLwaS+eIFQKjl1o="; # odoo }; - # needs some investigation - doCheck = false; - makeWrapperArgs = [ "--prefix" "PATH" @@ -74,6 +63,7 @@ in python.pkgs.buildPythonApplication rec { jinja2 libsass lxml + lxml-html-clean markupsafe mock num2words @@ -108,6 +98,7 @@ in python.pkgs.buildPythonApplication rec { dontStrip = true; passthru = { + updateScript = ./update.sh; tests = { inherit (nixosTests) odoo15; }; }; diff --git a/pkgs/by-name/od/odoo15/update.sh b/pkgs/by-name/od/odoo15/update.sh new file mode 100755 index 0000000000000..2265f9048c0e3 --- /dev/null +++ b/pkgs/by-name/od/odoo15/update.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p curl gnused nix coreutils nix-prefetch +# shellcheck shell=bash + +set -euo pipefail + +SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")" +PKG=$(basename "$SCRIPT_DIR") + +LATEST="18" # increment manually +VERSION="${PKG/#odoo}" +VERSION="${VERSION:-$LATEST}.0" + +RELEASE="$( + curl "https://nightly.odoo.com/$VERSION/nightly/src/" | + sed -nE 's/.*odoo_'"$VERSION"'.(20[0-9]{6}).tar.gz.*/\1/p' | + tail -n 1 +)" + +latestVersion="$VERSION.$RELEASE" +currentVersion=$(nix-instantiate --eval -E "with import ./. {}; $PKG.version or (lib.getVersion $PKG)" | tr -d '"') + +if [[ "$currentVersion" == "$latestVersion" ]]; then + echo "$PKG is up-to-date: $currentVersion" + exit 0 +fi + +cd "$SCRIPT_DIR" + +sed -ri "s| hash.+ # odoo| hash = \"$(nix-prefetch -q fetchzip --option extra-experimental-features flakes --url "https://nightly.odoo.com/${VERSION}/nightly/src/odoo_${latestVersion}.zip")\"; # odoo|g" package.nix +sed -ri "s|odoo_version = .+|odoo_version = \"$VERSION\";|" package.nix +sed -ri "s|odoo_release = .+|odoo_release = \"$RELEASE\";|" package.nix diff --git a/pkgs/by-name/od/odoo16/package.nix b/pkgs/by-name/od/odoo16/package.nix index 91e634a13b225..b2acd426cf605 100644 --- a/pkgs/by-name/od/odoo16/package.nix +++ b/pkgs/by-name/od/odoo16/package.nix @@ -7,31 +7,11 @@ }: let + odoo_version = "16.0"; + odoo_release = "20241010"; python = python310.override { self = python; - packageOverrides = self: super: { - flask = super.flask.overridePythonAttrs (old: rec { - version = "2.3.3"; - src = old.src.override { - inherit version; - hash = "sha256-CcNHqSqn/0qOfzIGeV8w2CZlS684uHPQdEzVccpgnvw="; - }; - }); - werkzeug = super.werkzeug.overridePythonAttrs (old: rec { - version = "2.3.7"; - src = old.src.override { - inherit version; - hash = "sha256-K4wORHtLnbzIXdl7butNy69si2w74L1lTiVVPgohV9g="; - }; - disabledTests = old.disabledTests ++ [ - "test_response_body" - ]; - }); - }; }; - - odoo_version = "16.0"; - odoo_release = "20231024"; in python.pkgs.buildPythonApplication rec { pname = "odoo"; version = "${odoo_version}.${odoo_release}"; @@ -41,13 +21,10 @@ in python.pkgs.buildPythonApplication rec { # latest release is at https://github.com/odoo/docker/blob/master/16.0/Dockerfile src = fetchzip { url = "https://nightly.odoo.com/${odoo_version}/nightly/src/odoo_${version}.zip"; - name = "${pname}-${version}"; - hash = "sha256-Ux8RfA7kWLKissBBY5wrfL+aKKw++5BxjP3Vw0JAOsk="; # odoo + name = "odoo-${version}"; + hash = "sha256-ICe5UOy+Ga81fE66SnIhRz3+JEEbGfoz7ag53mkG4UM="; # odoo }; - # needs some investigation - doCheck = false; - makeWrapperArgs = [ "--prefix" "PATH" ":" "${lib.makeBinPath [ wkhtmltopdf rtlcss ]}" ]; @@ -66,6 +43,7 @@ in python.pkgs.buildPythonApplication rec { jinja2 libsass lxml + lxml-html-clean markupsafe num2words ofxparse @@ -102,6 +80,7 @@ in python.pkgs.buildPythonApplication rec { dontStrip = true; passthru = { + updateScript = ./update.sh; tests = { inherit (nixosTests) odoo; }; diff --git a/pkgs/by-name/od/odoo16/update.sh b/pkgs/by-name/od/odoo16/update.sh new file mode 100755 index 0000000000000..2265f9048c0e3 --- /dev/null +++ b/pkgs/by-name/od/odoo16/update.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p curl gnused nix coreutils nix-prefetch +# shellcheck shell=bash + +set -euo pipefail + +SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")" +PKG=$(basename "$SCRIPT_DIR") + +LATEST="18" # increment manually +VERSION="${PKG/#odoo}" +VERSION="${VERSION:-$LATEST}.0" + +RELEASE="$( + curl "https://nightly.odoo.com/$VERSION/nightly/src/" | + sed -nE 's/.*odoo_'"$VERSION"'.(20[0-9]{6}).tar.gz.*/\1/p' | + tail -n 1 +)" + +latestVersion="$VERSION.$RELEASE" +currentVersion=$(nix-instantiate --eval -E "with import ./. {}; $PKG.version or (lib.getVersion $PKG)" | tr -d '"') + +if [[ "$currentVersion" == "$latestVersion" ]]; then + echo "$PKG is up-to-date: $currentVersion" + exit 0 +fi + +cd "$SCRIPT_DIR" + +sed -ri "s| hash.+ # odoo| hash = \"$(nix-prefetch -q fetchzip --option extra-experimental-features flakes --url "https://nightly.odoo.com/${VERSION}/nightly/src/odoo_${latestVersion}.zip")\"; # odoo|g" package.nix +sed -ri "s|odoo_version = .+|odoo_version = \"$VERSION\";|" package.nix +sed -ri "s|odoo_release = .+|odoo_release = \"$RELEASE\";|" package.nix diff --git a/pkgs/by-name/od/odoo17/package.nix b/pkgs/by-name/od/odoo17/package.nix new file mode 100644 index 0000000000000..698afb37d1039 --- /dev/null +++ b/pkgs/by-name/od/odoo17/package.nix @@ -0,0 +1,121 @@ +{ + lib, + fetchgit, + fetchzip, + python310, + rtlcss, + wkhtmltopdf, + nixosTests, +}: + +let + odoo_version = "17.0"; + odoo_release = "20241010"; + python = python310.override { + self = python; + packageOverrides = final: prev: { + # requirements.txt fixes docutils at 0.17; the default 0.21.1 tested throws exceptions + docutils-0_17 = prev.docutils.overridePythonAttrs (old: rec { + version = "0.17"; + src = fetchgit { + url = "git://repo.or.cz/docutils.git"; + rev = "docutils-${version}"; + hash = "sha256-O/9q/Dg1DBIxKdNBOhDV16yy5ez0QANJYMjeovDoWX8="; + }; + buildInputs = with prev; [ setuptools ]; + }); + }; + }; +in +python.pkgs.buildPythonApplication rec { + pname = "odoo"; + version = "${odoo_version}.${odoo_release}"; + + format = "setuptools"; + + # latest release is at https://github.com/odoo/docker/blob/master/17.0/Dockerfile + src = fetchzip { + url = "https://nightly.odoo.com/${odoo_version}/nightly/src/odoo_${version}.zip"; + name = "odoo-${version}"; + hash = "sha256-s4Fvzjwl2oM0V9G1WQdSoqo7kE7b8tJdluk9f7A06e8="; # odoo + }; + + makeWrapperArgs = [ + "--prefix" + "PATH" + ":" + "${lib.makeBinPath [ + wkhtmltopdf + rtlcss + ]}" + ]; + + propagatedBuildInputs = with python.pkgs; [ + babel + chardet + cryptography + decorator + docutils-0_17 # sphinx has a docutils requirement >= 18 + ebaysdk + freezegun + geoip2 + gevent + greenlet + idna + jinja2 + libsass + lxml + lxml-html-clean + markupsafe + num2words + ofxparse + passlib + pillow + polib + psutil + psycopg2 + pydot + pyopenssl + pypdf2 + pyserial + python-dateutil + python-ldap + python-stdnum + pytz + pyusb + qrcode + reportlab + requests + rjsmin + urllib3 + vobject + werkzeug + xlrd + xlsxwriter + xlwt + zeep + + setuptools + mock + ]; + + # takes 5+ minutes and there are not files to strip + dontStrip = true; + + passthru = { + updateScript = ./update.sh; + tests = { + inherit (nixosTests) odoo; + }; + }; + + meta = with lib; { + description = "Open Source ERP and CRM"; + homepage = "https://www.odoo.com/"; + license = licenses.lgpl3Only; + maintainers = with maintainers; [ + mkg20001 + siriobalmelli + ]; + }; +} diff --git a/pkgs/by-name/od/odoo17/update.sh b/pkgs/by-name/od/odoo17/update.sh new file mode 100755 index 0000000000000..2265f9048c0e3 --- /dev/null +++ b/pkgs/by-name/od/odoo17/update.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p curl gnused nix coreutils nix-prefetch +# shellcheck shell=bash + +set -euo pipefail + +SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")" +PKG=$(basename "$SCRIPT_DIR") + +LATEST="18" # increment manually +VERSION="${PKG/#odoo}" +VERSION="${VERSION:-$LATEST}.0" + +RELEASE="$( + curl "https://nightly.odoo.com/$VERSION/nightly/src/" | + sed -nE 's/.*odoo_'"$VERSION"'.(20[0-9]{6}).tar.gz.*/\1/p' | + tail -n 1 +)" + +latestVersion="$VERSION.$RELEASE" +currentVersion=$(nix-instantiate --eval -E "with import ./. {}; $PKG.version or (lib.getVersion $PKG)" | tr -d '"') + +if [[ "$currentVersion" == "$latestVersion" ]]; then + echo "$PKG is up-to-date: $currentVersion" + exit 0 +fi + +cd "$SCRIPT_DIR" + +sed -ri "s| hash.+ # odoo| hash = \"$(nix-prefetch -q fetchzip --option extra-experimental-features flakes --url "https://nightly.odoo.com/${VERSION}/nightly/src/odoo_${latestVersion}.zip")\"; # odoo|g" package.nix +sed -ri "s|odoo_version = .+|odoo_version = \"$VERSION\";|" package.nix +sed -ri "s|odoo_release = .+|odoo_release = \"$RELEASE\";|" package.nix diff --git a/pkgs/development/python-modules/aiohttp/default.nix b/pkgs/development/python-modules/aiohttp/default.nix index 576ea16a39f82..255294df0aa8d 100644 --- a/pkgs/development/python-modules/aiohttp/default.nix +++ b/pkgs/development/python-modules/aiohttp/default.nix @@ -6,6 +6,7 @@ fetchFromGitHub, substituteAll, python, + isPy310, # build-system cython, @@ -113,6 +114,11 @@ buildPythonPackage rec { # don't run benchmarks "test_import_time" ] + # these tests fail with python310 but succeeds with 11+ + ++ lib.optionals isPy310 [ + "test_https_proxy_unsupported_tls_in_tls" + "test_tcp_connector_raise_connector_ssl_error" + ] ++ lib.optionals stdenv.hostPlatform.is32bit [ "test_cookiejar" ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ "test_addresses" # https://github.com/aio-libs/aiohttp/issues/3572, remove >= v4.0.0 diff --git a/pkgs/development/python-modules/uvloop/default.nix b/pkgs/development/python-modules/uvloop/default.nix index f5d0e08cbb288..15c35549bff74 100644 --- a/pkgs/development/python-modules/uvloop/default.nix +++ b/pkgs/development/python-modules/uvloop/default.nix @@ -61,6 +61,9 @@ buildPythonPackage rec { "--deselect=tests/test_process.py::Test_UV_Process::test_process_streams_redirect" "--deselect=tests/test_process.py::Test_AIO_Process::test_process_streams_redirect" ] + ++ lib.optionals (pythonOlder "3.11") [ + "--deselect=tests/test_tcp.py::Test_UV_TCPSSL::test_create_connection_ssl_failed_certificat" + ] ++ lib.optionals (stdenv.hostPlatform.isDarwin) [ # Segmentation fault "--deselect=tests/test_fs_event.py::Test_UV_FS_EVENT_RENAME::test_fs_event_rename" diff --git a/pkgs/development/python-modules/websockets/default.nix b/pkgs/development/python-modules/websockets/default.nix index 907024735afb2..918cb54ae5a68 100644 --- a/pkgs/development/python-modules/websockets/default.nix +++ b/pkgs/development/python-modules/websockets/default.nix @@ -24,26 +24,31 @@ buildPythonPackage rec { nativeBuildInputs = [ setuptools ]; - patchPhase = '' - # Disable all tests that need to terminate within a predetermined amount of - # time. This is nondeterministic. - sed -i 's/with self.assertCompletesWithin.*:/if True:/' \ - tests/legacy/test_protocol.py - - # Disables tests relying on tight timeouts to avoid failures like: - # File "/build/source/tests/legacy/test_protocol.py", line 1270, in test_keepalive_ping_with_no_ping_timeout - # ping_1_again, ping_2 = tuple(self.protocol.pings) - # ValueError: too many values to unpack (expected 2) - for t in \ - test_keepalive_ping_stops_when_connection_closing \ - test_keepalive_ping_does_not_crash_when_connection_lost \ - test_keepalive_ping \ - test_keepalive_ping_not_acknowledged_closes_connection \ - test_keepalive_ping_with_no_ping_timeout \ - ; do - sed -i "s/def $t(/def skip_$t(/" tests/legacy/test_protocol.py - done - ''; + patchPhase = + '' + # Disable all tests that need to terminate within a predetermined amount of + # time. This is nondeterministic. + sed -i 's/with self.assertCompletesWithin.*:/if True:/' \ + tests/legacy/test_protocol.py + + # Disables tests relying on tight timeouts to avoid failures like: + # File "/build/source/tests/legacy/test_protocol.py", line 1270, in test_keepalive_ping_with_no_ping_timeout + # ping_1_again, ping_2 = tuple(self.protocol.pings) + # ValueError: too many values to unpack (expected 2) + for t in \ + test_keepalive_ping_stops_when_connection_closing \ + test_keepalive_ping_does_not_crash_when_connection_lost \ + test_keepalive_ping \ + test_keepalive_ping_not_acknowledged_closes_connection \ + test_keepalive_ping_with_no_ping_timeout \ + ; do + sed -i "s/def $t(/def skip_$t(/" tests/legacy/test_protocol.py + done + '' + + lib.optionalString (pythonOlder "3.11") '' + # Our Python 3.10 and older raise SSLError instead of SSLCertVerificationError + sed -i "s/def test_reject_invalid_server_certificate(/def skip_test_reject_invalid_server_certificate(/" tests/sync/test_client.py + ''; nativeCheckInputs = [ unittestCheckHook ];