===============================
LookML Generator
===============================


.. image:: https://img.shields.io/pypi/v/lookml-gen.svg
    :target: https://pypi.python.org/pypi/lookml-gen

.. image:: https://travis-ci.org/symphonyrm/lookml-gen.svg?branch=master
    :target: https://travis-ci.org/symphonyrm/lookml-gen

.. image:: https://readthedocs.org/projects/lookml-gen/badge/?version=latest
    :target: http://lookml-gen.readthedocs.io/en/latest/?badge=latest
    :alt: Documentation Status

.. image:: https://pyup.io/repos/github/symphonyrm/lookml-gen/shield.svg
    :target: https://pyup.io/repos/github/symphonyrm/lookml-gen/
    :alt: Updates


Programmatically generate LookML


* Free software: Apache Software License 2.0
* Documentation: https://lookml-gen.readthedocs.io.


Features
--------

* Generate LookML views programmatically
* Include dimensions, dimension groups, filters, and measures in your views
* Support Persistent Derived Tables (PDTs)
* Write output to files or StringIO buffers

Quick Start
-----------

Install it::

    pip install lookml-gen

Use it::

    from lookmlgen.view import View
    from lookmlgen.field import Dimension, DimensionGroup, Measure
    from lookmlgen.base_generator import GeneratorFormatOptions

    view_name = 'my_view'
    v = View(view_name, sql_table_name='my_table')
    v.add_field(Dimension('id', type='number', primary_key=True))
    v.add_field(DimensionGroup('created'))
    v.add_field(Dimension('name'))
    v.add_field(Dimension('quantity', type='number'))
    v.add_field(Measure('total_quantity', sql='${TABLE}.quantity', type='sum'))

    with open('%s.view.lkml' % view_name, 'w') as f:
        v.generate_lookml(f, GeneratorFormatOptions(view_fields_alphabetical=False))

See it::

    # STOP! This file was generated by an automated process.
    # Any edits you make will be lost the next time it is
    # re-generated.
    view: my_view {
      sql_table_name: my_table ;;

      dimension: id {
        type: number
        primary_key: yes
        sql: ${TABLE}.id ;;
      }

      dimension_group: created {
        type: time
        timeframes: ["time", "date", "week", "month"]
        datatype: datetime
        sql: ${TABLE}.created ;;
      }

      dimension: name {
        sql: ${TABLE}.name ;;
      }

      dimension: quantity {
        type: number
        sql: ${TABLE}.quantity ;;
      }

      measure: total_quantity {
        type: sum
        sql: ${TABLE}.quantity ;;
      }
    }

TODOs
-----

Full LookML support is far from complete right now. At the moment only very basic
aspects of Views and Fields are supported and there is no support for Explores yet.
However, it does cover the most common functionality, including Persistent Derived
Tables. The code can easily be extended and we'd love to get pull requests to fill
out additional functionality.

Credits
---------

This package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.

.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage

