..  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>
   Cache <source/pyignite.cache>
   datatypes/parsers
   datatypes/cache_props
   Exceptions <source/pyignite.exceptions>
