diff --git a/TODO.md b/TODO.md index 6e7e0e7..46c5e04 100644 --- a/TODO.md +++ b/TODO.md @@ -7,3 +7,7 @@ create NixOS VM test - test that ghidra-svrAdmin works as an unprivileged user in the `ghidra` group - possibly test remotely importing a binary. however, ghidra-svrAdmin working is a good indicator of the server being functional + +## general + +- meta info / license info for pkgs diff --git a/default.nix b/default.nix index 734c209..58a5ac2 100644 --- a/default.nix +++ b/default.nix @@ -16,6 +16,13 @@ ocamlPackages = prev.ocamlPackages.overrideScope (ofinal: oprev: { xlog = ofinal.callPackage ./pkgs/ocaml/xlog {}; }); + + python312Packages = prev.python312Packages.overrideScope (pfinal: pprev: { + feedvalidator = pfinal.callPackage ./pkgs/python/feedvalidator {}; + }); + + # add to top level because it has a binary + feedvalidator = final.python312Packages.feedvalidator; }) ]; } diff --git a/pkgs/python/feedvalidator/bin.py b/pkgs/python/feedvalidator/bin.py new file mode 100644 index 0000000..ddc6088 --- /dev/null +++ b/pkgs/python/feedvalidator/bin.py @@ -0,0 +1,25 @@ +import argparse +import sys + +from . import compatibility, validateStream +from .formatter.text_plain import Formatter + + +def main(): + parser = argparse.ArgumentParser(description="W3C feedvalidator") + parser.add_argument("-b", "--base", type=str, required=False, default="", + help="Base URL of document") + parser.add_argument("file", type=argparse.FileType("rb"), help="File to validate") + args = parser.parse_args() + + events = validateStream(args.file, base=args.base)['loggedEvents'] + events = compatibility.AA(events) + fmt = Formatter(events) + if len(fmt) > 0: + for f in fmt: + print(f) + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/pkgs/python/feedvalidator/default.nix b/pkgs/python/feedvalidator/default.nix new file mode 100644 index 0000000..9a4c365 --- /dev/null +++ b/pkgs/python/feedvalidator/default.nix @@ -0,0 +1,61 @@ +{ + lib, + fetchFromGitHub, + stdenvNoCC, + buildPythonPackage, + + setuptools, + wheel, + + lxml, + html5lib, + rdflib +}: + +let feedvalidator_src = stdenvNoCC.mkDerivation { + name = "feedvalidator-src"; + + src = fetchFromGitHub { + owner = "w3c"; + repo = "feedvalidator"; + rev = "1bbf6d9c68ef074b824c452fbc5d1f7817e6adae"; + sha256 = "sha256-sHc6cgjSNcd0BcYYeybGPayQNV8SK9GjUglWg9iOQko="; + }; + + installPhase = '' + mkdir -p "$out" + cp -r src/feedvalidator/ "$out" + cp "${./bin.py}" "$out/feedvalidator/bin.py" + cp requirements.txt "$out" + cat > "$out"/pyproject.toml <=60", "wheel"] + build-backend = "setuptools.build_meta" + [project] + name = "feedvalidator" + version = "0.0.1+git" + requires-python = ">=3.11" + dynamic = ["dependencies"] + [project.scripts] + feedvalidator = "feedvalidator.bin:main" + [tool.setuptools.dynamic] + dependencies = {file = ["requirements.txt"]} + EOF + ''; +}; +in buildPythonPackage rec { + pname = "feedvalidator"; + version = "git"; + pyproject = true; + + src = feedvalidator_src; + + nativeBuildInputs = [ setuptools wheel ]; + + # this should match requirements.txt + propagatedBuildInputs = [ lxml html5lib rdflib ]; + + doCheck = false; + + pythonImportsCheck = [ "feedvalidator" ]; +}