From 03f9c609d116565c39f118cbf4badb0757b9ac01 Mon Sep 17 00:00:00 2001 From: Dean Jackson Date: Sat, 13 Jan 2018 18:55:11 +0100 Subject: [PATCH] Add separate setting for currency decimal places --- CHANGELOG.md | 7 ++ ...edworkflow => Convert-3.5.1.alfredworkflow | Bin 278585 -> 278726 bytes README.md | 21 ++-- docs/currencies.md | 104 ++++++++++++------ src/active_currencies.txt.default | 2 +- src/config.py | 46 ++++---- src/convert.py | 20 +++- src/info.plist | 4 +- 8 files changed, 130 insertions(+), 74 deletions(-) rename Convert-3.5.alfredworkflow => Convert-3.5.1.alfredworkflow (87%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52a8733..6ebc4e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ Changelog ========= +### [3.5.1][v3.5.1] ### + +Released 2018-01-13 + +- Add `CURRENCY_DECIMAL_PLACES` setting to provide alternate number of decimal places for currency conversions. + ### [3.5][v3.5] ### @@ -168,4 +174,5 @@ Released 2014-08-09. [v3.3.1]: https://github.com/deanishe/alfred-convert/releases/tag/v3.3.1 [v3.4]: https://github.com/deanishe/alfred-convert/releases/tag/v3.4 [v3.5]: https://github.com/deanishe/alfred-convert/releases/tag/v3.5 +[v3.5.1]: https://github.com/deanishe/alfred-convert/releases/tag/v3.5.1 [openx]: https://openexchangerates.org/ \ No newline at end of file diff --git a/Convert-3.5.alfredworkflow b/Convert-3.5.1.alfredworkflow similarity index 87% rename from Convert-3.5.alfredworkflow rename to Convert-3.5.1.alfredworkflow index 4c8c4e01c8e68e55a2e00f89b534ae0433458210..4aa8852d9986293ddcf7dddd6f4e81b492f3a109 100644 GIT binary patch delta 26733 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 MK&xVbBCo*z2a%jjiU0rr delta 26587 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 diff --git a/README.md b/README.md index 0edf820..87e9cb9 100644 --- a/README.md +++ b/README.md @@ -90,15 +90,16 @@ The workflow is configured via the configuration sheet (`[𝒙]`) in Alfred Pref Basic configuration is performed in the configuration sheet: -| Option | Meaning | -|-----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------| -| `APP_KEY` | API key for [openexchangerates.org][openx]. | -| `COPY_UNIT` | Include unit when copying conversion result. Any value but `0` or empty turns this option on. | -| `DECIMAL_PLACES` | Number of decimal places to show in results. | -| `DECIMAL_SEPARATOR` | Character to separate whole numbers and decimal fractions. Used for parsing input and generating output. | -| `DYNAMIC_DECIMALS` | Dynamically increase the number of decimal places (up to 10) so that the result is non-zero. Any value but `0` or empty turns this option on. | -| `THOUSANDS_SEPARATOR` | Character to delimit thousands Used for parsing input and generating output. | -| `UPDATE_INTERVAL` | How often (in minutes) to update currency exchange rates. | +| Option | Meaning | +|---------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------| +| `APP_KEY` | API key for [openexchangerates.org][openx]. | +| `COPY_UNIT` | Include unit when copying conversion result. Any value but `0` or empty turns this option on. | +| `CURRENCY_DECIMAL_PLACES` | Overrides the default `DECIMAL_PLACES` setting for currency conversions. | +| `DECIMAL_PLACES` | Number of decimal places to show in results. | +| `DECIMAL_SEPARATOR` | Character to separate whole numbers and decimal fractions. Used for parsing input and generating output. | +| `DYNAMIC_DECIMALS` | Dynamically increase the number of decimal places (up to 10) so that the result is non-zero. Any value but `0` or empty turns this option on. | +| `THOUSANDS_SEPARATOR` | Character to delimit thousands Used for parsing input and generating output. | +| `UPDATE_INTERVAL` | How often (in minutes) to update currency exchange rates. | #### Active currencies #### @@ -156,6 +157,7 @@ See [CHANGELOG][changelog] for more information. | Release | Date | |-----------------|----------------| +| [3.5.1][v3.5.1] | 2018-01-13 | | [3.5][v3.5] | 2018-01-12 | | [3.4][v3.4] | 2017-12-26 | | [3.3.1][v3.3.1] | 2017-11-21 | @@ -219,6 +221,7 @@ All other code/media are released under the [MIT Licence][mit]. [v3.3.1]: https://github.com/deanishe/alfred-convert/releases/tag/v3.3.1 [v3.4]: https://github.com/deanishe/alfred-convert/releases/tag/v3.4 [v3.5]: https://github.com/deanishe/alfred-convert/releases/tag/v3.5 +[v3.5.1]: https://github.com/deanishe/alfred-convert/releases/tag/v3.5.1 [cryptocompare]: https://www.cryptocompare.com/ [openx]: https://openexchangerates.org/ [openx-free]: https://openexchangerates.org/signup/free diff --git a/docs/currencies.md b/docs/currencies.md index a0beb8b..730ac56 100644 --- a/docs/currencies.md +++ b/docs/currencies.md @@ -2,9 +2,16 @@ Supported Currencies ==================== + + - [Fiat currencies](#fiat-currencies) - [Cryptocurrencies](#cryptocurrencies) +- [Unsupported currencies](#unsupported-currencies) + + + + Fiat currencies --------------- @@ -187,12 +194,10 @@ The following fiat currencies are supported by the workflow: | XAU | Gold | | XBA | Bond Markets Unit European Composite Unit | | XBB | Bond Markets Unit European Monetary Unit | -| XBC | Bond Markets Unit European Unit of Account 9 | | XBD | Bond Markets Unit European Unit of Account 17 | | XCD | East Caribbean Dollar | | XDR | SDR (Special Drawing Right) | | XOF | CFA Franc BCEAO | -| XPD | Palladium | | XPF | CFP Franc | | XPT | Platinum | | XSU | Sucre | @@ -205,6 +210,7 @@ The following fiat currencies are supported by the workflow: + Cryptocurrencies ---------------- @@ -241,7 +247,6 @@ The following cryptocurrencies are supported by the workflow: | AHT | Ahoolee | | AIB | AdvancedInternetBlock | | AIR | AirToken | -| AIR* | Aircoin | | ALC | Arab League Coin | | ALEX | Alexandrite | | ALF | AlphaCoin | @@ -265,7 +270,6 @@ The following cryptocurrencies are supported by the workflow: | APT | Aptcoin | | APX | Apx | | ARB | Arbit Coin | -| ARC* | ArcticCoin | | ARCH | ArchCoin | | ARCO | AquariusCoin | | ARDR | Ardor | @@ -279,7 +283,6 @@ The following cryptocurrencies are supported by the workflow: | ASAFE | Allsafe | | ASN | Ascension Coin | | AST | AirSwap | -| AST* | Astral | | ATB | ATB coin | | ATCC | ATC Coin | | ATL | ATLANT | @@ -347,12 +350,10 @@ The following cryptocurrencies are supported by the workflow: | BM | BitMoon | | BMC | Blackmoon Crypto | | BNB | Binance Coin | -| BNB* | Boats and Bitches | | BNC | Benjacoin | | BNT | Bancor Network Token | | BNX | BnrtxCoin | | BOAT | Doubloon | -| BOB | Bob Coin | | BOLI | BolivarCoin | | BOMB | BombCoin | | BON | BonesCoin | @@ -374,7 +375,6 @@ The following cryptocurrencies are supported by the workflow: | BRX | Breakout Stake | | BS | BlackShadowCoin | | BSC | BowsCoin | -| BSD | BitSend | | BST | BitStone | | BSTAR | Blackstar | | BSTK | BattleStake | @@ -389,17 +389,14 @@ The following cryptocurrencies are supported by the workflow: | BTD | Bitcloud | | BTE | ByteCoin | | BTG | Bitcoin Gold | -| BTG* | BitGem | | BTLC | BitLuckCoin | | BTM | BitMark | -| BTM* | Bytom | | BTMI | BitMiles | | BTPL | Bitcoin Planet | | BTQ | BitQuark | | BTS | Bitshares | | BTTF | Coin to the Future | | BTX | Bitcore | -| BTX* | BitcoinTX | | BTZ | BitzCoin | | BUCKS | SwagBucks | | BUK | CryptoBuk | @@ -421,7 +418,6 @@ The following cryptocurrencies are supported by the workflow: | CARBON | Carboncoin | | CASH | CashCoin | | CAT | BlockCAT | -| CAT* | BitClave | | CBD | CBD Crystals | | CBX | CryptoBullion | | CC | CyberCoin | @@ -474,7 +470,6 @@ The following cryptocurrencies are supported by the workflow: | CNL | ConcealCoin | | CNMT | Coinomat | | CNO | Coino | -| CNT | Centurion | | CNX | Cryptonex | | COB | Cobinhood | | COC | Community Coin | @@ -489,7 +484,6 @@ The following cryptocurrencies are supported by the workflow: | CORE | Core Group Asset | | COSS | COSS | | COV | Covesting | -| COV* | CovenCoin | | COVAL | Circuits of Value | | COX | CobraCoin | | CPC | CapriCoin | @@ -500,7 +494,6 @@ The following cryptocurrencies are supported by the workflow: | CRAIG | CraigsCoin | | CRAVE | CraveCoin | | CRBIT | Creditbit | -| CRC | CraftCoin | | CRE | Credits | | CREA | CreativeChain | | CREVA | Creva Coin | @@ -752,7 +745,6 @@ The following cryptocurrencies are supported by the workflow: | GGS | Gilgam | | GHC | GhostCoin | | GHOUL | Ghoul Coin | -| GHS | Giga Hash | | GIFT | GiftNet | | GIG | GigCoin | | GIM | Gimli | @@ -798,7 +790,6 @@ The following cryptocurrencies are supported by the workflow: | GUNS | GeoFunders | | GUP | Guppy | | GXC | Gx Coin | -| GXC* | GenXCoin | | HAC | Hackspace Capital | | HAL | Halcyon | | HALLO | Halloween Coin | @@ -908,7 +899,6 @@ The following cryptocurrencies are supported by the workflow: | KLC | KiloCoin | | KMD | Komodo | | KNC | Kyber Network | -| KNC* | Khancoin | | KOBO | KoboCoin | | KOLION | Kolion | | KORE | Kore | @@ -974,7 +964,6 @@ The following cryptocurrencies are supported by the workflow: | LYC | LycanCoin | | M1 | SupplyShock | | MAC | MachineCoin | -| MAD | SatoshiMadness | | MAID | MaidSafe Coin | | MANA | Decentraland | | MAPC | MapCoin | @@ -983,7 +972,6 @@ The following cryptocurrencies are supported by the workflow: | MARV | Marvelous | | MARX | MarxCoin | | MARYJ | MaryJane Coin | -| MAT* | Manet Coin | | MAX | MaxCoin | | MAY | Theresa May Coin | | MBI | Monster Byte Inc | @@ -1062,7 +1050,6 @@ The following cryptocurrencies are supported by the workflow: | MYB | MyBit | | MYC | MayaCoin | | MYST | Mysterium | -| MYST* | MysteryCoin | | MZC | MazaCoin | | N7 | Number7 | | NAMO | NamoCoin | @@ -1083,7 +1070,6 @@ The following cryptocurrencies are supported by the workflow: | NEO | NEO | | NEOS | NeosCoin | | NET | NetCoin | -| NET* | Nimiq Exchange Token | | NETC | NetworkCoin | | NETKO | Netko | | NEU | NeuCoin | @@ -1170,7 +1156,6 @@ The following cryptocurrencies are supported by the workflow: | PCS | Pabyosi Coin | | PDC | Project Decorum | | PEC | PeaceCoin | -| PEN | PenCoin | | PEPECASH | Pepe Cash | | PEX | PosEx | | PGL | Prospectors | @@ -1225,7 +1210,6 @@ The following cryptocurrencies are supported by the workflow: | PTA | PentaCoin | | PTC | PesetaCoin | | PTOY | Patientory | -| PTS* | Protoshares | | PULSE | Pulse | | PUPA | PupaCoin | | PUT | PutinCoin | @@ -1263,7 +1247,6 @@ The following cryptocurrencies are supported by the workflow: | RC | Russiacoin | | RCC | Reality Clash | | RCN | Ripio | -| RCN* | RCoin | | RCX | RedCrowCoin | | RDD | ReddCoin | | RDN | RadonPay | @@ -1311,10 +1294,8 @@ The following cryptocurrencies are supported by the workflow: | SAN | Santiment | | SAND | BeachCoin | | SANDG | Save and Gain | -| SAR | SARCoin | | SAT2 | Saturn2Coin | | SBC | StableCoin | -| SBD | Steem Backed Dollars | | SC | Siacoin | | SCASH | SpaceCash | | SCL | Social Nexus | @@ -1351,7 +1332,6 @@ The following cryptocurrencies are supported by the workflow: | SLING | Sling Coin | | SLM | SlimCoin | | SLR | SolarCoin | -| SLS | SaluS | | SMAC | Social Media Coin | | SMART | SmartCash | | SMC | SmartCoin | @@ -1393,10 +1373,8 @@ The following cryptocurrencies are supported by the workflow: | SSTC | SunShotCoin | | SSV | SSVCoin | | STA | Starta | -| STA* | Stakers | | STALIN | StalinCoin | | STAR | Starbase | -| STAR* | StarCoin | | START | StartCoin | | STCN | Stakecoin | | STEEM | Steem | @@ -1404,14 +1382,12 @@ The following cryptocurrencies are supported by the workflow: | STHR | Stakerush | | STO | Save The Ocean | | STORJ | Storj | -| STR* | StarCoin | | STRAT | Stratis | | STS | STRESScoin | | STU | BitJob | | STV | Sativa Coin | | STX | Stox | | SUB | Substratum Network | -| SUB* | Subscriptio | | SUMO | Sumokoin | | SUP | Supcoin | | SUPER | SuperCoin | @@ -1579,7 +1555,6 @@ The following cryptocurrencies are supported by the workflow: | WOP | WorldPay | | WORM | HealthyWorm | | WRC | Worldcore | -| WRC* | WarCoin | | WRT | WRTcoin | | WSX | WeAreSatoshi | | WTC | Waltonchain | @@ -1618,7 +1593,6 @@ The following cryptocurrencies are supported by the workflow: | XGR | GoldReserve | | XHI | HiCoin | | XID | Sphre AIR | -| XID* | International Diamond Coin | | XIOS | Xios | | XJO | JouleCoin | | XLB | LibertyCoin | @@ -1694,7 +1668,6 @@ The following cryptocurrencies are supported by the workflow: | ZOI | Zoin | | ZOOM | ZoomCoin | | ZRC | ZrCoin | -| ZRC* | ZiftrCoin | | ZRX | 0x | | ZSC | Zeusshield | | ZSE | ZSEcoin | @@ -1703,5 +1676,66 @@ The following cryptocurrencies are supported by the workflow: | ZYD | ZayedCoin | + +Unsupported currencies +---------------------- + +The following (crypto)currencies are unsupported. Some have symbols that conflict with other currencies, and others cannot be understood by the `pint` library as they start with digits or end with `*`. + +| Symbol | Name | +|--------|----------------------------------------------| +| 007 | 007 coin | +| 1337 | 1337 | +| 1CR | 1Credit | +| 1ST | FirstBlood | +| 2015 | 2015 coin | +| 2BACCO | 2BACCO Coin | +| 2GIVE | 2GiveCoin | +| 32BIT | 32Bitcoin | +| 365 | 365Coin | +| 404 | 404Coin | +| 42 | 42 Coin | +| 4CHN | ChanCoin | +| 611 | SixEleven | +| 808 | 808 | +| 888 | Octocoin | +| 8BIT | 8BIT Coin | +| 8BT | 8 Circuit Studios | +| AIR* | Aircoin | +| ARC* | ArcticCoin | +| AST* | Astral | +| BNB* | Boats and Bitches | +| BOB | Bob Coin | +| BSD | BitSend | +| BTG* | BitGem | +| BTM* | Bytom | +| BTX* | BitcoinTX | +| CAT* | BitClave | +| CNT | Centurion | +| COV* | CovenCoin | +| CRC | CraftCoin | +| GHS | Giga Hash | +| GXC* | GenXCoin | +| KNC* | Khancoin | +| MAD | SatoshiMadness | +| MAT* | Manet Coin | +| MYST* | MysteryCoin | +| NET* | Nimiq Exchange Token | +| PEN | PenCoin | +| PTS* | Protoshares | +| RCN* | RCoin | +| SAR | SARCoin | +| SBD | Steem Backed Dollar | +| SLS | SaluS | +| STA* | Stakers | +| STAR* | StarCoin | +| SUB* | Subscriptio | +| WRC* | WarCoin | +| XBC | Bond Markets Unit European Unit of Account 9 | +| XID* | International Diamond Coin | +| XPD | Palladium | +| ZRC* | ZiftrCoin | + + [openx]: https://openexchangerates.org/ [cryptocompare]: https://www.cryptocompare.com/ diff --git a/src/active_currencies.txt.default b/src/active_currencies.txt.default index e0073f2..6a7834b 100644 --- a/src/active_currencies.txt.default +++ b/src/active_currencies.txt.default @@ -179,7 +179,6 @@ XAG XAU XBA XBB -XBC XBD XCD XDR @@ -205,6 +204,7 @@ LSK LTC MAID SJCX +XBC XEM XMR XRP diff --git a/src/config.py b/src/config.py index b7d7949..6145288 100644 --- a/src/config.py +++ b/src/config.py @@ -23,6 +23,8 @@ # Result display # ---------------------------------------------------------------------- DECIMAL_PLACES = int(os.getenv('DECIMAL_PLACES') or '2') +CURRENCY_DECIMAL_PLACES = int(os.getenv('CURRENCY_DECIMAL_PLACES') or + str(DECIMAL_PLACES)) DECIMAL_SEPARATOR = os.getenv('DECIMAL_SEPARATOR') or '.' THOUSANDS_SEPARATOR = os.getenv('THOUSANDS_SEPARATOR') or '' @@ -293,7 +295,7 @@ u'AHT': u'Ahoolee', u'AIB': u'AdvancedInternetBlock', u'AIR': u'AirToken', - u'AIR*': u'Aircoin', + # u'AIR*': u'Aircoin', u'ALC': u'Arab League Coin', u'ALEX': u'Alexandrite', u'ALF': u'AlphaCoin', @@ -317,7 +319,7 @@ u'APT': u'Aptcoin', u'APX': u'Apx', u'ARB': u'Arbit Coin', - u'ARC*': u'ArcticCoin', + # u'ARC*': u'ArcticCoin', u'ARCH': u'ArchCoin', u'ARCO': u'AquariusCoin', u'ARDR': u'Ardor', @@ -331,7 +333,7 @@ u'ASAFE': u'Allsafe', u'ASN': u'Ascension Coin', u'AST': u'AirSwap', - u'AST*': u'Astral', + # u'AST*': u'Astral', u'ATB': u'ATB coin', u'ATCC': u'ATC Coin', u'ATL': u'ATLANT', @@ -399,7 +401,7 @@ u'BM': u'BitMoon', u'BMC': u'Blackmoon Crypto', u'BNB': u'Binance Coin', - u'BNB*': u'Boats and Bitches', + # u'BNB*': u'Boats and Bitches', u'BNC': u'Benjacoin', u'BNT': u'Bancor Network Token', u'BNX': u'BnrtxCoin', @@ -441,17 +443,17 @@ u'BTD': u'Bitcloud', u'BTE': u'ByteCoin', u'BTG': u'Bitcoin Gold', - u'BTG*': u'BitGem', + # u'BTG*': u'BitGem', u'BTLC': u'BitLuckCoin', u'BTM': u'BitMark', - u'BTM*': u'Bytom', + # u'BTM*': u'Bytom', u'BTMI': u'BitMiles', u'BTPL': u'Bitcoin Planet', u'BTQ': u'BitQuark', u'BTS': u'Bitshares', u'BTTF': u'Coin to the Future', u'BTX': u'Bitcore', - u'BTX*': u'BitcoinTX', + # u'BTX*': u'BitcoinTX', u'BTZ': u'BitzCoin', u'BUCKS': u'SwagBucks', u'BUK': u'CryptoBuk', @@ -473,7 +475,7 @@ u'CARBON': u'Carboncoin', u'CASH': u'CashCoin', u'CAT': u'BlockCAT', - u'CAT*': u'BitClave', + # u'CAT*': u'BitClave', u'CBD': u'CBD Crystals', u'CBX': u'CryptoBullion', u'CC': u'CyberCoin', @@ -541,7 +543,7 @@ u'CORE': u'Core Group Asset', u'COSS': u'COSS', u'COV': u'Covesting', - u'COV*': u'CovenCoin', + # u'COV*': u'CovenCoin', u'COVAL': u'Circuits of Value', u'COX': u'CobraCoin', u'CPC': u'CapriCoin', @@ -850,7 +852,7 @@ u'GUNS': u'GeoFunders', u'GUP': u'Guppy', u'GXC': u'Gx Coin', - u'GXC*': u'GenXCoin', + # u'GXC*': u'GenXCoin', u'HAC': u'Hackspace Capital', u'HAL': u'Halcyon', u'HALLO': u'Halloween Coin', @@ -960,7 +962,7 @@ u'KLC': u'KiloCoin', u'KMD': u'Komodo', u'KNC': u'Kyber Network', - u'KNC*': u'Khancoin', + # u'KNC*': u'Khancoin', u'KOBO': u'KoboCoin', u'KOLION': u'Kolion', u'KORE': u'Kore', @@ -1035,7 +1037,7 @@ u'MARV': u'Marvelous', u'MARX': u'MarxCoin', u'MARYJ': u'MaryJane Coin', - u'MAT*': u'Manet Coin', + # u'MAT*': u'Manet Coin', u'MAX': u'MaxCoin', u'MAY': u'Theresa May Coin', u'MBI': u'Monster Byte Inc', @@ -1114,7 +1116,7 @@ u'MYB': u'MyBit', u'MYC': u'MayaCoin', u'MYST': u'Mysterium', - u'MYST*': u'MysteryCoin', + # u'MYST*': u'MysteryCoin', u'MZC': u'MazaCoin', u'N7': u'Number7', u'NAMO': u'NamoCoin', @@ -1135,7 +1137,7 @@ u'NEO': u'NEO', u'NEOS': u'NeosCoin', u'NET': u'NetCoin', - u'NET*': u'Nimiq Exchange Token', + # u'NET*': u'Nimiq Exchange Token', u'NETC': u'NetworkCoin', u'NETKO': u'Netko', u'NEU': u'NeuCoin', @@ -1277,7 +1279,7 @@ u'PTA': u'PentaCoin', u'PTC': u'PesetaCoin', u'PTOY': u'Patientory', - u'PTS*': u'Protoshares', + # u'PTS*': u'Protoshares', u'PULSE': u'Pulse', u'PUPA': u'PupaCoin', u'PUT': u'PutinCoin', @@ -1315,7 +1317,7 @@ u'RC': u'Russiacoin', u'RCC': u'Reality Clash', u'RCN': u'Ripio', - u'RCN*': u'RCoin', + # u'RCN*': u'RCoin', u'RCX': u'RedCrowCoin', u'RDD': u'ReddCoin', u'RDN': u'RadonPay', @@ -1445,10 +1447,10 @@ u'SSTC': u'SunShotCoin', u'SSV': u'SSVCoin', u'STA': u'Starta', - u'STA*': u'Stakers', + # u'STA*': u'Stakers', u'STALIN': u'StalinCoin', u'STAR': u'Starbase', - u'STAR*': u'StarCoin', + # u'STAR*': u'StarCoin', u'START': u'StartCoin', u'STCN': u'Stakecoin', u'STEEM': u'Steem', @@ -1463,7 +1465,7 @@ u'STV': u'Sativa Coin', u'STX': u'Stox', u'SUB': u'Substratum Network', - u'SUB*': u'Subscriptio', + # u'SUB*': u'Subscriptio', u'SUMO': u'Sumokoin', u'SUP': u'Supcoin', u'SUPER': u'SuperCoin', @@ -1631,7 +1633,7 @@ u'WOP': u'WorldPay', u'WORM': u'HealthyWorm', u'WRC': u'Worldcore', - u'WRC*': u'WarCoin', + # u'WRC*': u'WarCoin', u'WRT': u'WRTcoin', u'WSX': u'WeAreSatoshi', u'WTC': u'Waltonchain', @@ -1670,7 +1672,7 @@ u'XGR': u'GoldReserve', u'XHI': u'HiCoin', u'XID': u'Sphre AIR', - u'XID*': u'International Diamond Coin', + # u'XID*': u'International Diamond Coin', u'XIOS': u'Xios', u'XJO': u'JouleCoin', u'XLB': u'LibertyCoin', @@ -1746,7 +1748,7 @@ u'ZOI': u'Zoin', u'ZOOM': u'ZoomCoin', u'ZRC': u'ZrCoin', - u'ZRC*': u'ZiftrCoin', + # u'ZRC*': u'ZiftrCoin', u'ZRX': u'0x', u'ZSC': u'Zeusshield', u'ZSE': u'ZSEcoin', diff --git a/src/convert.py b/src/convert.py index 47d6b2a..5b276ea 100755 --- a/src/convert.py +++ b/src/convert.py @@ -27,6 +27,7 @@ COPY_UNIT, CURRENCY_CACHE_AGE, CURRENCY_CACHE_NAME, + CURRENCY_DECIMAL_PLACES, CUSTOM_DEFINITIONS_FILENAME, DECIMAL_PLACES, DECIMAL_SEPARATOR, @@ -131,6 +132,11 @@ def __init__(self, number, dimensionality, from_unit, to_unit=None): self.from_unit = from_unit self.to_unit = to_unit + @property + def is_currency(self): + """`True` if Input is a currency.""" + return self.dimensionality == u'[currency]' + def __repr__(self): """Code-like representation of `Input`.""" return ('Input(number={!r}, dimensionality={!r}, ' @@ -173,10 +179,9 @@ def _decimal_places(self, n): Returns: int: Number of decimal places for result. """ - log.debug('DYNAMIC_DECIMALS are %s', - ('off', 'on')[self.dynamic_decimals]) + log.debug('DYNAMIC_DECIMALS: %s', ('off', 'on')[self.dynamic_decimals]) - if not self.dynamic_decimals: + if not self.dynamic_decimals or n == 0.0: return self.decimal_places m = max(self.decimal_places, 10) + 1 @@ -184,7 +189,7 @@ def _decimal_places(self, n): while p < m: e = 10 ** p i = n * e - # log.debug('n=%f, e=%d, i=%f, p=%d', n, e, i, p) + # log.debug('n=%r, e=%d, i=%r, p=%d', n, e, i, p) if n * e >= 10: break @@ -195,13 +200,15 @@ def _decimal_places(self, n): if '.' not in s: # not a fraction return p - s = s.split('.')[-1] + _, s = s.split('.', 1) # log.debug('s=%s, p=%d', s, p) while s.endswith('0'): s = s[:-1] p -= 1 # log.debug('s=%s, p=%d', s, p) + p = max(p, self.decimal_places) + log.debug('places=%d', p) return p def formatted(self, n, unit=None): @@ -565,7 +572,8 @@ def convert(query): valid=False, icon=ICON_WARNING) else: # Show results - f = Formatter(DECIMAL_PLACES, DECIMAL_SEPARATOR, THOUSANDS_SEPARATOR, + p = CURRENCY_DECIMAL_PLACES if i.is_currency else DECIMAL_PLACES + f = Formatter(p, DECIMAL_SEPARATOR, THOUSANDS_SEPARATOR, DYNAMIC_DECIMALS) wf.setvar('query', query) for conv in results: diff --git a/src/info.plist b/src/info.plist index 273c7e7..eff1beb 100644 --- a/src/info.plist +++ b/src/info.plist @@ -625,6 +625,8 @@ UPDATE_INTERVAL is the number of minutes between exchange rate updates. COPY_UNIT + CURRENCY_DECIMAL_PLACES + 2 DECIMAL_PLACES 2 DECIMAL_SEPARATOR @@ -641,7 +643,7 @@ UPDATE_INTERVAL is the number of minutes between exchange rate updates. APP_KEY version - 3.5 + 3.5.1 webaddress