{"id":18405766,"url":"https://github.com/pybites-open-source/pybitesbooks","last_synced_at":"2025-04-07T08:32:12.315Z","repository":{"id":39597261,"uuid":"142757419","full_name":"PyBites-Open-Source/pybitesbooks","owner":"PyBites-Open-Source","description":null,"archived":false,"fork":false,"pushed_at":"2025-03-22T03:19:58.000Z","size":492,"stargazers_count":30,"open_issues_count":18,"forks_count":20,"subscribers_count":4,"default_branch":"develop","last_synced_at":"2025-03-22T15:12:18.968Z","etag":null,"topics":["api","books","django","google","hacktoberfest"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PyBites-Open-Source.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-07-29T12:02:44.000Z","updated_at":"2025-01-08T08:32:56.000Z","dependencies_parsed_at":"2023-09-28T10:47:57.272Z","dependency_job_id":"8178f6f8-ab3f-4b0f-b4f8-622cd898d20e","html_url":"https://github.com/PyBites-Open-Source/pybitesbooks","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyBites-Open-Source%2Fpybitesbooks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyBites-Open-Source%2Fpybitesbooks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyBites-Open-Source%2Fpybitesbooks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyBites-Open-Source%2Fpybitesbooks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PyBites-Open-Source","download_url":"https://codeload.github.com/PyBites-Open-Source/pybitesbooks/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247620273,"owners_count":20968175,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","books","django","google","hacktoberfest"],"created_at":"2024-11-06T03:04:41.644Z","updated_at":"2025-04-07T08:32:11.629Z","avatar_url":"https://github.com/PyBites-Open-Source.png","language":"Python","readme":"# PyBites Books\n\n\u003e What gets measured gets managed. - Peter Drucker\n\nOur simple yet effective reading tracking app: [PyBites Books](https://pybitesbooks.com)\n\n(Warning: it can be addictive and will cause you to read more!)\n\n## Setup\n\n![](https://img.shields.io/badge/Python-3.9.0-blue.svg)\n![](https://img.shields.io/badge/Django-4.1.13-blue.svg)\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit)\n\n1. Create a [virtual env](https://pybit.es/the-beauty-of-virtualenv.html) and activate it (`source venv/bin/activate`)\n2. Install the dependencies: `pip install -r requirements.txt`\n3. Create a database, e.g. `pybites_books` and define the full DB URL for the next step, e.g. `DATABASE_URL=postgres://postgres:password@0.0.0.0:5432/pybites_books`.\n4. Set this env variable together with `SECRET_KEY` in a file called `.env` in the root of the project: `cp .env-template .env \u0026\u0026 vi .env`. That's the bare minimum. If you want to have email working create a [Sendgrid](https://sendgrid.com/) account obtaining an API key. Same for Slack integration, this requires a `SLACK_VERIFICATION_TOKEN`. The other variables have sensible defaults.\n5. Sync the DB: `python manage.py migrate`.\n6. And finally run the app server: `python manage.py runserver`.\n\n## Run pre-commit\n\nInstall the git hook scripts\n```bash\n pre-commit install\n```\nRun against all the files:\n```bash\n pre-commit run --all-files\n```\n\n## Local Via docker-compose\n\nYou can use docker / docker compose to run both the postgresql database as well as the app itself. This makes local testing a lot easier, and allows you to worry less about environmental details.\n\nTo run, simply run the below command.  This should spin up the db, and then the application which you can reach at http://0.0.0.0:8000.\n\n`docker-compose rm \u0026\u0026 docker-compose build \u0026\u0026 docker-compose up`\n\n### DB Data\nIn order to prevent recreating the DB every time you run docker-compose, and in order to keep state from use to use, a volume is mounted, and tied to the local directory database-data.  This is ignored in the .gitignore so that you don't accidentally upload data to github.\n\n### .env-compose\nThis has environment variables set so that you can get up and running easily.  Tweak these as needed to add things like Slack and SendGrid integration.\n\n## Contributions\n\n... are more than welcome, just [open an issue](https://github.com/pybites/pbreadinglist/issues) and/or [PR new features](https://github.com/pybites/pbreadinglist/pulls).\n\nRemember _leaders are readers_, read every day!\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpybites-open-source%2Fpybitesbooks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpybites-open-source%2Fpybitesbooks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpybites-open-source%2Fpybitesbooks/lists"}