2019-12-25 23:08:20 +04:00
|
|
|
Keep track of your piggy bank.
|
|
|
|
|
|
|
|
Every time you put coins in or take them out of your piggy bank, write here down
|
2019-12-29 22:40:50 +04:00
|
|
|
how much did you put or take. So you won't have to spend time counting them when
|
2019-12-25 23:08:20 +04:00
|
|
|
you decide to take them all out.
|
|
|
|
|
|
|
|
Yes, only coins, no banknots. Well, you actually can easily add support for
|
|
|
|
banknots, but table will become indeed wide.
|
|
|
|
|
2019-12-29 22:40:50 +04:00
|
|
|
# Backstory
|
|
|
|
|
|
|
|
Many years ago I wrote a little script to store info on how much coins I have
|
|
|
|
in my piggy bank. It used SQLite 3 database for it and was hardcoded to rubles.
|
2020-06-05 03:49:23 +04:00
|
|
|
Why had I use whole SQL database? That was the first time I tried SQLite in
|
|
|
|
Python.
|
2019-12-29 22:40:50 +04:00
|
|
|
|
2020-06-05 03:49:23 +04:00
|
|
|
Once I came up with an idea that it would be good to learn on how to make
|
2019-12-29 22:40:50 +04:00
|
|
|
packages for Python. And with no better ideas I took my piggy bank script to be
|
|
|
|
rewritten to support any currency. Database was thrown away and its place was
|
|
|
|
took by a simple text format.
|
|
|
|
|
2019-12-25 23:08:20 +04:00
|
|
|
# Usage
|
|
|
|
|
|
|
|
This is a CLI program that is broken down to three separate programs:
|
|
|
|
|
|
|
|
- `piggybank-put` — puts coins in a piggy bank and create a new one if
|
2020-06-06 03:00:36 +04:00
|
|
|
there is no such file;
|
2019-12-25 23:08:20 +04:00
|
|
|
- `piggybank-take` — takes coins from an existsing piggy bank file;
|
|
|
|
- `piggybank-show` — shows summarised information on a piggy bank and,
|
2020-06-06 03:00:36 +04:00
|
|
|
optionally, print a list of transactions.
|
2019-12-25 23:08:20 +04:00
|
|
|
|
|
|
|
## Common flags
|
|
|
|
|
|
|
|
```bash
|
2020-06-05 03:49:23 +04:00
|
|
|
piggybank-* [(-h | --help) | (-v | --version) | (-L | --list-currencies)
|
2020-06-06 03:00:36 +04:00
|
|
|
| --set-default-currency]
|
2019-12-25 23:08:20 +04:00
|
|
|
```
|
|
|
|
|
2020-06-05 03:49:23 +04:00
|
|
|
These flags are used with every sub-program.
|
|
|
|
|
|
|
|
`--help` to show help.
|
2019-12-29 22:40:50 +04:00
|
|
|
|
|
|
|
`--version` to show version of program.
|
|
|
|
|
|
|
|
`--list-currencies` to show what currencies supported and which one is default.
|
2019-12-25 23:08:20 +04:00
|
|
|
|
2020-06-05 03:49:23 +04:00
|
|
|
`--set-default-currency` to set a currency of your choice as default one.
|
|
|
|
|
2019-12-25 23:08:20 +04:00
|
|
|
## How to put coins in
|
|
|
|
|
|
|
|
```bash
|
2020-06-05 03:49:23 +04:00
|
|
|
piggybank-put [-r | --reverse] COINS in FILE of CURRENCY
|
2019-12-25 23:08:20 +04:00
|
|
|
```
|
|
|
|
|
2019-12-29 22:40:50 +04:00
|
|
|
`--reverse` flag reverses the order of coins. By default they come from least
|
2019-12-25 23:08:20 +04:00
|
|
|
significant face value to the most significant one and as stated above being
|
|
|
|
complemented from left so a set shorter than number of coins in a currency,
|
2020-06-05 03:49:23 +04:00
|
|
|
e.g. 5 8 4 will be interpreted as 0 0 0 5 8 4. And this flag will make it
|
|
|
|
to be interpreted as 5 8 4 0 0 0. It is convenient if you want to add only
|
|
|
|
coins of low face value (e.g. cents).
|
|
|
|
|
|
|
|
`COINS` is a set of coins' counts separated with space or comma character. For
|
|
|
|
example: 0 5 0 4 6 7. By default trailing zeroes will be added from the left.
|
|
|
|
So if you wrote something like 6 0 5 12 then it will be complemented to
|
|
|
|
0 0 6 0 5 12 if currency has 6 coins.
|
2019-12-25 23:08:20 +04:00
|
|
|
|
2020-06-05 03:49:23 +04:00
|
|
|
`FILE` is a name of a piggy bank file wich may not have a .pb extension at the
|
|
|
|
end, it will be added automatically.
|
|
|
|
|
|
|
|
`CURRENCY` specifies the currency of a new piggy bank. It will not change
|
|
|
|
currency of an existing piggy bank. ISO standard is used, e.g. EUR.
|
|
|
|
Case-insensitive.
|
2019-12-25 23:08:20 +04:00
|
|
|
|
|
|
|
### Examples:
|
|
|
|
|
2019-12-29 22:40:50 +04:00
|
|
|
```bash
|
2020-06-05 03:49:23 +04:00
|
|
|
piggybank-put 7 4 3 0 5 in example.pb of EUR
|
|
|
|
piggybank-put -r 0 4 6 in example
|
2019-12-29 22:40:50 +04:00
|
|
|
```
|
2019-12-25 23:08:20 +04:00
|
|
|
|
|
|
|
## How to take coins out
|
|
|
|
|
|
|
|
```bash
|
2020-06-05 03:49:23 +04:00
|
|
|
piggybank-take [-r | --reverse] COINS in FILE
|
2019-12-25 23:08:20 +04:00
|
|
|
```
|
|
|
|
|
2020-06-05 03:49:23 +04:00
|
|
|
All the parameters are explained above.
|
2019-12-25 23:08:20 +04:00
|
|
|
|
|
|
|
### Examples:
|
|
|
|
|
|
|
|
```bash
|
2020-06-05 03:49:23 +04:00
|
|
|
piggybank-take -r 0 0 4 from example.pb
|
2019-12-25 23:08:20 +04:00
|
|
|
```
|
|
|
|
|
2020-06-06 03:00:36 +04:00
|
|
|
## How to see what you have in there
|
2019-12-25 23:08:20 +04:00
|
|
|
|
2019-12-29 22:40:50 +04:00
|
|
|
```bash
|
2020-06-05 03:49:23 +04:00
|
|
|
piggybank-show FILE [ with (t | transactions)]
|
2019-12-29 22:40:50 +04:00
|
|
|
```
|
2019-12-25 23:08:20 +04:00
|
|
|
|
2020-06-05 03:49:23 +04:00
|
|
|
It will print a summary table of what is stored in a piggy bank.
|
|
|
|
|
|
|
|
`with t(ransactions)` will print also a table of all transactions stored in a
|
|
|
|
file.
|
2019-12-25 23:08:20 +04:00
|
|
|
|
|
|
|
### Examples:
|
|
|
|
|
|
|
|
```bash
|
2020-06-05 03:49:23 +04:00
|
|
|
piggybank-show example.pb with t
|
2020-06-06 03:00:36 +04:00
|
|
|
```
|
|
|
|
|
|
|
|
# Configuration
|
|
|
|
|
|
|
|
Configuration file `piggybank.conf` is stored in directory specified by
|
|
|
|
`$XDG_CONFIG_HOME` environment variable or, if it isn't set, in `$HOME/.config`
|
|
|
|
on Linux and in `%APPDATA%` on Windows.
|
|
|
|
|
|
|
|
By default it has following content:
|
|
|
|
|
|
|
|
default-currency = SRUB
|
|
|
|
|
|
|
|
Aside from `default-currency` there is also a `currency.*` parameter. `*` is a
|
|
|
|
currency's ISO code, e.g. `currency.RUB`, `currency.USD`, `currency.EUR` etc.
|
|
|
|
This parameter allows you to add a currency needed for you, but not presented in
|
|
|
|
program.
|
|
|
|
|
|
|
|
Currency is defined following way:
|
|
|
|
|
|
|
|
currency.ISO = ISO;NAME;DESCRIPTION;COINS_COUNT;COINS_NAME;FACE_VALUES
|
|
|
|
|
|
|
|
That is best described with an example. Here it is:
|
|
|
|
|
|
|
|
currency.SRUB = SRUB;Russian ruble (shortened);Russian Federation. Excluding coins of 1 and 5 kopek;6;10к.,50к.,1₽,2₽,5₽,10₽;10,50,100,200,500,1000
|
|
|
|
|
|
|
|
Yes, long and clunky way... May be I'll come up with something better.
|