Developer Information
=====================

Type Annotations
----------------

Python type annotations / hints for the base Libcloud compute API have been
added in v2.8.0.

The goal behind type annotations is to make developer lives easier by
introducing optional static typing for Python programs.

This allows you to catch bugs and issues which are related to variable types
earlier and faster (aka when you run ``mypy`` locally either manually or
integrated in your editor / IDE and also as part of you CI/CD build
pipeline).

An example of how to use type annotations correctly is shown below.

.. literalinclude:: /examples/compute/example_compute.py

If you reference an invalid object attribute or a method, you would
see an error similar to the one beloe when running mypy:

.. sourcecode:: python

    ...
    print(nodes[0].name)
    print(nodes[0].invalid)
    print(nodes[0].rebbot())
    print(nodes[0].reboot(foo='invalid'))
    ...

.. sourcecode:: bash

    $ mypy --no-incremental example_compute.py
    example_compute.py:41: error: "Node" has no attribute "invalid"
    example_compute.py:42: error: "Node" has no attribute "rebbot"; maybe "reboot"?
    example_compute.py:43: error: Unexpected keyword argument "foo" for "reboot" of "Node"

If you are using driver methods which are not part of the Libcloud standard
API, you need to use ``cast()`` method as shown below to cast the driver class
to the correct type. If you don't do that, ``mypy`` will only be aware of the
methods which are part of the Libcloud base compute API (aka
``BaseNodeDriver`` class).

This is needed because of how Libcloud utilizes meta programming for the
``get_driver()`` and related methods (there is no other way without writing
a mypy plugin to achieve that).

.. _mailing-lists:

Mailing Lists
-------------

All of the communication about Libcloud development happens on our mailing
lists.

* `announce@libcloud.apache.org`_ - Moderated and low volume mailing list which
  is only used for distributing important project announcements and updates.
  (`announce-archive <https://mail-archives.apache.org/mod_mbox/libcloud-announce/>`_)
* `users@libcloud.apache.org`_ - Mailing list for general talk about Libcloud
  and other off-topic things
  (`users-archive <https://mail-archives.apache.org/mod_mbox/libcloud-users/>`_)
* `dev@libcloud.apache.org`_ - General mailing list for developers
  (`dev-archive <https://mail-archives.apache.org/mod_mbox/libcloud-dev/>`_)
* `notifications@libcloud.apache.org`_ - Commits messages and other automatically
  generated notifications go to this mailing list.
  Keep in mind that unlike the others, this mailing list is fairly noisy.
  (`notifications-archive <https://mail-archives.apache.org/mod_mbox/libcloud-notifications/>`_, `commits-archive <https://mail-archives.apache.org/mod_mbox/libcloud-commits/>`_)

Archive of old incubator mailing lists:

* `incubator-libcloud`_
* `incubator-libcloud-commits`_

.. _irc:

IRC
---

* #libcloud on Freenode

.. _issue-tracker:

Issue Tracker
-------------

For bug and issue tracking we use Github issues located at
https://github.com/apache/libcloud/issues.

Testing
-------

For information how to run the tests and how to generate the test coverage
report, please see the :doc:`Testing page </testing>`.

.. _ci-cd:

Continuous Integration
----------------------

For continuous integration we use Travis-CI. You can find build reports on the
following links:

* https://travis-ci.org/apache/libcloud

Travis-CI builder is also integrated with Github which means that if you open a
pull request there, Travis-CI will automatically build it.

If you want to validate the build before raising the PR, Travis-CI can be enabled for personal
accounts and branches separately.

.. _code-coverage:

Test Coverage
-------------

Test coverage report is automatically generated after every push and can be
found at https://codecov.io/github/apache/libcloud?branch=trunk.

.. _`announce@libcloud.apache.org`: mailto:announce-subscribe@libcloud.apache.org
.. _`users@libcloud.apache.org`: mailto:users-subscribe@libcloud.apache.org
.. _`dev@libcloud.apache.org`: mailto:dev-subscribe@libcloud.apache.org
.. _`notifications@libcloud.apache.org`: mailto:notifications-subscribe@libcloud.apache.org
.. _`incubator-libcloud`: http://mail-archives.apache.org/mod_mbox/incubator-libcloud/
.. _`incubator-libcloud-commits`: http://mail-archives.apache.org/mod_mbox/incubator-libcloud-commits/
