AO3 web reader / scraper app created using Flask, SQLite, Redis and Bootstrap, supporting:
- Accounts authentication.
- Getting works from AO3.
- Grouping works using tags.
- Adding works to favorites.
- Auto-update of added works.
- Downloading works.
- Force updating chapters, works and tags.
- Exporting works for ebook readers (html format), read this.
Hello there, It's been almost 2 years since I started working on this project, a lot of time right?
Anyway since then I became much better programmer, and despite that this project works pretty good I decided that it is time for major refactoring which will ensure easier maintenance further down the road.
And here we are, below you can find a list of things that have been done.
- Complete dependencies overhaul and proper fragmentation.
- Alembic based database migrations.
- Database reimplementation (replaced Flask-SQLAlchemy with sqlalchemy) + custom pagination (since sqlalchemy doesn't support page base pagination).
- New session based authentication system (removed Flask-Login).
- Background tasks refactoring (dev mode app auto reloading finally works).
- Proper logging implementation.
- Styling tweaks + UI bugfixes.
- Internal app data flow refactoring, to improve readability.
- Improved Docker services architecture.
- Clone this repo.
- Create
.env
config file and change config values (DB_PATH
andLOGS_PATH
).
cp .env.template .env
- Run docker container.
sudo docker compose up -d
- Clone this repo.
- Generate
.env
config file.
cp .env.template .env
- Change
REDIS_SERVER_ADDRESS
in.env
to127.0.0.1
- Install development dependencies
pip3 install -r requirements/requirements-dev.txt
- Run DEV docker-compose.
sudo docker compose -f docker-compose-dev.yml up
python3 migrate.py
- Bash into container.
sudo docker container exec -it ao3_web_reader bash
- Run accounts manager cli
python3 users_manager_cli.py
.
App contains some example tests for available routes. To run them:
pytest -v tests/
Back when I was learning Django I created this repo reimplementation.
Keep in mind that it hasn't been updated since it was finished and might not work anymore.