Author: Plone Foundation



* `Documentation @ <>`_
* `Source code @ GitHub <>`_
* `Issues @ GitHub <>`_
* `Continuous Integration @ Travis CI <>`_
* `Code Coverage @ <>`_

.. topic:: Overview

    The ``plone.api`` is an elegant and simple API, built for humans wishing
    to develop with Plone.

    It comes with *cookbook*-like documentation and step-by-step instructions
    for doing common development tasks in Plone. Recipes try to assume the user
    does not have extensive knowledge about Plone internals.

The intention of this package is to provide clear API methods for Plone
functionality which may be confusing or difficult to access. As the underlying
code improves some API methods may be deprecated and the documentation here
will be updated to show how to use the improved code (even if it means not
using ``plone.api``)

Some parts of the documentation do not use *plone.api* methods directly, but
simply provide guidance on achieving a task using Plone's internal API. For
example, using the portal catalog (see 'Find content objects').

The intention is to cover 20% of the tasks any Plone developer does 80% of the
time. By keeping everything in one place, the API stays introspectable and
discoverable, important aspects of being Pythonic.

.. note::

    This package is stable and used in production, but from time to time
    changes will be made to the API. Additional api methods may be introduced
    in minor versions (1.1 -> 1.2). Backward-incompatible changes to the API
    will be restricted to major versions (1.x -> 2.x).


1.1.0 (2013-10-12)

- List supported Plone versions in

- Add Plone 4.0 and 4.1 under Python 2.6 to the testing matrix.

- Do not run Plone 4.3 with Python 2.6 and Plone 4.2 with Python 2.7 -- this
  reduces the number of builds but keeps basically the same coverage.

- Only upload coverage info to on one job per build, not on all

- Upgrade zc.buildout to 1.7.1 (was 1.6.3)

- Use Plone 4.3 by default (was 4.2)

1.1.0-rc.1 (2013-10-10)

- Fix README.rst so it renders correctly on PyPI.

- Use redirects.

- Add file.

1.0.0-rc.3 (2013-10-09)

- Packaging issues.

1.0.0-rc.2 (2013-10-09)

- Proof-read the docs, improved grammar and wording.

- Add plone.recipe.codeanalysis to our buildout.

- Make all assertRaise() calls use the `with` keyword.

- Amend user.get method to accept a userid parameter, refs #112.
  [cewing, xiru, winstonf88]

  .. note::
    This change fixes a bug in the earlier implementation that could cause
    errors in some situations. This situation will only arise if the userid and
    username for a user are not the same. If membrane is being used for content-
    based user objects, or if email-as-login is enabled *and* a user has changed
    their email address this will be the case. In the previous implementation
    the username parameter was implicitly being treated as userid. The new
    implementation does not do so. If consumer code is relying on this bug and
    passing userid, and if that code uses the username parameter as a keyword
    parameter, then lookup will fail. In all other cases, there should be no

- Add api.env.debug_mode() and api.env.test_mode(), refs #125.

- Move most of text from docs/index.rst to README.rst so its also visible on
  PyPI and GitHub.

- Deprecate plone.api on ReadTheDocs and redirect to, refs #130.
  [wormj, zupo]

- Add a new `make coverage` command and add support for posting coverage to

- Make api.content.create() also print out the underlyi