Mobilizon-Reshare-condividi.../docker/mobilizon-reshare.scm

404 lines
14 KiB
Scheme

(define-module (docker mobilizon-reshare)
#:use-module (guix download)
#:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module (guix packages)
#:use-module (guix utils)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix build-system python)
#:use-module (gnu packages)
#:use-module (gnu packages check)
#:use-module (gnu packages databases)
#:use-module (gnu packages django)
#:use-module (gnu packages python)
#:use-module (gnu packages python-build)
#:use-module (gnu packages python-check)
#:use-module (gnu packages python-web)
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages serialization)
#:use-module (gnu packages time)
#:use-module (gnu packages web)
#:use-module (ice-9 popen)
#:use-module (ice-9 rdelim)
#:use-module (srfi srfi-1))
(define %source-dir (getcwd))
(define coopyleft
(let ((license (@@ (guix licenses) license)))
(license "Coopyleft"
"https://wiki.coopcycle.org/en:license"
"Coopyleft License")))
(define wrap-python3
(@@ (gnu packages python) wrap-python3))
(define-public python-3.9-wrapper
(wrap-python3 python-3.9))
;; TODO: This should probably be upstreamed.
(define-public python-dotenv
(package
(name "python-dotenv")
(version "0.17.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "python-dotenv" version))
(sha256
(base32
"0jjg7b8073gxsmh47ic152xdxym5zhw887ilh0ddl45gl0nph6s7"))))
(build-system python-build-system)
(propagated-inputs
`(("python-click" ,python-click)))
(native-inputs
`(("python-mock" ,python-mock)
("python-pytest" ,python-pytest)
("python-sh" ,python-sh)))
(home-page
"https://github.com/theskumar/python-dotenv")
(synopsis
"Setup environment variables according to .env files")
(description
"This package provides the @code{python-dotenv} Python module to
read key-value pairs from a .env file and set them as environment variables")
(license license:bsd-3)))
;; TODO: This should probably be upstreamed.
;; This is only for python-dynaconf.
(define-public python-dotenv-0.13.0
(package (inherit python-dotenv)
(name "python-dotenv")
(version "0.13.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "python-dotenv" version))
(sha256
(base32
"0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))))
;; TODO: This should probably be upstreamed.
;; This is only for python-dynaconf.
(define-public python-ruamel.yaml-0.16.10
(package (inherit python-ruamel.yaml)
(name "python-ruamel.yaml")
(version "0.16.10")
(source
(origin
(method url-fetch)
(uri (pypi-uri "ruamel.yaml" version))
(sha256
(base32
"0m5rwlf3iwsb1w9l98qx9alvqxk41gfphksj03x2zxwbfx569709"))))))
;; TODO: This should probably be upstreamed.
(define-public python-dynaconf
(package
(name "dynaconf")
(version "3.1.5")
(source
(origin
(method git-fetch)
(uri
(git-reference
(url "https://github.com/rochacbruno/dynaconf")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32
"0hxp1iadwmva79l16frvc77jrisppb09z6k1asm0qfjjzwyaswg3"))
(patches (search-patches "dynaconf-Unvendor-dependencies.patch"))
(modules '((guix build utils)))
(snippet '(begin
;; Remove vendored dependencies
(let ((unvendor '("click" "dotenv" "ruamel" "toml")))
(with-directory-excursion "dynaconf/vendor"
(for-each delete-file-recursively unvendor))
(with-directory-excursion "dynaconf/vendor_src"
(for-each delete-file-recursively unvendor)))))))
(build-system python-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(replace 'check
(lambda* (#:key tests? outputs #:allow-other-keys)
(when tests?
(setenv "PATH"
(string-append (assoc-ref outputs "out") "/bin:"
(getenv "PATH")))
;; These tests depend on hvac and a
;; live Vault process.
(delete-file "tests/test_vault.py")
(invoke "make" "test_only")))))))
(propagated-inputs
`(("python-click" ,python-click)
("python-configobj" ,python-configobj)
("python-dotenv" ,python-dotenv-0.13.0)
("python-ruamel.yaml" ,python-ruamel.yaml-0.16.10)
("python-toml" ,python-toml)))
(native-inputs
`(("python-django" ,python-django)
("python-flask" ,python-flask)
("python-pytest" ,python-pytest-6)
("python-pytest-cov" ,python-pytest-cov)
("python-pytest-mock" ,python-pytest-mock)))
(home-page "https://www.dynaconf.com/")
(synopsis "The dynamic configurator for your Python project")
(description
"This package provides @code{dynaconf} the dynamic configurator manager for
your Python project. It provides features such as:
@itemize
@item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
@item Settings management (default values, validation, parsing, templating);
@item Protection of sensitive information (passwords/tokens);
@item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
loaders;
@item Full support for environment variables to override existing settings
(dotenv support included);
@item Optional layered system for multiple environments @code{[default,
development, testing, production]};
@item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
@item Built-in extensions for Django and Flask web frameworks;
@item CLI for common operations such as @code{init, list, write, validate, export}.
@end itemize")
(license license:expat)))
;; This is only for mobilizon-bots.git.
(define-public python-arrow-1.1
(package (inherit python-arrow)
(name "python-arrow")
(version "1.1.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "arrow" version))
(sha256
(base32
"1n2vzyrirfj7fp0zn6iipm3i8bch0g4m14z02nrvlyjiyfmi7zmq"))))))
;; This is only for mobilizon-bots.git.
(define-public python-tortoise-orm-0.17
(package (inherit python-tortoise-orm)
(name "python-tortoise-orm")
(version "0.17.6")
(source
(origin
(method url-fetch)
(uri (pypi-uri "tortoise-orm" version))
(sha256
(base32
"0viwmd8773b4bz8119d26wd3qxrdhmafrqd4m8bdz3439gcpq67l"))))))
;; This is only for mobilizon-bots.git.
(define-public python-pytest-asyncio-0.15
(package (inherit python-pytest-asyncio)
(name "python-pytest-asyncio")
(version "0.15.1")
(source
(origin
(method url-fetch)
(uri (pypi-uri "pytest-asyncio" version))
(sha256
(base32
"0vrzsrg3j1cfd57m0b3r5xf87rslgcs42jya346mdg9bc6wwwr15"))))
(arguments
(substitute-keyword-arguments (package-arguments python-pytest-asyncio)
((#:tests? _ #f) #f)))))
(define-public python-markdownify
(package
(name "python-markdownify")
(version "0.9.2")
(source
(origin
(method url-fetch)
(uri (pypi-uri "markdownify" version))
(sha256
(base32
"0zfpzdwkf34spmfr2iwkqch3fi0nnll2v5nghvgnrmazjn4rcxdr"))))
(build-system python-build-system)
(arguments
`(#:tests? #f))
(native-inputs
`(("python-pytest" ,python-pytest-6)))
(propagated-inputs
`(("python-flake8" ,python-flake8)
("python-beautifulsoup4" ,python-beautifulsoup4)
("python-six" ,python-six)))
(home-page
"http://github.com/matthewwithanm/python-markdownify")
(synopsis "Convert HTML to markdown.")
(description "Convert HTML to markdown.")
(license license:expat)))
(define-public python-ipaddress
(package
(name "python-ipaddress")
(version "1.0.23")
(source
(origin
(method url-fetch)
(uri (pypi-uri "ipaddress" version))
(sha256
(base32 "1qp743h30s04m3cg3yk3fycad930jv17q7dsslj4mfw0jlvf1y5p"))))
(build-system python-build-system)
(home-page "https://github.com/phihag/ipaddress")
(synopsis "IPv4/IPv6 manipulation library")
(description "IPv4/IPv6 manipulation library")
(license #f)))
(define-public python-vcrpy
(package
(name "python-vcrpy")
(version "4.1.1")
(source
(origin
(method url-fetch)
(uri (pypi-uri "vcrpy" version))
(sha256
(base32 "16gmzxs3lzbgf1828n0q61vbmwyhpvzdlk37x6gdk8n05zr5n2ap"))))
(build-system python-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(replace 'check
(lambda* (#:key tests? outputs #:allow-other-keys)
(when tests?
(substitute* "tox.ini"
(("AWS_ACCESS_KEY_ID") "PYTHONPATH"))
(setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
;; These tests require network access.
(delete-file "tests/unit/test_stubs.py")
(invoke "pytest" "tests/unit")))))))
(native-inputs
`(
("python-black" ,python-black)
("python-coverage" ,python-coverage)
("python-flake8" ,python-flake8)
("python-flask" ,python-flask)
("python-httplib2" ,python-httplib2)
("python-ipaddress" ,python-ipaddress)
("python-mock" ,python-mock)
("python-pytest" ,python-pytest)
("python-pytest-cov" ,python-pytest-cov)
("python-pytest-httpbin" ,python-pytest-httpbin)
("python-tox" ,python-tox)
("python-urllib3" ,python-urllib3)))
(propagated-inputs
`(("python-pyyaml" ,python-pyyaml)
("python-six" ,python-six)
("python-wrapt" ,python-wrapt)
("python-yarl" ,python-yarl)))
(home-page "https://github.com/kevin1024/vcrpy")
(synopsis
"Automatically mock your HTTP interactions to simplify and speed up testing")
(description
"Automatically mock your HTTP interactions to simplify and speed up testing")
(license license:expat)))
(define-public python-tweepy
(package
(name "python-tweepy")
(version "4.1.0")
(source
(origin
(method git-fetch)
(uri
(git-reference
(url "https://github.com/tweepy/tweepy")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"1c0paxc38i5jq8i20f9xwv966sap4nnhgnbdxg3611pllnzg5wdv"))))
(build-system python-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(replace 'check
(lambda* (#:key tests? inputs outputs #:allow-other-keys)
(when tests?
(invoke "python" "-m" "unittest")))))))
(propagated-inputs
`(("python-aiohttp" ,python-aiohttp)
("python-requests" ,python-requests)
("python-requests-oauthlib" ,python-requests-oauthlib)))
(native-inputs
`(("python-coveralls" ,python-coveralls)
("python-tox" ,python-tox)
("python-vcrpy" ,python-vcrpy)))
(home-page "https://www.tweepy.org/")
(synopsis "Twitter library for Python")
(description "Twitter library for Python")
(license license:expat)))
(define-public mobilizon-reshare.git
(let ((source-version (with-input-from-file
(string-append %source-dir
"/mobilizon_reshare/VERSION")
read-line))
(revision "0")
(commit (read-line
(open-input-pipe "git show HEAD | head -1 | cut -d ' ' -f 2"))))
(package
(name "mobilizon-reshare.git")
(version (git-version source-version revision commit))
(source (local-file %source-dir
#:recursive? #t
#:select? (git-predicate %source-dir)))
(build-system python-build-system)
(arguments
`(#:python ,python-3.9
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'generate-setup.py
(lambda* (#:key inputs outputs #:allow-other-keys)
;; This is a hack needed to get poetry's
;; setup.py.
(setenv "POETRY_VIRTUALENVS_CREATE" "false")
(invoke "poetry" "build" "-f" "sdist")
(invoke "bash" "-c"
"tar --wildcards -xvf dist/*-`poetry version -s`.tar.gz -O '*/setup.py' > setup.py")
(substitute* "setup.py"
(("'install_requires': install_requires,") ""))))
(replace 'check
(lambda* (#:key tests? inputs outputs #:allow-other-keys)
(when tests?
(invoke "python" "-m" "pytest"
;; This test fails because of the unvendoring
;; of toml from dynaconf.
"-k" "not test_get_settings_failure_invalid_toml")))))))
(native-inputs
`(("python-asynctest" ,python-asynctest)
("python-iniconfig" ,python-iniconfig)
("poetry" ,poetry)
("python-pytest" ,python-pytest-6)
("python-pytest-asyncio" ,python-pytest-asyncio-0.15)
("python-pytest-lazy-fixture"
,python-pytest-lazy-fixture)
("python-responses" ,python-responses)
("python-wrapper" ,python-3.9-wrapper)))
(propagated-inputs
`(("python-aiosqlite" ,python-aiosqlite)
("python-appdirs" ,python-appdirs)
("python-arrow" ,python-arrow-1.1)
("python-beautifulsoup4" ,python-beautifulsoup4)
("python-click" ,python-click)
("python-dynaconf" ,python-dynaconf)
("python-jinja2" ,python-jinja2)
("python-markdownify" ,python-markdownify)
("python-requests" ,python-requests)
("python-tweepy" ,python-tweepy)
("python-tortoise-orm" ,python-tortoise-orm-0.17)))
(home-page
"https://github.com/Tech-Workers-Coalition-Italia/mobilizon-reshare")
(synopsis
"Publish Mobilizon events to your social networks")
(description
"This package provides a CLI application to publish Mobilizon
events to your social media.")
(license coopyleft))))