Aito Python SDK
===============

:Info: Check `Github <https://github.com/AitoDotAI/aito-python-tools>`_ for the latest source code and `documentation <https://aito-python-sdk.readthedocs.io/en/latest/>`__ for more information.
:Maintainer: Aito <admin@aito.ai>

|PyPI| |PyPI version|

About
-----

The Aito Python SDK is an open-source library that helps you to integrate your Python application
to `Aito <https://aito.ai/>`_ quicker and more efficiently.

The SDK also includes the `Aito Command Line Interface (CLI) <https://aito-python-sdk.readthedocs.io/en/latest/cli.html>`_ that enables you to interact with Aito
using commands in your command-line shell, e.g: infer a table schema from a file or upload a file to Aito.


Support / Feedback
------------------

For issues with, questions about, or feedback, please join our `support channels <https://aito.ai/join-slack/>`__.

Installation
------------

Aito Python SDK can be installed with `pip <http://pypi.python.org/pypi/pip>`_

  .. code-block:: console

    $ pip install aitoai

Check our `installation guide <https://aito-python-sdk.readthedocs.io/en/latest/install.html>`_ for more information

Documentation
-------------

You will need `sphinx <https://www.sphinx-doc.org/en/master/>`_ installed to generate the documentation.
Documentation can be generated by:

  .. code-block:: console

    $ cd docs
    $ make clean html

Generated documentation can be found in the ``docs/build/html/*`` directory.

Testing
-------

Install the required packages:

  .. code-block:: console

    $ pip install -r requirements/build.txt
    $ pip install -r requirements/test.txt

You can use our test cli to run tests:

  .. code-block:: console

    $ python -m tests -h

.. note::

  Some tests require some environment variables to be setup. Use the test CLI list command to discover and display the test suites and cases

There are multiple test suites:

1. CLI suite:

  .. code-block:: console

    $ python -m tests -v suite cli

  .. note::

    You need an Aito instance and set up the credentials with ```AITO_INSTANCE_URL``` and ```AITO_API_KEY``` to test some functions.

2. SDK suite:

  .. code-block:: console

    $ python -m tests -v suite sdk

  .. note::

    You need an Aito instance and set up the credentials with ```AITO_INSTANCE_URL``` and ```AITO_API_KEY``` to test some functions

3. SQL functions tests:

  - Test against Postgres:

    .. code-block:: console

        $ python -m tests -v case sql_functions.test_connection.TestPostgresConnection
        $ python -m tests -v case sql_functions.test_cli_sql_functions.TestPostgresFunctions

  - Test against MySQL:

    .. code-block:: console

      $ python -m tests -v case sql_functions.test_connection.TestMySQLConnection
      $ python -m tests -v case sql_functions.test_cli_sql_functions.TestMySQLFunctions

  .. note::

    To test the SQL functions, you need to install `pyodbc <https://pypi.org/project/pyodbc/>`_ and the specific database ODBC driver.

4. Build and test built package:

  - To build the package:

    .. code-block:: console

        $ pip install -r requirements/deploy.txt
        $ ./scripts/deploy test.pypi --no-publish

  - The built wheel should be at ```dist/```. To install:

    .. code-block:: console

        $ pip install dist/aitoai-<version>.whl

  - To test the built package, create an environment variable ```TEST_BUILT_PACKAGE``` and run the above tests

5. Test the documentation:

  - To test the inline documentation:

    .. code-block:: console

      $ python -m tests -v suite inline_docs

  - To test the code blocks in rst files:

    .. code-block:: console

      $ cd docs
      $ make doctest

Contributing
------------

- Making changes
- Add unittest to the appropriate test suite (e.g: test case for Aito Schema: `tests/sdk/test_aito_schema.py`) or create a new test suite inside the `tests` folder
- Add documentation:

  - Inline documentation if applicable
  - Update .rst file in docs/source folder (e.g: Add a new Client function to docs/source/sdk.rst)

- Add inline doc test if applicable (e.g: inline doc test for Aito Client: `tests/inline_docs/test_client_inline_docs.py`)

.. note::

  Remember to update the `autodoc_mock_imports` in conf.py file if there are additional requirements

- Check CircleCI and issue a PR
- Deploy to production (scripts/deploy) with the appropriate version after the PR is reviewed


.. |PyPI| image:: https://img.shields.io/pypi/v/aitoai?style=plastic
  :target: https://pypi.org/project/aitoai/
.. |PyPI version| image:: https://img.shields.io/pypi/pyversions/aitoai?style=plastic
  :target: https://github.com/AitoDotAI/aito-python-tools
