Shelf Dev Diary #1
By: Cam Wohlfeil
Published: 2018-09-19 1200 EDT
Category: DevDiary
Tags:
python,
shelf
This is the first entry in a series of dev diaries on my latest and first serious project. This project is the culmination of my annoyance with having no good system to manage bookmarks, wishlists, reading lists, ebooks, and other media I want to consume across different systems. I'm constantly creating and managing lists like these on different services and I'm sick of trying to keep them in sync and updated. I want one definitive source, that I control and can access easily from anywhere.
The goal of this project is to create an easy to use, cross-platform app that keeps a synchronized database of links and documents, mainly PDFs. My primary inspiration is the Beets project, which made managing a music library much easier. The key to the success of the project will be in making it as simple as possible.
I have decided to call this project cw.shelf
based on the PEP-423 ownership rule for individuals, I think shelf is the appropriate name for what this project should achieve, and a name like 'PyShelf' or something similar didn't sound appealing.
Project Scope and Features
These are the features I have decided will consitute the Minimum Viable Product. Once all these features have been implemented, I will consider it released and change the version number to 1.0.
- Properly packaged, documented, and tested following Python best practices
- Python 3.6+, asyncio, type hints
- Support timezones and Unicode
- CLI client
- SQLite and JSON flatfile database formats, w/ multiple backups
- Mark entries as read, archived, and deleted
- Import from text file, CSV, HTML, directory
- Detect files manually dropped in filestore
- Attempt to autofill information
- Do not allow conflicts (personal preference, may be made optional later)
- Queue entries for manual review later (no title, ISBN, URL unreachable)
- Supports URLs, ebooks, books w/ ISBN
- Tagging, priorities, categories
- Database and filestore in same directory so app can just point at the directory
- Config file, stored in user directory, for autodetecting database/filestore
Future Possibilities
If the desire and time are there, I may implement these in future releases based on their impact to the codebase.
- Bulk import via
- Optionally compress files
- GUI and/or self hosted client, possibly electron
- Calibre integration
- Cloud storage integration
- Download aSnd store webpages, preferably in a reader friendly format
- PostgreSQL or MongoDB database
- Support for more media formats, like video.
References