{"id":30752662,"url":"https://github.com/man-group/pybloqs","last_synced_at":"2025-09-04T08:36:07.291Z","repository":{"id":44676783,"uuid":"62566759","full_name":"man-group/PyBloqs","owner":"man-group","description":"A flexible framework for visualizing data and automated creation of \"good enough\" reports.","archived":false,"fork":false,"pushed_at":"2025-08-27T10:56:29.000Z","size":12113,"stargazers_count":176,"open_issues_count":10,"forks_count":46,"subscribers_count":25,"default_branch":"master","last_synced_at":"2025-08-27T18:57:08.015Z","etag":null,"topics":["email","html","pandas","pdf","python","reports"],"latest_commit_sha":null,"homepage":"https://pybloqs.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/man-group.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-07-04T14:05:10.000Z","updated_at":"2025-08-27T10:56:33.000Z","dependencies_parsed_at":"2024-06-21T04:19:45.820Z","dependency_job_id":"2acc5998-ae0e-474e-bf52-8e0369dc1b4e","html_url":"https://github.com/man-group/PyBloqs","commit_stats":null,"previous_names":[],"tags_count":35,"template":false,"template_full_name":null,"purl":"pkg:github/man-group/PyBloqs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/man-group%2FPyBloqs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/man-group%2FPyBloqs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/man-group%2FPyBloqs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/man-group%2FPyBloqs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/man-group","download_url":"https://codeload.github.com/man-group/PyBloqs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/man-group%2FPyBloqs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273576001,"owners_count":25130401,"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","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["email","html","pandas","pdf","python","reports"],"created_at":"2025-09-04T08:36:05.772Z","updated_at":"2025-09-04T08:36:07.270Z","avatar_url":"https://github.com/man-group.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n![pybloqs](https://github.com/man-group/PyBloqs/raw/master/logo/logo50.png)\n\n_PyBloqs is a flexible framework for visualizing data and automated creation of \"good enough\" reports._\n\n[![CircleCI](https://circleci.com/gh/man-group/PyBloqs.svg?style=shield)](https://circleci.com/gh/man-group/PyBloqs)\n[![PyPI](https://img.shields.io/pypi/pyversions/pybloqs.svg)](https://pypi.python.org/pypi/pybloqs/)\n[![ReadTheDocs](https://readthedocs.org/projects/pybloqs/badge)](https://pybloqs.readthedocs.io)\n[![Coverage Status](https://coveralls.io/repos/github/manahl/PyBloqs/badge.svg?branch=master)](https://coveralls.io/github/manahl/PyBloqs?branch=master)\n\n\u003chr\u003e\n\n![PyBloqs in use in ipython notebook](https://github.com/man-group/PyBloqs/raw/master/pybloqs_in_notebook.png)\n\n\u003c/div\u003e\n\nSometimes all you want is a quick and easy way to generate a static report. No bells, no whistles, no server setup and no network permissions. Just a PDF, html file or even a PNG.\n\nPyBloqs is the simple solution for creating such data-rich reports. \n\nIt works with [Pandas](http://pandas.pydata.org), [matplotlib](http://matplotlib.org) and \n[highcharts](http://www.highcharts.com) and more. See your blocks in a notebook, in the browser, or as an image, and easily share them via the filesystem or email!\n\nPyBloqs creates atomic blocks containing text, tables (from data frames), \nplots (matplotlib, plotly or highcharts) or images. All blocks can be styled with CSS. Each block can be created and displayed \nseparately for fast development turnover. Lists of blocks can be stacked together to form reports. Reports can be displayed as HTML in the browser or exported in a variety of formats (including HTML, PDF, SVG, PNG).\n\n## Quickstart\n\n### Install PyBloqs\n\n```\n$ pip install pybloqs\n```\n\nSee the [documentation](https://pybloqs.readthedocs.io/en/latest/installation.html) for further installation instructions.\n\n### Using PyBloqs\n\nPlease consult the [user guide](https://pybloqs.readthedocs.io/en/latest/user_guide.html) for more in-depth usage.\n\n```python\nfrom pybloqs import Block, HStack, VStack\nimport pandas as pd\nfrom matplotlib import pyplot as plt\n\ntext_block = Block('This is a text block', styles={'text-align':'center', 'color':'blue'})\ntext_block.show()\n\ndf = pd.DataFrame([[1., 2.],[3.,4.]], columns =['a', 'b'])\ntable_block = Block(df)\ntable_block.show()\n\nplot_block = Block(plt.plot(df['a'], df['b']))\nplot_block.show()\n\nplot_and_table = HStack([plot_block, table_block])\nreport = VStack([text_block, plot_and_table])\nreport.show()\nreport.save('report.pdf')\n```\n\n## Configuration\n\nYou can specify per-user default parameters in a yaml-formatted file `~/.pybloqs.cfg`.  See the [configuration](https://pybloqs.readthedocs.io/en/latest/configuration.html) section of the documentation for more details.\n\n\n## Requirements\n\nPlease see [`pyproject.toml`](https://github.com/man-group/PyBloqs/blob/master/pyproject.toml) for a list of dependencies, and the [installation guide](https://pybloqs.readthedocs.io/en/latest/installation.html) for details on optional dependencies.\n\n## Acknowledgements\n\nPyBloqs has been under active development at [Man AHL](http://www.ahl.com/) since 2013.\n\n### Original concept and implementation:\n\n[![Tom Farnbauer](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/947540?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/SleepingPills)\n\n### Contributors:\n\n[![Dominik Christ](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20108097?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/DominikMChrist)\n[![Barry Fitzgerald](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/683731?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/pablojim)\n[![Wilfred Hughes](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/70800?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/wilfred)\n[![James Munro](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/283605?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/jamesmunro)\n[![Bogdan Cozmaciuc](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11246190?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/cozmacib)\n[![Dave Jepson](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1649783?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/swedishhh)\n[![Jason Matthews](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/13369756?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/jjbmatthews)\n[![Rhodi Richards](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/32775446?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/rhodrich)\n[![Doug Bruce](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/9913529?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/douglasbruce88)\n[![Jonathan Nye](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11302980?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/jonnynye)\n[![Matthew Dodds](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2059732?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/jjbmatthews)\n[![Han Wei Teo](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11653321?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/HanTeo)\n[![Manjunath Goudreddy](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5331323?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/manjugoudreddy)\n[![Edwin Flores](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/977092?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/edf825)\n[![jamesoliverh](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/46758370?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/jamesoliverh)\n[![Romain Morotti](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/13528994?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/morotti)\n[![Robert Spencer](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2918499?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/rspencer01)\n[![Radu Andra](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/39206284?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/randra99)\n[![James Hylands](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2422610?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/jhylands)\n[![Kristof Szabo-Strell](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6325336?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/skristof)\n[![Jingwei Song](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7952547?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/sjw61)\n[![Qiuyan Ge](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/207586703?v=4\u0026w=50\u0026h=50\u0026mask=circle)](https://github.com/qiuyan-ge)\nand many others at [Man Group](https://www.man.com/) and elsewhere...\n\n**Contributions welcome!**\n\n## License\n\nPyBloqs is licensed under the GNU LGPL v2.1.  A copy of which is included in [LICENSE](https://github.com/man-group/PyBloqs/raw/master/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fman-group%2Fpybloqs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fman-group%2Fpybloqs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fman-group%2Fpybloqs/lists"}