From 21200da9439d4932c0c87a0138734f46d4c66bba Mon Sep 17 00:00:00 2001 From: Zhaofeng Li Date: Sun, 6 Jul 2025 11:16:31 -0600 Subject: [PATCH 1/5] python3Packages.ezodf: init at 0.3.2 --- .../python-modules/ezodf/default.nix | 48 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 50 insertions(+) create mode 100644 pkgs/development/python-modules/ezodf/default.nix diff --git a/pkgs/development/python-modules/ezodf/default.nix b/pkgs/development/python-modules/ezodf/default.nix new file mode 100644 index 0000000000000..fedea70c2106c --- /dev/null +++ b/pkgs/development/python-modules/ezodf/default.nix @@ -0,0 +1,48 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + lxml, + unittestCheckHook, +}: + +buildPythonPackage rec { + pname = "ezodf"; + version = "0.3.2"; + pyproject = true; + + src = fetchFromGitHub { + owner = "T0ha"; + repo = "ezodf"; + tag = version; + hash = "sha256-d66CTj9CpCnMICqNdUP07M9elEfoxuPg8x1kxqgXTTE="; + }; + + build-system = [ + setuptools + ]; + + dependencies = [ + lxml + ]; + + nativeCheckInputs = [ + unittestCheckHook + ]; + + unittestFlags = [ + "tests" + ]; + + pythonImportsCheck = [ + "ezodf" + ]; + + meta = { + description = "Extract, add, modify, or delete document data in OpenDocument (ODF) files"; + homepage = "https://github.com/T0ha/ezodf"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ zhaofengli ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index c5a2e934e94b9..a41ddd294453a 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4795,6 +4795,8 @@ self: super: with self; { ezdxf = callPackage ../development/python-modules/ezdxf { }; + ezodf = callPackage ../development/python-modules/ezodf { }; + ezyrb = callPackage ../development/python-modules/ezyrb { }; f3d = toPythonModule ( From 13743dda295e6dea37dbfd6d5b3a6c43480e5348 Mon Sep 17 00:00:00 2001 From: Zhaofeng Li Date: Sun, 6 Jul 2025 11:16:31 -0600 Subject: [PATCH 2/5] python3Packages.frictionless: init at 5.18.1 --- .../python-modules/frictionless/default.nix | 215 ++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 217 insertions(+) create mode 100644 pkgs/development/python-modules/frictionless/default.nix diff --git a/pkgs/development/python-modules/frictionless/default.nix b/pkgs/development/python-modules/frictionless/default.nix new file mode 100644 index 0000000000000..2609a1a9d2995 --- /dev/null +++ b/pkgs/development/python-modules/frictionless/default.nix @@ -0,0 +1,215 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + hatchling, + attrs, + chardet, + humanize, + isodate, + jinja2, + jsonschema, + marko, + petl, + pydantic, + python-dateutil, + python-slugify, + pyyaml, + requests, + rfc3986, + simpleeval, + tabulate, + typer, + typing-extensions, + validators, + + # Optional formats + boto3, + google-api-python-client, + datasette, + duckdb, + duckdb-engine, + sqlalchemy, + pygithub, + pyquery, + ijson, + jsonlines, + pymysql, + ezodf, + lxml, + pandas, + pyarrow, + fastparquet, + psycopg, + psycopg2, + visidata, + tatsu, + + # Tests + pytestCheckHook, + pytest-cov, + pytest-dotenv, + pytest-lazy-fixtures, + pytest-mock, + pytest-timeout, + pytest-vcr, + moto, + requests-mock, + + # Tests depending on excel + openpyxl, + xlrd, +}: + +buildPythonPackage rec { + pname = "frictionless"; + version = "5.18.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "frictionlessdata"; + repo = "frictionless-py"; + tag = "v${version}"; + hash = "sha256-svspEHcEw994pEjnuzWf0FFaYeFZuqriK96yFAB6/gI="; + }; + + build-system = [ + hatchling + ]; + + dependencies = [ + attrs + chardet + humanize + isodate + jinja2 + jsonschema + marko + petl + pydantic + python-dateutil + python-slugify + pyyaml + requests + rfc3986 + simpleeval + tabulate + typer + typing-extensions + validators + ]; + + optional-dependencies = { + # The commented-out formats require dependencies that have not been packaged + # They are intentionally left in for reference - Please do not remove them + aws = [ + boto3 + ]; + bigquery = [ + google-api-python-client + ]; + #ckan = [ + # frictionless-ckan-mapper # not packaged + #]; + datasette = [ + datasette + ]; + duckdb = [ + duckdb + duckdb-engine + sqlalchemy + ]; + #excel = [ + # openpyxl + # tableschema-to-template # not packaged + # xlrd + # xlwt + #]; + github = [ + pygithub + ]; + #gsheets = [ + # pygsheets # not packaged + #]; + html = [ + pyquery + ]; + json = [ + ijson + jsonlines + ]; + mysql = [ + pymysql + sqlalchemy + ]; + ods = [ + ezodf + lxml + ]; + pandas = [ + pandas + pyarrow + ]; + parquet = [ + fastparquet + ]; + postgresql = [ + psycopg + psycopg2 + sqlalchemy + ]; + #spss = [ + # savreaderwriter # not packaged + #]; + sql = [ + sqlalchemy + ]; + visidata = [ + # Not ideal: This is actually outside pythonPackages set and depends on whatever + # Python version the top-level python3Packages set refers to + visidata + ]; + wkt = [ + tatsu + ]; + #zenodo = [ + # pyzenodo3 # not packaged + #]; + }; + + nativeCheckInputs = [ + pytestCheckHook + pytest-cov + pytest-dotenv + pytest-lazy-fixtures + pytest-mock + pytest-timeout + pytest-vcr + moto + requests-mock + + # We do not have all packages for the `excel` format to fully function, + # but it's required for some of the tests. + openpyxl + xlrd + ] ++ lib.flatten (lib.attrValues optional-dependencies); + + disabledTestPaths = [ + # Requires optional dependencies that have not been packaged (commented out above) + # The tests of other unavailable formats are auto-skipped + "frictionless/formats/excel" + "frictionless/formats/spss" + ]; + + pythonImportsCheck = [ + "frictionless" + ]; + + meta = { + description = "Data management framework for Python that provides functionality to describe, extract, validate, and transform tabular data"; + homepage = "https://github.com/frictionlessdata/frictionless-py"; + changelog = "https://github.com/frictionlessdata/frictionless-py/blob/${src.rev}/CHANGELOG.md"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ zhaofengli ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index a41ddd294453a..2ca60c4469a94 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -5407,6 +5407,8 @@ self: super: with self; { freud = callPackage ../development/python-modules/freud { }; + frictionless = callPackage ../development/python-modules/frictionless { }; + frida-python = callPackage ../development/python-modules/frida-python { }; frigidaire = callPackage ../development/python-modules/frigidaire { }; From 728e634a6941d6d39c7beacfcc3738792329accc Mon Sep 17 00:00:00 2001 From: Zhaofeng Li Date: Sun, 6 Jul 2025 11:16:31 -0600 Subject: [PATCH 3/5] python3Packages.py3amf: init at 0.8.11 --- .../python-modules/py3amf/default.nix | 40 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 42 insertions(+) create mode 100644 pkgs/development/python-modules/py3amf/default.nix diff --git a/pkgs/development/python-modules/py3amf/default.nix b/pkgs/development/python-modules/py3amf/default.nix new file mode 100644 index 0000000000000..725f4ca951e1f --- /dev/null +++ b/pkgs/development/python-modules/py3amf/default.nix @@ -0,0 +1,40 @@ +{ + lib, + buildPythonPackage, + setuptools, + fetchFromGitHub, + defusedxml, +}: + +buildPythonPackage rec { + pname = "py3amf"; + version = "0.8.11"; + pyproject = true; + + src = fetchFromGitHub { + owner = "StdCarrot"; + repo = "Py3AMF"; + tag = "v${version}"; + hash = "sha256-9zuHh5+ggIjv1LcjpBNHy2yh09KsFpxUdGrtKGm94Zg="; + }; + + build-system = [ + setuptools + ]; + + dependencies = [ + defusedxml + ]; + + pythonImportsCheck = [ + "pyamf" + ]; + + meta = { + description = "Action Message Format (AMF) support for Python 3"; + homepage = "https://github.com/StdCarrot/Py3AMF"; + changelog = "https://github.com/StdCarrot/Py3AMF/blob/${src.rev}/CHANGES.txt"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ zhaofengli ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 2ca60c4469a94..aa01cb5e833db 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -12107,6 +12107,8 @@ self: super: with self; { py2vega = callPackage ../development/python-modules/py2vega { }; + py3amf = callPackage ../development/python-modules/py3amf { }; + py3buddy = callPackage ../development/python-modules/py3buddy { }; py3dns = callPackage ../development/python-modules/py3dns { }; From b96dd66941fa4c4f995eb0e57ac9e2771d513b88 Mon Sep 17 00:00:00 2001 From: Zhaofeng Li Date: Sun, 6 Jul 2025 11:16:32 -0600 Subject: [PATCH 4/5] cdxj-indexer: init at 1.4.6 --- .../python-modules/cdxj-indexer/default.nix | 57 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + pkgs/top-level/python-packages.nix | 2 + 3 files changed, 61 insertions(+) create mode 100644 pkgs/development/python-modules/cdxj-indexer/default.nix diff --git a/pkgs/development/python-modules/cdxj-indexer/default.nix b/pkgs/development/python-modules/cdxj-indexer/default.nix new file mode 100644 index 0000000000000..f0a28354411d1 --- /dev/null +++ b/pkgs/development/python-modules/cdxj-indexer/default.nix @@ -0,0 +1,57 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + warcio, + surt, + py3amf, + multipart, + pytestCheckHook, +}: + +buildPythonPackage rec { + pname = "cdxj-indexer"; + version = "1.4.6"; + pyproject = true; + + src = fetchFromGitHub { + owner = "webrecorder"; + repo = "cdxj-indexer"; + tag = "v${version}"; + hash = "sha256-E3b/IfjngyXhWvRYP9CkQGvBFeC8pAm4KxZA9MwOo4s="; + }; + + build-system = [ + setuptools + ]; + + dependencies = [ + warcio + surt + py3amf + multipart + ]; + + pythonRemoveDeps = [ + # Transitive dependency that does not need to be pinned + # Proposed fix in + "idna" + ]; + + nativeCheckInputs = [ + pytestCheckHook + ]; + + pythonImportsCheck = [ + "cdxj_indexer" + ]; + + meta = { + description = "CDXJ Indexing of WARC/ARCs"; + homepage = "https://github.com/webrecorder/cdxj-indexer"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ zhaofengli ]; + mainProgram = "cdxj-indexer"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 03fb17ebc4568..1a886e62864f4 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -11949,6 +11949,8 @@ with pkgs; cdparanoia = cdparanoiaIII; + cdxj-indexer = with python3Packages; toPythonApplication cdxj-indexer; + chromium = callPackage ../applications/networking/browsers/chromium (config.chromium or { }); chuck = callPackage ../applications/audio/chuck { diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index aa01cb5e833db..27348052e871d 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -2332,6 +2332,8 @@ self: super: with self; { cddlparser = callPackage ../development/python-modules/cddlparser { }; + cdxj-indexer = callPackage ../development/python-modules/cdxj-indexer { }; + celery = callPackage ../development/python-modules/celery { }; celery-batches = callPackage ../development/python-modules/celery-batches { }; From 116c9317c0fa65e1854fcf2f84975e11c39e16eb Mon Sep 17 00:00:00 2001 From: Zhaofeng Li Date: Sun, 6 Jul 2025 11:16:32 -0600 Subject: [PATCH 5/5] py-wacz: init at 0.5.0 The Python module is named wacz. Signing isn't enabled yet. --- .../python-modules/wacz/default.nix | 82 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + pkgs/top-level/python-packages.nix | 2 + 3 files changed, 86 insertions(+) create mode 100644 pkgs/development/python-modules/wacz/default.nix diff --git a/pkgs/development/python-modules/wacz/default.nix b/pkgs/development/python-modules/wacz/default.nix new file mode 100644 index 0000000000000..01663a47cfdff --- /dev/null +++ b/pkgs/development/python-modules/wacz/default.nix @@ -0,0 +1,82 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + fetchpatch, + setuptools, + boilerpy3, + cdxj-indexer, + frictionless, + pytest-cov, + pyyaml, + shortuuid, + pytestCheckHook, +}: + +buildPythonPackage rec { + pname = "wacz"; + version = "0.5.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "webrecorder"; + repo = "py-wacz"; + tag = "v${version}"; + hash = "sha256-bGY6G7qBAN1Vu+pTNqRG0xh34sR62pMhQFHFGlJaTPQ="; + }; + + patches = [ + # + (fetchpatch { + name = "clean-up-deps.patch"; + url = "https://github.com/webrecorder/py-wacz/compare/1e8f724a527f28855eedeb0d969ee39b00b2a80a...9d3ad60f125247b8a4354511d9123b85ce6a23c5.patch"; + hash = "sha256-zH6BKhsq9ybjzaWcNbVkk1sWh8vVCkv7Qxuwl0MQhNM="; + }) + ]; + + postPatch = '' + substituteInPlace setup.py \ + --replace "pytest-runner" "" + ''; + + build-system = [ + setuptools + ]; + + dependencies = [ + boilerpy3 + cdxj-indexer + frictionless + pyyaml + shortuuid + ] ++ frictionless.optional-dependencies.json; + + optional-dependencies = { + # signing = [ + # authsign # not packaged + # ]; + }; + + nativeCheckInputs = [ + pytestCheckHook + pytest-cov + ]; + + disabledTests = [ + # authsign is not packaged + "test_verify_signed" + ]; + + pythonImportsCheck = [ + "wacz" + ]; + + meta = { + description = "Utility for working with web archive data using the WACZ format specification"; + homepage = "https://github.com/webrecorder/py-wacz"; + changelog = "https://github.com/webrecorder/py-wacz/blob/${src.rev}/CHANGES.md"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ zhaofengli ]; + mainProgram = "wacz"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1a886e62864f4..e604144d785c7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -16364,6 +16364,8 @@ with pkgs; ffmpeg = ffmpeg-full; }; + py-wacz = with python3Packages; toPythonApplication wacz; + wacomtablet = libsForQt5.callPackage ../tools/misc/wacomtablet { }; wasmer = callPackage ../development/interpreters/wasmer { diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 27348052e871d..e1eb3b3aafc8a 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -19147,6 +19147,8 @@ self: super: with self; { w3lib = callPackage ../development/python-modules/w3lib { }; + wacz = callPackage ../development/python-modules/wacz { }; + wadler-lindig = callPackage ../development/python-modules/wadler-lindig { }; wadllib = callPackage ../development/python-modules/wadllib { };