{"id":13586326,"url":"https://github.com/tkp-archive/paperboy","last_synced_at":"2026-03-08T16:31:40.351Z","repository":{"id":33679554,"uuid":"152772708","full_name":"tkp-archive/paperboy","owner":"tkp-archive","description":"A web frontend for scheduling Jupyter notebook reports","archived":false,"fork":false,"pushed_at":"2022-02-09T18:44:53.000Z","size":13150,"stargazers_count":251,"open_issues_count":27,"forks_count":25,"subscribers_count":8,"default_branch":"main","last_synced_at":"2024-10-12T09:22:52.740Z","etag":null,"topics":["airflow","apache-airflow","celery","dask","docker","jupyter","jupyter-notebook","jupyter-notebooks","jupyterlab","kubernetes","luigi","notebook","nteract","papermill","phosphorjs","scheduling-notebooks"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tkp-archive.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-10-12T15:37:49.000Z","updated_at":"2024-09-08T23:41:20.000Z","dependencies_parsed_at":"2022-08-07T23:00:16.718Z","dependency_job_id":null,"html_url":"https://github.com/tkp-archive/paperboy","commit_stats":null,"previous_names":["tkp-archive/paperboy"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkp-archive%2Fpaperboy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkp-archive%2Fpaperboy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkp-archive%2Fpaperboy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkp-archive%2Fpaperboy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tkp-archive","download_url":"https://codeload.github.com/tkp-archive/paperboy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246927835,"owners_count":20856198,"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":["airflow","apache-airflow","celery","dask","docker","jupyter","jupyter-notebook","jupyter-notebooks","jupyterlab","kubernetes","luigi","notebook","nteract","papermill","phosphorjs","scheduling-notebooks"],"created_at":"2024-08-01T15:05:28.677Z","updated_at":"2025-12-12T00:44:17.656Z","avatar_url":"https://github.com/tkp-archive.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# paperboy\n![Status](https://img.shields.io/badge/Status-BETA%201-yellow.svg?\u0026longCache=true\u0026style=for-the-badge)\n\nA web frontend for scheduling Jupyter Notebooks as reports\n\n\n# Overview\n\n[![Build Status](https://dev.azure.com/tpaine154/jupyter/_apis/build/status/timkpaine.paperboy?branchName=main)](https://dev.azure.com/tpaine154/jupyter/_build/latest?definitionId=9\u0026branchName=main)\n[![Azure DevOps coverage](https://img.shields.io/azure-devops/coverage/tpaine154/jupyter/9)](https://dev.azure.com/tpaine154/jupyter/_build?definitionId=9\u0026_a=summary\u0026view=runs)\n\nPaperboy is a production-grade application for scheduling reports. It has a flexible architecture and extensible APIs, and can integrate into a wide variety of deployments. It is composed of various industrial-strength technologies from the open source world.\n\n- [Jupyter Notebooks](https://jupyter.org/documentation) for the reports themselves\n    - Jupyter notebooks are an ideal report template, and with [NBConvert](https://github.com/jupyter/nbconvert) support a wide variety of output types, including PDFs, HTML, Emails, etc\n- [Papermill](https://github.com/nteract/papermill) to parameterize notebooks\n- [SQLAlchemy](https://www.sqlalchemy.org) for Storage (default)\n- [Apache Airflow](https://airflow.apache.org) for Scheduling (default)\n    - [Dask](https://dask.org) for [Airflow Workers](https://airflow.readthedocs.io/en/stable/howto/executor/use-dask.html)\n    - [Luigi](https://luigi.readthedocs.io/en/stable/) as a scheduling alternative for `Airflow` (relies on `cron`) \n- [PhosphorJS](https://phosphorjs.github.io) for the frontend\n- Support for Python [Virtualenvs](https://virtualenv.pypa.io/en/stable/) via `requirements.txt` or custom [Docker](https://www.docker.com) images via `Dockerfile`s on a per-notebook level\n- Traitlets parameterization of storage and scheduler classes for easy integration with custom storage backends and custom schedulers\n- Single click notebook deployment with [Voila](https://github.com/QuantStack/voila) and [Dokku](https://github.com/dokku/dokku)\n\n\n\n![](https://raw.githubusercontent.com/timkpaine/paperboy/main/docs/img/ss.png)\n\n\n## Process Flow\n- Upload notebook\n- Configure job\n    - start time\n    - interval\n    - papermill parameters to autoconfigure reports\n    - if autoconfiguring reports from papermill:\n        - run or publish\n        - output\n            - notebook\n            - pdf\n            - html\n            - email\n            - script\n        - strip or keep code\n- To edit or create additional reports on a job, configure reports\n    - run or publish\n    - output\n        - notebook\n        - pdf\n        - html\n        - email\n        - script\n    - strip or keep code\n\n# Installation from source\n\nPaperboy requires Python and [Node.js](https://nodejs.org), which can be installed from `conda-forge` if `conda` is available.\n\nClone the repository and run following commands to install and launch the\napplication:\n\n- npm install\n- npm run build\n- pip install -e .\n- python -m paperboy\n\nVisit http://0.0.0.0:8080 in a browser to view the application.\n\nThe default authentication backend requires the registration of a username that\ncan be used on subsequent launches.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftkp-archive%2Fpaperboy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftkp-archive%2Fpaperboy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftkp-archive%2Fpaperboy/lists"}