From 22ad3dff0f85f474380a23988085df0b84c3a66b Mon Sep 17 00:00:00 2001 From: Dean Jackson Date: Thu, 20 Feb 2020 09:22:15 +0100 Subject: [PATCH] Use ExchangeRate-API.com for currency conversion w/o key. Closes #47 --- CHANGELOG.md | 24 ++ ...edworkflow => Convert-3.7.0.alfredworkflow | Bin 411046 -> 410860 bytes README.md | 10 +- docs/currencies.md | 367 +++++++++--------- requirements.txt | 2 +- src/active_currencies.txt.default | 26 +- src/config.py | 355 ++++++++--------- src/convert.py | 6 +- src/currency.py | 46 ++- src/info.plist | 12 +- src/workflow/.alfredversionchecked | 0 src/workflow/update.py | 10 +- src/workflow/version | 2 +- src/workflow/workflow.py | 43 +- 14 files changed, 463 insertions(+), 440 deletions(-) rename Convert-3.6.2.alfredworkflow => Convert-3.7.0.alfredworkflow (84%) delete mode 100644 src/workflow/.alfredversionchecked diff --git a/CHANGELOG.md b/CHANGELOG.md index 6289cc9..eb80509 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,27 @@ Changelog ========= +### [3.7.0][v3.7.0] ### + +Released 2020-02-20 + +- Add exchange rates from ExchangeRate-API.com (no API key required) + + +### [3.6.2][v3.6.2] ### + +Released 2019-09-06 + +- Include `pkg_resources` (Pint dependency) + + +### [3.6.1][v3.6.1] ### + +Released 2019-05-30 + +- Fix argument quoting + + ### [3.6.0][v3.6.0] ### Released 2019-05-06 @@ -200,4 +221,7 @@ Released 2014-08-09. [v3.5.2]: https://github.com/deanishe/alfred-convert/releases/tag/v3.5.2 [v3.5.3]: https://github.com/deanishe/alfred-convert/releases/tag/v3.5.3 [v3.6.0]: https://github.com/deanishe/alfred-convert/releases/tag/v3.6.0 +[v3.6.1]: https://github.com/deanishe/alfred-convert/releases/tag/v3.6.1 +[v3.6.2]: https://github.com/deanishe/alfred-convert/releases/tag/v3.6.2 +[v3.7.0]: https://github.com/deanishe/alfred-convert/releases/tag/v3.7.0 [openx]: https://openexchangerates.org/ \ No newline at end of file diff --git a/Convert-3.6.2.alfredworkflow b/Convert-3.7.0.alfredworkflow similarity index 84% rename from Convert-3.6.2.alfredworkflow rename to Convert-3.7.0.alfredworkflow index c1b8929c942c2daf818b64d880f1e7650a216154..b21b1ef46329fab87d9d26928ea1b2e014acd29c 100644 GIT binary patch delta 51264 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 delta 51148 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 iKdl96ureGb(myRF8QAU @@ -58,7 +58,7 @@ Usage ### Conversions ### -**NOTE**: To perform conversions between fiat currencies, you must set a key for the [openexchangerates.org][openx] API in the workflow's [configuration sheet](#configuration). You can sign up for a free account [here][openx-free]. When you're signed up, copy the **App ID** from the email you receive or [this page][openx-appid] into the `APP_KEY` field in the [configuration sheet](#configuration). +**NOTE**: Only a limited number of fiat currencies are supported by default. Additional rates are only supported if you set a key for the [openexchangerates.org][openx] API in the workflow's [configuration sheet](#configuration). You can sign up for a free account [here][openx-free]. When you're signed up, copy the **App ID** from the email you receive or [this page][openx-appid] into the `APP_KEY` field in the [configuration sheet](#configuration). - `conv [] []` — Perform a conversion - `↩` or `⌘C` — Copy the result to the pasteboard @@ -161,6 +161,9 @@ See [CHANGELOG][changelog] for more information. | Release | Date | |-----------------|----------------| +| [3.7.0][v3.7.0] | 2020-02-20 | +| [3.6.2][v3.6.2] | 2019-09-06 | +| [3.6.1][v3.6.1] | 2019-05-30 | | [3.6.0][v3.6.0] | 2019-05-06 | | [3.5.3][v3.5.3] | 2019-01-26 | | [3.5.2][v3.5.2] | 2019-01-26 | @@ -232,6 +235,9 @@ All other code/media are released under the [MIT Licence][mit]. [v3.5.2]: https://github.com/deanishe/alfred-convert/releases/tag/v3.5.2 [v3.5.3]: https://github.com/deanishe/alfred-convert/releases/tag/v3.5.3 [v3.6.0]: https://github.com/deanishe/alfred-convert/releases/tag/v3.6.0 +[v3.6.1]: https://github.com/deanishe/alfred-convert/releases/tag/v3.6.1 +[v3.6.2]: https://github.com/deanishe/alfred-convert/releases/tag/v3.6.2 +[v3.7.0]: https://github.com/deanishe/alfred-convert/releases/tag/v3.7.0 [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 730ac56..c7f80df 100644 --- a/docs/currencies.md +++ b/docs/currencies.md @@ -15,199 +15,183 @@ Supported Currencies Fiat currencies --------------- -Exchange rates are downloaded from [OpenExchangeRates.org][openx]. - -The following fiat currencies are supported by the workflow: - -| Symbol | Name | -|--------|-----------------------------------------------| -| AED | UAE Dirham | -| AFN | Afghani | -| ALL | Lek | -| AMD | Armenian Dram | -| ANG | Netherlands Antillean Guilder | -| AOA | Kwanza | -| ARS | Argentine Peso | -| AUD | Australian Dollar | -| AWG | Aruban Florin | -| AZN | Azerbaijan Manat | -| BAM | Convertible Mark | -| BBD | Barbados Dollar | -| BDT | Taka | -| BGN | Bulgarian Lev | -| BHD | Bahraini Dinar | -| BIF | Burundi Franc | -| BMD | Bermudian Dollar | -| BND | Brunei Dollar | -| BOB | Boliviano | -| BOV | Mvdol | -| BRL | Brazilian Real | -| BSD | Bahamian Dollar | -| BTC | Bitcoin | -| BTN | Ngultrum | -| BWP | Pula | -| BYN | Belarusian Ruble | -| BZD | Belize Dollar | -| CAD | Canadian Dollar | -| CDF | Congolese Franc | -| CHE | WIR Euro | -| CHF | Swiss Franc | -| CHW | WIR Franc | -| CLF | Unidad de Fomento | -| CLP | Chilean Peso | -| CNH | Chinese yuan (Hong Kong) | -| CNT | Chinese yuan (Taiwan) | -| CNY | Yuan Renminbi | -| COP | Colombian Peso | -| COU | Unidad de Valor Real | -| CRC | Costa Rican Colon | -| CUC | Peso Convertible | -| CUP | Cuban Peso | -| CVE | Cabo Verde Escudo | -| CZK | Czech Koruna | -| DJF | Djibouti Franc | -| DKK | Danish Krone | -| DOP | Dominican Peso | -| DZD | Algerian Dinar | -| EGP | Egyptian Pound | -| ERN | Nakfa | -| ETB | Ethiopian Birr | -| EUR | Euro | -| FJD | Fiji Dollar | -| FKP | Falkland Islands Pound | -| GBP | Pound Sterling | -| GEL | Lari | -| GGP | Guernsey pound | -| GHS | Ghana Cedi | -| GIP | Gibraltar Pound | -| GMD | Dalasi | -| GNF | Guinean Franc | -| GTQ | Quetzal | -| GYD | Guyana Dollar | -| HKD | Hong Kong Dollar | -| HNL | Lempira | -| HRK | Kuna | -| HTG | Gourde | -| HUF | Forint | -| IDR | Rupiah | -| ILS | New Israeli Sheqel | -| IMP | Manx pound | -| INR | Indian Rupee | -| IQD | Iraqi Dinar | -| IRR | Iranian Rial | -| ISK | Iceland Krona | -| JEP | Jersey pound | -| JMD | Jamaican Dollar | -| JOD | Jordanian Dinar | -| JPY | Yen | -| KES | Kenyan Shilling | -| KGS | Som | -| KHR | Riel | -| KID | Kiribati dollar | -| KMF | Comorian Franc | -| KPW | North Korean Won | -| KRW | Won | -| KWD | Kuwaiti Dinar | -| KYD | Cayman Islands Dollar | -| KZT | Tenge | -| LAK | Lao Kip | -| LBP | Lebanese Pound | -| LKR | Sri Lanka Rupee | -| LRD | Liberian Dollar | -| LSL | Loti | -| LYD | Libyan Dinar | -| MAD | Moroccan Dirham | -| MDL | Moldovan Leu | -| MGA | Malagasy Ariary | -| MKD | Denar | -| MMK | Kyat | -| MNT | Tugrik | -| MOP | Pataca | -| MRO | Ouguiya | -| MUR | Mauritius Rupee | -| MVR | Rufiyaa | -| MWK | Malawi Kwacha | -| MXN | Mexican Peso | -| MXV | Mexican Unidad de Inversion (UDI) | -| MYR | Malaysian Ringgit | -| MZN | Mozambique Metical | -| NAD | Namibia Dollar | -| NGN | Naira | -| NIO | Cordoba Oro | -| NIS | New Israeli Shekel | -| NOK | Norwegian Krone | -| NPR | Nepalese Rupee | -| NTD | New Taiwan Dollar | -| NZD | New Zealand Dollar | -| OMR | Rial Omani | -| PAB | Balboa | -| PEN | Sol | -| PGK | Kina | -| PHP | Philippine Piso | -| PKR | Pakistan Rupee | -| PLN | Zloty | -| PYG | Guarani | -| QAR | Qatari Rial | -| RON | Romanian Leu | -| RSD | Serbian Dinar | -| RUB | Russian Ruble | -| RWF | Rwanda Franc | -| SAR | Saudi Riyal | -| SBD | Solomon Islands Dollar | -| SCR | Seychelles Rupee | -| SDG | Sudanese Pound | -| SEK | Swedish Krona | -| SGD | Singapore Dollar | -| SHP | Saint Helena Pound | -| SLL | Leone | -| SLS | Somaliland shilling | -| SOS | Somali Shilling | -| SRD | Surinam Dollar | -| SSP | South Sudanese Pound | -| STD | Dobra | -| SVC | El Salvador Colon | -| SYP | Syrian Pound | -| SZL | Lilangeni | -| THB | Baht | -| TJS | Somoni | -| TMT | Turkmenistan New Manat | -| TND | Tunisian Dinar | -| TOP | Pa’anga | -| TRY | Turkish Lira | -| TTD | Trinidad and Tobago Dollar | -| TVD | Tuvalu dollar | -| TWD | New Taiwan Dollar | -| TZS | Tanzanian Shilling | -| UAH | Hryvnia | -| UGX | Uganda Shilling | -| USD | US Dollar | -| USN | US Dollar (Next day) | -| UYI | Uruguay Peso en Unidades Indexadas (URUIURUI) | -| UYU | Peso Uruguayo | -| UZS | Uzbekistan Sum | -| VEF | Bolívar | -| VND | Dong | -| VUV | Vatu | -| WST | Tala | -| XAF | CFA Franc BEAC | -| XAG | Silver | -| XAU | Gold | -| XBA | Bond Markets Unit European Composite Unit | -| XBB | Bond Markets Unit European Monetary Unit | -| XBD | Bond Markets Unit European Unit of Account 17 | -| XCD | East Caribbean Dollar | -| XDR | SDR (Special Drawing Right) | -| XOF | CFA Franc BCEAO | -| XPF | CFP Franc | -| XPT | Platinum | -| XSU | Sucre | -| XUA | ADB Unit of Account | -| YER | Yemeni Rial | -| ZAR | Rand | -| ZMW | Zambian Kwacha | -| ZWL | Zimbabwe Dollar | +Exchange rates are downloaded from [ExchangeRate-API.com][xapi] and [OpenExchangeRates.org][openx]. +The following fiat currencies are supported by the workflow (currencies marked with `*` require an API key for OpenExchangeRates.org): +| Symbol | Name | +|--------|----------------------------------------| +| AED | United Arab Emirates Dirham | +| AFN | Afghan Afghani \* | +| ALL | Albanian Lek \* | +| AMD | Armenian Dram \* | +| ANG | Netherlands Antillean Guilder \* | +| AOA | Angolan Kwanza \* | +| ARS | Argentine Peso | +| AUD | Australian Dollar | +| AWG | Aruban Florin \* | +| AZN | Azerbaijani Manat \* | +| BAM | Bosnia-Herzegovina Convertible Mark \* | +| BBD | Barbadian Dollar \* | +| BDT | Bangladeshi Taka \* | +| BGN | Bulgarian Lev | +| BHD | Bahraini Dinar \* | +| BIF | Burundian Franc \* | +| BMD | Bermudan Dollar \* | +| BND | Brunei Dollar \* | +| BOB | Bolivian Boliviano \* | +| BRL | Brazilian Real | +| BSD | Bahamian Dollar | +| BTC | Bitcoin \* | +| BTN | Bhutanese Ngultrum \* | +| BWP | Botswanan Pula \* | +| BYN | Belarusian Ruble \* | +| BYR | Belarusian Ruble (pre-2016) \* | +| BZD | Belize Dollar \* | +| CAD | Canadian Dollar | +| CDF | Congolese Franc \* | +| CHF | Swiss Franc | +| CLF | Chilean Unit of Account (UF) \* | +| CLP | Chilean Peso | +| CNH | Chinese Yuan (Offshore) \* | +| CNY | Chinese Renminbi | +| COP | Colombian Peso | +| CRC | Costa Rican Colón \* | +| CUC | Cuban Convertible Peso \* | +| CUP | Cuban Peso \* | +| CVE | Cape Verdean Escudo \* | +| CZK | Czech Koruna | +| DJF | Djiboutian Franc \* | +| DKK | Danish Krone | +| DOP | Dominican Peso | +| DZD | Algerian Dinar \* | +| EEK | Estonian Kroon \* | +| EGP | Egyptian Pound | +| ERN | Eritrean Nakfa \* | +| ETB | Ethiopian Birr \* | +| EUR | Euro | +| FJD | Fijian Dollar | +| FKP | Falkland Islands Pound \* | +| GBP | British Pound Sterling | +| GEL | Georgian Lari \* | +| GGP | Guernsey Pound \* | +| GHS | Ghanaian Cedi \* | +| GIP | Gibraltar Pound \* | +| GMD | Gambian Dalasi \* | +| GNF | Guinean Franc \* | +| GTQ | Guatemalan Quetzal | +| GYD | Guyanaese Dollar \* | +| HKD | Hong Kong Dollar | +| HNL | Honduran Lempira \* | +| HRK | Croatian Kuna | +| HTG | Haitian Gourde \* | +| HUF | Hungarian Forint | +| IDR | Indonesian Rupiah | +| ILS | Israeli Shekel | +| IMP | Manx pound \* | +| INR | Indian Rupee | +| IQD | Iraqi Dinar \* | +| IRR | Iranian Rial \* | +| ISK | Icelandic Krona | +| JEP | Jersey Pound \* | +| JMD | Jamaican Dollar \* | +| JOD | Jordanian Dinar \* | +| JPY | Japanese Yen | +| KES | Kenyan Shilling \* | +| KGS | Kyrgystani Som \* | +| KHR | Cambodian Riel \* | +| KMF | Comorian Franc \* | +| KPW | North Korean Won \* | +| KRW | South Korean Won | +| KWD | Kuwaiti Dinar \* | +| KYD | Cayman Islands Dollar \* | +| KZT | Kazakhstani Tenge | +| LAK | Laotian Kip \* | +| LBP | Lebanese Pound \* | +| LKR | Sri Lankan Rupee \* | +| LRD | Liberian Dollar \* | +| LSL | Lesotho Loti \* | +| LYD | Libyan Dinar \* | +| MAD | Moroccan Dirham \* | +| MDL | Moldovan Leu \* | +| MGA | Malagasy Ariary \* | +| MKD | Macedonian Denar \* | +| MMK | Myanma Kyat \* | +| MNT | Mongolian Tugrik \* | +| MOP | Macanese Pataca \* | +| MRO | Mauritanian Ouguiya (pre-2018) \* | +| MRU | Mauritanian Ouguiya \* | +| MTL | Maltese Lira \* | +| MUR | Mauritian Rupee \* | +| MVR | Maldivian Rufiyaa \* | +| MWK | Malawian Kwacha \* | +| MXN | Mexican Peso | +| MYR | Malaysian Ringgit | +| MZN | Mozambican Metical \* | +| NAD | Namibian Dollar \* | +| NGN | Nigerian Naira \* | +| NIO | Nicaraguan Córdoba \* | +| NOK | Norwegian Krone | +| NPR | Nepalese Rupee \* | +| NZD | New Zealand Dollar | +| OMR | Omani Rial \* | +| PAB | Panamanian Balboa | +| PEN | Peruvian Nuevo Sol | +| PGK | Papua New Guinean Kina \* | +| PHP | Philippine Peso | +| PKR | Pakistani Rupee | +| PLN | Polish Zloty | +| PYG | Paraguayan Guarani | +| QAR | Qatari Rial \* | +| RON | Romanian Leu | +| RSD | Serbian Dinar \* | +| RUB | Russian Ruble | +| RWF | Rwandan Franc \* | +| SAR | Saudi Riyal | +| SBD | Solomon Islands Dollar \* | +| SCR | Seychellois Rupee \* | +| SDG | Sudanese Pound \* | +| SEK | Swedish Krona | +| SGD | Singapore Dollar | +| SHP | Saint Helena Pound \* | +| SLL | Sierra Leonean Leone \* | +| SOS | Somali Shilling \* | +| SRD | Surinamese Dollar \* | +| SSP | South Sudanese Pound \* | +| STN | São Tomé and Príncipe Dobra \* | +| SVC | Salvadoran Colón \* | +| SYP | Syrian Pound \* | +| SZL | Swazi Lilangeni \* | +| THB | Thai Baht | +| TJS | Tajikistani Somoni \* | +| TMT | Turkmenistani Manat \* | +| TND | Tunisian Dinar \* | +| TOP | Tongan Paʻanga \* | +| TRY | Turkish Lira | +| TTD | Trinidad and Tobago Dollar \* | +| TWD | New Taiwan Dollar | +| TZS | Tanzanian Shilling \* | +| UAH | Ukrainian Hryvnia | +| UGX | Ugandan Shilling \* | +| USD | US Dollar | +| UYU | Uruguayan Peso | +| UZS | Uzbekistan Som \* | +| VEF | Venezuelan Bolívar Fuerte \* | +| VND | Vietnamese Dong \* | +| VUV | Vanuatu Vatu \* | +| WST | Samoan Tala \* | +| XAF | CFA Franc BEAC \* | +| XAG | Silver (troy ounce) \* | +| XAU | Gold (troy ounce) \* | +| XCD | East Caribbean Dollar \* | +| XDR | Special Drawing Rights \* | +| XOF | CFA Franc BCEAO \* | +| XPD | Palladium Ounce \* | +| XPF | CFP Franc \* | +| XPT | Platinum Ounce \* | +| YER | Yemeni Rial \* | +| ZAR | South African Rand | +| ZMW | Zambian Kwacha | @@ -1737,5 +1721,6 @@ The following (crypto)currencies are unsupported. Some have symbols that conflic | ZRC* | ZiftrCoin | +[xapi]: https://www.exchangerate-api.com/ [openx]: https://openexchangerates.org/ [cryptocompare]: https://www.cryptocompare.com/ diff --git a/requirements.txt b/requirements.txt index 7554959..aab93e9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ Pint==0.9 -Alfred-Workflow==1.36 +Alfred-Workflow==1.37.2 docopt==0.6.2 diff --git a/src/active_currencies.txt.default b/src/active_currencies.txt.default index 6a7834b..d6a3fbc 100644 --- a/src/active_currencies.txt.default +++ b/src/active_currencies.txt.default @@ -26,25 +26,22 @@ BIF BMD BND BOB -BOV BRL BSD +BTC BTN BWP BYN +BYR BZD CAD CDF -CHE CHF -CHW CLF CLP CNH -CNT CNY COP -COU CRC CUC CUP @@ -54,6 +51,7 @@ DJF DKK DOP DZD +EEK EGP ERN ETB @@ -88,7 +86,6 @@ JPY KES KGS KHR -KID KMF KPW KRW @@ -109,20 +106,19 @@ MMK MNT MOP MRO +MRU +MTL MUR MVR MWK MXN -MXV MYR MZN NAD NGN NIO -NIS NOK NPR -NTD NZD OMR PAB @@ -145,11 +141,10 @@ SEK SGD SHP SLL -SLS SOS SRD SSP -STD +STN SVC SYP SZL @@ -160,14 +155,11 @@ TND TOP TRY TTD -TVD TWD TZS UAH UGX USD -USN -UYI UYU UZS VEF @@ -177,21 +169,15 @@ WST XAF XAG XAU -XBA -XBB -XBD XCD XDR XOF XPD XPF XPT -XSU -XUA YER ZAR ZMW -ZWL # Crypto currencies AUR diff --git a/src/config.py b/src/config.py index 149539b..204c8ad 100644 --- a/src/config.py +++ b/src/config.py @@ -37,6 +37,7 @@ CURRENCY_CACHE_NAME = 'exchange_rates' REFERENCE_CURRENCY = 'USD' OPENX_API_URL = 'https://openexchangerates.org/api/latest.json?app_id={}' +XRA_API_URL = 'https://api.exchangerate-api.com/v4/latest/{}' CRYPTO_COMPARE_BASE_URL = ( 'https://min-api.cryptocompare.com/data/price?fsym={}&tsyms={}') SYMBOLS_PER_REQUEST = 20 @@ -55,193 +56,177 @@ ACTIVE_CURRENCIES_FILENAME = 'active_currencies.txt' CURRENCIES = { - u'AED': u'United Arab Emirates dirham', - u'AFN': u'Afghan afghani', - u'ALL': u'Albanian lek', - u'AMD': u'Armenian dram', - u'ANG': u'Netherlands Antillean guilder', - u'AOA': u'Angolan kwanza', - u'ARS': u'Argentine peso', - u'AUD': u'Australian dollar', - u'AWG': u'Aruban florin', - u'AZN': u'Azerbaijani manat', - u'BAM': u'Bosnia and Herzegovina convertible mark', - u'BBD': u'Barbados dollar', - u'BDT': u'Bangladeshi taka', - u'BGN': u'Bulgarian lev', - u'BHD': u'Bahraini dinar', - u'BIF': u'Burundian franc', - u'BMD': u'Bermudian dollar', - u'BND': u'Brunei dollar', - u'BOB': u'Boliviano', - u'BOV': u'Bolivian Mvdol', - u'BRL': u'Brazilian real', - u'BSD': u'Bahamian dollar', - # u'BTC': u'Bitcoin', - u'BTN': u'Bhutanese ngultrum', - u'BWP': u'Botswana pula', - u'BYN': u'Belarusian ruble', - u'BZD': u'Belize dollar', - u'CAD': u'Canadian dollar', - u'CDF': u'Congolese franc', - u'CHE': u'WIR Euro', - u'CHF': u'Swiss franc', - u'CHW': u'WIR Franc', - u'CLF': u'Unidad de Fomento', - u'CLP': u'Chilean peso', - u'CNH': u'Chinese yuan (Hong Kong)', - u'CNT': u'Chinese yuan (Taiwan)', - u'CNY': u'Chinese yuan', - u'COP': u'Colombian peso', - u'COU': u'Unidad de Valor Real (UVR)', - u'CRC': u'Costa Rican colon', - u'CUC': u'Cuban convertible peso', - u'CUP': u'Cuban peso', - u'CVE': u'Cape Verde escudo', - u'CZK': u'Czech koruna', - u'DJF': u'Djiboutian franc', - u'DKK': u'Danish krone', - u'DOP': u'Dominican peso', - u'DZD': u'Algerian dinar', - u'EGP': u'Egyptian pound', - u'ERN': u'Eritrean nakfa', - u'ETB': u'Ethiopian birr', + u'AED': u'United Arab Emirates Dirham', + u'AFN': u'Afghan Afghani', + u'ALL': u'Albanian Lek', + u'AMD': u'Armenian Dram', + u'ANG': u'Netherlands Antillean Guilder', + u'AOA': u'Angolan Kwanza', + u'ARS': u'Argentine Peso', + u'AUD': u'Australian Dollar', + u'AWG': u'Aruban Florin', + u'AZN': u'Azerbaijani Manat', + u'BAM': u'Bosnia-Herzegovina Convertible Mark', + u'BBD': u'Barbadian Dollar', + u'BDT': u'Bangladeshi Taka', + u'BGN': u'Bulgarian Lev', + u'BHD': u'Bahraini Dinar', + u'BIF': u'Burundian Franc', + u'BMD': u'Bermudan Dollar', + u'BND': u'Brunei Dollar', + u'BOB': u'Bolivian Boliviano', + u'BRL': u'Brazilian Real', + u'BSD': u'Bahamian Dollar', + u'BTC': u'Bitcoin', + u'BTN': u'Bhutanese Ngultrum', + u'BWP': u'Botswanan Pula', + u'BYN': u'Belarusian Ruble', + u'BYR': u'Belarusian Ruble (pre-2016)', + u'BZD': u'Belize Dollar', + u'CAD': u'Canadian Dollar', + u'CDF': u'Congolese Franc', + u'CHF': u'Swiss Franc', + u'CLF': u'Chilean Unit of Account (UF)', + u'CLP': u'Chilean Peso', + u'CNH': u'Chinese Yuan (Offshore)', + u'CNY': u'Chinese Renminbi', + u'COP': u'Colombian Peso', + u'CRC': u'Costa Rican Colón', + u'CUC': u'Cuban Convertible Peso', + u'CUP': u'Cuban Peso', + u'CVE': u'Cape Verdean Escudo', + u'CZK': u'Czech Koruna', + u'DJF': u'Djiboutian Franc', + u'DKK': u'Danish Krone', + u'DOP': u'Dominican Peso', + u'DZD': u'Algerian Dinar', + u'EEK': u'Estonian Kroon', + u'EGP': u'Egyptian Pound', + u'ERN': u'Eritrean Nakfa', + u'ETB': u'Ethiopian Birr', u'EUR': u'Euro', - u'FJD': u'Fiji dollar', - u'FKP': u'Falkland Islands pound', - u'GBP': u'Pound sterling', - u'GEL': u'Georgian lari', - u'GGP': u'Guernsey pound', - u'GHS': u'Ghanaian cedi', - u'GIP': u'Gibraltar pound', - u'GMD': u'Gambian dalasi', - u'GNF': u'Guinean franc', - u'GTQ': u'Guatemalan quetzal', - u'GYD': u'Guyanese dollar', - u'HKD': u'Hong Kong dollar', - u'HNL': u'Honduran lempira', - u'HRK': u'Croatian kuna', - u'HTG': u'Haitian gourde', - u'HUF': u'Hungarian forint', - u'IDR': u'Indonesian rupiah', - u'ILS': u'Israeli new shekel', + u'FJD': u'Fijian Dollar', + u'FKP': u'Falkland Islands Pound', + u'GBP': u'British Pound Sterling', + u'GEL': u'Georgian Lari', + u'GGP': u'Guernsey Pound', + u'GHS': u'Ghanaian Cedi', + u'GIP': u'Gibraltar Pound', + u'GMD': u'Gambian Dalasi', + u'GNF': u'Guinean Franc', + u'GTQ': u'Guatemalan Quetzal', + u'GYD': u'Guyanaese Dollar', + u'HKD': u'Hong Kong Dollar', + u'HNL': u'Honduran Lempira', + u'HRK': u'Croatian Kuna', + u'HTG': u'Haitian Gourde', + u'HUF': u'Hungarian Forint', + u'IDR': u'Indonesian Rupiah', + u'ILS': u'Israeli Shekel', u'IMP': u'Manx pound', - u'INR': u'Indian rupee', - u'IQD': u'Iraqi dinar', - u'IRR': u'Iranian rial', - u'ISK': u'Icelandic króna', - u'JEP': u'Jersey pound', - u'JMD': u'Jamaican dollar', - u'JOD': u'Jordanian dinar', - u'JPY': u'Japanese yen', - u'KES': u'Kenyan shilling', - u'KGS': u'Kyrgyzstani som', - u'KHR': u'Cambodian riel', - u'KID': u'Kiribati dollar', - u'KMF': u'Comoro franc', - u'KPW': u'North Korean won', - u'KRW': u'South Korean won', - u'KWD': u'Kuwaiti dinar', - u'KYD': u'Cayman Islands dollar', - u'KZT': u'Kazakhstani tenge', - u'LAK': u'Lao kip', - u'LBP': u'Lebanese pound', - u'LKR': u'Sri Lankan rupee', - u'LRD': u'Liberian dollar', - u'LSL': u'Lesotho loti', - u'LYD': u'Libyan dinar', - u'MAD': u'Moroccan dirham', - u'MDL': u'Moldovan leu', - u'MGA': u'Malagasy ariary', - u'MKD': u'Macedonian denar', - u'MMK': u'Myanmar kyat', - u'MNT': u'Mongolian tögrög', - u'MOP': u'Macanese pataca', - u'MRO': u'Mauritanian ouguiya', - u'MUR': u'Mauritian rupee', - u'MVR': u'Maldivian rufiyaa', - u'MWK': u'Malawian kwacha', - u'MXN': u'Mexican peso', - u'MXV': u'Mexican Unidad de Inversion (UDI)', - u'MYR': u'Malaysian ringgit', - u'MZN': u'Mozambican metical', - u'NAD': u'Namibian dollar', - u'NGN': u'Nigerian naira', - u'NIO': u'Nicaraguan córdoba', - u'NIS': u'New Israeli Shekel', - u'NOK': u'Norwegian krone', - u'NPR': u'Nepalese rupee', - u'NTD': u'New Taiwan Dollar', - u'NZD': u'New Zealand dollar', - u'OMR': u'Omani rial', - u'PAB': u'Panamanian balboa', - u'PEN': u'Peruvian Sol', - u'PGK': u'Papua New Guinean kina', - u'PHP': u'Philippine piso[10]', - u'PKR': u'Pakistani rupee', - u'PLN': u'Polish złoty', - u'PYG': u'Paraguayan guaraní', - u'QAR': u'Qatari riyal', - u'RON': u'Romanian leu', - u'RSD': u'Serbian dinar', - u'RUB': u'Russian ruble', - u'RWF': u'Rwandan franc', - u'SAR': u'Saudi riyal', - u'SBD': u'Solomon Islands dollar', - u'SCR': u'Seychelles rupee', - u'SDG': u'Sudanese pound', - u'SEK': u'Swedish krona/kronor', - u'SGD': u'Singapore dollar', - u'SHP': u'Saint Helena pound', - u'SLL': u'Sierra Leonean leone', - u'SLS': u'Somaliland shilling', - u'SOS': u'Somali shilling', - u'SRD': u'Surinamese dollar', - u'SSP': u'South Sudanese pound', - u'STD': u'São Tomé and Príncipe dobra', - u'SVC': u'Salvadoran colón', - u'SYP': u'Syrian pound', - u'SZL': u'Swazi lilangeni', - u'THB': u'Thai baht', - u'TJS': u'Tajikistani somoni', - u'TMT': u'Turkmenistan manat', - u'TND': u'Tunisian dinar', - u'TOP': u'Tongan paʻanga', - u'TRY': u'Turkish lira', - u'TTD': u'Trinidad and Tobago dollar', - u'TVD': u'Tuvalu dollar', - u'TWD': u'New Taiwan dollar', - u'TZS': u'Tanzanian shilling', - u'UAH': u'Ukrainian hryvnia', - u'UGX': u'Ugandan shilling', - u'USD': u'United States dollar', - u'USN': u'United States dollar (next day)', - u'UYI': u'Uruguay Peso en Unidades Indexadas (URUIURUI)', - u'UYU': u'Uruguayan peso', - u'UZS': u'Uzbekistan som', - u'VEF': u'Venezuelan bolívar', - u'VND': u'Vietnamese đồng', - u'VUV': u'Vanuatu vatu', - u'WST': u'Samoan tala', - u'XAF': u'CFA franc BEAC', - u'XAG': u'Silver (one troy ounce)', - u'XAU': u'Gold (one troy ounce)', - u'XBA': u'European Composite Unit (EURCO)', - u'XBB': u'European Monetary Unit (E.M.U.-6)', - # u'XBC': u'European Unit of Account 9 (E.U.A.-9)', - u'XBD': u'European Unit of Account 17 (E.U.A.-17)', - u'XCD': u'East Caribbean dollar', - u'XDR': u'Special drawing rights', - u'XOF': u'CFA franc BCEAO', - # u'XPD': u'Palladium (one troy ounce)', - u'XPF': u'CFP franc (franc Pacifique)', - u'XPT': u'Platinum (one troy ounce)', - u'XSU': u'SUCRE', - u'XUA': u'ADB Unit of Account', - u'YER': u'Yemeni rial', - u'ZAR': u'South African rand', - u'ZMW': u'Zambian kwacha', - u'ZWL': u'Zimbabwean dollar', + u'INR': u'Indian Rupee', + u'IQD': u'Iraqi Dinar', + u'IRR': u'Iranian Rial', + u'ISK': u'Icelandic Krona', + u'JEP': u'Jersey Pound', + u'JMD': u'Jamaican Dollar', + u'JOD': u'Jordanian Dinar', + u'JPY': u'Japanese Yen', + u'KES': u'Kenyan Shilling', + u'KGS': u'Kyrgystani Som', + u'KHR': u'Cambodian Riel', + u'KMF': u'Comorian Franc', + u'KPW': u'North Korean Won', + u'KRW': u'South Korean Won', + u'KWD': u'Kuwaiti Dinar', + u'KYD': u'Cayman Islands Dollar', + u'KZT': u'Kazakhstani Tenge', + u'LAK': u'Laotian Kip', + u'LBP': u'Lebanese Pound', + u'LKR': u'Sri Lankan Rupee', + u'LRD': u'Liberian Dollar', + u'LSL': u'Lesotho Loti', + u'LYD': u'Libyan Dinar', + u'MAD': u'Moroccan Dirham', + u'MDL': u'Moldovan Leu', + u'MGA': u'Malagasy Ariary', + u'MKD': u'Macedonian Denar', + u'MMK': u'Myanma Kyat', + u'MNT': u'Mongolian Tugrik', + u'MOP': u'Macanese Pataca', + u'MRO': u'Mauritanian Ouguiya (pre-2018)', + u'MRU': u'Mauritanian Ouguiya', + u'MTL': u'Maltese Lira', + u'MUR': u'Mauritian Rupee', + u'MVR': u'Maldivian Rufiyaa', + u'MWK': u'Malawian Kwacha', + u'MXN': u'Mexican Peso', + u'MYR': u'Malaysian Ringgit', + u'MZN': u'Mozambican Metical', + u'NAD': u'Namibian Dollar', + u'NGN': u'Nigerian Naira', + u'NIO': u'Nicaraguan Córdoba', + u'NOK': u'Norwegian Krone', + u'NPR': u'Nepalese Rupee', + u'NZD': u'New Zealand Dollar', + u'OMR': u'Omani Rial', + u'PAB': u'Panamanian Balboa', + u'PEN': u'Peruvian Nuevo Sol', + u'PGK': u'Papua New Guinean Kina', + u'PHP': u'Philippine Peso', + u'PKR': u'Pakistani Rupee', + u'PLN': u'Polish Zloty', + u'PYG': u'Paraguayan Guarani', + u'QAR': u'Qatari Rial', + u'RON': u'Romanian Leu', + u'RSD': u'Serbian Dinar', + u'RUB': u'Russian Ruble', + u'RWF': u'Rwandan Franc', + u'SAR': u'Saudi Riyal', + u'SBD': u'Solomon Islands Dollar', + u'SCR': u'Seychellois Rupee', + u'SDG': u'Sudanese Pound', + u'SEK': u'Swedish Krona', + u'SGD': u'Singapore Dollar', + u'SHP': u'Saint Helena Pound', + u'SLL': u'Sierra Leonean Leone', + u'SOS': u'Somali Shilling', + u'SRD': u'Surinamese Dollar', + u'SSP': u'South Sudanese Pound', + u'STN': u'São Tomé and Príncipe Dobra', + u'SVC': u'Salvadoran Colón', + u'SYP': u'Syrian Pound', + u'SZL': u'Swazi Lilangeni', + u'THB': u'Thai Baht', + u'TJS': u'Tajikistani Somoni', + u'TMT': u'Turkmenistani Manat', + u'TND': u'Tunisian Dinar', + u'TOP': u'Tongan Paʻanga', + u'TRY': u'Turkish Lira', + u'TTD': u'Trinidad and Tobago Dollar', + u'TWD': u'New Taiwan Dollar', + u'TZS': u'Tanzanian Shilling', + u'UAH': u'Ukrainian Hryvnia', + u'UGX': u'Ugandan Shilling', + u'USD': u'US Dollar', + u'UYU': u'Uruguayan Peso', + u'UZS': u'Uzbekistan Som', + u'VEF': u'Venezuelan Bolívar Fuerte', + u'VND': u'Vietnamese Dong', + u'VUV': u'Vanuatu Vatu', + u'WST': u'Samoan Tala', + u'XAF': u'CFA Franc BEAC', + u'XAG': u'Silver (troy ounce)', + u'XAU': u'Gold (troy ounce)', + u'XCD': u'East Caribbean Dollar', + u'XDR': u'Special Drawing Rights', + u'XOF': u'CFA Franc BCEAO', + u'XPD': u'Palladium Ounce', + u'XPF': u'CFP Franc', + u'XPT': u'Platinum Ounce', + u'YER': u'Yemeni Rial', + u'ZAR': u'South African Rand', + u'ZMW': u'Zambian Kwacha', } CRYPTO_CURRENCIES = { diff --git a/src/convert.py b/src/convert.py index 851d18a..db28bfa 100755 --- a/src/convert.py +++ b/src/convert.py @@ -70,8 +70,8 @@ def error_if_currency(unit): """ if unit_is_currency(unit): log.error( - "[parser] unit %s is a fiat currency, but exchange " - "rates aren't configured", unit) + "[parser] unit %s is a fiat currency, but OpenExchangeRates.org " + "API key isn't set", unit) show_currency_help() sys.exit(0) @@ -79,7 +79,7 @@ def error_if_currency(unit): def show_currency_help(): """Show a message in Alfred telling user to set ``APP_KEY``.""" - wf.add_item('Set APP_KEY to convert currencies', + wf.add_item('Set APP_KEY to convert this currency', 'Action this item for instructions', autocomplete='workflow:appkey', icon=ICON_WARNING) diff --git a/src/currency.py b/src/currency.py index c1ac0df..34895a9 100644 --- a/src/currency.py +++ b/src/currency.py @@ -32,6 +32,7 @@ OPENX_APP_KEY, SYMBOLS_PER_REQUEST, USER_AGENT, + XRA_API_URL, ) @@ -83,6 +84,31 @@ def load_cryptocurrency_rates(symbols): return data +def load_xra_rates(symbols): + """Return dict of exchange rates from exchangerate-api.com. + + Returns: + dict: `{symbol: rate}` mapping of exchange rates. + + """ + rates = {} + wanted = set(symbols) + url = XRA_API_URL.format(REFERENCE_CURRENCY) + r = web.get(url, headers={'User-Agent': USER_AGENT}) + r.raise_for_status() + log.debug('[%s] %s', r.status_code, url) + data = r.json() + + for sym, rate in data['rates'].items(): + if sym not in wanted: + continue + log.debug('[ExchangeRate-API.com] 1 %s = %s %s', + REFERENCE_CURRENCY, rate, sym) + rates[sym] = rate + + return rates + + def load_openx_rates(symbols): """Return dict of exchange rates from openexchangerates.org. @@ -160,8 +186,16 @@ def fetch_exchange_rates(): active = load_active_currencies() syms = [s for s in CURRENCIES.keys() if s in active] - # rates.update(load_openx_rates(syms)) - jobs = [(load_openx_rates, (syms,))] + if not OPENX_APP_KEY: + log.warning( + 'fetching limited set of fiat currency exchange rates: ' + 'APP_KEY for openexchangerates.org not set. ' + 'Please sign up for a free account here: ' + 'https://openexchangerates.org/signup/free' + ) + jobs = [(load_xra_rates, (syms,))] + else: + jobs = [(load_openx_rates, (syms,))] syms = [] for s in CRYPTO_CURRENCIES.keys(): @@ -190,7 +224,7 @@ def fetch_exchange_rates(): def main(wf): - """Update exchange rates from Yahoo! Finance. + """Update exchange rates. Args: wf (workflow.Workflow): Workflow object. @@ -199,8 +233,10 @@ def main(wf): start_time = time.time() bootstrap(wf) - log.info('fetching exchange rates from OpenExchangeRates.org and ' - 'CryptoCompare.com ...') + site = 'OpenExchangeRates.org' if OPENX_APP_KEY else 'ExchangeRate-API.com' + + log.info('fetching exchange rates from %s and CryptoCompare.com ...', + site) rates = wf.cached_data(CURRENCY_CACHE_NAME, fetch_exchange_rates, diff --git a/src/info.plist b/src/info.plist index d072fba..c88e6c0 100644 --- a/src/info.plist +++ b/src/info.plist @@ -182,7 +182,7 @@ uid 607FA0B2-94A5-48E4-96E9-0BFA8872F7EE version - 2 + 3 config @@ -210,6 +210,8 @@ alfredfiltersresultsmatchmode 0 + argumenttreatemptyqueryasnil + argumenttrimmode 0 argumenttype @@ -248,7 +250,7 @@ uid 1E12C11D-30DB-44A8-AD75-F5BE7F2DA451 version - 2 + 3 config @@ -364,6 +366,8 @@ variables={allvars} alfredfiltersresultsmatchmode 0 + argumenttreatemptyqueryasnil + argumenttrimmode 0 argumenttype @@ -402,7 +406,7 @@ variables={allvars} uid EF92F243-C49B-4DFC-B0A4-72317B2457A7 version - 2 + 3 config @@ -649,7 +653,7 @@ UPDATE_INTERVAL is the number of minutes between exchange rate updates. APP_KEY version - 3.6.2 + 3.7.0 webaddress diff --git a/src/workflow/.alfredversionchecked b/src/workflow/.alfredversionchecked deleted file mode 100644 index e69de29..0000000 diff --git a/src/workflow/update.py b/src/workflow/update.py index ffc6353..6affc94 100644 --- a/src/workflow/update.py +++ b/src/workflow/update.py @@ -222,7 +222,7 @@ class Version(object): """ #: Match version and pre-release/build information in version strings - match_version = re.compile(r'([0-9\.]+)(.+)?').match + match_version = re.compile(r'([0-9][0-9\.]*)(.+)?').match def __init__(self, vstr): """Create new `Version` object. @@ -247,7 +247,7 @@ def _parse(self, vstr): else: m = self.match_version(vstr) if not m: - raise ValueError('invalid version number: {!r}'.format(vstr)) + raise ValueError('invalid version number: ' + vstr) version, suffix = m.groups() parts = self._parse_dotted_string(version) @@ -257,7 +257,7 @@ def _parse(self, vstr): if len(parts): self.patch = parts.pop(0) if not len(parts) == 0: - raise ValueError('version number too long: {!r}'.format(vstr)) + raise ValueError('version number too long: ' + vstr) if suffix: # Build info @@ -268,11 +268,9 @@ def _parse(self, vstr): if suffix: if not suffix.startswith('-'): raise ValueError( - 'suffix must start with - : {0}'.format(suffix)) + 'suffix must start with - : ' + suffix) self.suffix = suffix[1:] - # wf().logger.debug('version str `{}` -> {}'.format(vstr, repr(self))) - def _parse_dotted_string(self, s): """Parse string ``s`` into list of ints and strings.""" parsed = [] diff --git a/src/workflow/version b/src/workflow/version index 71437d0..673b6a6 100644 --- a/src/workflow/version +++ b/src/workflow/version @@ -1 +1 @@ -1.37 \ No newline at end of file +1.37.2 \ No newline at end of file diff --git a/src/workflow/workflow.py b/src/workflow/workflow.py index 584f376..2a057b0 100644 --- a/src/workflow/workflow.py +++ b/src/workflow/workflow.py @@ -1052,31 +1052,30 @@ def alfred_env(self): data = {} for key in ( - 'alfred_debug', - 'alfred_preferences', - 'alfred_preferences_localhash', - 'alfred_theme', - 'alfred_theme_background', - 'alfred_theme_subtext', - 'alfred_version', - 'alfred_version_build', - 'alfred_workflow_bundleid', - 'alfred_workflow_cache', - 'alfred_workflow_data', - 'alfred_workflow_name', - 'alfred_workflow_uid', - 'alfred_workflow_version'): - - value = os.getenv(key) - - if isinstance(value, str): - if key in ('alfred_debug', 'alfred_version_build', - 'alfred_theme_subtext'): + 'debug', + 'preferences', + 'preferences_localhash', + 'theme', + 'theme_background', + 'theme_subtext', + 'version', + 'version_build', + 'workflow_bundleid', + 'workflow_cache', + 'workflow_data', + 'workflow_name', + 'workflow_uid', + 'workflow_version'): + + value = os.getenv('alfred_' + key, '') + + if value: + if key in ('debug', 'version_build', 'theme_subtext'): value = int(value) else: value = self.decode(value) - data[key[7:]] = value + data[key] = value self._alfred_env = data @@ -1113,7 +1112,7 @@ def debugging(self): :rtype: ``bool`` """ - return self.alfred_env.get('debug') == '1' + return self.alfred_env.get('debug') == 1 @property def name(self):