Metadata-Version: 2.1
Name: aiotrino
Version: 0.1.0
Summary: ASyncIO Client for the Trino distributed SQL Engine
Home-page: https://github.com/mvanderlee/trino-python-client/tree/py3-async
Author: Michiel Van Der Lee, Trino Team
Author-email: jmt.vanderlee@gmail.com
License: Apache 2.0
Description: [![Build Status](https://github.com/mvanderlee/trino-python-client/workflows/ci/badge.svg)](https://github.com/mvanderlee/trino-python-client/actions?query=workflow%3Aci+event%3Apush+branch%3Apy3-async)
        [![Trino Slack](https://img.shields.io/static/v1?logo=slack&logoColor=959DA5&label=Slack&labelColor=333a41&message=join%20conversation&color=3AC358)](https://trino.io/slack.html)
        [![Presto: The Definitive Guide book download](https://img.shields.io/badge/Presto%3A%20The%20Definitive%20Guide-download-brightgreen)](https://www.starburstdata.com/oreilly-presto-guide-download/)
        
        # Introduction
        
        This package provides a asyncio client interface to query [Trino](https://trino.io/)
        a distributed SQL engine. It supports Python 3.6, 3.7, and pypy.
        # Installation
        
        ```
        $ pip install aiotrino
        ```
        
        # Quick Start
        
        Use the DBAPI interface to query Trino:
        
        ```python
        import aiotrino
        conn = aiotrino.dbapi.connect(
            host='localhost',
            port=8080,
            user='the-user',
            catalog='the-catalog',
            schema='the-schema',
        )
        await cur = conn.cursor()
        await cur.execute('SELECT * FROM system.runtime.nodes')
        rows = await cur.fetchall()
        await conn.close()
        ```
        Or with context manager 
        ```python
        import aiotrino
        async with aiotrino.dbapi.connect(
            host='localhost',
            port=8080,
            user='the-user',
            catalog='the-catalog',
            schema='the-schema',
        ) as conn:
            await cur = conn.cursor()
            await cur.execute('SELECT * FROM system.runtime.nodes')
            rows = await cur.fetchall()
        ```
        
        This will query the `system.runtime.nodes` system tables that shows the nodes
        in the Trino cluster.
        
        The DBAPI implementation in `aiotrino.dbapi` provides methods to retrieve fewer
        rows for example `Cursorfetchone()` or `Cursor.fetchmany()`. By default
        `Cursor.fetchmany()` fetches one row. Please set
        `trino.dbapi.Cursor.arraysize` accordingly.
        
        For backwards compatibility with PrestoSQL, override the headers at the start of your application
        ```python
        import aiotrino
        aiotrino.constants.HEADERS = aiotrino.constants.PrestoHeaders
        ```
        
        # Basic Authentication
        The `BasicAuthentication` class can be used to connect to a LDAP-configured Trino
        cluster:
        ```python
        import aiotrino
        conn = aiotrino.dbapi.connect(
            host='coordinator url',
            port=8443,
            user='the-user',
            catalog='the-catalog',
            schema='the-schema',
            http_scheme='https',
            auth=aiotrino.auth.BasicAuthentication("principal id", "password"),
        )
        cur = await conn.cursor()
        await cur.execute('SELECT * FROM system.runtime.nodes')
        rows = await cur.fetchall()
        await conn.close()
        ```
        
        # Transactions
        The client runs by default in *autocommit* mode. To enable transactions, set
        *isolation_level* to a value different than `IsolationLevel.AUTOCOMMIT`:
        
        ```python
        import aiotrino
        from aiotrino import transaction
        async with aiotrino.dbapi.connect(
            host='localhost',
            port=8080,
            user='the-user',
            catalog='the-catalog',
            schema='the-schema',
            isolation_level=transaction.IsolationLevel.REPEATABLE_READ,
        ) as conn:
          cur = await conn.cursor()
          await cur.execute('INSERT INTO sometable VALUES (1, 2, 3)')
          await cur.fetchone()
          await cur.execute('INSERT INTO sometable VALUES (4, 5, 6)')
          await cur.fetchone()
        ```
        
        The transaction is created when the first SQL statement is executed.
        `trino.dbapi.Connection.commit()` will be automatically called when the code
        exits the *with* context and the queries succeed, otherwise
        `trino.dbapi.Connection.rollback()' will be called.
        
        # Development
        
        ## Getting Started With Development
        
        Start by forking the repository and then modify the code in your fork.
        
        Clone the repository and go inside the code directory. Then you can get the
        version with `./setup.py --version`.
        
        We recommend that you use `virtualenv` for development:
        
        ```
        $ virtualenv .venv
        $ . .venv/bin/activate
        # TODO add requirements.txt: pip install -r requirements.txt
        $ pip install .
        ```
        
        For development purpose, pip can reference the code you are modifying in a
        *virtualenv*:
        
        ```
        $ pip install -e .[tests]
        ```
        
        That way, you do not need to run `pip install` again to make your changes
        applied to the *virtualenv*.
        
        When the code is ready, submit a Pull Request.
        
        ## Code Style
        
        - For Python code, adhere to PEP 8.
        - Prefer code that is readable over one that is "clever".
        - When writing a Git commit message, follow these [guidelines](https://chris.beams.io/posts/git-commit/).
        
        ## Running Tests
        
        There is a helper scripts, `run`, that provides commands to run tests.
        Type `./run tests` to run both unit and integration tests.
        
        `trino-python-client` uses [pytest](https://pytest.org/) for its tests. To run
        only unit tests, type:
        
        ```
        $ pytest tests
        ```
        
        Then you can pass options like `--pdb` or anything supported by `pytest --help`.
        
        To run the tests with different versions of Python in managed *virtualenvs*,
        use `tox` (see the configuration in `tox.ini`):
        
        ```
        $ tox
        ```
        
        To run integration tests:
        
        ```
        $ pytest integration_tests
        ```
        
        They pull a Docker image and then run a container with a Trino server:
        - the image is named `trinodb/trino:${TRINO_VERSION}`
        - the container is named `trino-python-client-tests-{uuid4()[:7]}`
        
        ## Releasing
        
        - [Set up your development environment](#Getting-Started-With-Development).
        - Change version in `trino/__init__.py`.
        - Commit and create an annotated tag (`git tag -m '' current_version`)
        - Run the following:
          ```bash
          . .venv/bin/activate &&
          pip install twine &&
          rm -rf dist/ &&
          ./setup.py sdist bdist_wheel &&
          twine upload dist/* &&
          open https://pypi.org/project/trino/ &&
          echo "Released!"
          ```
        - Push the branch and the tag (`git push upstream master current_version`)
        - Send release announcement.
        
        # Need Help?
        
        Feel free to create an issue as it make your request visible to other users and contributors.
        
        If an interactive discussion would be better or if you just want to hangout and chat about
        the Trino Python client, you can join us on the *#python-client* channel on
        [Trino Slack](https://trino.io/slack.html).
        
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Operating System :: POSIX
Classifier: Operating System :: Microsoft :: Windows
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Database :: Front-Ends
Description-Content-Type: text/markdown
Provides-Extra: all
Provides-Extra: kerberos
Provides-Extra: tests
