%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 [![builds.sr.ht status](https://builds.sr.ht/~nhanb/pytaku/commits/master.svg)](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 . %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 [![builds.sr.ht status](https://builds.sr.ht/~nhanb/pytaku/commits/master.svg)](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 . %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 [![builds.sr.ht status](https://builds.sr.ht/~nhanb/pytaku/commits/master.svg)](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 . %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 - 0.7.0-1 - Package Spec generated