{ "info": { "author": "@cchang5, @ckoerber", "author_email": "ckoerber@berkeley.edu", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: Django :: 2.2", "Framework :: Django :: 3.0", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Database", "Topic :: Database :: Database Engines/Servers", "Topic :: Scientific/Engineering" ], "description": "![Python Version](https://img.shields.io/pypi/pyversions/espressodb)\n[![PyPI Version](https://img.shields.io/pypi/v/espressodb)](https://pypi.org/project/espressodb/)\n[![Tests](https://github.com/callat-qcd/espressodb/workflows/Tests/badge.svg)](https://github.com/callat-qcd/espressodb/actions)\n[![Documentation Status](https://readthedocs.org/projects/espressodb/badge/?version=latest)](https://espressodb.readthedocs.io/en/latest/?badge=latest)\n[![Publication](https://joss.theoj.org/papers/d0342f15684b9a464faed7c59784f734/status.svg)](https://joss.theoj.org/papers/d0342f15684b9a464faed7c59784f734)\n\n\n\n\n\n# EspressoDB\n\nEspressoDB is a Python framework designed to organize (relational) data without losing flexibility.\nIts objective is to be intuitive and fast.\n\nMore specifically, EspressoDB is built on top of the Object-Relational Mapping web framework [Django](https://docs.djangoproject.com) and adds additional convenience functionalities to easily set up your project.\nAdditionally, EspressoDB provides an extended framework of data consistency checks, giving users the freedom to define data tables and their relationships which uniquely mirror the underlying computation.\n\n\n## What does EspressoDB provide?\n\nEspressoDB provides an easy to use database interface which helps you make educated decisions fast.\n\nOnce you have created your Python project (e.g., `my_project`) with EspressoDB\n\n* you can use it in all your Python apps to query your data. For example,\n ```python\n import numpy as np\n from my_project.hamiltonian.models import Contact as ContactHamiltonian\n\n # Ask the database for specific entries\n hamiltonian = ContactHamiltonian.objects.filter(n_sites=20).first()\n\n # Use class methods for an intuitive interface\n ## Print a formatted summary of the table entry\n print(hamiltonian)\n\n ## Allocate an actual matrix for the given entry and use it in computations\n eigs, vecs = np.linalg.eigh(hamiltonian.matrix)\n ```\n `models` classes are regular classes in Python.\n They can provide additional methods for convenience.\n Also, they know how to talk to the database, e.g., you can query (read) and update (write) your data to a central database.\n* you can generate web views which summarize your tables and data.\n ![Docpage example](https://raw.githubusercontent.com/callat-qcd/espressodb/master/doc-src/_static/webview-example.png)\n Because the web pages use a Python API as well, you can completely customize views with code you have already developed.\n E.g., you can automate plots and display summaries in your browser.\n If you want to, you can also make your web app public (with different layers of accessibility) and share results with others.\n\n\nSee also the [Documentation](https://espressodb.readthedocs.io/en/latest/) for more detailed usage instructions.\n\n## How to install it?\nEspressoDB can be installed via pip:\n```bash\npip install [--user] espressodb\n```\n\n## Run the Tests\nSince EspressoDB is about creating projects, the tests are implemented for the example project.\nTo run the tests, clone this repo, install the dependencies:\n```bash\npip install .\npip install -r requirements-dev.txt\npip install -r example/my_project/requirements.txt\n```\nand run `pytest` (or the regular test) in `example/my_project`:\n```bash\ncd example/my_project\npytest [--cov=espressodb]\n```\n\n## What's the story behind it?\n\nEspressoDB was developed when we created [LatteDB](https://www.github.com/callat-qcd/lattedb) -- a database for organizing Lattice Quantum Chromodynamics research.\nWe intended to create a database for several purposes, e.g. to optimize the scheduling of architecture-dependent many-node jobs and to help in the eventual analysis process.\nFor this reason, we started to abstract our thinking of how to organize physics objects.\n\nIt was the goal to have easily shareable and completely reproducible snapshots of our workflow while being flexible and not restricting ourselves too much -- in the end science is full of surprises.\nThe challenges we encountered were:\n1. How can we program a table structure which can be easily extended in the future?\n2. How do we write a database such that users not familiar with the database concept can start using this tool with minimal effort?\n\nThe core module of LatteDB, EspressoDB, is trying to address those challenges.\n\n## Who is responsible for it?\n* [@ckoerber](https://www.ckoerber.com) (Feel free to contact me for questions)\n* [@cchang5](https://github.com/cchang5)\n\n## Comparison to related technologies\n\n1. [SQLAlchemy](https://www.sqlalchemy.org) - SQLAlchemy is a minimal low-level Python-SQL interface. While it also provides an ORM (Data Mapper implementation), setting up projects, establishing access to the database and migrating changes are not automated and thus interfacing to an existing project is less beginner-friendly than, e.g., interfacing with an existing Django project.\n2. [Django](https://www.djangoproject.com) - Django is the parent of EspressoDB. It uses an active record implementation (direct correspondence between table rows and Python objects). While Django is intended to serve as a web framework, EspressoDB reinterprets and expands Django to be directly used in computational projects. To do so, EspressoDB streamlines the project creation, automates the setup components and provides additional cross-checks needed for multi-user scenarios.\n\n## Contributing\nThanks for your interest in contributing! There are many ways to contribute to this project.\n[Get started here](CONTRIBUTING.md).\n\n## License\n\nBSD 3-Clause License. See also the [LICENSE](LICENSE.md) file.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/callat-qcd/espressodb", "keywords": "Database,Workflow,Django", "license": "", "maintainer": "", "maintainer_email": "", "name": "espressodb", "package_url": "https://pypi.org/project/espressodb/", "platform": "", "project_url": "https://pypi.org/project/espressodb/", "project_urls": { "Bug Reports": "https://github.com/callat-qcd/espressodb/issues", "Documentation": "https://espressodb.readthedocs.io", "Homepage": "https://github.com/callat-qcd/espressodb", "Source": "https://github.com/callat-qcd/espressodb" }, "release_url": "https://pypi.org/project/espressodb/1.2.1/", "requires_dist": [ "Django (>=2.2.2)", "django-extensions (>=2.2.1)", "django-bootstrap4 (>=0.0.6)", "django-widget-tweaks (>=1.4.5)", "django-pandas (>=0.6.1)", "PyYAML (>=3.13)", "sphinx (>=2.2.0) ; extra == 'dev'", "recommonmark (>=0.6.0) ; extra == 'dev'", "sphinx-rtd-theme (>=0.4.3) ; extra == 'dev'", "sphinx-autodoc-typehints (>=1.8.0) ; extra == 'dev'", "sphinx-markdown-tables (>=0.0.9) ; extra == 'dev'", "beautifulsoup4 (>=4.8.1) ; extra == 'dev'", "pytest (>=4.5.0) ; extra == 'dev'", "pytest-django (>=3.6.0) ; extra == 'dev'", "pytest-env (>=0.6.2) ; extra == 'dev'" ], "requires_python": ">=3.6", "summary": "Science database interface using Django as the content manager.", "version": "1.2.1", "yanked": false, "yanked_reason": null }, "last_serial": 7795558, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "d22b3287a62f5a8b4753364f14be6485", "sha256": "c8c5ee7532b639a4e0220f8bc02f5baac60c3d4e1edec8a45bb21b4ce2979015" }, "downloads": -1, "filename": "espressodb-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d22b3287a62f5a8b4753364f14be6485", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 1467919, "upload_time": "2019-10-22T23:54:48", "upload_time_iso_8601": "2019-10-22T23:54:48.930851Z", "url": "https://files.pythonhosted.org/packages/5d/7a/fde0e8ed50787c5559c515786f49f1818228767bb4b7febed4051a427c73/espressodb-0.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ff366921f29407847b3cb35e177c32fe", "sha256": "230d26f52a629a3f274cc798e9cee4260524690d67e72e15821283d117c0fea5" }, "downloads": -1, "filename": "espressodb-0.1.0.tar.gz", "has_sig": false, "md5_digest": "ff366921f29407847b3cb35e177c32fe", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1448382, "upload_time": "2019-10-22T23:54:51", "upload_time_iso_8601": "2019-10-22T23:54:51.929746Z", "url": "https://files.pythonhosted.org/packages/f1/a8/1bc23ff454f2fb5262a8bc29452f33291f29027e7d2fb1ce83f679ec6cc8/espressodb-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "058a970f0c56ff66ea2d466c79cc8e9c", "sha256": "00d3ebeee83134d201f91ea065a1fd90825f71e441b96bc26a90f15407bf72bc" }, "downloads": -1, "filename": "espressodb-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "058a970f0c56ff66ea2d466c79cc8e9c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 1473269, "upload_time": "2019-10-26T00:51:35", "upload_time_iso_8601": "2019-10-26T00:51:35.212905Z", "url": "https://files.pythonhosted.org/packages/1a/e5/78990e5c4b9367b7cabc59ff658cfbf7da4c2303a7011c6949edf4655377/espressodb-0.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "54618b7deff05a3e6642cce5465e323d", "sha256": "2adcdec71c1f75469ab1c9800c2b229adfeb40d49a7f9877042cb362da97ff9a" }, "downloads": -1, "filename": "espressodb-0.2.1.tar.gz", "has_sig": false, "md5_digest": "54618b7deff05a3e6642cce5465e323d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1437461, "upload_time": "2019-10-26T00:51:37", "upload_time_iso_8601": "2019-10-26T00:51:37.548757Z", "url": "https://files.pythonhosted.org/packages/02/cf/094bc849c10d992a77a6a24c206f296abdd6ba9d6ba8c9c38f2e4ae48426/espressodb-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "d14371c874ee8483d6f55a356fb7fd15", "sha256": "5f7a516562a4f553dc2d9fdf96b23b03da306357693b7a3367ebf593899a0367" }, "downloads": -1, "filename": "espressodb-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d14371c874ee8483d6f55a356fb7fd15", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 1533923, "upload_time": "2019-12-06T04:44:11", "upload_time_iso_8601": "2019-12-06T04:44:11.206363Z", "url": "https://files.pythonhosted.org/packages/8a/4f/d6b471023fb6f62d81a6bc42498d6b51097ae61131969eee2f25455dbee6/espressodb-1.0.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4e0e49a4e49acda1aaf3d7c83b749795", "sha256": "a04588b9b993892a1804b6e9b425eb02d988261c68ff3f2849a476d5d280bbf2" }, "downloads": -1, "filename": "espressodb-1.0.0.tar.gz", "has_sig": false, "md5_digest": "4e0e49a4e49acda1aaf3d7c83b749795", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3821518, "upload_time": "2019-12-06T04:44:16", "upload_time_iso_8601": "2019-12-06T04:44:16.553575Z", "url": "https://files.pythonhosted.org/packages/18/2e/18c479519d5582741c08cb7e0b588fabb2123d440d0cb9b65353f5e9086a/espressodb-1.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "692cb9dd13873593f63e6aa6382415c2", "sha256": "d6f7e4abdcf9b81133f250112bc0828a27d3fc06ca4eb5166012b354a0e00f84" }, "downloads": -1, "filename": "espressodb-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "692cb9dd13873593f63e6aa6382415c2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 1537017, "upload_time": "2020-02-19T21:11:22", "upload_time_iso_8601": "2020-02-19T21:11:22.503469Z", "url": "https://files.pythonhosted.org/packages/51/4d/168388097c3c3ca83ae7243ce4d676a01e64fd6626b69e1db3ce58683caf/espressodb-1.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "db0eee3b8e7c1dd82548943dd08f9cd7", "sha256": "c99766241c8839ab101f5904fde2063357de918087e27317f06c56eb60ecf7a1" }, "downloads": -1, "filename": "espressodb-1.1.0.tar.gz", "has_sig": false, "md5_digest": "db0eee3b8e7c1dd82548943dd08f9cd7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3827446, "upload_time": "2020-02-19T21:11:24", "upload_time_iso_8601": "2020-02-19T21:11:24.455634Z", "url": "https://files.pythonhosted.org/packages/03/3f/0735e9ba9e95aa0936ce769648b0e5467af23233026ac2558804ca7f8e91/espressodb-1.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "42944cb8fc3ccfe62c94d5041d562df5", "sha256": "fd31d1a1ea7bf3914dd2640292007b6b16237154288b62e27bf8e56c52d1685e" }, "downloads": -1, "filename": "espressodb-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "42944cb8fc3ccfe62c94d5041d562df5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 1537615, "upload_time": "2020-05-05T08:16:13", "upload_time_iso_8601": "2020-05-05T08:16:13.157761Z", "url": "https://files.pythonhosted.org/packages/a9/b8/73fc2452a061376a56c2c4831b91a0ab50e138d0946c88b1e9444f1faed2/espressodb-1.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "481d07786ceee916a2fc523cfb2c0635", "sha256": "00f0be654065e24d1354742e2f68037ed1e63857931c70deaa078afede052468" }, "downloads": -1, "filename": "espressodb-1.2.0.tar.gz", "has_sig": false, "md5_digest": "481d07786ceee916a2fc523cfb2c0635", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3828625, "upload_time": "2020-05-05T08:16:19", "upload_time_iso_8601": "2020-05-05T08:16:19.438130Z", "url": "https://files.pythonhosted.org/packages/e6/eb/49ea8cd8baf1c6fe05f92e00b7ece2c656caa66a5ba404929f48a0e9fa00/espressodb-1.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "ea60e494fe69f523bb9d365493c7aff9", "sha256": "32f52cfbc6506095303a1f8ec2f4d8fe3aa6eb261f03ab86982554ad0439a78a" }, "downloads": -1, "filename": "espressodb-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "ea60e494fe69f523bb9d365493c7aff9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 1501797, "upload_time": "2020-07-27T11:02:59", "upload_time_iso_8601": "2020-07-27T11:02:59.294784Z", "url": "https://files.pythonhosted.org/packages/12/14/3cf4f913f7c5a81294f6393a29cc2fde6fcada50129c19b4232dd4fb8aab/espressodb-1.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9f9330f6c53453ac1ea0cccecf18b193", "sha256": "26869e70b58058e57189d84ae64d77fa303582357071a111e9d98f0fb5835595" }, "downloads": -1, "filename": "espressodb-1.2.1.tar.gz", "has_sig": false, "md5_digest": "9f9330f6c53453ac1ea0cccecf18b193", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1479045, "upload_time": "2020-07-27T11:03:10", "upload_time_iso_8601": "2020-07-27T11:03:10.290782Z", "url": "https://files.pythonhosted.org/packages/9a/0c/db090d55427748b7ddc77c4d4000091f333ff931ca93731088bf0bd0a872/espressodb-1.2.1.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ea60e494fe69f523bb9d365493c7aff9", "sha256": "32f52cfbc6506095303a1f8ec2f4d8fe3aa6eb261f03ab86982554ad0439a78a" }, "downloads": -1, "filename": "espressodb-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "ea60e494fe69f523bb9d365493c7aff9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 1501797, "upload_time": "2020-07-27T11:02:59", "upload_time_iso_8601": "2020-07-27T11:02:59.294784Z", "url": "https://files.pythonhosted.org/packages/12/14/3cf4f913f7c5a81294f6393a29cc2fde6fcada50129c19b4232dd4fb8aab/espressodb-1.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9f9330f6c53453ac1ea0cccecf18b193", "sha256": "26869e70b58058e57189d84ae64d77fa303582357071a111e9d98f0fb5835595" }, "downloads": -1, "filename": "espressodb-1.2.1.tar.gz", "has_sig": false, "md5_digest": "9f9330f6c53453ac1ea0cccecf18b193", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1479045, "upload_time": "2020-07-27T11:03:10", "upload_time_iso_8601": "2020-07-27T11:03:10.290782Z", "url": "https://files.pythonhosted.org/packages/9a/0c/db090d55427748b7ddc77c4d4000091f333ff931ca93731088bf0bd0a872/espressodb-1.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }