forked from py-moneyed/py-moneyed
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
86 lines (60 loc) · 2.81 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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.