{ "info": { "author": "Unlimited Labs, Inc.", "author_email": "hello@b12.io", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "================\nRoom with a View\n================\n\n\n.. image:: https://img.shields.io/pypi/v/room_with_a_view.svg\n :target: https://pypi.python.org/pypi/room_with_a_view\n\n.. image:: https://img.shields.io/travis/b12io/room_with_a_view.svg\n :target: https://travis-ci.org/b12io/room_with_a_view\n\n.. image:: https://readthedocs.org/projects/room-with-a-view/badge/?version=latest\n :target: https://room-with-a-view.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\n\n.. image:: https://pyup.io/repos/github/marcua/room_with_a_view/shield.svg\n :target: https://pyup.io/repos/github/marcua/room_with_a_view/\n :alt: Updates\n\n\n\nView management for Amazon's Redshift\n\n\n* Free software: Apache Software License 2.0\n* Documentation: https://room-with-a-view.readthedocs.io.\n\nFeatures\n--------\n\nRoom with a view is a python script that automatically parses a collection of\nSQL files to find view and function definitions and their dependencies. It then\nmakes it easy to sync those views with Redshift, automatically dropping and\nrecreating dependent views as necessary so that there are no errors. The key\nbenefits are:\n\n* No writing code to send view SQL to Redshift: the script does it for you.\n* Edit any view and sync it without worrying about needing to drop or recreate\n views that depend on it.\n* Error handling tells you exactly where there are errors in your views.\n* The script runs in an atomic transaction, so you can't accidentally enter a\n broken state by syncing some views and not others.\n\n\nSetup\n-----\n\n* Install the package: ``pip install room_with_a_view``.\n\n* Create ``settings.yaml``, and edit the file to configure your Redshift connection and the location of your .sql files. Example ``settings.yaml`` file:\n\n.. code-block:: yaml\n\n connections:\n default:\n host: localhost\n port: 5432\n user: awsuser\n password: **CHANGEME**\n dbname: postgres\n\n directories:\n - .\n\n* You're ready to go! Try ``room_with_a_view sync-all`` to sync all your views, or ``room_with_a_view --help`` to learn more about the command.\n\nUsage\n-----\n\n::\n\n usage: room_with_a_view.py [-h]\n [--view-names [VIEW-OR-FUNCTION-NAME [VIEW-OR-FUNCTION-NAME ...]]]\n [--file-names [FILE-PATH [FILE-PATH ...]]]\n [--connection CONNECTION]\n [--settings SETTINGS] [--verbosity VERBOSITY]\n {sync,drop-all,sync-all,list,drop}\n\n Manages Redshift SQL views. Possible actions:\n sync: Syncs specific views or functions (identified by the --view-names or --file-names parameters).\n drop-all: Drops all views and functions in all .sql files in a set of directories (identified by the --directories parameter). The directory will be searched recursively.\n sync-all: Syncs all views and functions in all .sql files in a set of directories (identified by the --directories parameter). The directory will be searched recursively.\n list: lists all known views and functions.\n drop: Drops specific views or functions (identified by the --view-names or --file-names parameters).\n\n positional arguments:\n {sync,drop-all,sync-all,list,drop}\n The action to perform.\n\n optional arguments:\n -h, --help show this help message and exit\n --view-names [VIEW-OR-FUNCTION-NAME [VIEW-OR-FUNCTION-NAME ...]]\n Names of views or functions to which to apply the action.\n --file-names [FILE-PATH [FILE-PATH ...]]\n Paths to .sql files to which to apply the action.\n --connection CONNECTION\n Name of the Redshift connection to use (or \"default\",\n if not specified). The name must match a connection in\n settings.yaml\n --settings SETTINGS Location of the settings file (settings.yaml by\n default)\n --verbosity VERBOSITY\n Verbosity of script output. 0 will output nothing, 1\n will output names of views and functions being dropped\n and created, and 2 will output all executed sql\n\nExamples\n--------\n\n* ``room_with_a_view.py sync-all``: Syncs all views and functions in all SQL files in the default directory specified in ``settings.yaml``. Drops and recreates existing views, and makes sure views are created in dependency order.\n\n* ``room_with_a_view.py sync --view-names my_view1 my_func1 --file-names ../sql/my_file.sql``: Syncs the specific view ``my_view1`` and function ``my_func1``, as well as all views and functions in the file ``../sql/my_file.sql``.\n\n* ``room_with_a_view.py drop-all --connection other_connection``: Drops all views and functions in the default directory, using the connection info specified in ``settings.yaml`` under the name ``other_connection`` to connect to Redshift.\n\n* ``room_with_a_view.py drop --view-names my_view1 --directories other_dir1 other_dir2 --settings /path/to/fancy_settings.yaml``: Drops the view ``my_view1``, looking for SQL files that contain the view and its dependents in the directories specified by ``other_dir1`` and ``other_dir2`` in the settings file located in ``/path/to/fancy_settings.yaml``.\n\nCredits\n-------\n\nThis package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.\n\n.. _Cookiecutter: https://github.com/audreyr/cookiecutter\n.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage\n\n\n=======\nHistory\n=======\n\n0.1.0 (2018-05-28)\n------------------\n\n* First release on PyPI.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/b12io/room_with_a_view", "keywords": "room_with_a_view", "license": "Apache Software License 2.0", "maintainer": "", "maintainer_email": "", "name": "room_with_a_view", "package_url": "https://pypi.org/project/room_with_a_view/", "platform": "", "project_url": "https://pypi.org/project/room_with_a_view/", "project_urls": { "Homepage": "https://github.com/b12io/room_with_a_view" }, "release_url": "https://pypi.org/project/room_with_a_view/0.1.4/", "requires_dist": [ "psycopg2 (==2.7.5)", "PyYAML (==3.12)" ], "requires_python": "", "summary": "View management for Amazon's Redshift", "version": "0.1.4" }, "last_serial": 4075436, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "618d1ba0c4ab8f408f8690d957099021", "sha256": "cc608258a9c3c044953c264052c87e591afbff6fd317ba976f6775b23d4d335e" }, "downloads": -1, "filename": "room_with_a_view-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "618d1ba0c4ab8f408f8690d957099021", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 10434, "upload_time": "2018-07-04T03:37:14", "url": "https://files.pythonhosted.org/packages/fe/84/90d3bae5c525a28a0e1cd2a71061fef363e8254c399dca5925a5feb00421/room_with_a_view-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "db8c75f6aa27ad94888e0e9c61d4d866", "sha256": "b728eb55deba98d59947e51339ffb9ca67c47470a2bdfa7daf9c23a0fa4384f8" }, "downloads": -1, "filename": "room_with_a_view-0.1.0.tar.gz", "has_sig": false, "md5_digest": "db8c75f6aa27ad94888e0e9c61d4d866", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13318, "upload_time": "2018-07-04T03:37:03", "url": "https://files.pythonhosted.org/packages/a8/26/bf53435e81c0b6c430610d14c4da93c5b053b51ba17c3a8811226d48216d/room_with_a_view-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "5c113d5637117d49a34448f0d15305a2", "sha256": "d2a213fa6f868a9fe9b7f0bcc3c89badc0ee201684611ffa906c41a1204e287f" }, "downloads": -1, "filename": "room_with_a_view-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5c113d5637117d49a34448f0d15305a2", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 10437, "upload_time": "2018-07-04T03:54:39", "url": "https://files.pythonhosted.org/packages/49/99/a91fa1122429b0bedf37794ddefc41b7f71327a831a38759d1e87977c168/room_with_a_view-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7e20bd0befc1c45c2fc82b40994b5736", "sha256": "da90c688804df1a0bca28eedf6c4985f4805eee90bb9e5c516f273031efb5b8d" }, "downloads": -1, "filename": "room_with_a_view-0.1.1.tar.gz", "has_sig": false, "md5_digest": "7e20bd0befc1c45c2fc82b40994b5736", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13333, "upload_time": "2018-07-04T03:54:32", "url": "https://files.pythonhosted.org/packages/65/4c/cac7baf7c7c771d8869953a4ed7be15621f13f1ea972a534dfd4adda938c/room_with_a_view-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "9c76dd2792140bec3e338c4c0ce87600", "sha256": "0e3dacfb5b62e3876555f12066e375bcded9efec17a1190aefbe70b7bca0c530" }, "downloads": -1, "filename": "room_with_a_view-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9c76dd2792140bec3e338c4c0ce87600", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 10439, "upload_time": "2018-07-04T03:57:31", "url": "https://files.pythonhosted.org/packages/9e/d2/fef0156ac385a68c4940372c29a8c728c3820c69d2b8b6cd022e4324cf0a/room_with_a_view-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6a0779ca49dbb6ae7c2b267b6349d729", "sha256": "994cc785eefe54b9ea02abc279451925a3d86a9da55823e1f874a2596f830e6b" }, "downloads": -1, "filename": "room_with_a_view-0.1.2.tar.gz", "has_sig": false, "md5_digest": "6a0779ca49dbb6ae7c2b267b6349d729", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13321, "upload_time": "2018-07-04T03:57:18", "url": "https://files.pythonhosted.org/packages/c1/48/4d1de94289a8904968d79fafedd6447db2251d6d5e3fac18581850e1e12f/room_with_a_view-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "45c75848385b02ee93478a8f601f1d79", "sha256": "63cb68333c056e35a885a4b7067f2c9ceff1ae18d39e1e2995ca890c4e24a3e4" }, "downloads": -1, "filename": "room_with_a_view-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "45c75848385b02ee93478a8f601f1d79", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 11771, "upload_time": "2018-07-04T19:03:01", "url": "https://files.pythonhosted.org/packages/9d/4f/c06d12a34f2a6a04bc19f2e2b5f9417d462aa762ae3476b77528b9a0e7d2/room_with_a_view-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aad85f3f2ac1528614cf179d2226c636", "sha256": "5e5cbccbc58edf78f065a411ec7f84765ff078e01c16aa2b847a5c8dd8267f0e" }, "downloads": -1, "filename": "room_with_a_view-0.1.3.tar.gz", "has_sig": false, "md5_digest": "aad85f3f2ac1528614cf179d2226c636", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14548, "upload_time": "2018-07-04T19:02:55", "url": "https://files.pythonhosted.org/packages/08/88/8bf4e837bbf887274e261c54b80b2164ce4453b6c4714fb4579ae1a5475c/room_with_a_view-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "094b1892465af576c9b4643f78a7abcf", "sha256": "3714236e09fbb6de251418976d1c82ab60312d03e82655e15d01e562d62baed7" }, "downloads": -1, "filename": "room_with_a_view-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "094b1892465af576c9b4643f78a7abcf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11644, "upload_time": "2018-07-17T21:25:23", "url": "https://files.pythonhosted.org/packages/ff/0d/78c48832994f3453a3c8d993bcc53ebdc821a2925b270a564a21f3ccd233/room_with_a_view-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3d7d80eb0ff6a0c063f7f383fa798fe1", "sha256": "020d3c0a44877775e15c9a05b4aa4f4afa60f25a0036a7a396a0fb0afa957108" }, "downloads": -1, "filename": "room_with_a_view-0.1.4.tar.gz", "has_sig": false, "md5_digest": "3d7d80eb0ff6a0c063f7f383fa798fe1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14433, "upload_time": "2018-07-17T21:25:24", "url": "https://files.pythonhosted.org/packages/b7/05/1ebf8f5de7a10a554dc6d9b9b78ef99de33ed54bd51064f41b047613fa22/room_with_a_view-0.1.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "094b1892465af576c9b4643f78a7abcf", "sha256": "3714236e09fbb6de251418976d1c82ab60312d03e82655e15d01e562d62baed7" }, "downloads": -1, "filename": "room_with_a_view-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "094b1892465af576c9b4643f78a7abcf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11644, "upload_time": "2018-07-17T21:25:23", "url": "https://files.pythonhosted.org/packages/ff/0d/78c48832994f3453a3c8d993bcc53ebdc821a2925b270a564a21f3ccd233/room_with_a_view-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3d7d80eb0ff6a0c063f7f383fa798fe1", "sha256": "020d3c0a44877775e15c9a05b4aa4f4afa60f25a0036a7a396a0fb0afa957108" }, "downloads": -1, "filename": "room_with_a_view-0.1.4.tar.gz", "has_sig": false, "md5_digest": "3d7d80eb0ff6a0c063f7f383fa798fe1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14433, "upload_time": "2018-07-17T21:25:24", "url": "https://files.pythonhosted.org/packages/b7/05/1ebf8f5de7a10a554dc6d9b9b78ef99de33ed54bd51064f41b047613fa22/room_with_a_view-0.1.4.tar.gz" } ] }