{ "info": { "author": "Frazer McLean", "author_email": "frazer@frazermclean.co.uk", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3" ], "description": "pg_grant\n-------------\n\n|PyPI Version| |Documentation| |Travis| |Coverage| |Python Version| |PostgreSQL Version| |License|\n\n``pg_grant`` is a Python module for parsing, querying, and updating PostgreSQL\nprivileges.\n\nInstallation\n~~~~~~~~~~~~\n\n.. code:: bash\n\n $ pip install pg_grant[sqlalchemy]\n\nWithout the SQLAlchemy extra, ``pg_grant`` can only parse access privileges.\n\nExample\n~~~~~~~\n\n.. code:: python\n\n >>> from pg_grant import parse_acl_item\n >>> parse_acl_item('bob=arw*/alice')\n Privileges(grantee='bob', grantor='alice', privs=['SELECT', 'INSERT'], privswgo=['UPDATE'])\n\n >>> from sqlalchemy import create_engine\n >>> from pg_grant.query import get_table_acl\n >>> engine = create_engine('postgresql://...')\n >>> get_table_acl(engine, 'table2')\n SchemaRelationInfo(oid=138067, name='table2', owner='alice', acl=['alice=arwdDxt/alice', 'bob=arwdDxt/alice'], schema='public')\n\n >>> from pg_grant import PgObjectType\n >>> from pg_grant.sql import revoke\n >>> stmt = revoke(['SELECT'], PgObjectType.TABLE, 'table2', 'bob')\n >>> str(stmt)\n 'REVOKE SELECT ON TABLE table2 FROM bob'\n >>> engine.execute(stmt)\n\nAuthors\n~~~~~~~\n- Frazer McLean \n\nDocumentation\n~~~~~~~~~~~~~\n\nFor in-depth information, `visit the\ndocumentation `__!\n\nDevelopment\n~~~~~~~~~~~\n\npg_grant uses `semantic versioning `__\n\n.. |Travis| image:: http://img.shields.io/travis/RazerM/pg_grant/master.svg?style=flat-square&label=Travis\n :target: https://travis-ci.org/RazerM/pg_grant\n.. |PyPI Version| image:: http://img.shields.io/pypi/v/pg_grant.svg?style=flat-square&label=PyPI\n :target: https://pypi.python.org/pypi/pg_grant/\n.. |Python Version| image:: https://img.shields.io/badge/Python-3-brightgreen.svg?style=flat-square\n :target: https://www.python.org/downloads/\n.. |PostgreSQL Version| image:: https://img.shields.io/badge/PostgreSQL-9.3--10-blue.svg?style=flat-square\n :target: https://www.postgresql.org/\n.. |License| image:: https://img.shields.io/github/license/RazerM/pg_grant.svg?style=flat-square\n :target: https://raw.githubusercontent.com/RazerM/pg_grant/master/LICENSE.txt\n.. |Coverage| image:: https://img.shields.io/codecov/c/github/RazerM/pg_grant/master.svg?style=flat-square\n :target: https://codecov.io/github/RazerM/pg_grant?branch=master\n.. |Documentation| image:: https://img.shields.io/badge/docs-latest-brightgreen.svg?style=flat-square\n :target: http://pg_grant.readthedocs.org/en/latest/\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/RazerM/pg_grant", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pg-grant", "package_url": "https://pypi.org/project/pg-grant/", "platform": "", "project_url": "https://pypi.org/project/pg-grant/", "project_urls": { "Homepage": "https://github.com/RazerM/pg_grant" }, "release_url": "https://pypi.org/project/pg-grant/0.3.1/", "requires_dist": [ "attrs", "typing; python_version<\"3.5\"", "doc8; extra == 'docstest'", "sphinx; extra == 'docstest'", "sphinx-rtd-theme; extra == 'docstest'", "flake8; extra == 'pep8test'", "pep8-naming; extra == 'pep8test'", "sqlalchemy[postgresql]; extra == 'sqlalchemy'", "plumbum; extra == 'test'", "pytest (>=3.0); extra == 'test'", "testcontainers[postgresql,selenium]; extra == 'test'", "testing.postgresql; extra == 'test'" ], "requires_python": "", "summary": "Parse PostgreSQL privileges", "version": "0.3.1" }, "last_serial": 3498834, "releases": { "0.2.0": [ { "comment_text": "", "digests": { "md5": "d4d7a6c508d90cd88db8d14dfb495623", "sha256": "3501899db49795d4eb0414ae546d526f03fa1e3c82863fd4d546a1ae240f00ab" }, "downloads": -1, "filename": "pg_grant-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d4d7a6c508d90cd88db8d14dfb495623", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18262, "upload_time": "2017-10-23T23:14:38", "url": "https://files.pythonhosted.org/packages/a7/23/f70aa635da04298d1c820ca6aa01c4f68d4282280726268cb1bd39bfaef7/pg_grant-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0c57dca5208985c386a20d15b902f12b", "sha256": "d71276815a9c42c928a868f4485c6903340f3e5968b085c36fc2ce7de46b32fe" }, "downloads": -1, "filename": "pg_grant-0.2.0.tar.gz", "has_sig": false, "md5_digest": "0c57dca5208985c386a20d15b902f12b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17192, "upload_time": "2017-10-23T23:14:40", "url": "https://files.pythonhosted.org/packages/8f/01/8064d45d21d53a154a2d0398b09790aead385ccc0318b02de945efa87f7c/pg_grant-0.2.0.tar.gz" } ], "0.2.0.post0": [ { "comment_text": "", "digests": { "md5": "3f5cfa875a5379d37fdcc493037819ba", "sha256": "bbd4ef98e3fd416b14595e7a2764480ac58fa89966d0345b4768b8d8a59141cc" }, "downloads": -1, "filename": "pg_grant-0.2.0.post0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3f5cfa875a5379d37fdcc493037819ba", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18351, "upload_time": "2017-10-23T23:55:52", "url": "https://files.pythonhosted.org/packages/0b/9b/f24c15c35ec80603a6446f40cf2f1ecde99b9ea53cc2ba9e6d771741fbf5/pg_grant-0.2.0.post0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ca9424b408b0879e0a3433ed2031e84a", "sha256": "71ceb34c681bf4bcb95b523126aa4a8742292089e599dc758af64cac85933a7b" }, "downloads": -1, "filename": "pg_grant-0.2.0.post0.tar.gz", "has_sig": false, "md5_digest": "ca9424b408b0879e0a3433ed2031e84a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22011, "upload_time": "2017-10-23T23:55:53", "url": "https://files.pythonhosted.org/packages/ca/c6/509afd3b3fa75963ea0f0adffda55318d9d8782a554388c0c9cead467d7b/pg_grant-0.2.0.post0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "89eaccc9195566332561ff7ff206a8a8", "sha256": "18e41aafc3296277f613419f1779e57f3fdf4377f4b4320ba28f868e02c6b11f" }, "downloads": -1, "filename": "pg_grant-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "89eaccc9195566332561ff7ff206a8a8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21500, "upload_time": "2017-10-31T18:05:42", "url": "https://files.pythonhosted.org/packages/0c/6a/c24968670466b8ff700a9725d0dc54f07572f139fd5730997c650885e598/pg_grant-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dd081b95df1421e1bae828ecf99630c8", "sha256": "dacf2791137b9a95f564a78e185ca31245bbb87572ae80a4f255504f901cda1a" }, "downloads": -1, "filename": "pg_grant-0.3.0.tar.gz", "has_sig": false, "md5_digest": "dd081b95df1421e1bae828ecf99630c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26027, "upload_time": "2017-10-31T18:05:43", "url": "https://files.pythonhosted.org/packages/5e/19/7906631e66947d3a0c3d10a43512d34a777e7d3c7dba1c453a659cd4c4ac/pg_grant-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "cee542c27b213540f0fa048dea88e094", "sha256": "5064372df88cce69ee108d5e6b896f53718dfb90127c9b512370069d2af416f8" }, "downloads": -1, "filename": "pg_grant-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cee542c27b213540f0fa048dea88e094", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21527, "upload_time": "2018-01-17T22:36:58", "url": "https://files.pythonhosted.org/packages/b9/c9/e244e6558eda1a3ada72ad34b78ca802ea3546124fedd7e50672a610dc41/pg_grant-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d45e188bdb51cef934a5d819625cc2f4", "sha256": "328c7573bd74c5c9f69b4c828558b544b055af788fc067549792b828969c9a7d" }, "downloads": -1, "filename": "pg_grant-0.3.1.tar.gz", "has_sig": false, "md5_digest": "d45e188bdb51cef934a5d819625cc2f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26223, "upload_time": "2018-01-17T22:36:59", "url": "https://files.pythonhosted.org/packages/9e/e2/c45764cf8883d72c321e589f2d89901bd75026ff3fdda63bc916ae8972ce/pg_grant-0.3.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "cee542c27b213540f0fa048dea88e094", "sha256": "5064372df88cce69ee108d5e6b896f53718dfb90127c9b512370069d2af416f8" }, "downloads": -1, "filename": "pg_grant-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cee542c27b213540f0fa048dea88e094", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21527, "upload_time": "2018-01-17T22:36:58", "url": "https://files.pythonhosted.org/packages/b9/c9/e244e6558eda1a3ada72ad34b78ca802ea3546124fedd7e50672a610dc41/pg_grant-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d45e188bdb51cef934a5d819625cc2f4", "sha256": "328c7573bd74c5c9f69b4c828558b544b055af788fc067549792b828969c9a7d" }, "downloads": -1, "filename": "pg_grant-0.3.1.tar.gz", "has_sig": false, "md5_digest": "d45e188bdb51cef934a5d819625cc2f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26223, "upload_time": "2018-01-17T22:36:59", "url": "https://files.pythonhosted.org/packages/9e/e2/c45764cf8883d72c321e589f2d89901bd75026ff3fdda63bc916ae8972ce/pg_grant-0.3.1.tar.gz" } ] }