diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-05-15 07:07:26 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-05-15 07:07:26 +0000 |
| commit | 2f7d6bb89de921d26c7f076eff72b433bff74809 (patch) | |
| tree | 096daaf10400c00c164ff33c10bb80580d0aa54c | |
| parent | 1c4e381c386b47e503a71f6f2d76d0472eed4aff (diff) | |
automatic import of python-pytaku
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | python-pytaku.spec | 562 | ||||
| -rw-r--r-- | sources | 1 |
3 files changed, 564 insertions, 0 deletions
@@ -0,0 +1 @@ +/pytaku-0.7.0.tar.gz diff --git a/python-pytaku.spec b/python-pytaku.spec new file mode 100644 index 0000000..3315aa4 --- /dev/null +++ b/python-pytaku.spec @@ -0,0 +1,562 @@ +%global _empty_manifest_terminate_build 0 +Name: python-pytaku +Version: 0.7.0 +Release: 1 +Summary: Self-hostable web-based manga reader +License: AGPL-3.0-only +URL: https://pypi.org/project/pytaku/ +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/c3/9f/379644eaf6637d666e117f2488e753b3f2032ed6d0795dc4794837c33d99/pytaku-0.7.0.tar.gz +BuildArch: noarch + +Requires: python3-flask +Requires: python3-gunicorn +Requires: python3-requests +Requires: python3-goodconf +Requires: python3-argon2-cffi +Requires: python3-bbcode +Requires: python3-apsw + +%description +Live demo: https://pytaku.imnhan.com +(db may be hosed any time, also expect bugs) + +Production instance coming When It's Ready (tm). + +# Pytaku [](https://builds.sr.ht/~nhanb/pytaku/commits/master?) + +Pytaku is a WIP web-based manga reader that keeps track of your reading +progress and new chapter updates. Its design goals are: + +- Self-host friendly - if you have a UNIX-like server with python3.7+ and can + run `pip install`, you're good. + +- Phone/tablet friendly - although I hardly read any webtoons these days so the + phone experience may not be as polished. + +- KISSFFS, or **K**eep **I**t rea**S**onably **S**imple you **F**-ing + architecture/tooling **F**etishi**S**ts! Oftentimes I have enough practice on + industrial grade power tools at work so at home I want a change of pace. + Flask + raw SQL has been surprisingly comfy. On the other side, mithril.js + provides a good baseline of SPA functionality without having to pull in the + Rube Goldberg machine that is """modern""" JS devtools. + +# Keyboard shortcuts + +On Chapter page, press `?` to show keyboard shortcuts. + +# Development + +```sh +## Backend ## +poetry install + +pytaku-generate-config > pytaku.conf.json +# fill stuff as needed + +# run migration script once +pytaku-migrate + +# run 2 processes: +pytaku-dev -p 8000 # development webserver +pytaku-scheduler # scheduled tasks e.g. update titles + + +## Frontend ## + +sudo pacman -S entr # to watch source files +npm install -g --prefix ~/.node_modules esbuild # to bundle js + +# Listen for changes in js-src dir, automatically build minified bundle: +find src/pytaku/js-src -name '*.js' | entr -rc \ + esbuild src/pytaku/js-src/main.js \ + --bundle --sourcemap --minify \ + --outfile=src/pytaku/static/js/main.min.js +``` + +### Dumb proxy + +Eventually mangasee started using a somewhat aggressive cloudflare protection +so cloudscraper alone is not enough (looks like our IP got blacklisted or +throttled all the time), so now I have to send requests through a crappy +[GAE-based proxy](https://git.sr.ht/~nhanb/gae-proxy). You'll need to spin up +your own proxy instance (Google App Engine free tier is enough for personal +use), then fill out OUTGOING_PROXY_NETLOC and OUTGOING_PROXY_KEY accordingly. + +Yes it's not a standards-compliant http(s) proxy so you can't just use yours. I +chose the cheapest (free) way to get a somewhat reliable IP-rotating proxy. + +## Tests + +Can be run with just `pytest`. It needs a pytaku.conf.json as well. + +## Code QA tools + +- Python: black, isort, flake8 without mccabe +- JavaScript: jshint, prettier + +```sh +sudo pacman python-black python-isort flake8 prettier +npm install -g --prefix ~/.node_modules jshint +``` + +# Production + +**Gotcha:** mangasee image servers will timeout if you try to download images +via ipv6, so you'll need to disable IPv6 on your VM. It's unfortunate that +python-requests [doesn't][https://github.com/psf/requests/issues/1691] have an +official way to specify ipv4/ipv6 on its API, and I'm too lazy to figure out +alternatives. + +I'm running my instance on Debian 11, but any unix-like environment with these +should work: + +- python3.7+ +- the rest are all pypi packages that should be automatically installed when + you run `pip install pytaku` + +The following is a step-by-step guide on Debian 11. + +```sh +sudo apt install python3-pip +pip3 install --user pytaku +# now make sure ~/.local/bin is in your $PATH so pytaku commands are usable + +pytaku-generate-config > pytaku.conf.json +# fill stuff as needed + +# run migration script once +pytaku-migrate + +# run 2 processes: +pytaku -w 7 # production web server - args are passed as-is to gunicorn +pytaku-scheduler # scheduled tasks e.g. update titles + +# don't forget to setup your proxy, same as in development: +# https://git.sr.ht/~nhanb/gae-proxy + +# upgrades: +pip3 install --user --upgrade pytaku +pytaku-migrate +# then restart `pytaku` & `pytaku-scheduler` processes +``` + +If you're exposing your instance to the internet, I don't have to remind you to +properly set up a firewall and a TLS-terminating reverse proxy e.g. +nginx/caddy, right? + +Alternatively, just setup a personal [tailscale](https://tailscale.com/) +network and let them worry about access control and end-to-end encryption for +you. + +## Optional optimization + +With the setup above, you're serving static assets using gunicorn, which is not +ideal performance-wise. For private usage this doesn't really matter. However, +if you want to properly serve static assets using nginx and the like, you can +copy all static assets into a designated directory with: + +```sh +pytaku-collect-static target_dir +``` + +This will copy all assets into `target_dir/static`. You can now instruct +nginx/caddy/etc. to serve this dir on `/static/*` paths. There's an example +caddyfile to do this in the ./contrib/ dir. + +# LICENSE + +Copyright (C) 2021 Bùi Thành Nhân + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU Affero General Public License version 3 as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU Affero General Public License for more +details. + +You should have received a copy of the GNU Affero General Public License along +with this program. If not, see <https://www.gnu.org/licenses/>. + + +%package -n python3-pytaku +Summary: Self-hostable web-based manga reader +Provides: python-pytaku +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-pytaku +Live demo: https://pytaku.imnhan.com +(db may be hosed any time, also expect bugs) + +Production instance coming When It's Ready (tm). + +# Pytaku [](https://builds.sr.ht/~nhanb/pytaku/commits/master?) + +Pytaku is a WIP web-based manga reader that keeps track of your reading +progress and new chapter updates. Its design goals are: + +- Self-host friendly - if you have a UNIX-like server with python3.7+ and can + run `pip install`, you're good. + +- Phone/tablet friendly - although I hardly read any webtoons these days so the + phone experience may not be as polished. + +- KISSFFS, or **K**eep **I**t rea**S**onably **S**imple you **F**-ing + architecture/tooling **F**etishi**S**ts! Oftentimes I have enough practice on + industrial grade power tools at work so at home I want a change of pace. + Flask + raw SQL has been surprisingly comfy. On the other side, mithril.js + provides a good baseline of SPA functionality without having to pull in the + Rube Goldberg machine that is """modern""" JS devtools. + +# Keyboard shortcuts + +On Chapter page, press `?` to show keyboard shortcuts. + +# Development + +```sh +## Backend ## +poetry install + +pytaku-generate-config > pytaku.conf.json +# fill stuff as needed + +# run migration script once +pytaku-migrate + +# run 2 processes: +pytaku-dev -p 8000 # development webserver +pytaku-scheduler # scheduled tasks e.g. update titles + + +## Frontend ## + +sudo pacman -S entr # to watch source files +npm install -g --prefix ~/.node_modules esbuild # to bundle js + +# Listen for changes in js-src dir, automatically build minified bundle: +find src/pytaku/js-src -name '*.js' | entr -rc \ + esbuild src/pytaku/js-src/main.js \ + --bundle --sourcemap --minify \ + --outfile=src/pytaku/static/js/main.min.js +``` + +### Dumb proxy + +Eventually mangasee started using a somewhat aggressive cloudflare protection +so cloudscraper alone is not enough (looks like our IP got blacklisted or +throttled all the time), so now I have to send requests through a crappy +[GAE-based proxy](https://git.sr.ht/~nhanb/gae-proxy). You'll need to spin up +your own proxy instance (Google App Engine free tier is enough for personal +use), then fill out OUTGOING_PROXY_NETLOC and OUTGOING_PROXY_KEY accordingly. + +Yes it's not a standards-compliant http(s) proxy so you can't just use yours. I +chose the cheapest (free) way to get a somewhat reliable IP-rotating proxy. + +## Tests + +Can be run with just `pytest`. It needs a pytaku.conf.json as well. + +## Code QA tools + +- Python: black, isort, flake8 without mccabe +- JavaScript: jshint, prettier + +```sh +sudo pacman python-black python-isort flake8 prettier +npm install -g --prefix ~/.node_modules jshint +``` + +# Production + +**Gotcha:** mangasee image servers will timeout if you try to download images +via ipv6, so you'll need to disable IPv6 on your VM. It's unfortunate that +python-requests [doesn't][https://github.com/psf/requests/issues/1691] have an +official way to specify ipv4/ipv6 on its API, and I'm too lazy to figure out +alternatives. + +I'm running my instance on Debian 11, but any unix-like environment with these +should work: + +- python3.7+ +- the rest are all pypi packages that should be automatically installed when + you run `pip install pytaku` + +The following is a step-by-step guide on Debian 11. + +```sh +sudo apt install python3-pip +pip3 install --user pytaku +# now make sure ~/.local/bin is in your $PATH so pytaku commands are usable + +pytaku-generate-config > pytaku.conf.json +# fill stuff as needed + +# run migration script once +pytaku-migrate + +# run 2 processes: +pytaku -w 7 # production web server - args are passed as-is to gunicorn +pytaku-scheduler # scheduled tasks e.g. update titles + +# don't forget to setup your proxy, same as in development: +# https://git.sr.ht/~nhanb/gae-proxy + +# upgrades: +pip3 install --user --upgrade pytaku +pytaku-migrate +# then restart `pytaku` & `pytaku-scheduler` processes +``` + +If you're exposing your instance to the internet, I don't have to remind you to +properly set up a firewall and a TLS-terminating reverse proxy e.g. +nginx/caddy, right? + +Alternatively, just setup a personal [tailscale](https://tailscale.com/) +network and let them worry about access control and end-to-end encryption for +you. + +## Optional optimization + +With the setup above, you're serving static assets using gunicorn, which is not +ideal performance-wise. For private usage this doesn't really matter. However, +if you want to properly serve static assets using nginx and the like, you can +copy all static assets into a designated directory with: + +```sh +pytaku-collect-static target_dir +``` + +This will copy all assets into `target_dir/static`. You can now instruct +nginx/caddy/etc. to serve this dir on `/static/*` paths. There's an example +caddyfile to do this in the ./contrib/ dir. + +# LICENSE + +Copyright (C) 2021 Bùi Thành Nhân + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU Affero General Public License version 3 as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU Affero General Public License for more +details. + +You should have received a copy of the GNU Affero General Public License along +with this program. If not, see <https://www.gnu.org/licenses/>. + + +%package help +Summary: Development documents and examples for pytaku +Provides: python3-pytaku-doc +%description help +Live demo: https://pytaku.imnhan.com +(db may be hosed any time, also expect bugs) + +Production instance coming When It's Ready (tm). + +# Pytaku [](https://builds.sr.ht/~nhanb/pytaku/commits/master?) + +Pytaku is a WIP web-based manga reader that keeps track of your reading +progress and new chapter updates. Its design goals are: + +- Self-host friendly - if you have a UNIX-like server with python3.7+ and can + run `pip install`, you're good. + +- Phone/tablet friendly - although I hardly read any webtoons these days so the + phone experience may not be as polished. + +- KISSFFS, or **K**eep **I**t rea**S**onably **S**imple you **F**-ing + architecture/tooling **F**etishi**S**ts! Oftentimes I have enough practice on + industrial grade power tools at work so at home I want a change of pace. + Flask + raw SQL has been surprisingly comfy. On the other side, mithril.js + provides a good baseline of SPA functionality without having to pull in the + Rube Goldberg machine that is """modern""" JS devtools. + +# Keyboard shortcuts + +On Chapter page, press `?` to show keyboard shortcuts. + +# Development + +```sh +## Backend ## +poetry install + +pytaku-generate-config > pytaku.conf.json +# fill stuff as needed + +# run migration script once +pytaku-migrate + +# run 2 processes: +pytaku-dev -p 8000 # development webserver +pytaku-scheduler # scheduled tasks e.g. update titles + + +## Frontend ## + +sudo pacman -S entr # to watch source files +npm install -g --prefix ~/.node_modules esbuild # to bundle js + +# Listen for changes in js-src dir, automatically build minified bundle: +find src/pytaku/js-src -name '*.js' | entr -rc \ + esbuild src/pytaku/js-src/main.js \ + --bundle --sourcemap --minify \ + --outfile=src/pytaku/static/js/main.min.js +``` + +### Dumb proxy + +Eventually mangasee started using a somewhat aggressive cloudflare protection +so cloudscraper alone is not enough (looks like our IP got blacklisted or +throttled all the time), so now I have to send requests through a crappy +[GAE-based proxy](https://git.sr.ht/~nhanb/gae-proxy). You'll need to spin up +your own proxy instance (Google App Engine free tier is enough for personal +use), then fill out OUTGOING_PROXY_NETLOC and OUTGOING_PROXY_KEY accordingly. + +Yes it's not a standards-compliant http(s) proxy so you can't just use yours. I +chose the cheapest (free) way to get a somewhat reliable IP-rotating proxy. + +## Tests + +Can be run with just `pytest`. It needs a pytaku.conf.json as well. + +## Code QA tools + +- Python: black, isort, flake8 without mccabe +- JavaScript: jshint, prettier + +```sh +sudo pacman python-black python-isort flake8 prettier +npm install -g --prefix ~/.node_modules jshint +``` + +# Production + +**Gotcha:** mangasee image servers will timeout if you try to download images +via ipv6, so you'll need to disable IPv6 on your VM. It's unfortunate that +python-requests [doesn't][https://github.com/psf/requests/issues/1691] have an +official way to specify ipv4/ipv6 on its API, and I'm too lazy to figure out +alternatives. + +I'm running my instance on Debian 11, but any unix-like environment with these +should work: + +- python3.7+ +- the rest are all pypi packages that should be automatically installed when + you run `pip install pytaku` + +The following is a step-by-step guide on Debian 11. + +```sh +sudo apt install python3-pip +pip3 install --user pytaku +# now make sure ~/.local/bin is in your $PATH so pytaku commands are usable + +pytaku-generate-config > pytaku.conf.json +# fill stuff as needed + +# run migration script once +pytaku-migrate + +# run 2 processes: +pytaku -w 7 # production web server - args are passed as-is to gunicorn +pytaku-scheduler # scheduled tasks e.g. update titles + +# don't forget to setup your proxy, same as in development: +# https://git.sr.ht/~nhanb/gae-proxy + +# upgrades: +pip3 install --user --upgrade pytaku +pytaku-migrate +# then restart `pytaku` & `pytaku-scheduler` processes +``` + +If you're exposing your instance to the internet, I don't have to remind you to +properly set up a firewall and a TLS-terminating reverse proxy e.g. +nginx/caddy, right? + +Alternatively, just setup a personal [tailscale](https://tailscale.com/) +network and let them worry about access control and end-to-end encryption for +you. + +## Optional optimization + +With the setup above, you're serving static assets using gunicorn, which is not +ideal performance-wise. For private usage this doesn't really matter. However, +if you want to properly serve static assets using nginx and the like, you can +copy all static assets into a designated directory with: + +```sh +pytaku-collect-static target_dir +``` + +This will copy all assets into `target_dir/static`. You can now instruct +nginx/caddy/etc. to serve this dir on `/static/*` paths. There's an example +caddyfile to do this in the ./contrib/ dir. + +# LICENSE + +Copyright (C) 2021 Bùi Thành Nhân + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU Affero General Public License version 3 as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU Affero General Public License for more +details. + +You should have received a copy of the GNU Affero General Public License along +with this program. If not, see <https://www.gnu.org/licenses/>. + + +%prep +%autosetup -n pytaku-0.7.0 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-pytaku -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Mon May 15 2023 Python_Bot <Python_Bot@openeuler.org> - 0.7.0-1 +- Package Spec generated @@ -0,0 +1 @@ +112b581f14644ba3bcbde55fb5891da8 pytaku-0.7.0.tar.gz |
