;; SPDX-License-Identifier: CC0-1.0 ;; Copyright (C) 2022,2023 Wojtek Kosior <koszko@koszko.org> ;; ;; Available under the terms of Creative Commons Zero v1.0 Universal. (define-module (hydrilla-base) #:use-module (ice-9 rdelim) #:use-module (ice-9 regex) #:use-module (guix build-system python) #:use-module (guix download) #:use-module (guix gexp) #:use-module (guix packages) #:use-module ((guix licenses) #:prefix license:) #:use-module (gnu packages check) #:use-module (gnu packages license) #:use-module (gnu packages python-build) #:use-module (gnu packages python-check) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) #:export (%source-dir %pkg-info-path %hydrilla-version %source-tarball-name)) (define %source-dir (let* ((this-file (search-path %load-path "hydrilla.scm")) (proj-dir (dirname (dirname this-file)))) (if (absolute-file-name? proj-dir) proj-dir (string-append (getcwd) "/" proj-dir)))) ;; The PKG-INFO file is generated when running `python3 -m build -s` or similar. ;; It is also automatically included in the source release tarballs. (define %pkg-info-path (string-append %source-dir "/src/hydrilla.egg-info/PKG-INFO")) (define %hydrilla-version (if (access? %pkg-info-path R_OK) (call-with-input-file %pkg-info-path (lambda (port) (let ((process-line (lambda (self-ref) (let ((match-result (string-match "^Version: (.*)" (read-line port)))) (if match-result (match:substring match-result 1) (self-ref self-ref)))))) (process-line process-line)))) "unknown")) (define %source-tarball-name (string-append "hydrilla-" %hydrilla-version ".tar.gz")) (define-public python-types-requests-2.26 (package (name "python-types-requests") (version "2.26.0") (source (origin (method url-fetch) (uri (pypi-uri "types-requests" version)) (sha256 (base32 "10sq8jarr642vhw53k6zbf3hn2b8xfyrckwfngml4fj19g1whpnz")))) (build-system python-build-system) (home-page "https://github.com/python/typeshed") (synopsis "Typing stubs for requests") (description "This package provides a collection of library stubs for Python, with static types.") (license license:asl2.0))) (define-public hydrilla-without-haketilo (package (name "hydrilla-without-haketilo") (version %hydrilla-version) (source ;; setuptools_scm makes it impossible to build directly from git ;; checkout. We instead build from source tarball generated under ./dist/. (local-file (string-append %source-dir "/dist/" %source-tarball-name))) (build-system python-build-system) (arguments `(#:modules ((ice-9 match) (guix build utils) (guix build python-build-system)) #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-requirements (lambda _ (substitute* "setup.cfg" (("^all = .*") "all = flask>=1.1") (("[ ]*haketilo = .*:.*" match) (string-append "#" match))))) (replace 'check (lambda* (#:key tests? #:allow-other-keys) (when tests? (invoke "pytest")))) (add-after 'wrap 'prevent-local-package-interference (lambda* (#:key outputs #:allow-other-keys) (match-let ((((_ . dir)) outputs)) (for-each (lambda (prog-name) (substitute* (string-append dir "/bin/" prog-name) (("^#!/.*$" shabang) (string-append shabang "export PYTHONNOUSERSITE=1\n")))) '("hydrilla" "hydrilla-server" "hydrilla-builder")))))))) (propagated-inputs (list python-click python-flask python-immutables python-jsonschema reuse)) (native-inputs (list python-setuptools-scm python-babel python-pytest python-pypa-build python-mypy (module-ref (current-module) 'python-types-requests python-types-requests-2.26))) (home-page "https://hydrillabugs.koszko.org/projects/haketilo/wiki") (synopsis "Block JavaScript and add custom logic to web pages") (description "Haketilo HTTP proxy facilitates viewing of websites while having their original JavaScript replaced by user-provided scripts. Haketilo combines the functionalities of content blocker and user script manager. It can be used with its script repository, Hydrilla.") (license (list license:agpl3+ license:gpl3+ license:cc0))))