{ "info": { "author": "Carl Anderson", "author_email": "carl.anderson@weightwatchers.com", "bugtrack_url": null, "classifiers": [ "Operating System :: OS Independent", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# Overview\n[![Build Status](https://travis-ci.org/ww-tech/lookml-tools.svg?branch=master)](https://travis-ci.org/ww-tech/lookml-tools)\n[![PyPI pyversions](https://img.shields.io/pypi/pyversions/lookml-tools.svg)](https://pypi.python.org/pypi/lookml-tools/)\n[![PyPI version](https://badge.fury.io/py/lookml-tools.svg)](https://badge.fury.io/py/lookml-tools)\n[![PyPI license](https://img.shields.io/pypi/l/lookml-tools.svg)](https://pypi.python.org/pypi/lookml-tools/)\n[![Docs status](https://img.shields.io/website/https/ww-tech.github.io/lookml-tools?down_color=red&down_message=docs&label=docs&up_color=success&up_message=up)](https://ww-tech.github.io/lookml-tools/)\n\n\n![](img/lookmltools.png)\n\n# LookML Tools\n\nThis repository contains some tools to handle best practices of a set of developers working on LookML files.\n\nThere are three tools: \n\n - `LookML updater`\n - `LookML linter`\n - `LookML grapher`\n\nSites:\n - source: https://github.com/ww-tech/lookml-tools\n - documentation: https://ww-tech.github.io/lookml-tools/\n - Pypi: https://pypi.org/project/lookml-tools/\n\n## LookML updater\nThe first tool helps solve a problem of official definitions of `dimensions` and `measures`—such as in a business glossary—getting out of sync from some other system. The solution implemented here is to have a remote master list whose definitions are propagated to LookML. Thus, given some remote definition for a given LookML `dimension`, `dimension_group`, or `measure`, inject it in the LookML.\n\nFull documentation is [here](README_UPDATER.md).\n\n\n## LookML linter\nThe second tool helps us check that our LookML conforms to some given coding standards and LookML developer best practices. It runs a series of checks over our LookML files and reports which `files`, or which `dimensions`, `dimension_groups`, or `measures`, fail those checks.\n\nFull documentation is [here](README_LINTER.md).\n\n## LookML grapher\nThe third tool creates a \"network diagram\" of the `model - explore - view` relationships and writes to an `PNG` image file. The code will also identify any `orphans` i.e. views not referenced by any models or explores.\n\nFull documentation is [here](README_GRAPHER.md).\n\n## Installation\n\nFor the grapher, you will need to install grapviz:\n```\nbrew install graphviz\n```\n\nFor all tools, you will need to install dependencies:\n```\n pip install -r requirements.txt\n```\n\nYou can install the Python codebase of `lookml-tools` via pip:\n\n```\n pip install lookml-tools\n```\n\nOne user reported having to install a specific version of pandas (`pandas==0.24.0`) to make this all work. YMMV.\n\nAlternatively, you can install with\n```\n python setup.py install\n```\n\n## Unit tests\nThere is a test suite with close to 100% code coverage\n\nRun with \n\n```\npip install pytest-cov\n\npython -m pytest --cov=lkmltools/ test/*.py ; coverage html\n```\n\n## Developer Notes\nThere are some developer notes for the linter [here](README_DEVELOPER.md).\n\n## Contribute\nWe would love to have your feedback, suggestions, and especially contributions to the project. Create a pull request!\n\nYou can reach me directly at carl.anderson@weightwatchers.com as well as [@leapingllamas](https://twitter.com/LeapingLlamas) on Twitter.\n\n## Release notes\n\n#### 2019-10-30: 2.0.5\n\nadded Travis CI config\n\n#### 2019-10-19: 2.0.4\n\npandas version change to support Python 3.7 (see https://github.com/ww-tech/lookml-tools/pull/5)\nThanks for your contribution https://github.com/m-deck!\n\nGrapher: title now exposed as an option\n\nGrapher can now create animated GIFs\n\n#### 2019-09-28: 2.0.3\n\nsetup.py now uses find_packages()\n\n#### 2019-09-28: 2.0.2\n\nAdded missing __init__.py so that packages are recognized\n\n#### 2019-07-17: 2.0.1\n\nAdding missing `lkml` to `requirements.txt`\n\n#### 2019-07-17: 2.0.0\n\nGiven the impact of the following two changes, this is a major release:\n\n - swapped out the node-based LookML parser with [Josh Temple's](https://github.com/joshtemple) new Python lkml parser (https://pypi.org/project/lkml/). This simplifies install, dependency management, and underlying parsed JSON format.\n - added layer of abstraction via `LookML` and `LookMLField` classes so that rules and other code can query LookML attributes via methods instead of inspecting raw JSON.\n\nOther changes:\n\n - `lkmltools.RuleFactory` is now a singleton so it is easier for users to register their own rules.\n - Can now parameterize any rule in the configuration by adding additional keys to the dictionary for that rule.\n For instance, if the config defines `{\"name\": \"MyAwesomeRule\", \"run\": true, \"debug\": true, \"strict_mode\":true, length: 6}` then this whole dictionary is passed into the constructor during rule instantiation.\n\n#### 2019-06-10: 1.0.0\n - initial release\n\n## License\nCopyright 2019 WW International, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\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/ww-tech/lookml-tools", "keywords": "", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "lookml-tools", "package_url": "https://pypi.org/project/lookml-tools/", "platform": "", "project_url": "https://pypi.org/project/lookml-tools/", "project_urls": { "Documentation": "https://ww-tech.github.io/lookml-tools/", "Homepage": "https://github.com/ww-tech/lookml-tools", "Source": "https://github.com/ww-tech/lookml-tools" }, "release_url": "https://pypi.org/project/lookml-tools/2.0.5/", "requires_dist": null, "requires_python": "", "summary": "Set of tools for handling LookML files: a linter, updater, and grapher", "version": "2.0.5", "yanked": false, "yanked_reason": null }, "last_serial": 6053889, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "f745317c6d85a91a534daa7711452fa5", "sha256": "8dfe746b2cdd832417e1fe7e2c48b5aa114f9811261ebadcc5c2e5cd103a1815" }, "downloads": -1, "filename": "lookml_tools-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f745317c6d85a91a534daa7711452fa5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11449, "upload_time": "2019-06-10T14:33:04", "upload_time_iso_8601": "2019-06-10T14:33:04.203595Z", "url": "https://files.pythonhosted.org/packages/e5/68/18d5116a9863f0124dec1701eccc8795ba30ea090f62f42bfc8d0b1027c9/lookml_tools-1.0.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7389308b41cf5d21a8427037c5ca5799", "sha256": "0b253e62b507436dc8389e41c097dc7833f186b0e83b5f4692603fff121aab76" }, "downloads": -1, "filename": "lookml-tools-1.0.0.tar.gz", "has_sig": false, "md5_digest": "7389308b41cf5d21a8427037c5ca5799", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16291, "upload_time": "2019-06-10T14:33:06", "upload_time_iso_8601": "2019-06-10T14:33:06.576858Z", "url": "https://files.pythonhosted.org/packages/04/12/a60a75ae02cbfd45908a8ca893bfa7f227e650f312c6a0d9a29b88c28b86/lookml-tools-1.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "47f2317384dfe90dd7548d217f899c39", "sha256": "2b1a3ecc8041eed1a173cd12820a4d0014b915d98b5bb6d524424cc87cd12c59" }, "downloads": -1, "filename": "lookml_tools-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "47f2317384dfe90dd7548d217f899c39", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12571, "upload_time": "2019-07-18T01:31:22", "upload_time_iso_8601": "2019-07-18T01:31:22.847586Z", "url": "https://files.pythonhosted.org/packages/2e/c5/cd45eb85c058728b9b5f44baf4348ad31582cd106e0f4792a5cd9f7943d0/lookml_tools-2.0.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9be57f946ed9f3d31b613917ef7304c6", "sha256": "199cd072d63c299fbd9e95ee5e411a6b63e0dfa6e616fb3849170c1756051170" }, "downloads": -1, "filename": "lookml-tools-2.0.0.tar.gz", "has_sig": false, "md5_digest": "9be57f946ed9f3d31b613917ef7304c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17067, "upload_time": "2019-07-18T01:31:24", "upload_time_iso_8601": "2019-07-18T01:31:24.432637Z", "url": "https://files.pythonhosted.org/packages/4a/53/2833d3d4f078f756d8c946eb555271c098c5d003c4eb0b94b4aeefe0744c/lookml-tools-2.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "392846452e6d3b346f1d7f450886cbcb", "sha256": "e5431b926abfa95df5e9c1a6bddfc181b37022b6d20bf9e2e391c2e616b5aaaa" }, "downloads": -1, "filename": "lookml_tools-2.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "392846452e6d3b346f1d7f450886cbcb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12594, "upload_time": "2019-07-18T02:20:43", "upload_time_iso_8601": "2019-07-18T02:20:43.496116Z", "url": "https://files.pythonhosted.org/packages/c4/71/756b0e84737f05df35d1f560390288b89f9db52fea49e05c9a9e8552d448/lookml_tools-2.0.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "1aca6491a57613978c16988d8f4d0ded", "sha256": "0024bd16dd8ce37eb91c425848f1f0a41614395a58f13b7e3d57f9b19ab5d2b8" }, "downloads": -1, "filename": "lookml-tools-2.0.1.tar.gz", "has_sig": false, "md5_digest": "1aca6491a57613978c16988d8f4d0ded", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17146, "upload_time": "2019-07-18T02:20:45", "upload_time_iso_8601": "2019-07-18T02:20:45.041233Z", "url": "https://files.pythonhosted.org/packages/91/b7/16137edb956f1e3b8f8c382590738ae1d071c2bbf450fe23290c145d9ac9/lookml-tools-2.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "641cf25899f414ee2b68de2422930705", "sha256": "3761c30c74f4f929e43caf98f8fcfa133326bd93fc8b3e2fc771ec02055087ea" }, "downloads": -1, "filename": "lookml_tools-2.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "641cf25899f414ee2b68de2422930705", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12634, "upload_time": "2019-09-28T18:18:30", "upload_time_iso_8601": "2019-09-28T18:18:30.016062Z", "url": "https://files.pythonhosted.org/packages/b5/ab/4601a86b3275ad47bd53c30447e073782d71d334408bcdaa731a85ed8a0f/lookml_tools-2.0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5949fe2f340b8350250f570b7caa133d", "sha256": "6a1db3b3fe69a5529af220b199dea455f86b6f1f749ac5bb420ff394b65f0271" }, "downloads": -1, "filename": "lookml-tools-2.0.2.tar.gz", "has_sig": false, "md5_digest": "5949fe2f340b8350250f570b7caa133d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17196, "upload_time": "2019-09-28T18:18:31", "upload_time_iso_8601": "2019-09-28T18:18:31.699732Z", "url": "https://files.pythonhosted.org/packages/23/ca/fc55e9f531fff6bddbf44da2fc09fa5fe517731f172eb4f57d22cbf4c952/lookml-tools-2.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.3": [ { "comment_text": "", "digests": { "md5": "5c746087c4784e20b1df209bd9dd05df", "sha256": "d3050334349f90c6b7fc6937df81fba5738e4300a959d6bed8a6cb33c5dad886" }, "downloads": -1, "filename": "lookml_tools-2.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "5c746087c4784e20b1df209bd9dd05df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35940, "upload_time": "2019-09-28T18:37:30", "upload_time_iso_8601": "2019-09-28T18:37:30.257964Z", "url": "https://files.pythonhosted.org/packages/3d/ee/c466e6b08a8b905bc7329443099e2c12e1e50febc02810313a06330547fb/lookml_tools-2.0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "cee4316df38e38990dee0aef64b64229", "sha256": "0a1f8427f37d8e1a53a2817bd380e4d56352ac2c53fb4578d978cf120d9c996c" }, "downloads": -1, "filename": "lookml-tools-2.0.3.tar.gz", "has_sig": false, "md5_digest": "cee4316df38e38990dee0aef64b64229", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28157, "upload_time": "2019-09-28T18:37:33", "upload_time_iso_8601": "2019-09-28T18:37:33.166979Z", "url": "https://files.pythonhosted.org/packages/0e/90/f8622ca8fa0cd2dccc7b44c1e92959c7b370880c9ca6703d6d4c8373906e/lookml-tools-2.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.4": [ { "comment_text": "", "digests": { "md5": "4ef91a971b7237ad0059966c685d2db9", "sha256": "82044448fced38daa47e190fdafa4b8adec692dff8f17915d4e5d89bd061e476" }, "downloads": -1, "filename": "lookml_tools-2.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "4ef91a971b7237ad0059966c685d2db9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 37473, "upload_time": "2019-10-19T18:15:07", "upload_time_iso_8601": "2019-10-19T18:15:07.443623Z", "url": "https://files.pythonhosted.org/packages/15/f4/d5acad4f5ee3d663eb20f57b1d8bc4d6d43812c151895f8efdeffb07449e/lookml_tools-2.0.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "442a32c4cf847e3b6b9d9d271715f40a", "sha256": "398cec7af0930128208c9047cb59f8836b511be4e5ceb8c9f5ae56b8df1a8bc5" }, "downloads": -1, "filename": "lookml-tools-2.0.4.tar.gz", "has_sig": false, "md5_digest": "442a32c4cf847e3b6b9d9d271715f40a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29688, "upload_time": "2019-10-19T18:15:08", "upload_time_iso_8601": "2019-10-19T18:15:08.932750Z", "url": "https://files.pythonhosted.org/packages/1c/51/6c2ca2839d9b027dbafa9ad240a4a5cefdfb304fe2eaabafc58f59dd6a7d/lookml-tools-2.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.5": [ { "comment_text": "", "digests": { "md5": "1b2d55ff4e81ed64e0d8be895996eaac", "sha256": "65f82b0bb3ba8450150cb00daf144a4a4537f84b4942199154d18065c3733931" }, "downloads": -1, "filename": "lookml_tools-2.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "1b2d55ff4e81ed64e0d8be895996eaac", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 37691, "upload_time": "2019-10-30T17:36:19", "upload_time_iso_8601": "2019-10-30T17:36:19.104752Z", "url": "https://files.pythonhosted.org/packages/2d/e9/2f8b10ca8760c828bd0be7db2d1e1b525c728d25ae58a4765327458f7108/lookml_tools-2.0.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "fba4b4ab3528cb80345af49d817550d2", "sha256": "da086263e36050f985ec8b072e4edb861d67fb4eb163b267760ffc271f88e7ec" }, "downloads": -1, "filename": "lookml-tools-2.0.5.tar.gz", "has_sig": false, "md5_digest": "fba4b4ab3528cb80345af49d817550d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30149, "upload_time": "2019-10-30T17:36:20", "upload_time_iso_8601": "2019-10-30T17:36:20.815445Z", "url": "https://files.pythonhosted.org/packages/3f/56/5c295a5b4a9355dc4c7b5500c04b5420bb5f527b0befee8c0bb78a6a5121/lookml-tools-2.0.5.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1b2d55ff4e81ed64e0d8be895996eaac", "sha256": "65f82b0bb3ba8450150cb00daf144a4a4537f84b4942199154d18065c3733931" }, "downloads": -1, "filename": "lookml_tools-2.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "1b2d55ff4e81ed64e0d8be895996eaac", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 37691, "upload_time": "2019-10-30T17:36:19", "upload_time_iso_8601": "2019-10-30T17:36:19.104752Z", "url": "https://files.pythonhosted.org/packages/2d/e9/2f8b10ca8760c828bd0be7db2d1e1b525c728d25ae58a4765327458f7108/lookml_tools-2.0.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "fba4b4ab3528cb80345af49d817550d2", "sha256": "da086263e36050f985ec8b072e4edb861d67fb4eb163b267760ffc271f88e7ec" }, "downloads": -1, "filename": "lookml-tools-2.0.5.tar.gz", "has_sig": false, "md5_digest": "fba4b4ab3528cb80345af49d817550d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30149, "upload_time": "2019-10-30T17:36:20", "upload_time_iso_8601": "2019-10-30T17:36:20.815445Z", "url": "https://files.pythonhosted.org/packages/3f/56/5c295a5b4a9355dc4c7b5500c04b5420bb5f527b0befee8c0bb78a6a5121/lookml-tools-2.0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }