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/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/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/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/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 03fb17ebc4568..e604144d785c7 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 { @@ -16362,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 c5a2e934e94b9..e1eb3b3aafc8a 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 { }; @@ -4795,6 +4797,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 ( @@ -5405,6 +5409,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 { }; @@ -12103,6 +12109,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 { }; @@ -19139,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 { };