Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Provides Currency and Money classes for use in your Python code.

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 src
Octocat-spinner-32 .gitignore
Octocat-spinner-32 LICENSE
Octocat-spinner-32 README
Octocat-spinner-32 setup.py
Octocat-spinner-32 tox.ini
README
Overview
============================================================

The need to represent instances of money frequently arises in software
development, particularly any financial/economics software.  The
py-moneyed package provides the classes of Money and Currency to help
with that need, at a level more useful than just Python's Decimal
class, or ($DEITY forbid) the float primitive.  The package is meant
to be stand-alone and easy to either use directly, or subclass
further.  py-moneyed is BSD-licensed.

Some of the py-moneyed code was first derived from python-money
available via this URL: http://code.google.com/p/python-money/ Because
the Google Code version has been inactive since May 2008, I forked it
and modified it for my needs in 2010. Compared to python-money, major
changes in py-moneyed include separating it from Django usage,
tightening types handling in operators, a complete suite of unit
tests, PEP8 adherence, and providing a setup.py.


Usage
-----

On to the code: the Money class is instantiated with:

- An amount which can be of type string, float, or Decimal.
- A currency, which usually is specified by the three-capital-letters
  ISO currency code,e.g. USD.

For example,

::

    from moneyed.classes import Money
    sale_price_today = Money(amount='99.99', currency='USD')

The Money class also provides operators with type checking, matching
currency checking, and sensible dimensional behavior, e.g. you cannot
multiply two Money instances, nor can you add a Money instance to a
non-Money number; dividing a Money instance by another results in a
Decimal value, etc.

The Currency class is provided with a complete dictionary of ISO 4217
currencies data, each key (e.g. 'USD') mapping to a Currency instance
with ISO numeric code, canonical name in English, and countries using
the currency.  Thanks to the python-money developers for their
(possibly tedious) data-entry of the ISO codes!


Testing
--------

Unit-tests have been provided, and can be run with tox_ (recommended)
or just py.test.  

If you don't have tox installed on your system, it's a new tool to
automate running tests and deployment; install it to your global
Python environment with:

::

    sudo pip install tox
    
Then you can activate a virtualenv (any will do - by design tox will
not run from your globally-installed python), cd to the py-moneyed
source directory then run the tests at the shell:

::

    cd where/py-moneyed-source/is
    tox

The py-moneyed package has been tested with Python 2.6; it should work
with Python 2.x but I haven't tried other versions yet.  Should you
use py-moneyed with other Python versions, please let me know if you
are successful or not.


.. _tox: http://codespeak.net/tox/


Future
------

Future versions of py-moneyed may provide currency conversions, or
other capabilities, dependent on feedback and usage.
Something went wrong with that request. Please try again.