python-wepay 1.5.0
Python SDK for WePay API (third party).
License: MIT License
Keywords: wepay,payment,credit card

==============================
python-wepay: Python WePay SDK
==============================

.. image:: https://readthedocs.org/projects/python-wepay/badge/?version=latest
   :target: https://readthedocs.org/projects/python-wepay/?badge=latest
   :alt: Documentation Status

.. image:: https://img.shields.io/pypi/v/python-wepay.svg
   :target: https://pypi.python.org/pypi/python-wepay/
   :alt: Latest Version

.. image:: https://img.shields.io/pypi/dm/python-wepay.svg
   :target: https://pypi.python.org/pypi/python-wepay/
   :alt: Number of PyPI downloads

.. image:: https://landscape.io/github/lehins/python-wepay/master/landscape.png
   :target: https://landscape.io/github/lehins/python-wepay/master
   :alt: Code Health

.. image:: https://img.shields.io/coveralls/lehins/python-wepay.svg
   :target: https://coveralls.io/r/lehins/python-wepay
   :alt: Tests Coverage

.. image:: https://travis-ci.org/lehins/python-wepay.svg?branch=master   
   :target: https://travis-ci.org/lehins/python-wepay
   :alt: Travis-CI


Features
--------

* Make API calls in a very natural pythonic way, ex:

.. code-block:: python

    >>> api = WePay(production=False, access_token='STAGE_243...')
    >>> response = api.account.create("name", "description", type='nonprofit')
    >>> account_id = response['account_id']
    >>> callback_uri = "https://example.com/ipn/account/%s" % account_id
    >>> response = api.account.modify(account_id, callback_uri=callback_uri)
    >>> api.preapproval.create("short description", "daily", amount=45.5, account_id=account_id)
    {'preapproval_id': 619202, 'preapproval_uri': 'https://stage.wepay.com/api/preapproval/619202'}

* Validation of all required and optional parameters to each one of the calls.
* Very easy construction of batch calls, simply by passing ``batch_mode=True`` to
  a call, ex:

.. code-block:: python

    >>> call1 = api.checkout.create(1234, short_description, type, amount, batch_mode=True)
    >>> call2 = api.withdrawal.find(1235, sort_order='ASC', access_token='access_token_for_other_account', batch_mode=True)
    >>> response = api.batch.create(client_id, client_secret, [call1, call2])


About
-----

This package started as a part of `Django WePay Application
<https://github.com/lehins/django-wepay>`_, but I soon realized it could be
useful to other developers in Python community that do not use `Django
<https://djangoproject.com>`_. Originally it meant to be an extension of an
official `Python WePay SDK <https://github.com/wepay/Python-SDK>`_, but instead
it became a replacement. This package is also listed as a `third party Python
SDK on WePay <https://www.wepay.com/developer/resources/sdks>`_.

Status
------

Production.

Requirements
------------

* Python >= 2.7 or >= 3.2
* Registered Application with WePay `production <https://wepay.com>`_ site or
  it's `development <https://stage.wepay.com>`_ clone.
* `six <https://pypi.python.org/pypi/six>`_.
* `requests <http://docs.python-requests.org/en/latest/>`_ (optional):
* `mock <https://pypi.python.org/pypi/mock>`_ (optional, for tests only)

Installation
------------
::

    pip install python-wepay


Documentation
-------------

http://python-wepay.readthedocs.org/en/latest/index.html

License
-------

MIT licensed. See the bundled `LICENSE <https://github.com/lehins/python-wepay/blob/master/LICENSE>`_ file for more details.


Changelog
=========

1.5.0
-----

* added ``/account/membership/`` calls.
* added ``/user/mfa/`` calls.
* New API version 2015-09-09 changes are reflected in this SDK version:

  * ``/withrawal/create`` is deprecated.

* New API version 2015-08-15 changes are reflected in this SDK version:

  * ``/account/create`` now accepts both old and new style params.

* removed deprecated call ``/user/resend_confirmation``.
* ``/accout/create`` and ``/account/modify`` now accept ``country_options`` and
  ``fee_schedule_slot`` params
* added restricted ``credit_card/transfer`` call.

1.4.4
-----

* renamed ``user.resend_confirmation`` call to ``user.send_confirmation``.

1.4.3
-----

* improved documentation.

1.4.0
-----

* Removed backward compatibility with official `Python WePay SDK <https://github.com/wepay/Python-SDK>`_.
* introduced ``WePayHTTPError``, which is a base exception for both ``WePayClientError`` and ``WePayServerError``
* added ``cached_property`` decorator.
* changed they way calls are initialized. This change doesn't affect the way calls are made.

1.3.5
-----

* Fixed and improved error handling, new exceptions: ``WePayClientError`` and ``WePayServerError``.

1.3.4
-----

* Connection ``timeout`` can be specified on per call basis.

1.3.0
-----

* Python 3 compatible
* Calls are made using `requests <http://docs.python-requests.org/en/latest/>`_
  library by default (if installed), falls back to `urllib
  <https://docs.python.org/3/library/urllib.html#module-urllib>`_ if `requests`
  are not installed or if ``WePay`` is initialized with
  ``use_requests=False``.
* ``WePayConnectionError`` is raised
  in case there is a problem connecting to WePay server, ex. timeout.
* Addition of a full test suit.
* Minor:

  * 'original_ip' and 'original_device' params are now optional in
    `/credit_card/create`.
  * ``silent`` mode is more flexible.
  * Moved ``SubscriptionPlan`` and ``SubscriptionCharge`` to their own modules.
  * Moved ``WePayWarning`` over to ``wepay.exceptions`` module.

1.2.0
-----

* New API version 2014-01-08 changes are reflected in this SDK version:

  * implemented `/user/register` and `user/resend_confirmation` calls.
  * added `/account/get_update_uri` and `/account/get_reserve_details`
  * depricated `/account/add_bank`, `/account/balance`, `/account/get_tax`
    and `/account/set_tax` calls.

* restructured SDK in such a way that all API objects are separate classes, so
  as an example, if we have a WePay instance ``api = WePay()`` and we want to
  make a `/account/find` call, it will look like this ``api.account.find()``
  instead of ``api.account_find()`` (notice **.** instead of **_**), although in
  this version both are equivalent, latter one is depricated and will be removed
  in version 1.3. Despite these changes lookup calls will be the same, ex.
  ``api.account(12345)``.

* Added flexibility to use different API version per call basis. So it is now
  possible to make a depricated call like this: ``api.account.balance(1234,
  api_version='2011-01-15')``

* added ``batch_reference_id`` keyword argument to each call that accepts
  ``batch_mode``


1.1.2
-----

* Added required arguments to `/credit_card/create` call:

  * original_ip
  * original_device

1.1.0
-----

* Added subscription calls:

  * `/subscription_plan`
  * `/subscription`
  * `/subscription_charge`

* Few bug and spelling fixes.

1.0.0
-----

* Initial release