Contessa
============================

|docs-badge| |build-badge| |pypi-badge| |license-badge|

.. |docs-badge| image:: https://readthedocs.org/projects/contessa/badge/?version=latest
   :target: https://contessa.readthedocs.io/en/latest/
.. |pypi-badge| image:: https://badge.fury.io/py/contessa.svg
   :target:  https://pypi.org/project/contessa/
.. |build-badge| image:: https://travis-ci.org/kiwicom/contessa.svg?branch=master
   :target: https://travis-ci.org/kiwicom/contessa
.. |license-badge| image:: https://img.shields.io/pypi/l/schemathesis.svg
   :target: https://opensource.org/licenses/MIT


Data Quality Framework

Quick Example
---------------------------

.. code-block:: python

    from contessa import ContessaRunner, NOT_NULL, GT, SQL
    no_bags_sql = """
        SELECT CASE WHEN is_no_bags_booking = 'T' AND bags > 0 THEN false ELSE true END
        FROM {{table_fullname}};
    """
    contessa = ContessaRunner("postgres://:@localhost:5432")

    RULES = [
        {
            "name": NOT_NULL,
            "columns": ["status", "market", "src", "dst"], 
        },
        {
            "name": GT,
            "value": 0,
            "columns": ["initial_price", "turnover_before_refunds", ],
        },
        {
            "name": SQL,
            "sql": no_bags_sql,
            "description": "No bags booking should have bags = 0",
        },
    ]
    contessa.run(
        raw_rules=RULES,
        check_table={"schema_name": "public", "table_name": "bookings"},
        result_table={"schema_name": "dq", "table_name": "my_table"},
    )

How to run tests
---------------------------

.. code-block:: bash

    $ make test-up  # run postgres + app
    $ make test args="/app/test -s"  # args for pytest
    $ make test-down  # delete containers + volumes


In case of unit tests (you do not need db):

.. code-block:: bash

    $ pytest test/unit/test_operator.py

How to add docs
---------------------------

.. code-block:: bash

	$ pip3 install -r requirements-docs.txt
	$ python3 watchdogs.py

It will make html files with sphinx and serve a local webserver so that you can check it out.
It should also reload it :)

NOTE: If it doesn't work, build html manually. ``cd docs && make html``
