Coder Social home page Coder Social logo

alexprengere / currencyconverter Goto Github PK

View Code? Open in Web Editor NEW
205.0 7.0 56.0 231.07 MB

A Python currency converter using the European Central Bank data.

Home Page: http://alexprengere.github.io/currencyconverter

License: Apache License 2.0

Python 98.97% Shell 1.03%
python currency exchange-rates

currencyconverter's Introduction

image

actions_ cratev_ crated_

This is a currency converter that uses historical rates against a reference currency (Euro). It is compatible with Python3.6+.

Currency data sources

The default source is the European Central Bank. This is the ECB historical rates for 42 currencies against the Euro since 1999. It can be downloaded here: eurofxref-hist.zip. The converter can use different sources as long as the format is the same.

Note that the currency converter does not query the API in real time, to avoid the overhead of the HTTP request. It uses embedded data in the library, which might not be up to date. If you need the latest data, please refer to the data section.

Installation

You can install directly after cloning:

$ python setup.py install --user

Or use the Python package:

$ pip install --user currencyconverter

Command line tool

After installation, you should have currency_converter in your $PATH:

$ currency_converter 100 USD --to EUR
100.000 USD = 87.512 EUR on 2016-05-06

Python API

Create once the currency converter object:

>>> from currency_converter import CurrencyConverter
>>> c = CurrencyConverter()

Convert from EUR to USD using the last available rate:

>>> c.convert(100, 'EUR', 'USD') # doctest: +SKIP
137.5...

Default target currency is EUR:

>>> c.convert(100, 'EUR')
100.0
>>> c.convert(100, 'USD') # doctest: +SKIP
72.67...

You can change the date of the rate:

>>> from datetime import date # datetime works too
>>> c.convert(100, 'EUR', 'USD', date=date(2013, 3, 21))
129...

Data

You can use your own currency file, as long as it has the same format (ECB):

from currency_converter import ECB_URL, SINGLE_DAY_ECB_URL

# Load the packaged data (might not be up to date)
c = CurrencyConverter()

# Download the full history, this will be up to date. Current value is:
# https://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist.zip
c = CurrencyConverter(ECB_URL)

# Dowload only the latest available day. Current value is:
# https://www.ecb.europa.eu/stats/eurofxref/eurofxref.zip
c = CurrencyConverter(SINGLE_DAY_ECB_URL)

# Load your custom file
c = CurrencyConverter('./path/to/currency/file.csv')

Since the raw data is updated only once a day, it might be better to only download it once a day:

import os.path as op
import urllib.request
from datetime import date

from currency_converter import ECB_URL, CurrencyConverter

filename = f"ecb_{date.today():%Y%m%d}.zip"
if not op.isfile(filename):
    urllib.request.urlretrieve(ECB_URL, filename)
c = CurrencyConverter(filename)

Fallbacks

Some rates are missing:

>>> c.convert(100, 'BGN', date=date(2010, 11, 21))
Traceback (most recent call last):
RateNotFoundError: BGN has no rate for 2010-11-21

But we have a fallback mode for those, using a linear interpolation of the closest known rates, as long as you ask for a date within the currency date bounds:

>>> c = CurrencyConverter(fallback_on_missing_rate=True)
>>> c.convert(100, 'BGN', date=date(2010, 11, 21))
51.12...

The fallback method can be configured with the fallback_on_missing_rate_method parameter, which currently supports "linear_interpolation" and "last_known" values.

We also have a fallback mode for dates outside the currency bounds:

>>> c = CurrencyConverter()
>>> c.convert(100, 'EUR', 'USD', date=date(1986, 2, 2))
Traceback (most recent call last):
RateNotFoundError: 1986-02-02 not in USD bounds 1999-01-04/2016-04-29
>>> 
>>> c = CurrencyConverter(fallback_on_wrong_date=True)
>>> c.convert(100, 'EUR', 'USD', date=date(1986, 2, 2)) # fallback to 1999-01-04
117.89...

Decimal

If you need exact conversions, you can use the decimal option to use decimal.Decimal internally when parsing rates. This will slow down the load time by a factor 10 though.

>>> c = CurrencyConverter(decimal=True)
>>> c.convert(100, 'EUR', 'USD', date=date(2013, 3, 21))
Decimal('129.100')

Other attributes

  • bounds lets you know the first and last available date for each currency
>>> first_date, last_date = c.bounds['USD']
>>> first_date
datetime.date(1999, 1, 4)
>>> last_date # doctest: +SKIP
datetime.date(2016, 11, 14)
  • currencies is a set containing all available currencies
>>> c.currencies # doctest: +SKIP
set(['SGD', 'CAD', 'SEK', 'GBP', ...
>>> 'AAA' in c.currencies
False
>>> c.convert(100, 'AAA')
Traceback (most recent call last):
ValueError: AAA is not a supported currency

currencyconverter's People

Contributors

alexprengere avatar alonme avatar bwagner avatar leo-ryu avatar nunojesus avatar thorbjornwolf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

currencyconverter's Issues

Rates Not Updating

Hi there,

It appears to me that the rates in the package haven't updated for over a month. When I run a conversion request for today's date, for example:

c.convert(1, 'EUR', 'USD', date=date(2020, 11, 16))

the package returns the error:

RateNotFoundError: 2020-11-16 not in USD bounds 1999-01-04/2020-09-24

I would have expected the rates to update more frequently, but is this the intended behaviour of the package?

Thanks!

world currency source

Hi, this is not really an issue of this tool.

but would be good to have advice/suggestion of where to get the currency file for a more completed currencies, i.e. to include currency AZN

CurrencyConverter creation sometimes fails when creating with up to date full history url

When creating the CurrencyConverter using the file with the full history ('https://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist.zip'), the currency converter often fails on URLError.
This is not consistent as it doesn't always fail.

  1. We've been using the currencyconverter for a year or so but it only started happening recently.

  2. We're using the latest version (0.14.4).

  3. Full traceback:
    self.currency_converter: CurrencyConverter = CurrencyConverter(CURRENCY_UP_TO_DATE_PATH, fallback_on_missing_rate=True)
    File "/usr/local/lib/python3.8/site-packages/currency_converter/currency_converter.py", line 154, in init
    self.load_file(currency_file)
    File "/usr/local/lib/python3.8/site-packages/currency_converter/currency_converter.py", line 160, in load_file
    content = urlopen(currency_file).read()
    File "/usr/local/lib/python3.8/urllib/request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
    File "/usr/local/lib/python3.8/urllib/request.py", line 525, in open
    response = self._open(req, data)
    File "/usr/local/lib/python3.8/urllib/request.py", line 542, in _open
    result = self._call_chain(self.handle_open, protocol, protocol +
    File "/usr/local/lib/python3.8/urllib/request.py", line 502, in _call_chain
    result = func(*args)
    File "/usr/local/lib/python3.8/urllib/request.py", line 1379, in http_open
    return self.do_open(http.client.HTTPConnection, req)
    File "/usr/local/lib/python3.8/urllib/request.py", line 1353, in do_open
    raise URLError(err)
    urllib.error.URLError: <urlopen error [Errno -2] Name or service not known>

Take current date is no date data is provided.

By the moment of writing this issue, date is 2022-07-13, but if I use the library without specifying date, it takes a value from more than two months ago:

$ currency_converter 1 EUR --to GBP
1.000 EUR = 0.852 GBP on 2022-05-05

I think it should take current date is no data is provided.

Actual date in rates

Now, actual date in rates is the August, 2022
But I need rates on today, can I get it?

Upper bound of last_date maxes out at last_date=datetime.date(2023, 6, 26))

We cannot receive a conversion for dates after 2023-6-26. We tried to convert a value from EUR to DKK for 11-28-23 and received the error:

currency_converter.currency_converter.RateNotFoundError: 2023-11-28 not in DKK bounds 1999-01-04/2023-06-26

  1. Create venv with python 3.11
  2. Install latest using pip
  3. Create a new CurrencyConverter object
  4. run c.bounds
  5. Observe all currencies show an upper bound for last_date=datetime.date(2023, 6, 26))

{'USD': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'JPY': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'BGN': Bounds(first_date=datetime.date(2000, 7, 19), last_date=datetime.date(2023, 6, 26)), 'CZK': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'DKK': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'GBP': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'HUF': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'PLN': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'RON': Bounds(first_date=datetime.date(2005, 7, 1), last_date=datetime.date(2023, 6, 26)), 'SEK': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'CHF': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'ISK': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'NOK': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'TRY': Bounds(first_date=datetime.date(2005, 1, 3), last_date=datetime.date(2023, 6, 26)), 'AUD': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'BRL': Bounds(first_date=datetime.date(2008, 1, 2), last_date=datetime.date(2023, 6, 26)), 'CAD': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'CNY': Bounds(first_date=datetime.date(2005, 4, 1), last_date=datetime.date(2023, 6, 26)), 'HKD': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'IDR': Bounds(first_date=datetime.date(2005, 4, 1), last_date=datetime.date(2023, 6, 26)), 'ILS': Bounds(first_date=datetime.date(2011, 1, 3), last_date=datetime.date(2023, 6, 26)), 'INR': Bounds(first_date=datetime.date(2009, 1, 2), last_date=datetime.date(2023, 6, 26)), 'KRW': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'MXN': Bounds(first_date=datetime.date(2008, 1, 2), last_date=datetime.date(2023, 6, 26)), 'MYR': Bounds(first_date=datetime.date(2005, 4, 1), last_date=datetime.date(2023, 6, 26)), 'NZD': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'PHP': Bounds(first_date=datetime.date(2005, 4, 1), last_date=datetime.date(2023, 6, 26)), 'SGD': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'THB': Bounds(first_date=datetime.date(2005, 4, 1), last_date=datetime.date(2023, 6, 26)), 'ZAR': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26)), 'HRK': Bounds(first_date=datetime.date(2005, 4, 1), last_date=datetime.date(2022, 12, 30)), 'RUB': Bounds(first_date=datetime.date(2005, 4, 1), last_date=datetime.date(2022, 3, 1)), 'LTL': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2014, 12, 31)), 'LVL': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2013, 12, 31)), 'EEK': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2010, 12, 31)), 'SKK': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2008, 12, 31)), 'CYP': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2007, 12, 31)), 'MTL': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2007, 12, 31)), 'SIT': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2006, 12, 29)), 'ROL': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2005, 6, 30)), 'TRL': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2004, 12, 31)), 'EUR': Bounds(first_date=datetime.date(1999, 1, 4), last_date=datetime.date(2023, 6, 26))}

ModuleNotFoundError: No module named 'currency_converter'

When I run the following import statement:

from currency_converter import CurrencyConverter

I get an error saying ModuleNotFoundError: No module named 'currency_converter'

Note: I have already installed the package using: pip install currencyconverter

custom file is not available

I put "MOP" and value to the custom_file.csv. and load it get error.

raise ValueError(f"{c} is not a supported currency")

fallback option not working

HI, Thanks for this amazing project, But while using this I found that data is not available for weekends and holidays and with parameter "fallback_on_missing_rate" there is no difference getting same error

c = CurrencyConverter(fallback_on_missing_rate=True)
c.convert(100, 'RUB', date=(2017, 12, 2))

Error
RateNotFoundError: (2017, 12, 2) not in RUB bounds 2005-04-01/2021-05-17

Adding ECB urls to the code

in commit f7973bc the urls were updated to https, i assume this was a change in ECB.

For my use case, i always need to get the current full history and so i have used the method described in the README,
When the url changed to HTTPS, i was having some problems - and later found out about this change.

I think it would make sense to add the https://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist.zip URL as a constant to the code, so if any changes occur, it will be updated with the package.

will be happy to contribute this.

Specifying default currency & string output

I think that could be easily implemented with conditional statements

>>> import currency_converter as cc
>>>
>>> # Default currency specified
>>> c = cc.CurrencyConverter(default_currency = "GBP")
>>> 
>>> # 50 PLN to default currency with string output
>>> c.convert(50, "PLN", string = True)
'8.90 GBP'
>>> # 50 PLN to GBP without string output
>>> c.convert(50, "PLN", "GBP")
8.9

Human readable flag

Much like we have ls -lh to print the sizes of file in human-readable format, we can have a -h or --human flag or/and a -w flag for the currency.

Output may look like
currency_converter 100 USD --to INR -h
100 USD = 7,300 INR on Date

also,
currency_converter 100 USD --to INR -w
100 USD = 7300 ( Seven thousand three hundred ) on Date

Great tool BTW

Documentation needed?

Hello,

I’ve been working on a platform for editable codebase documentation and noticed this repo lacked documentation besides the README. Would it be useful if I generated/hosted docs for this repo?

The platform:

  1. has a modern markdown editor to allow people to quickly and easily create new documents/user guides
  2. is similar to readthedocs/sphinx in that reads through the codebase and builds/hosts linkable pages describing classes and functions, as well as their usages in the codebase. However unlike readthedocs/sphinx, it doesn't require any configuration to get up and running
  3. tracks the github repo so that every build has the latest code

Sincerely hoping I can be of use to you and your project!

Other Currncies Data Source.

Hello,
ECB has rates for only 42 main currencies. Does anybody know the reliable source of similar information for other currencies?

Data is wrong!

Hi I compared results from yours code with this available on EBC website and there is huge difference between results.

For 'EUR-USD' I get 1.1696, but on the EBC there is 1.1569
For 'EUR-PLN' I get 4.5832, but on the EBC there is 4.61

I get results with:

>>> from currency_converter import CurrencyConverter
>>> c = CurrencyConverter()
>>> c.convert(1, 'EUR', 'USD')
1.1696
>>> c.convert(1, 'EUR', 'PLN')
4.5832

Detach tool local file; include API requests

Hi Alex,

what do you think of detaching the tool from the basic .zip-file of the ECB homepage and instead make on-the-fly requests through the ECB API?

The http request looks like the following. A key would be D.USD.EUR.SP00.A for USD/EUR daily under the 'flowRef' EXR for Exchange Rates.

class EcbCurrencyConverter(CurrencyConverter):
    def ecb_request(key,flowRef, *pargs, **kargs):
        #get data
        url = 'https://sdw-wsrest.ecb.europa.eu/service/data/'+flowRef+'/'+key
        if kargs:
            url = url+'?'+param_url(kargs)
        print('Requested URL: '+url)
        r = requests.get(url,
                headers={'Accept':'text/csv'})
        return r

The API allows for further customisation using parameters in the URL(ECB SDMX 2.1 RESTful web service)

    def param_url(dict):
        param = ''
        for k,v in dict.items():
            param = param+k+'='+v+'&'
        param = param[:-1] #removes the last '&' sign
        return param

Returning a [[date,rate],[date, rate],...] per request or currency would look like:

    def ecb_read(ecb_request):
        r = ecb_request.content.decode().splitlines()
        c = csv.reader(r)
        date_rate = []
        for row in c:
            date_rate.append(row[6:8])
        return date_rate

And attaches here to your original (super)class

    def load_file(self, currency_file, **kargs):
        """currency_file here just takes the requested currency
        for example: 'USD'"""
        content = self.ecb_request(currency_file, 'EXR')
        self.load_lines(content)

I will have to do some work to properly set up the subclass (which might take some time due to lack of experience and work) but you get the idea.

This would also lend itself easily going forward to extend the tool to further sources and such have a more complete set of currencies.

Best regards
Dario

Actual currency rates frozen on last release date

I try to get actual currency rate (4.4653) for EUR/PLN, but the converter returns value 4.6343 from the date of last converter release (2023-09-28).

c = CurrencyConverter()
c.convert(1, 'EUR', 'PLN') # Actual rate should be 4.4653 according to ECB website on 2023-10-20

Using code for exact date

c = CurrencyConverter()
c.convert(1, 'EUR', 'PLN', date=datetime.date(2023, 10, 20))

the answer is RateNotFoundError: 2023-10-20 not in PLN bounds 1999-01-04/2023-09-28

SSL: CERTIFICATE_VERIFY_FAILED error

Hi,

In Python 3.7, c=CurrencyConverter() works, but

c = CurrencyConverter('http://www.ecb.europa.eu/stats/eurofxref/eurofxref.zip')
c = CurrencyConverter('https://www.ecb.europa.eu/stats/eurofxref/eurofxref.zip')
c = CurrencyConverter('http://www.ecb.int/stats/eurofxref/eurofxref-hist.zip')
c = CurrencyConverter('https://www.ecb.int/stats/eurofxref/eurofxref-hist.zip')

all trigger an SSLCertVerificationError : certificate verify failed: unable to get local issuer certificate (_ssl.cL1045).

I tried it in 2.7 and there are no issues - it loads the current tables from the ecb without a problem.

Run

How to run this project. Please provide all steps

How can I access the actual date and rate used when a fallback method is specified?

Hey, I have a particular use case in which I'd like to save the last known date and rate for unknown values, to keep as a reference as to what actual rate and date were used.

def _use_last_known(self, currency):
        """Fill missing rates of a currency.
        This is done by using the last known rate.
        :param str currency: The currency to fill missing rates for.
        """
        rates = self._rates[currency]

        for date in sorted(rates):
            rate = rates[date]
            if rate is not None:
                last_rate, last_date = rate, date
            else:
                rates[date] = last_rate
                if self.verbose:
                    print(
                        "{}: filling {} missing rate using {} from {}".format(
                            currency, date, last_rate, last_date
                        )
                    )

It seems the lib is simply disregarding this information atm. I'd be happy to do it myself, but how would you like it to be done?

It ends at 21/02/2020

Hi,

It is not possible to see exchange rates after 21/02. Also, when I check the file, it shows 09/04 as the last date.

Is there a list with all supported currencys?

Hello folks and dear contributors,

is there any type of list, which contains all the currencys this module supports?
Because in my case it's pretty disappointing to see that only a few currencys are supported by this module.
That's why I would like to have a little overview over the supported currencys.

Thank's for every help in advance:)

Updated ECB exchange rates

A feature I really would appreciate is to have an option for updated ECB exchange rates.

Whenever you request an exchange rate, check if the current ECB exchange rate file is already available in the app, if not download it from the ECB. Downloading the latest exchange rates from the ECB is possible as follows:

import urllib2
from zipfile import ZipFile
from StringIO import StringIO
zip = ZipFile(StringIO(urllib2.urlopen('http://www.ecb.europa.eu/stats/eurofxref/eurofxref.zip').read()))
zip.extractall()

What I'm not sure about is where to store files, how to keep them as backups in case that a download is not possible, exact timing of when to download a new file (16:00 CET?), etc. I would also appreciate if a solution could be integrated into currencyconverter for better maintainability. What do you think?

Documentation of CurrencyConverter

Hi! Thanks for doing all this work :-)

Now, I've been looking through the code a number of times, but I'm still fuzzy on the exact roles of __init__'s fallback_on_wrong_date and fallback_on_missing_rate. Extrapolating this issue, it might be beneficial to document all the arguments for at least __init__ and convert, since the end user will need both to use this package.

If the maintainer is interested in receiving a PR, I wouldn't mind giving it a shot.

My understanding so far of __init__'s arguments:

  • currency_file: A filesystem path (str or pathlib.Path), or an URL starting with "http[s]://"
  • fallback_on_wrong_date: If False, convert will raise a RateNotFoundError when the requested date is outside our currency data's date range. If True, convert will instead use the youngest or oldest data point when the requested date is outside the range. It will still, however, raise a RateNotFoundError if you ask for a date that is missing inside the range, unless fallback_on_missing_rate=True.
  • fallback_on_missing_rate: If True, the data loading process will fill in data for missing dates (between min and max date) with the closest rate. Otherwise, they will be left as None.
  • ref_currency: The currency that the source data is oriented towards. This is EUR for the ECB data.
  • na_values: What to interpret as missing values from the source data.
  • verbose: Standard flag for how much info it should print.

Is that about right? :-)

Incorrect coversion rate found

Converting from DKK to USD with date 2023-08-09 gives an incorrect result.

As can be seen here:
Screenshot 2023-09-22 at 17 31 54

This is clearly not the correct conversion rate. The day before, i.e., 2023-08-08:
billede

I also checked with ECB and if I use their website to convert with the given date it also seems fine.

AED?

Hi, is it possible to add AED currency? Thanks in advance.

Detecting target currency based on user's locale

I know it's obsolete, and probably stupid but is it possible to get target currency based on user's locale.getdefaultlocale()?
On user demand of course.


>>> import currency_converter as cc
>>> from locale import getdefaultlocale as loc
>>> c = cc.CurrencyConverter()
>>>
>>> # View locale
>>> loc()
('pl_PL', 'cp1250')
>>> # pl_PL - PLN
>>> # en_US - USD
>>> # etc...
>>>
>>> # Based on `getdefaultlocale()`
>>> c.convert(125, "GBP", "local")	# or "auto"?
701.6934625842298
>>>
>>> # Manual
>>> c.convert(125, "GBP", "PLN")
701.6934625842298

Add another fall back (last known rate) in case of missing rate

Hello
We would need a new feature : falling back to the last known rate (rather than linear interpolation) in case rate is missing

I started a simple implementation but before going further I would like to know if you would consider such a feature. From what I saw in a comment that was probably forgotten it was the original implementation of the fallback
Anyway you can see my proposal there :
ululh@b6118b3
Ideally the current flag should be renamed but for backwards compatibility I only added a new one
Should you agree with the idea but disagree with the code please let me know any change you would like me to perform or provide advice on the implementation

Documentation not working

Hello there,

Thanks for the project, it works pretty well! Just wanted to let you know that the documentation doesn't appear to be working, I receive a Documentation not found error.

One extra question, how comes the allowed dates to convert EUR to USD are limited until the 9th of March?

Thanks again for your work :)

Cheers!

Logotype

Hello, I read your work, and this is an amazing project, congrats for that! Im a graphic designer that contributes for opensource projects like yours, so if you need some help to create a logotype or other stuff just say it.

Greetings!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.