..  Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

..      http://www.apache.org/licenses/LICENSE-2.0

..  Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

=================
API Specification
=================

The modules and subpackages listed here are the basis of a stable API
of `pyignite`, intended for end users.

.. toctree::
    :maxdepth: 1
    :caption: Modules:

    Client <source/pyignite.client>
    AioClient <source/pyignite.aio_client>
    Cache <source/pyignite.cache>
    AioCache <source/pyignite.aio_cache>
    datatypes/parsers
    datatypes/cache_props
    Exceptions <source/pyignite.exceptions>
    Monitoring and handling events <source/pyignite.monitoring>
