FreeBSD Bugzilla – Attachment 253363 Details for
Bug 281304
[NEW PORT] www/py-calibreweb: Web app that offers an interface for browsing a Calibre Library DB
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
New Port py-calibreweb 0.6.23
calibreweb.diff (text/plain), 60.61 KB, created by
Matthew Wener
on 2024-09-05 20:38:42 UTC
(
hide
)
Description:
New Port py-calibreweb 0.6.23
Filename:
MIME Type:
Creator:
Matthew Wener
Created:
2024-09-05 20:38:42 UTC
Size:
60.61 KB
patch
obsolete
>From 41fc950c0e2e9243a329bf082dc0176ace091359 Mon Sep 17 00:00:00 2001 >From: Matthew Wener <matthew@wener.org> >Date: Thu, 5 Sep 2024 16:01:26 -0400 >Subject: [PATCH] Port Calibre-Web and Required Dependencies > >--- > GIDs | 2 +- > UIDs | 2 +- > archivers/Makefile | 5 + > archivers/py-inflate64/Makefile | 24 +++ > archivers/py-inflate64/distinfo | 3 + > archivers/py-inflate64/pkg-descr | 3 + > archivers/py-multivolumefile/Makefile | 21 +++ > archivers/py-multivolumefile/distinfo | 3 + > archivers/py-multivolumefile/pkg-descr | 3 + > archivers/py-py7zr/Makefile | 31 ++++ > archivers/py-py7zr/distinfo | 3 + > archivers/py-py7zr/pkg-descr | 3 + > archivers/py-pybcj/Makefile | 21 +++ > archivers/py-pybcj/distinfo | 3 + > archivers/py-pybcj/pkg-descr | 5 + > archivers/py-pyppmd/Makefile | 21 +++ > archivers/py-pyppmd/distinfo | 3 + > archivers/py-pyppmd/pkg-descr | 5 + > textproc/Makefile | 4 + > textproc/py-sphinxcontrib-seqdiag/Makefile | 33 ++++ > textproc/py-sphinxcontrib-seqdiag/distinfo | 3 + > textproc/py-sphinxcontrib-seqdiag/pkg-descr | 2 + > textproc/py-sphinxcontrib-spelling/Makefile | 33 ++++ > textproc/py-sphinxcontrib-spelling/distinfo | 3 + > textproc/py-sphinxcontrib-spelling/pkg-descr | 3 + > textproc/py-text2digits/Makefile | 29 ++++ > textproc/py-text2digits/distinfo | 3 + > textproc/py-text2digits/pkg-descr | 2 + > textproc/py-wordninja/Makefile | 30 ++++ > textproc/py-wordninja/distinfo | 3 + > textproc/py-wordninja/pkg-descr | 2 + > www/Makefile | 9 ++ > www/py-calibreweb/Makefile | 143 ++++++++++++++++++ > www/py-calibreweb/distinfo | 3 + > www/py-calibreweb/files/calibreweb.in | 92 +++++++++++ > .../patch-src_calibreweb_cps_config__sql.py | 29 ++++ > .../patch-src_calibreweb_cps_tasks_convert.py | 33 ++++ > www/py-calibreweb/files/pkg-message.in | 17 +++ > www/py-calibreweb/pkg-descr | 3 + > www/py-comicapi/Makefile | 51 +++++++ > www/py-comicapi/distinfo | 3 + > www/py-comicapi/pkg-descr | 2 + > www/py-flask-dance/Makefile | 82 ++++++++++ > www/py-flask-dance/distinfo | 3 + > www/py-flask-dance/pkg-descr | 4 + > www/py-flask-simpleldap/Makefile | 47 ++++++ > www/py-flask-simpleldap/distinfo | 3 + > www/py-flask-simpleldap/pkg-descr | 2 + > www/py-flask-sphinx-themes/Makefile | 31 ++++ > www/py-flask-sphinx-themes/distinfo | 3 + > www/py-flask-sphinx-themes/pkg-descr | 2 + > www/py-free-proxy/Makefile | 33 ++++ > www/py-free-proxy/distinfo | 3 + > www/py-free-proxy/pkg-descr | 3 + > www/py-goodreads/Makefile | 21 +++ > www/py-goodreads/distinfo | 3 + > www/py-goodreads/pkg-descr | 3 + > www/py-pydrive2/Makefile | 58 +++++++ > www/py-pydrive2/distinfo | 3 + > www/py-pydrive2/pkg-descr | 2 + > www/py-scholarly/Makefile | 33 ++++ > www/py-scholarly/distinfo | 3 + > www/py-scholarly/pkg-descr | 3 + > 63 files changed, 1039 insertions(+), 2 deletions(-) > create mode 100644 archivers/py-inflate64/Makefile > create mode 100644 archivers/py-inflate64/distinfo > create mode 100644 archivers/py-inflate64/pkg-descr > create mode 100644 archivers/py-multivolumefile/Makefile > create mode 100644 archivers/py-multivolumefile/distinfo > create mode 100644 archivers/py-multivolumefile/pkg-descr > create mode 100644 archivers/py-py7zr/Makefile > create mode 100644 archivers/py-py7zr/distinfo > create mode 100644 archivers/py-py7zr/pkg-descr > create mode 100644 archivers/py-pybcj/Makefile > create mode 100644 archivers/py-pybcj/distinfo > create mode 100644 archivers/py-pybcj/pkg-descr > create mode 100644 archivers/py-pyppmd/Makefile > create mode 100644 archivers/py-pyppmd/distinfo > create mode 100644 archivers/py-pyppmd/pkg-descr > create mode 100644 textproc/py-sphinxcontrib-seqdiag/Makefile > create mode 100644 textproc/py-sphinxcontrib-seqdiag/distinfo > create mode 100644 textproc/py-sphinxcontrib-seqdiag/pkg-descr > create mode 100644 textproc/py-sphinxcontrib-spelling/Makefile > create mode 100644 textproc/py-sphinxcontrib-spelling/distinfo > create mode 100644 textproc/py-sphinxcontrib-spelling/pkg-descr > create mode 100644 textproc/py-text2digits/Makefile > create mode 100644 textproc/py-text2digits/distinfo > create mode 100644 textproc/py-text2digits/pkg-descr > create mode 100644 textproc/py-wordninja/Makefile > create mode 100644 textproc/py-wordninja/distinfo > create mode 100644 textproc/py-wordninja/pkg-descr > create mode 100644 www/py-calibreweb/Makefile > create mode 100644 www/py-calibreweb/distinfo > create mode 100644 www/py-calibreweb/files/calibreweb.in > create mode 100644 www/py-calibreweb/files/patch-src_calibreweb_cps_config__sql.py > create mode 100644 www/py-calibreweb/files/patch-src_calibreweb_cps_tasks_convert.py > create mode 100644 www/py-calibreweb/files/pkg-message.in > create mode 100644 www/py-calibreweb/pkg-descr > create mode 100644 www/py-comicapi/Makefile > create mode 100644 www/py-comicapi/distinfo > create mode 100644 www/py-comicapi/pkg-descr > create mode 100644 www/py-flask-dance/Makefile > create mode 100644 www/py-flask-dance/distinfo > create mode 100644 www/py-flask-dance/pkg-descr > create mode 100644 www/py-flask-simpleldap/Makefile > create mode 100644 www/py-flask-simpleldap/distinfo > create mode 100644 www/py-flask-simpleldap/pkg-descr > create mode 100644 www/py-flask-sphinx-themes/Makefile > create mode 100644 www/py-flask-sphinx-themes/distinfo > create mode 100644 www/py-flask-sphinx-themes/pkg-descr > create mode 100644 www/py-free-proxy/Makefile > create mode 100644 www/py-free-proxy/distinfo > create mode 100644 www/py-free-proxy/pkg-descr > create mode 100644 www/py-goodreads/Makefile > create mode 100644 www/py-goodreads/distinfo > create mode 100644 www/py-goodreads/pkg-descr > create mode 100644 www/py-pydrive2/Makefile > create mode 100644 www/py-pydrive2/distinfo > create mode 100644 www/py-pydrive2/pkg-descr > create mode 100644 www/py-scholarly/Makefile > create mode 100644 www/py-scholarly/distinfo > create mode 100644 www/py-scholarly/pkg-descr > >diff --git a/GIDs b/GIDs >index aa63249122f3..de31bee9b4cf 100644 >--- a/GIDs >+++ b/GIDs >@@ -752,7 +752,7 @@ bosun:*:807: > clixon:*:808: > # free: 809 > # free: 810 >-# free: 811 >+calibreweb:*:811: > foreman_proxy:*:812: > hitch:*:813: > puppet:*:814: >diff --git a/UIDs b/UIDs >index ebc717fa6fdb..3e450dce7b24 100644 >--- a/UIDs >+++ b/UIDs >@@ -757,7 +757,7 @@ bosun:*:807:807::0:0:Bosun Daemon:/nonexistent:/usr/sbin/nologin > clixon:*:808:808::0:0:Clixon Daemon:/nonexistent:/usr/sbin/nologin > # free: 809 > # free: 810 >-# free: 811 >+calibreweb:*:811:811::0:0:Calibre-Web Daemon:/usr/local/calibreweb:/usr/sbin/nologin > foreman_proxy:*:812:812::0:0:Foreman Smart Proxy:/usr/local/share/foreman-proxy:/usr/sbin/nologin > hitch:*:813:813::0:0:Hitch TLS Proxy:/nonexistent:/usr/sbin/nologin > puppet:*:814:814::0:0:Puppet Daemon:/nonexistent:/usr/sbin/nologin >diff --git a/archivers/Makefile b/archivers/Makefile >index eceddb2f6c0e..ba578c94bb8a 100644 >--- a/archivers/Makefile >+++ b/archivers/Makefile >@@ -195,13 +195,18 @@ > SUBDIR += py-bz2file > SUBDIR += py-compressed-rtf > SUBDIR += py-cramjam >+ SUBDIR += py-inflate64 > SUBDIR += py-laszip > SUBDIR += py-libarchive-c > SUBDIR += py-lz4 > SUBDIR += py-lzma > SUBDIR += py-lzstring >+ SUBDIR += py-multivolumefile > SUBDIR += py-patool >+ SUBDIR += py-py7zr >+ SUBDIR += py-pybcj > SUBDIR += py-pyminizip >+ SUBDIR += py-pyppmd > SUBDIR += py-python-lhafile > SUBDIR += py-python-lzo > SUBDIR += py-python-rpm-packaging >diff --git a/archivers/py-inflate64/Makefile b/archivers/py-inflate64/Makefile >new file mode 100644 >index 000000000000..6702ac4f74f8 >--- /dev/null >+++ b/archivers/py-inflate64/Makefile >@@ -0,0 +1,24 @@ >+PORTNAME= inflate64 >+PORTVERSION= 1.0.0 >+CATEGORIES= archivers python >+MASTER_SITES= PYPI >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= Deflate64 compression/decompression library >+WWW= https://codeberg.org/miurahr/inflate64 >+ >+LICENSE= LGPL21 >+LICENSE_FILE= ${WRKSRC}/COPYING >+ >+BUILD_DEPENDS= ${PY_SETUPTOOLS} \ >+ ${PYTHON_PKGNAMEPREFIX}setuptools-scm>=0:devel/py-setuptools-scm@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}wheel>=:devel/py-wheel@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist pep517 >+ >+post-install: >+ ${STRIP_CMD} ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/inflate64/_inflate64*.so >+ >+.include <bsd.port.mk> >diff --git a/archivers/py-inflate64/distinfo b/archivers/py-inflate64/distinfo >new file mode 100644 >index 000000000000..5b9f92520eb5 >--- /dev/null >+++ b/archivers/py-inflate64/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1724809518 >+SHA256 (inflate64-1.0.0.tar.gz) = 3278827b803cf006a1df251f3e13374c7d26db779e5a33329cc11789b804bc2d >+SIZE (inflate64-1.0.0.tar.gz) = 895853 >diff --git a/archivers/py-inflate64/pkg-descr b/archivers/py-inflate64/pkg-descr >new file mode 100644 >index 000000000000..6623a3b88797 >--- /dev/null >+++ b/archivers/py-inflate64/pkg-descr >@@ -0,0 +1,3 @@ >+The inflate64 is a python package to provide Deflater and >+Inflater class to compress and decompress with Enhanced >+Deflate compression algorithm. >diff --git a/archivers/py-multivolumefile/Makefile b/archivers/py-multivolumefile/Makefile >new file mode 100644 >index 000000000000..e782279e83df >--- /dev/null >+++ b/archivers/py-multivolumefile/Makefile >@@ -0,0 +1,21 @@ >+PORTNAME= multivolumefile >+PORTVERSION= 0.2.3 >+CATEGORIES= archivers python >+MASTER_SITES= PYPI >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= Multi volume file wrapper library >+WWW= https://codeberg.org/miurahr/multivolume >+ >+LICENSE= LGPL21 >+LICENSE_FILE= ${WRKSRC}/LICENSE >+ >+BUILD_DEPENDS= ${PY_SETUPTOOLS} \ >+ ${PYTHON_PKGNAMEPREFIX}setuptools-scm>=0:devel/py-setuptools-scm@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}wheel>=:devel/py-wheel@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist pep517 >+ >+.include <bsd.port.mk> >diff --git a/archivers/py-multivolumefile/distinfo b/archivers/py-multivolumefile/distinfo >new file mode 100644 >index 000000000000..df3cd848e440 >--- /dev/null >+++ b/archivers/py-multivolumefile/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1724809518 >+SHA256 (multivolumefile-0.2.3.tar.gz) = a0648d0aafbc96e59198d5c17e9acad7eb531abea51035d08ce8060dcad709d6 >+SIZE (multivolumefile-0.2.3.tar.gz) = 77984 >diff --git a/archivers/py-multivolumefile/pkg-descr b/archivers/py-multivolumefile/pkg-descr >new file mode 100644 >index 000000000000..ea8ee47db707 >--- /dev/null >+++ b/archivers/py-multivolumefile/pkg-descr >@@ -0,0 +1,3 @@ >+MultiVolumefile is a python library to provide a file-object >+wrapping multiple files as virtually like as a single file. >+It inherits io.RawIOBase class and support some of its standard methods. >diff --git a/archivers/py-py7zr/Makefile b/archivers/py-py7zr/Makefile >new file mode 100644 >index 000000000000..e43e5a22f28b >--- /dev/null >+++ b/archivers/py-py7zr/Makefile >@@ -0,0 +1,31 @@ >+PORTNAME= py7zr >+PORTVERSION= 0.22.0 >+CATEGORIES= archivers python >+MASTER_SITES= PYPI >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= Pure python 7-zip library >+WWW= https://py7zr.readthedocs.io/ >+ >+LICENSE= GPLv3 >+LICENSE_FILE= ${WRKSRC}/LICENSE >+ >+BUILD_DEPENDS= ${PY_SETUPTOOLS} \ >+ ${PYTHON_PKGNAMEPREFIX}setuptools-scm>=0:devel/py-setuptools-scm@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}wheel>=:devel/py-wheel@${PY_FLAVOR} >+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}brotli>=0:archivers/py-brotli@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}brotlicffi>=0:archivers/py-brotlicffi@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}inflate64>=0:archivers/py-inflate64@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}multivolumefile>=0:archivers/py-multivolumefile@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}psutil>=0:sysutils/py-psutil@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}pybcj>=0:archivers/py-pybcj@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}pycryptodomex>=0:security/py-pycryptodomex@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}pyppmd>=0:archivers/py-pyppmd@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}texttable>=0:textproc/py-texttable@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}zstd>=0:archivers/py-zstd@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist pep517 >+ >+.include <bsd.port.mk> >diff --git a/archivers/py-py7zr/distinfo b/archivers/py-py7zr/distinfo >new file mode 100644 >index 000000000000..310db97ebf71 >--- /dev/null >+++ b/archivers/py-py7zr/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1724809518 >+SHA256 (py7zr-0.22.0.tar.gz) = c6c7aea5913535184003b73938490f9a4d8418598e533f9ca991d3b8e45a139e >+SIZE (py7zr-0.22.0.tar.gz) = 4992926 >diff --git a/archivers/py-py7zr/pkg-descr b/archivers/py-py7zr/pkg-descr >new file mode 100644 >index 000000000000..43c9766990c8 >--- /dev/null >+++ b/archivers/py-py7zr/pkg-descr >@@ -0,0 +1,3 @@ >+py7zr is a library and utility to support 7zip archive >+compression, decompression, encryption and decryption >+written by Python programming language. >diff --git a/archivers/py-pybcj/Makefile b/archivers/py-pybcj/Makefile >new file mode 100644 >index 000000000000..121a17feef4c >--- /dev/null >+++ b/archivers/py-pybcj/Makefile >@@ -0,0 +1,21 @@ >+PORTNAME= pybcj >+PORTVERSION= 1.0.2 >+CATEGORIES= archivers python >+MASTER_SITES= PYPI >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= BCJ filter library >+WWW= https://codeberg.org/miurahr/pybcj >+ >+LICENSE= GPLv3 >+LICENSE_FILE= ${WRKSRC}/LICENSE >+ >+BUILD_DEPENDS= ${PY_SETUPTOOLS} \ >+ ${PYTHON_PKGNAMEPREFIX}setuptools-scm>=0:devel/py-setuptools-scm@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}wheel>=:devel/py-wheel@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist pep517 >+ >+.include <bsd.port.mk> >diff --git a/archivers/py-pybcj/distinfo b/archivers/py-pybcj/distinfo >new file mode 100644 >index 000000000000..ca5c772e5f13 >--- /dev/null >+++ b/archivers/py-pybcj/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1724809518 >+SHA256 (pybcj-1.0.2.tar.gz) = c7f5bef7f47723c53420e377bc64d2553843bee8bcac5f0ad076ab1524780018 >+SIZE (pybcj-1.0.2.tar.gz) = 2111002 >diff --git a/archivers/py-pybcj/pkg-descr b/archivers/py-pybcj/pkg-descr >new file mode 100644 >index 000000000000..30da3e6867e0 >--- /dev/null >+++ b/archivers/py-pybcj/pkg-descr >@@ -0,0 +1,5 @@ >+In data compression, BCJ, short for Branch-Call-Jump, refers >+to a technique that improves the compression of machine code of >+executable binaries by replacing relative branch addresses with >+absolute ones. This allows a LZMA compressor to identify duplicate >+targets and archive higher compression rate. >diff --git a/archivers/py-pyppmd/Makefile b/archivers/py-pyppmd/Makefile >new file mode 100644 >index 000000000000..05e5593f58e0 >--- /dev/null >+++ b/archivers/py-pyppmd/Makefile >@@ -0,0 +1,21 @@ >+PORTNAME= pyppmd >+PORTVERSION= 1.1.0 >+CATEGORIES= archivers python >+MASTER_SITES= PYPI >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= PPMd compression/decompression library >+WWW= https://pyppmd.readthedocs.io/en/latest/ >+ >+LICENSE= LGPL21 >+LICENSE_FILE= ${WRKSRC}/LICENSE >+ >+BUILD_DEPENDS= ${PY_SETUPTOOLS} \ >+ ${PYTHON_PKGNAMEPREFIX}setuptools-scm>=0:devel/py-setuptools-scm@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}wheel>=:devel/py-wheel@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist pep517 >+ >+.include <bsd.port.mk> >diff --git a/archivers/py-pyppmd/distinfo b/archivers/py-pyppmd/distinfo >new file mode 100644 >index 000000000000..8d9d33d98e24 >--- /dev/null >+++ b/archivers/py-pyppmd/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1724809518 >+SHA256 (pyppmd-1.1.0.tar.gz) = 1d38ce2e4b7eb84b53bc8a52380b94f66ba6c39328b8800b30c2b5bf31693973 >+SIZE (pyppmd-1.1.0.tar.gz) = 1348949 >diff --git a/archivers/py-pyppmd/pkg-descr b/archivers/py-pyppmd/pkg-descr >new file mode 100644 >index 000000000000..cd35014a6741 >--- /dev/null >+++ b/archivers/py-pyppmd/pkg-descr >@@ -0,0 +1,5 @@ >+pyppmd module provides classes and functions for compressing >+and decompressing text data, using PPM (Prediction by partial >+matching) compression algorithm which has several variations >+of implementations. PPMd is the implementation by Dmitry >+Shkarin. PyPPMD use Igor Pavlov's range coder introduced in 7-zip. >diff --git a/textproc/Makefile b/textproc/Makefile >index 163630eaf17d..b6a367614801 100644 >--- a/textproc/Makefile >+++ b/textproc/Makefile >@@ -1626,7 +1626,9 @@ > SUBDIR += py-sphinxcontrib-newsfeed > SUBDIR += py-sphinxcontrib-programoutput > SUBDIR += py-sphinxcontrib-qthelp >+ SUBDIR += py-sphinxcontrib-seqdiag > SUBDIR += py-sphinxcontrib-serializinghtml >+ SUBDIR += py-sphinxcontrib-spelling > SUBDIR += py-sphinxcontrib-svg2pdfconverter > SUBDIR += py-sphinxcontrib-towncrier > SUBDIR += py-sphinxcontrib-websupport >@@ -1639,6 +1641,7 @@ > SUBDIR += py-tabletext > SUBDIR += py-tablib > SUBDIR += py-terminaltables >+ SUBDIR += py-text2digits > SUBDIR += py-textdistance > SUBDIR += py-textfsm > SUBDIR += py-textract >@@ -1676,6 +1679,7 @@ > SUBDIR += py-whoosh > SUBDIR += py-wordcloud > SUBDIR += py-wordnet >+ SUBDIR += py-wordninja > SUBDIR += py-wstools > SUBDIR += py-wtf-peewee > SUBDIR += py-wtforms >diff --git a/textproc/py-sphinxcontrib-seqdiag/Makefile b/textproc/py-sphinxcontrib-seqdiag/Makefile >new file mode 100644 >index 000000000000..b93278cc4bbc >--- /dev/null >+++ b/textproc/py-sphinxcontrib-seqdiag/Makefile >@@ -0,0 +1,33 @@ >+PORTNAME= sphinxcontrib-seqdiag >+DISTVERSION= 3.0.0 >+CATEGORIES= textproc python >+MASTER_SITES= PYPI >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= Sphinx extension for embedding sequence diagrams >+WWW= https://github.com/blockdiag/sphinxcontrib-seqdiag >+ >+LICENSE= BSD2CLAUSE >+LICENSE_FILE= ${WRKSRC}/LICENSE >+ >+BUILD_DEPENDS= ${PY_SETUPTOOLS} \ >+ ${PYTHON_PKGNAMEPREFIX}wheel>=:devel/py-wheel@${PY_FLAVOR} >+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}blockdiag>=0:graphics/py-blockdiag@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}seqdiag>=0:graphics/py-seqdiag@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}sphinx>=0:textproc/py-sphinx@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist pep517 >+ >+NO_ARCH= yes >+ >+PORTDOCS= AUTHORS PKG-INFO README.rst >+ >+OPTIONS_DEFINE= DOCS >+ >+post-install-DOCS-on: >+ @${MKDIR} ${STAGEDIR}${DOCSDIR}/ >+ ${INSTALL_DATA} ${PORTDOCS:S,^,${WRKSRC}/,} ${STAGEDIR}${DOCSDIR} >+ >+.include <bsd.port.mk> >diff --git a/textproc/py-sphinxcontrib-seqdiag/distinfo b/textproc/py-sphinxcontrib-seqdiag/distinfo >new file mode 100644 >index 000000000000..2992a0009321 >--- /dev/null >+++ b/textproc/py-sphinxcontrib-seqdiag/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1724809518 >+SHA256 (sphinxcontrib-seqdiag-3.0.0.tar.gz) = 407e48797673f71d948e9ffa04716cac1d99a9ec8f616de3764d42d033416574 >+SIZE (sphinxcontrib-seqdiag-3.0.0.tar.gz) = 6196 >diff --git a/textproc/py-sphinxcontrib-seqdiag/pkg-descr b/textproc/py-sphinxcontrib-seqdiag/pkg-descr >new file mode 100644 >index 000000000000..498f3bb51ae4 >--- /dev/null >+++ b/textproc/py-sphinxcontrib-seqdiag/pkg-descr >@@ -0,0 +1,2 @@ >+A sphinx extension for embedding sequence diagrams >+using seqdiag. >diff --git a/textproc/py-sphinxcontrib-spelling/Makefile b/textproc/py-sphinxcontrib-spelling/Makefile >new file mode 100644 >index 000000000000..9a77e2538935 >--- /dev/null >+++ b/textproc/py-sphinxcontrib-spelling/Makefile >@@ -0,0 +1,33 @@ >+PORTNAME= sphinxcontrib-spelling >+DISTVERSION= 8.0.0 >+CATEGORIES= textproc python >+MASTER_SITES= PYPI >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= Sphinx spelling extension >+WWW= https://github.com/sphinx-contrib/spelling >+ >+LICENSE= BSD2CLAUSE >+LICENSE_FILE= ${WRKSRC}/LICENSE >+ >+BUILD_DEPENDS= ${PY_SETUPTOOLS} \ >+ ${PYTHON_PKGNAMEPREFIX}setuptools-scm>=0:devel/py-setuptools-scm@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}wheel>=:devel/py-wheel@${PY_FLAVOR} >+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}enchant>0:textproc/py-enchant@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}sphinx>=0:textproc/py-sphinx@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist pep517 >+ >+NO_ARCH= yes >+ >+PORTDOCS= AUTHORS PKG-INFO README >+ >+OPTIONS_DEFINE= DOCS >+ >+post-install-DOCS-on: >+ @${MKDIR} ${STAGEDIR}${DOCSDIR}/ >+ ${INSTALL_DATA} ${PORTDOCS:S,^,${WRKSRC}/,} ${STAGEDIR}${DOCSDIR} >+ >+.include <bsd.port.mk> >diff --git a/textproc/py-sphinxcontrib-spelling/distinfo b/textproc/py-sphinxcontrib-spelling/distinfo >new file mode 100644 >index 000000000000..650b9c79d71b >--- /dev/null >+++ b/textproc/py-sphinxcontrib-spelling/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1724809518 >+SHA256 (sphinxcontrib-spelling-8.0.0.tar.gz) = 199d0a16902ad80c387c2966dc9eb10f565b1fb15ccce17210402db7c2443e5c >+SIZE (sphinxcontrib-spelling-8.0.0.tar.gz) = 37610 >diff --git a/textproc/py-sphinxcontrib-spelling/pkg-descr b/textproc/py-sphinxcontrib-spelling/pkg-descr >new file mode 100644 >index 000000000000..df240ef23f61 >--- /dev/null >+++ b/textproc/py-sphinxcontrib-spelling/pkg-descr >@@ -0,0 +1,3 @@ >+This package contains sphinxcontrib.spelling, a spelling >+checker for Sphinx-based documentation. It uses PyEnchant >+to produce a report showing misspelled words. >diff --git a/textproc/py-text2digits/Makefile b/textproc/py-text2digits/Makefile >new file mode 100644 >index 000000000000..5b97cd2c093a >--- /dev/null >+++ b/textproc/py-text2digits/Makefile >@@ -0,0 +1,29 @@ >+PORTNAME= text2digits >+PORTVERSION= 0.1.0 >+CATEGORIES= textproc python >+MASTER_SITES= PYPI >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= Small library to convert text numbers to digits in a string >+WWW= https://github.com/ShailChoksi/text2digits >+ >+LICENSE= MIT >+ >+BUILD_DEPENDS= ${PY_SETUPTOOLS} \ >+ ${PYTHON_PKGNAMEPREFIX}wheel>=:devel/py-wheel@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist pep517 >+ >+NO_ARCH= yes >+ >+PORTDOCS= PKG-INFO README >+ >+OPTIONS_DEFINE= DOCS >+ >+post-install-DOCS-on: >+ @${MKDIR} ${STAGEDIR}${DOCSDIR}/ >+ ${INSTALL_DATA} ${PORTDOCS:S,^,${WRKSRC}/,} ${STAGEDIR}${DOCSDIR} >+ >+.include <bsd.port.mk> >diff --git a/textproc/py-text2digits/distinfo b/textproc/py-text2digits/distinfo >new file mode 100644 >index 000000000000..46a5fcef7fd6 >--- /dev/null >+++ b/textproc/py-text2digits/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1724809518 >+SHA256 (text2digits-0.1.0.tar.gz) = a01d8dc8d57179d888ba589df40e02730f3bf2dd892ab22c37538e4799728bb2 >+SIZE (text2digits-0.1.0.tar.gz) = 9113 >diff --git a/textproc/py-text2digits/pkg-descr b/textproc/py-text2digits/pkg-descr >new file mode 100644 >index 000000000000..11870b586c49 >--- /dev/null >+++ b/textproc/py-text2digits/pkg-descr >@@ -0,0 +1,2 @@ >+A small library to convert text numbers to >+digits in a string. >diff --git a/textproc/py-wordninja/Makefile b/textproc/py-wordninja/Makefile >new file mode 100644 >index 000000000000..1b8a5da611e2 >--- /dev/null >+++ b/textproc/py-wordninja/Makefile >@@ -0,0 +1,30 @@ >+PORTNAME= wordninja >+PORTVERSION= 2.0.0 >+CATEGORIES= textproc python >+MASTER_SITES= PYPI >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= Probabilistically split concatenated words >+WWW= https://github.com/keredson/wordninja >+ >+LICENSE= MIT >+LICENSE_FILE= ${WRKSRC}/LICENSE >+ >+BUILD_DEPENDS= ${PY_SETUPTOOLS} \ >+ ${PYTHON_PKGNAMEPREFIX}wheel>=:devel/py-wheel@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist pep517 >+ >+NO_ARCH= yes >+ >+PORTDOCS= PKG-INFO README.md >+ >+OPTIONS_DEFINE= DOCS >+ >+post-install-DOCS-on: >+ @${MKDIR} ${STAGEDIR}${DOCSDIR}/ >+ ${INSTALL_DATA} ${PORTDOCS:S,^,${WRKSRC}/,} ${STAGEDIR}${DOCSDIR} >+ >+.include <bsd.port.mk> >diff --git a/textproc/py-wordninja/distinfo b/textproc/py-wordninja/distinfo >new file mode 100644 >index 000000000000..ed6b45d8b5fe >--- /dev/null >+++ b/textproc/py-wordninja/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1724809518 >+SHA256 (wordninja-2.0.0.tar.gz) = 1a1cc7ec146ad19d6f71941ee82aef3d31221700f0d8bf844136cf8df79d281a >+SIZE (wordninja-2.0.0.tar.gz) = 541572 >diff --git a/textproc/py-wordninja/pkg-descr b/textproc/py-wordninja/pkg-descr >new file mode 100644 >index 000000000000..d6990494cad0 >--- /dev/null >+++ b/textproc/py-wordninja/pkg-descr >@@ -0,0 +1,2 @@ >+Probabilistically split concatenated words using NLP >+based on English Wikipedia uni-gram frequencies. >diff --git a/www/Makefile b/www/Makefile >index 46a1095f1b03..b85776722396 100644 >--- a/www/Makefile >+++ b/www/Makefile >@@ -1476,11 +1476,13 @@ > SUBDIR += py-cachecontrol > SUBDIR += py-cachelib > SUBDIR += py-caldav >+ SUBDIR += py-calibreweb > SUBDIR += py-channels > SUBDIR += py-channels-redis > SUBDIR += py-cheroot > SUBDIR += py-cherrypy > SUBDIR += py-cinemagoer >+ SUBDIR += py-comicapi > SUBDIR += py-crossplane > SUBDIR += py-css-html-js-minify > SUBDIR += py-css-parser >@@ -1653,6 +1655,7 @@ > SUBDIR += py-flask-collect > SUBDIR += py-flask-compress > SUBDIR += py-flask-cors >+ SUBDIR += py-flask-dance > SUBDIR += py-flask-flatpages > SUBDIR += py-flask-json > SUBDIR += py-flask-jwt >@@ -1671,9 +1674,11 @@ > SUBDIR += py-flask-script > SUBDIR += py-flask-security > SUBDIR += py-flask-session >+ SUBDIR += py-flask-simpleldap > SUBDIR += py-flask-smorest > SUBDIR += py-flask-socketio > SUBDIR += py-flask-sockets >+ SUBDIR += py-flask-sphinx-themes > SUBDIR += py-flask-uploads > SUBDIR += py-flask-wtf > SUBDIR += py-flower >@@ -1682,11 +1687,13 @@ > SUBDIR += py-forcediphttpsadapter > SUBDIR += py-formencode > SUBDIR += py-fqdn >+ SUBDIR += py-free-proxy > SUBDIR += py-freenit > SUBDIR += py-frozen-flask > SUBDIR += py-gandi.cli > SUBDIR += py-gevent-websocket > SUBDIR += py-ghp-import >+ SUBDIR += py-goodreads > SUBDIR += py-google > SUBDIR += py-google-api-core > SUBDIR += py-google-api-python-client >@@ -1772,6 +1779,7 @@ > SUBDIR += py-protego > SUBDIR += py-puppetboard > SUBDIR += py-py-restclient >+ SUBDIR += py-pydrive2 > SUBDIR += py-pygsheets > SUBDIR += py-pyjwt > SUBDIR += py-pyjwt1 >@@ -1815,6 +1823,7 @@ > SUBDIR += py-routes > SUBDIR += py-rules > SUBDIR += py-scgi >+ SUBDIR += py-scholarly > SUBDIR += py-scrapy > SUBDIR += py-seafdav > SUBDIR += py-seafobj >diff --git a/www/py-calibreweb/Makefile b/www/py-calibreweb/Makefile >new file mode 100644 >index 000000000000..9b488a94bfc4 >--- /dev/null >+++ b/www/py-calibreweb/Makefile >@@ -0,0 +1,143 @@ >+PORTNAME= calibreweb >+PORTVERSION= 0.6.23 >+CATEGORIES= www python >+MASTER_SITES= PYPI >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= Web interface for viewing and downloading eBooks from a Calibre DB >+WWW= https://github.com/janeczku/calibre-web >+ >+LICENSE= GPLv3 >+LICENSE_FILE= ${WRKSRC}/LICENSE >+ >+BUILD_DEPENDS= ${PY_SETUPTOOLS} \ >+ ${PYTHON_PKGNAMEPREFIX}wheel>=:devel/py-wheel@${PY_FLAVOR} >+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}advocate>=0:www/py-advocate@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}apscheduler>=0:devel/py-apscheduler@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}bleach>=0:www/py-bleach@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}chardet>=0:textproc/py-chardet@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}flask-babel>=0:devel/py-flask-babel@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}Flask-HTTPAuth>=0:security/py-flask-httpauth@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}Flask-Principal>=0:www/py-flask-principal@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}flask_limiter>=0:www/py-flask-limiter@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}flask_wtf>=0:www/py-flask-wtf@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}iso-639>=0:textproc/py-iso-639@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}lxml>=0:devel/py-lxml@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}pypdf>=0:print/py-pypdf@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}python-magic>=0:devel/py-python-magic@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}regex>=0:textproc/py-regex@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}requests>=0:www/py-requests@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}sqlite3>=0:databases/py-sqlite3@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}tornado>=0:www/py-tornado@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}unidecode>=0:converters/py-unidecode@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}Wand>=0:graphics/py-wand@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist pep517 >+USE_RC_SUBR= ${PORTNAME} >+ >+NO_ARCH= yes >+ >+SUB_FILES= pkg-message >+SUB_LIST= GROUP=${GROUPS} \ >+ PORTNAME=${PORTNAME} \ >+ PYTHON_CMD=${PYTHON_CMD} \ >+ RC_NAME=calibreweb \ >+ USER=${USERS} >+ >+USERS= ${PORTNAME} >+GROUPS= ${PORTNAME} >+ >+PORTDOCS= PKG-INFO README.md >+ >+OPTIONS_DEFINE= CALIBRE COMICS DOCS GDRIVE GMAIL GREADS KOBO LDAP \ >+ METADATA OAUTH >+OPTIONS_SINGLE= IMAGICK SQLA >+OPTIONS_SINGLE_IMAGICK= IMAGICK6_NOX11 IMAGICK6_X11 IMAGICK7_NOX11 IMAGICK7_X11 >+OPTIONS_SINGLE_SQLA= SQLA14 SQLA20 >+OPTIONS_DEFAULT= IMAGICK7_X11 SQLA20 >+ >+CALIBRE_DESC= Calibre Desktop Conversion and Metadata Editing >+CALIBRE_RUN_DEPENDS= calibre>=0:deskutils/calibre >+ >+COMICS_DESC= Comic Metadata Support >+COMICS_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}comicapi>=0:www/py-comicapi@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}natsort>=0:devel/py-natsort@${PY_FLAVOR} >+ >+GDRIVE_DESC= Google Drive Support >+GDRIVE_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}gevent>=0:devel/py-gevent@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}google-api-python-client>=0:www/py-google-api-python-client@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}google-auth-httplib2>=0:security/py-google-auth-httplib2@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}greenlet>=0:devel/py-greenlet@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}oauth2client>=0:security/py-oauth2client@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}pyasn1-modules>=0:devel/py-pyasn1-modules@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}PyDrive2>=0:www/py-pydrive2@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}pyyaml>=0:devel/py-pyyaml@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}rsa>=0:security/py-rsa@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}uritemplate>=0:net/py-uritemplate@${PY_FLAVOR} >+ >+GMAIL_DESC= GMail >+GMAIL_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}google-api-python-client>=0:www/py-google-api-python-client@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}google-auth-oauthlib>=0:security/py-google-auth-oauthlib@${PY_FLAVOR} >+ >+GREADS_DESC= Goodreads API >+GREADS_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}Goodreads>=0:www/py-goodreads@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}Levenshtein>=0:devel/py-Levenshtein@${PY_FLAVOR} >+ >+IMAGICK_DESC= ${IMAGEMAGICK_DESC} >+IMAGICK6_NOX11_DESC= ImageMagick6 without X11 support >+IMAGICK6_NOX11_USES= magick:6,run,nox11 >+IMAGICK6_X11_DESC= ImageMagick6 with X11 support >+IMAGICK6_X11_USES= magick:6,run >+IMAGICK7_NOX11_DESC= ImageMagick7 without X11 support >+IMAGICK7_NOX11_USES= magick:7,run,nox11 >+IMAGICK7_X11_DESC= ImageMagick7 with X11 support >+IMAGICK7_X11_USES= magick:7,run >+ >+KOBO_DESC= Kobo Device Support >+KOBO_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}jsonschema>=0:devel/py-jsonschema@${PY_FLAVOR} \ >+ kepubify>=0:textproc/kepubify >+ >+LDAP_DESC= LDAP Login Support >+LDAP_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}Flask-SimpleLDAP>=0:www/py-flask-simpleldap@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}python-ldap>=0:net/py-python-ldap@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}sqlalchemy-utils>=0:databases/py-sqlalchemy-utils@${PY_FLAVOR} >+LDAP_IMPLIES= SQLA14 >+ >+METADATA_DESC= Metadata Extraction Support >+METADATA_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}beautifulsoup>=0:www/py-beautifulsoup@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}faust-cchardet>=0:textproc/py-faust-cchardet@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}html2text>=0:textproc/py-html2text@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}markdown2>=0:textproc/py-markdown2@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}mutagen>=0:audio/py-mutagen@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}py7zr>=0:archivers/py-py7zr@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}pycountry>=0:textproc/py-pycountry@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}python-dateutil>=0:devel/py-python-dateutil@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}rarfile>=0:archivers/py-rarfile@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}scholarly>=0:www/py-scholarly@${PY_FLAVOR} \ >+ unrar>=0:archivers/unrar >+ >+OAUTH_DESC= OAuth Login >+OAUTH_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}flask-dance>=0:www/py-flask-dance@${PY_FLAVOR} >+ >+SQLA_DESC= SQLAchemy Database Toolkit for Python >+SQLA14_DESC= Use SQLAlchemy 1.4.* >+SQLA14_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sqlalchemy14>=0:databases/py-sqlalchemy14@${PY_FLAVOR} >+SQLA20_DESC= Use SQLAlchemy 2.0.* >+SQLA20_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sqlalchemy20>=0:databases/py-sqlalchemy20@${PY_FLAVOR} >+ >+POST_PLIST= fix-plist >+ >+pre-install-DOCS-on: >+ @${MKDIR} ${STAGEDIR}${DOCSDIR}/ >+ ${INSTALL_DATA} ${PORTDOCS:S,^,${WRKSRC}/,} ${STAGEDIR}${DOCSDIR} >+ >+post-install: >+# Remove .HOMEDIR so we can specify the location for the config files >+ (cd ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/calibreweb/cps && ${RM} .HOMEDIR) >+ >+fix-plist: >+ @${REINPLACE_CMD} -e "s|.*HOMEDIR$$||" ${TMPPLIST} >+ >+.include <bsd.port.mk> >diff --git a/www/py-calibreweb/distinfo b/www/py-calibreweb/distinfo >new file mode 100644 >index 000000000000..23c2a7822cc1 >--- /dev/null >+++ b/www/py-calibreweb/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1724809518 >+SHA256 (calibreweb-0.6.23.tar.gz) = 6d5721df6376569a21e66fb1efe83eb598e3d8b0baa338d9f183ee851a4136c6 >+SIZE (calibreweb-0.6.23.tar.gz) = 7006584 >diff --git a/www/py-calibreweb/files/calibreweb.in b/www/py-calibreweb/files/calibreweb.in >new file mode 100644 >index 000000000000..843f091ae05b >--- /dev/null >+++ b/www/py-calibreweb/files/calibreweb.in >@@ -0,0 +1,92 @@ >+#!/bin/sh >+# >+# PROVIDE: %%PORTNAME%% >+# REQUIRE: LOGIN >+# KEYWORD: shutdown >+# >+# Add the following lines to /etc/rc.conf.local or /etc/rc.conf >+# to enable this service: >+# >+# %%RC_NAME%%_enable (bool): Set to NO by default. >+# Set it to YES to enable it. >+# %%RC_NAME%%_ip_addr: IP Address used to listen for connections >+# Default: 0.0.0.0 >+# %%RC_NAME%%_conf_dir: Directory where %%RC_NAME%% configuration >+# data is stored. >+# Default: %%PREFIX%%/%%RC_NAME%% >+# %%RC_NAME%%_settings: Directory and file name of %%RC_NAME%% settings >+# db is stored. >+# Default: %%PREFIX%%/%%RC_NAME%%/app.db >+# %%RC_NAME%%_gdrive: Directory and file name of %%RC_NAME%% gdrive >+# db is stored. >+# Default: %%PREFIX%%/%%RC_NAME%%/gdrive.db >+# %%RC_NAME%%_cert: Directory and file name of %%RC_NAME%% gdrive >+# db is stored. >+# Default: None >+# %%RC_NAME%%_key: Directory and file name of %%RC_NAME%% gdrive >+# db is stored. >+# Default: None >+# %%RC_NAME%%_flags: Additonal flags as needed >+# Default: None >+# %%RC_NAME%%_user: The user account %%RC_NAME%% daemon runs as what >+# you want it to be. It uses '%%RC_NAME%%' user by >+# default. Do not set it as empty or it will run >+# as root. >+# %%RC_NAME%%_group: The group account %%RC_NAME%% daemon runs as what >+# you want it to be. It uses '%%RC_NAME%%' group by >+# default. Do not set it as empty or it will run >+# as wheel. >+# %%RC_NAME%%_pid: Set the name of the %%RC_NAME%% pidfile >+# Default: %%PORTNAME%%.pid >+# %%RC_NAME%%_pid_dir: Set the directory of the %%RC_NAME%% pidfile >+# Default: /var/run/%%PORTNAME%% >+# %%RC_NAME%%_log: Set the name of the %%RC_NAME%% logfile >+# Default: %%PORTNAME%%.log >+# %%RC_NAME%%_log_dir: Set the directory of the %%RC_NAME%% logfile >+# Default: /var/log/%%PORTNAME%% >+ >+. /etc/rc.subr >+ >+name=%%RC_NAME%% >+rcvar=%%RC_NAME%%_enable >+load_rc_config ${name} >+ >+: ${%%RC_NAME%%_enable:=NO} >+: ${%%RC_NAME%%_user:=%%USER%%} >+: ${%%RC_NAME%%_group:=%%GROUP%%} >+: ${%%RC_NAME%%_ip_addr="0.0.0.0"} >+: ${%%RC_NAME%%_conf_dir="%%DATADIR%%"} >+: ${%%RC_NAME%%_settings="${%%RC_NAME%%_conf_dir}/app.db"} >+: ${%%RC_NAME%%_gdrive="${%%RC_NAME%%_conf_dir}/gdrive.db"} >+: ${%%RC_NAME%%_pid:="%%PORTNAME%%.pid"} >+: ${%%RC_NAME%%_pid_dir:="/var/run/%%PORTNAME%%"} >+: ${%%RC_NAME%%_log:="%%PORTNAME%%.log"} >+: ${%%RC_NAME%%_log_dir:="/var/log/%%PORTNAME%%"} >+ >+pidfile=${%%RC_NAME%%_pid_dir}/${%%RC_NAME%%_pid} >+logfile=${%%RC_NAME%%_log_dir}/${%%RC_NAME%%_log} >+ >+start_precmd="${name}_prestart" >+ >+procname="%%PREFIX%%/bin/cps" >+command_interpreter="%%PYTHON_CMD%%" >+command="/usr/sbin/daemon" >+command_args="-p $pidfile $procname \ >+ ${%%RC_NAME%%_ip_addr:+-i ${%%RC_NAME%%_ip_addr}} \ >+ ${%%RC_NAME%%_settings:+-p ${%%RC_NAME%%_settings}} \ >+ ${%%RC_NAME%%_gdrive:+-g ${%%RC_NAME%%_gdrive}} \ >+ ${%%RC_NAME%%_cert:+-c ${%%RC_NAME%%_cert}} \ >+ ${%%RC_NAME%%_key:+-k ${%%RC_NAME%%_key}} \ >+ ${logfile:+-o $logfile} \ >+ ${%%RC_NAME%%_flags}" >+ >+%%RC_NAME%%_prestart() >+{ >+ PATH=${PATH}:%%PREFIX%%/bin:%%PREFIX%%/sbin >+ >+ for calwebdir in ${%%RC_NAME%%_pid_dir} ${%%RC_NAME%%_log_dir} ${%%RC_NAME%%_conf_dir}; do >+ [ -d ${calwebdir} ] || install -d -g ${%%RC_NAME%%_group} -o ${%%RC_NAME%%_user} ${calwebdir} >+ done >+} >+ >+run_rc_command $1 >diff --git a/www/py-calibreweb/files/patch-src_calibreweb_cps_config__sql.py b/www/py-calibreweb/files/patch-src_calibreweb_cps_config__sql.py >new file mode 100644 >index 000000000000..d08e3ed23ff3 >--- /dev/null >+++ b/www/py-calibreweb/files/patch-src_calibreweb_cps_config__sql.py >@@ -0,0 +1,29 @@ >+--- src/calibreweb/cps/config_sql.py.orig 2024-09-04 14:04:59 UTC >++++ src/calibreweb/cps/config_sql.py >+@@ -483,6 +483,8 @@ def autodetect_calibre_binaries(): >+ "C:\\program files(x86)\\calibre\\", >+ "C:\\program files(x86)\\calibre2\\", >+ "C:\\program files\\calibre2\\"] >++ elif sys.platform.startswith("freebsd"): >++ calibre_path = ["/usr/local/bin/"] >+ else: >+ calibre_path = ["/opt/calibre/"] >+ for element in calibre_path: >+@@ -513,6 +515,8 @@ def autodetect_unrar_binary(): >+ if sys.platform == "win32": >+ calibre_path = ["C:\\program files\\WinRar\\unRAR.exe", >+ "C:\\program files(x86)\\WinRar\\unRAR.exe"] >++ elif sys.platform.startswith("freebsd"): >++ calibre_path = ["/usr/local/bin/unrar"] >+ else: >+ calibre_path = ["/usr/bin/unrar"] >+ for element in calibre_path: >+@@ -525,6 +529,8 @@ def autodetect_kepubify_binary(): >+ if sys.platform == "win32": >+ calibre_path = ["C:\\program files\\kepubify\\kepubify-windows-64Bit.exe", >+ "C:\\program files(x86)\\kepubify\\kepubify-windows-64Bit.exe"] >++ elif sys.platform.startswith("freebsd"): >++ calibre_path = ["/usr/local/bin/kepubify"] >+ else: >+ calibre_path = ["/opt/kepubify/kepubify-linux-64bit", "/opt/kepubify/kepubify-linux-32bit"] >+ for element in calibre_path: >diff --git a/www/py-calibreweb/files/patch-src_calibreweb_cps_tasks_convert.py b/www/py-calibreweb/files/patch-src_calibreweb_cps_tasks_convert.py >new file mode 100644 >index 000000000000..def021de5c73 >--- /dev/null >+++ b/www/py-calibreweb/files/patch-src_calibreweb_cps_tasks_convert.py >@@ -0,0 +1,33 @@ >+--- src/calibreweb/cps/tasks/convert.py.orig 2024-08-04 14:02:19 UTC >++++ src/calibreweb/cps/tasks/convert.py >+@@ -252,6 +252,7 @@ class TaskConvert(CalibreTask): >+ >+ def _convert_calibre(self, file_path, format_old_ext, format_new_ext, has_cover): >+ path_tmp_opf = None >++ lines = [] >+ try: >+ # path_tmp_opf = self._embed_metadata() >+ if config.config_embed_metadata: >+@@ -268,13 +269,20 @@ class TaskConvert(CalibreTask): >+ opf_command = [calibredb_binarypath, 'show_metadata', '--as-opf', str(self.book_id), >+ '--with-library', library_path] >+ p = process_open(opf_command, quotes, my_env) >++ for line in p.stdout: >++ lines.append(line) >+ p.wait() >+ check = p.returncode >+ calibre_traceback = p.stderr.readlines() >+ if check == 0: >+ path_tmp_opf = os.path.join(tmp_dir, "metadata_" + str(uuid4()) + ".opf") >+- with open(path_tmp_opf, 'w') as fd: >+- copyfileobj(p.stdout, fd) >++ if os.name == 'nt': >++ with open(path_tmp_opf, 'w') as fd: >++ copyfileobj(p.stdout, fd) >++ else: >++ with open(path_tmp_opf, 'w') as f: >++ for line in lines: >++ f.write(f"{line}\n") >+ else: >+ error_message = "" >+ for ele in calibre_traceback: >diff --git a/www/py-calibreweb/files/pkg-message.in b/www/py-calibreweb/files/pkg-message.in >new file mode 100644 >index 000000000000..60247f520aec >--- /dev/null >+++ b/www/py-calibreweb/files/pkg-message.in >@@ -0,0 +1,17 @@ >+[ >+{ type: install >+ message: <<EOM >+To automatically start Calibre-Web at boot time: >+# sysrc calibreweb_enable="YES" >+ >+To then manually start Calibre-Web without rebooting: >+# service calibreweb start >+ >+Once started, visit the following webpage to configure: >+http://localhost:8083/ >+ >+Default User: admin >+Default Password: admin123 >+EOM >+} >+] >diff --git a/www/py-calibreweb/pkg-descr b/www/py-calibreweb/pkg-descr >new file mode 100644 >index 000000000000..0ab892da00d7 >--- /dev/null >+++ b/www/py-calibreweb/pkg-descr >@@ -0,0 +1,3 @@ >+Calibre-Web is a web app that offers a clean and intuitive >+interface for browsing, reading, and downloading eBooks using >+a valid Calibre database. >diff --git a/www/py-comicapi/Makefile b/www/py-comicapi/Makefile >new file mode 100644 >index 000000000000..4c93e66cf2d9 >--- /dev/null >+++ b/www/py-comicapi/Makefile >@@ -0,0 +1,51 @@ >+PORTNAME= comicapi >+PORTVERSION= 3.2.0 >+CATEGORIES= www python >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= Comic archive (cbr/cbz) and metadata utilities >+WWW= https://github.com/comictagger/comicapi >+ >+LICENSE= APACHE20 >+LICENSE_FILE= ${WRKSRC}/LICENSE >+ >+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}advocate>=0:www/py-advocate@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}importlib-metadata>=0:devel/py-importlib-metadata@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}natsort>=0:devel/py-natsort@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}pillow>=0:graphics/py-pillow@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}pycountry>=0:textproc/py-pycountry@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}rapidfuzz>=0:devel/py-rapidfuzz@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}text2digits>=0:textproc/py-text2digits@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}wordninja>=0:textproc/py-wordninja@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist distutils pytest >+ >+USE_GITHUB= yes >+GH_ACCOUNT= comictagger >+GH_TAGNAME= 2bf8332 >+ >+NO_ARCH= yes >+ >+OPTIONS_DEFINE= 7Z CBR ICU >+OPTIONS_DEFAUlT= ICU >+ >+7Z_DESC= 7-Zip >+7Z_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}py7zr>=0:archivers/py-py7zr@${PY_FLAVOR} >+ >+CBR_DESC= CBR >+CBR_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}rarfile>=0:archivers/py-rarfile@${PY_FLAVOR} \ >+ unrar>=0:archivers/unrar >+ >+ICU_DESC= ICU >+ICU_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}pyicu>=0:devel/py-pyicu@${PY_FLAVOR} >+ >+TEST_ENV= ${MAKE_ENV} \ >+ PYTHONPATH=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR} >+ >+# The two sorting tests may fail based on system locale >+do-test: >+ @cd ${WRKSRC} && ${SETENV} ${TEST_ENV} ${PYTHON_CMD} -m pytest -v >+ >+.include <bsd.port.mk> >diff --git a/www/py-comicapi/distinfo b/www/py-comicapi/distinfo >new file mode 100644 >index 000000000000..781ecf7d8b70 >--- /dev/null >+++ b/www/py-comicapi/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1724809518 >+SHA256 (comictagger-comicapi-3.2.0-2bf8332_GH0.tar.gz) = a96a0cdca8f5efc3337fe194f59b86e369e23d12e0fcec81e3c34b9e652c1f18 >+SIZE (comictagger-comicapi-3.2.0-2bf8332_GH0.tar.gz) = 17401837 >diff --git a/www/py-comicapi/pkg-descr b/www/py-comicapi/pkg-descr >new file mode 100644 >index 000000000000..a570852122c8 >--- /dev/null >+++ b/www/py-comicapi/pkg-descr >@@ -0,0 +1,2 @@ >+Comic archive (cbr/cbz) and metadata utilities. >+Extracted from the comictagger project. >diff --git a/www/py-flask-dance/Makefile b/www/py-flask-dance/Makefile >new file mode 100644 >index 000000000000..23cd2080401f >--- /dev/null >+++ b/www/py-flask-dance/Makefile >@@ -0,0 +1,82 @@ >+PORTNAME= flask-dance >+PORTVERSION= 7.1.0 >+CATEGORIES= www python >+MASTER_SITES= PYPI >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+DISTNAME= flask_dance-${PORTVERSION} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= Doing the OAuth dance with style using Flask, requests, and oauthlib >+WWW= https://flask-dance.readthedocs.io/ >+ >+LICENSE= MIT >+LICENSE_FILE= ${WRKSRC}/LICENSE >+ >+BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}flit-core>=0:devel/py-flit-core@${PY_FLAVOR} >+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}flask>=0:www/py-flask@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}oauthlib>=0:security/py-oauthlib@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}requests-oauthlib>=0:www/py-requests-oauthlib@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}requests>=0:www/py-requests@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}urlobject>=0:www/py-urlobject@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}werkzeug>=0:www/py-werkzeug@${PY_FLAVOR} >+TEST_DEPENDS= ${PYTHON_PKGNAMEPREFIX}betamax>=0:www/py-betamax@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}coverage>=0:devel/py-coverage@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}flask-caching>=0:www/py-flask-caching@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}Flask-Login>=0:www/py-flask-login@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}flask-sqlalchemy>=0:databases/py-flask-sqlalchemy@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}freezegun>=0:devel/py-freezegun@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}oauthlib>=0:security/py-oauthlib@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}pytest-mock>=0:devel/py-pytest-mock@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}responses>=0:devel/py-responses@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist pep517 pytest >+ >+NO_ARCH= yes >+ >+PORTDOCS= * >+ >+TEST_ENV= ${MAKE_ENV} \ >+ PYTHONPATH=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR} >+ >+OPTIONS_DEFINE= DOCS SIGNALS >+OPTIONS_RADIO= SQLA >+OPTIONS_RADIO_SQLA= SQLA14 SQLA20 >+ >+DOCS_BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}betamax>=0:www/py-betamax@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}Flask-Sphinx-Themes>=0:www/py-flask-sphinx-themes@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}pillow>=0:graphics/py-pillow@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}sphinx>=0:textproc/py-sphinx@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}sphinxcontrib-seqdiag>=0:textproc/py-sphinxcontrib-seqdiag@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}sphinxcontrib-spelling>=0:textproc/py-sphinxcontrib-spelling@${PY_FLAVOR} \ >+ ${RUN_DEPENDS} >+DOCS_IMPLIES= SQLA14 >+ >+SIGNALS_DESC= Signals Support >+SIGNALS_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}blinker>=0:devel/py-blinker@${PY_FLAVOR} >+ >+SQLA14_DESC= Use SQLAlchemy 1.4.* >+SQLA14_BUILD_DEPENDS= ${SQLA14_RUN_DEPENDS} >+SQLA14_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sqlalchemy14>=0:databases/py-sqlalchemy14@${PY_FLAVOR} >+SQLA20_DESC= Use SQLAlchemy 2.0.* >+SQLA20_BUILD_DEPENDS= ${SQLA14_RUN_DEPENDS} >+SQLA20_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sqlalchemy20>=0:databases/py-sqlalchemy20@${PY_FLAVOR} >+ >+TEST_IMPLIES= SQLA14 >+ >+pre-build-DOCS-on: >+ @(cd ${BUILD_WRKSRC}; \ >+ ${SETENVI} ${WRK_ENV} \ >+ sphinx-build-${PYTHON_VER} \ >+ -b html -d _build/doctress docs/ build/sphinx/html) >+ >+post-install-DOCS-on: >+ @${MKDIR} ${STAGEDIR}${DOCSDIR} >+ (cd ${WRKSRC}/build/sphinx/html && \ >+ ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR} \ >+ "! -name .buildinfo -and ! -name objects.inv -and ! -name _images") >+ >+do-test: >+ @cd ${WRKSRC} && ${SETENV} ${TEST_ENV} ${PYTHON_CMD} -m pytest -v >+ >+.include <bsd.port.mk> >diff --git a/www/py-flask-dance/distinfo b/www/py-flask-dance/distinfo >new file mode 100644 >index 000000000000..6debcd79c470 >--- /dev/null >+++ b/www/py-flask-dance/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1725150078 >+SHA256 (flask_dance-7.1.0.tar.gz) = 6d0510e284f3d6ff05af918849791b17ef93a008628ec33f3a80578a44b51674 >+SIZE (flask_dance-7.1.0.tar.gz) = 140993 >diff --git a/www/py-flask-dance/pkg-descr b/www/py-flask-dance/pkg-descr >new file mode 100644 >index 000000000000..b94494c8675e >--- /dev/null >+++ b/www/py-flask-dance/pkg-descr >@@ -0,0 +1,4 @@ >+Doing the OAuth dance with style using Flask, requests, >+and oauthlib. Currently,only OAuth consumers are supported, >+but this project could easily support OAuth providers in the >+future, as well. >diff --git a/www/py-flask-simpleldap/Makefile b/www/py-flask-simpleldap/Makefile >new file mode 100644 >index 000000000000..2d4ae001e196 >--- /dev/null >+++ b/www/py-flask-simpleldap/Makefile >@@ -0,0 +1,47 @@ >+PORTNAME= Flask-SimpleLDAP >+PORTVERSION= 2.0.0 >+CATEGORIES= www python >+MASTER_SITES= PYPI >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= LDAP authentication for Flask >+WWW= https://github.com/alexferl/flask-simpleldap >+ >+LICENSE= MIT >+LICENSE_FILE= ${WRKSRC}/LICENSE >+ >+BUILD_DEPENDS= ${PY_SETUPTOOLS} \ >+ ${PYTHON_PKGNAMEPREFIX}wheel>=:devel/py-wheel@${PY_FLAVOR} >+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}blinker>=0:devel/py-blinker@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}click>=0:devel/py-click@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}flask>=0:www/py-flask@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}itsdangerous>=0:security/py-itsdangerous@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}Jinja2>=0:devel/py-Jinja2@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}markupsafe>=0:textproc/py-markupsafe@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}pyasn1-modules>=0:devel/py-pyasn1-modules@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}pyasn1>=0:devel/py-pyasn1@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}python-ldap>=0:net/py-python-ldap@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}werkzeug>=0:www/py-werkzeug@${PY_FLAVOR} >+TEST_DEPENDS= ${PYTHON_PKGNAMEPREFIX}flask>=0:www/py-flask@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist pep517 pytest >+ >+NO_ARCH= yes >+ >+PORTDOCS= PKG-INFO README.md >+ >+TEST_ENV= ${MAKE_ENV} \ >+ PYTHONPATH=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR} >+ >+OPTIONS_DEFINE= DOCS >+ >+do-test: >+ @cd ${WRKSRC} && ${SETENV} ${TEST_ENV} ${PYTHON_CMD} -m pytest -v >+ >+post-install-DOCS-on: >+ @${MKDIR} ${STAGEDIR}${DOCSDIR}/ >+ ${INSTALL_DATA} ${PORTDOCS:S,^,${WRKSRC}/,} ${STAGEDIR}${DOCSDIR} >+ >+.include <bsd.port.mk> >diff --git a/www/py-flask-simpleldap/distinfo b/www/py-flask-simpleldap/distinfo >new file mode 100644 >index 000000000000..4c4107cd6ff2 >--- /dev/null >+++ b/www/py-flask-simpleldap/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1724809518 >+SHA256 (Flask-SimpleLDAP-2.0.0.tar.gz) = d829f8163bae6d61d841707fa8a88bdcaae4862332c1acc13864b24ca82eaf25 >+SIZE (Flask-SimpleLDAP-2.0.0.tar.gz) = 8825 >diff --git a/www/py-flask-simpleldap/pkg-descr b/www/py-flask-simpleldap/pkg-descr >new file mode 100644 >index 000000000000..79b9b1ef1676 >--- /dev/null >+++ b/www/py-flask-simpleldap/pkg-descr >@@ -0,0 +1,2 @@ >+Flask-SimpleLDAP provides LDAP authentication for Flask and >+is compatible with and tested on Python 3.8+. >diff --git a/www/py-flask-sphinx-themes/Makefile b/www/py-flask-sphinx-themes/Makefile >new file mode 100644 >index 000000000000..48e0d4a3e609 >--- /dev/null >+++ b/www/py-flask-sphinx-themes/Makefile >@@ -0,0 +1,31 @@ >+PORTNAME= Flask-Sphinx-Themes >+DISTVERSION= 1.0.2 >+CATEGORIES= www python >+MASTER_SITES= PYPI >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= Sphinx themes for Flask and related projects >+WWW= https://github.com/pallets/flask-sphinx-themes >+ >+LICENSE= BSD2CLAUSE >+LICENSE_FILE= ${WRKSRC}/LICENSE >+ >+BUILD_DEPENDS= ${PY_SETUPTOOLS} \ >+ ${PYTHON_PKGNAMEPREFIX}wheel>=:devel/py-wheel@${PY_FLAVOR} >+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sphinx>=0:textproc/py-sphinx@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist pep517 >+ >+NO_ARCH= yes >+ >+PORTDOCS= PKG-INFO README.rst >+ >+OPTIONS_DEFINE= DOCS >+ >+post-install-DOCS-on: >+ @${MKDIR} ${STAGEDIR}${DOCSDIR}/ >+ ${INSTALL_DATA} ${PORTDOCS:S,^,${WRKSRC}/,} ${STAGEDIR}${DOCSDIR} >+ >+.include <bsd.port.mk> >diff --git a/www/py-flask-sphinx-themes/distinfo b/www/py-flask-sphinx-themes/distinfo >new file mode 100644 >index 000000000000..03a23024f96c >--- /dev/null >+++ b/www/py-flask-sphinx-themes/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1725150078 >+SHA256 (Flask-Sphinx-Themes-1.0.2.tar.gz) = bb23d7dd1a8ad9f47315bcb0439373c7feb24bcb0a1f8c52bb075f06489bb285 >+SIZE (Flask-Sphinx-Themes-1.0.2.tar.gz) = 9066 >diff --git a/www/py-flask-sphinx-themes/pkg-descr b/www/py-flask-sphinx-themes/pkg-descr >new file mode 100644 >index 000000000000..bc51514c3bb7 >--- /dev/null >+++ b/www/py-flask-sphinx-themes/pkg-descr >@@ -0,0 +1,2 @@ >+This repository contains Sphinx themes for Flask and >+Flask related projects. >diff --git a/www/py-free-proxy/Makefile b/www/py-free-proxy/Makefile >new file mode 100644 >index 000000000000..3d4e9f99fafe >--- /dev/null >+++ b/www/py-free-proxy/Makefile >@@ -0,0 +1,33 @@ >+PORTNAME= free-proxy >+PORTVERSION= 1.1.1 >+CATEGORIES= www python >+MASTER_SITES= PYPI >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+DISTNAME= free_proxy-${PORTVERSION} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= Proxy scraper for further use >+WWW= https://github.com/jundymek/free-proxy >+ >+LICENSE= MIT >+LICENSE_FILE= ${WRKSRC}/LICENSE >+ >+BUILD_DEPENDS= ${PY_SETUPTOOLS} \ >+ ${PYTHON_PKGNAMEPREFIX}wheel>=:devel/py-wheel@${PY_FLAVOR} >+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}lxml>=0:devel/py-lxml@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}requests>=0:www/py-requests@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist pep517 >+ >+NO_ARCH= yes >+ >+PORTDOCS= PKG-INFO README.md >+ >+OPTIONS_DEFINE= DOCS >+ >+post-install-DOCS-on: >+ @${MKDIR} ${STAGEDIR}${DOCSDIR}/ >+ ${INSTALL_DATA} ${PORTDOCS:S,^,${WRKSRC}/,} ${STAGEDIR}${DOCSDIR} >+ >+.include <bsd.port.mk> >diff --git a/www/py-free-proxy/distinfo b/www/py-free-proxy/distinfo >new file mode 100644 >index 000000000000..4ed6021336e7 >--- /dev/null >+++ b/www/py-free-proxy/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1724809518 >+SHA256 (free_proxy-1.1.1.tar.gz) = 2b20eb863972b42984292cee17132f4c9ddb8fef0a9bee9bc15215a08e6899fb >+SIZE (free_proxy-1.1.1.tar.gz) = 5121 >diff --git a/www/py-free-proxy/pkg-descr b/www/py-free-proxy/pkg-descr >new file mode 100644 >index 000000000000..bf9b73eb055b >--- /dev/null >+++ b/www/py-free-proxy/pkg-descr >@@ -0,0 +1,3 @@ >+Get free working proxy from https://www.sslproxies.org/, >+https://www.us-proxy.org/, https://free-proxy-list.net/uk-proxy.html >+and https://free-proxy-list.net and use it in your script. >diff --git a/www/py-goodreads/Makefile b/www/py-goodreads/Makefile >new file mode 100644 >index 000000000000..8bf5635a6b65 >--- /dev/null >+++ b/www/py-goodreads/Makefile >@@ -0,0 +1,21 @@ >+PORTNAME= Goodreads >+PORTVERSION= 0.3.2 >+CATEGORIES= www python >+MASTER_SITES= PYPI >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+DISTNAME= goodreads-${PORTVERSION} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= Python interface for the Goodreads API >+WWW= https://github.com/sefakilic/goodreads/ >+ >+LICENSE= MIT >+ >+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}rauth>=0:devel/py-rauth@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}requests>=0:www/py-requests@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}xmltodict>=0:devel/py-xmltodict@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist distutils >+ >+.include <bsd.port.mk> >diff --git a/www/py-goodreads/distinfo b/www/py-goodreads/distinfo >new file mode 100644 >index 000000000000..c30d35904d12 >--- /dev/null >+++ b/www/py-goodreads/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1724809518 >+SHA256 (goodreads-0.3.2.tar.gz) = 3a0b311a0b1a6b35bbff09b9e67e80a76ecb77720b2e81a682ac5e018ad35445 >+SIZE (goodreads-0.3.2.tar.gz) = 12619 >diff --git a/www/py-goodreads/pkg-descr b/www/py-goodreads/pkg-descr >new file mode 100644 >index 000000000000..cb8ab61ad9f3 >--- /dev/null >+++ b/www/py-goodreads/pkg-descr >@@ -0,0 +1,3 @@ >+This package provides a Python interface for the Goodreads API. >+Using it, you can do pretty much anything that Goodreads allows to >+do with their own data. >diff --git a/www/py-pydrive2/Makefile b/www/py-pydrive2/Makefile >new file mode 100644 >index 000000000000..37ccaa1cadb0 >--- /dev/null >+++ b/www/py-pydrive2/Makefile >@@ -0,0 +1,58 @@ >+PORTNAME= PyDrive2 >+PORTVERSION= 1.20.0 >+CATEGORIES= www python >+MASTER_SITES= PYPI >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+DISTNAME= pydrive2-${PORTVERSION} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= PyDrive2 is a wrapper library of google-api-python-client >+WWW= https://github.com/iterative/PyDrive2 >+ >+LICENSE= APACHE20 >+LICENSE_FILE= ${WRKSRC}/LICENSE >+ >+BUILD_DEPENDS= ${PY_SETUPTOOLS} \ >+ ${PYTHON_PKGNAMEPREFIX}setuptools-scm>=0:devel/py-setuptools-scm@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}wheel>=:devel/py-wheel@${PY_FLAVOR} >+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}google-api-python-client>=0:www/py-google-api-python-client@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}oauth2client>=0:security/py-oauth2client@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}openssl>=0:security/py-openssl@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}pyyaml>=0:devel/py-pyyaml@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist pep517 >+ >+NO_ARCH= yes >+ >+PORTDOCS= * >+PORTEXAMPLES= * >+ >+OPTIONS_DEFINE= DOCS EXAMPLES FSSPEC >+ >+DOCS_BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}furo>0:textproc/py-furo@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}sphinx>=0:textproc/py-sphinx@${PY_FLAVOR} >+ >+FSSPEC_DESC= Filesystem interfaces for Python >+FSSPEC_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}appdirs>=0:devel/py-appdirs@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}fsspec>=0:devel/py-fsspec@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}funcy>=0:devel/py-funcy@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}tqdm>=0:misc/py-tqdm@${PY_FLAVOR} >+ >+pre-build-DOCS-on: >+ @(cd ${BUILD_WRKSRC}; \ >+ ${SETENVI} ${WRK_ENV} \ >+ sphinx-build-${PYTHON_VER} \ >+ -b html -d _build/doctress docs/ build/sphinx/html) >+ >+do-install-EXAMPLES-on: >+ ${MKDIR} ${STAGEDIR}${EXAMPLESDIR} >+ (cd ${WRKSRC}/examples && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR}) >+ >+do-install-DOCS-on: >+ @${MKDIR} ${STAGEDIR}${DOCSDIR} >+ (cd ${WRKSRC}/build/sphinx/html && \ >+ ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR} \ >+ "! -name .buildinfo -and ! -name .nojekyll -and ! -name objects.inv") >+ >+.include <bsd.port.mk> >diff --git a/www/py-pydrive2/distinfo b/www/py-pydrive2/distinfo >new file mode 100644 >index 000000000000..3ffa69c28ea3 >--- /dev/null >+++ b/www/py-pydrive2/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1724809518 >+SHA256 (pydrive2-1.20.0.tar.gz) = 168ba6eb6d83c9b082f05bc8cb95ee93ce62389db3b559ff0e769b5bb8b2b10a >+SIZE (pydrive2-1.20.0.tar.gz) = 63247 >diff --git a/www/py-pydrive2/pkg-descr b/www/py-pydrive2/pkg-descr >new file mode 100644 >index 000000000000..79ab42b0c25e >--- /dev/null >+++ b/www/py-pydrive2/pkg-descr >@@ -0,0 +1,2 @@ >+PyDrive2 is a wrapper library of google-api-python-client >+that simplifies many common Google Drive API V2 tasks. >diff --git a/www/py-scholarly/Makefile b/www/py-scholarly/Makefile >new file mode 100644 >index 000000000000..858d3bffea50 >--- /dev/null >+++ b/www/py-scholarly/Makefile >@@ -0,0 +1,33 @@ >+PORTNAME= scholarly >+PORTVERSION= 1.7.11 >+CATEGORIES= www python >+MASTER_SITES= PYPI >+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >+ >+MAINTAINER= matthew@wener.org >+COMMENT= Simple access to Google Scholar authors and citations >+WWW= https://github.com/scholarly-python-package/scholarly >+ >+LICENSE= UNLICENSE >+LICENSE_FILE= ${WRKSRC}/LICENSE.txt >+ >+BUILD_DEPENDS= ${PY_SETUPTOOLS} \ >+ ${PYTHON_PKGNAMEPREFIX}wheel>=:devel/py-wheel@${PY_FLAVOR} >+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}arrow>=0:devel/py-arrow@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}beautifulsoup>=0:www/py-beautifulsoup@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}bibtexparser>=0:textproc/py-bibtexparser@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}deprecated>=0:devel/py-deprecated@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}fake-useragent>=0:www/py-fake-useragent@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}free-proxy>=0:www/py-free-proxy@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}httpx>=0:www/py-httpx@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}python-dotenv>=0:www/py-python-dotenv@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}requests>=0:www/py-requests@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}selenium>=0:www/py-selenium@${PY_FLAVOR} \ >+ ${PYTHON_PKGNAMEPREFIX}stem>=0:security/py-stem@${PY_FLAVOR} >+ >+USES= python >+USE_PYTHON= autoplist pep517 >+ >+NO_ARCH= yes >+ >+.include <bsd.port.mk> >diff --git a/www/py-scholarly/distinfo b/www/py-scholarly/distinfo >new file mode 100644 >index 000000000000..2397f1d909a2 >--- /dev/null >+++ b/www/py-scholarly/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1724809518 >+SHA256 (scholarly-1.7.11.tar.gz) = 2c983dd44d9d9398a6f2605102ae6e5586023b41ebbaec1461917ee48eb153f0 >+SIZE (scholarly-1.7.11.tar.gz) = 38819 >diff --git a/www/py-scholarly/pkg-descr b/www/py-scholarly/pkg-descr >new file mode 100644 >index 000000000000..5efbc5da8dee >--- /dev/null >+++ b/www/py-scholarly/pkg-descr >@@ -0,0 +1,3 @@ >+scholarly is a module that allows you to retrieve author and >+publication information from Google Scholar in a friendly, >+Pythonic way without having to solve CAPTCHAs. >-- >2.46.0 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 281304
:
253363
|
255227
|
255282
|
255293
|
255294
|
255303
|
255316
|
255407
|
255415
|
255416
|
255434
|
255546
|
255553
|
255729
|
255730