summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-15 07:07:26 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-15 07:07:26 +0000
commit2f7d6bb89de921d26c7f076eff72b433bff74809 (patch)
tree096daaf10400c00c164ff33c10bb80580d0aa54c
parent1c4e381c386b47e503a71f6f2d76d0472eed4aff (diff)
automatic import of python-pytaku
-rw-r--r--.gitignore1
-rw-r--r--python-pytaku.spec562
-rw-r--r--sources1
3 files changed, 564 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..109397e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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 [![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 <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 [![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 <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 [![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 <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
diff --git a/sources b/sources
new file mode 100644
index 0000000..9dd2aca
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+112b581f14644ba3bcbde55fb5891da8 pytaku-0.7.0.tar.gz