Mimesis: Locale not respected for business.currency_iso_code()

Created on 1 Apr 2019  Â·  8Comments  Â·  Source: lk-geimfari/mimesis

Bug report

What's wrong

I'm trying to use mimesis to generate mock data for tests I'm going to develop and am writing schema to do so.

I set the locale when instantiating an object of class Field(), but on calling business.currency_iso_code() I get random ISO currency codes, whilst I was expecting (or hoping!) to get those for the current locale.

import random
from mimesis.schema import Field, Schema

class SlotData2():
    def __init__(self, locale, max_currency=10):
        self.field = Field(locale)
        self.max_currency = max_currency

    def _generate_cost(self):
        cost = (
            lambda: {
                'amount': self.field('business.price'),
                'currency': self.field('business.currency_iso_code'),
            }
        )
        cost_schema = Schema(schema=cost)
        return cost_schema.create(random.randint(1, self.max_currency))

The business.price is always the correct locale, but the business.currency_iso_code varies as the following shows...

In [200]: test2 = SlotData2('en-gb', 10)

In [201]: test2._generate_cost()
Out[201]: 
[{'amount': '196.66 £', 'currency': 'BZD'},
 {'amount': '223.12 £', 'currency': 'VUV'}]

In [202]: test2._generate_cost()
Out[202]: 
[{'amount': '626.08 £', 'currency': 'XCD'},
 {'amount': '904.78 £', 'currency': 'BOV'},
 {'amount': '836.96 £', 'currency': 'XUA'},
 {'amount': '529.19 £', 'currency': 'LYD'},
 {'amount': '341.14 £', 'currency': 'ILS'},
 {'amount': '136.68 £', 'currency': 'MGA'},
 {'amount': '691.84 £', 'currency': 'KHR'},
 {'amount': '493.02 £', 'currency': 'SDG'},
 {'amount': '250.04 £', 'currency': 'BGN'},
 {'amount': '649.36 £', 'currency': 'AUD'}]

In [203]: test2._generate_cost()
Out[203]: 
[{'amount': '963.86 £', 'currency': 'MNT'},
 {'amount': '707.13 £', 'currency': 'TRY'},
 {'amount': '322.74 £', 'currency': 'SHP'}]

I checked with Generic('en-gb') and it too returns random ISO currency codes rather than the expected GBP...

In [204]: g = Generic('en-gb')

In [205]: g.business.currency_iso_code()
Out[205]: 'AFN'

In [206]: g.business.currency_iso_code()
Out[206]: 'USD'

In [207]: g.business.currency_iso_code()
Out[207]: 'ALL'

How is that should be

I would expect business.currency_iso_code() to return the code for the specified locale.

System information

python --version
Python 3.6.7
In [209]: mimesis.__version__
Out[209]: '3.1.0'
bug

Most helpful comment

@lk-geimfari @slackline I'm working on this

All 8 comments

@slackline Hi! Thanks for your interest. It seems like at this moment we do not count locale on generating currency iso code.

@ceccoemi Are you interesting? It's can be done easily, but I'm busy until this weekends.

@slackline We will work on it ASAP. Thanks again for your report.

Thanks for the rapid response @lk-geimfari. I've started looking at the code to see if I could come up with a solution, if I can work it out before then I'll submit a PR.

What we need to do:

  1. Add currency code for all locales to file business.json
  2. Return code from json file, not from the list
  3. Add parameter allow_random=True to have availability of support much more currency codes (so as not to limit their number - the number of languages supported.).

@lk-geimfari @slackline I'm working on this

@ceccoemi Great! Thank you very much!

Thanks @ceccoemi

Was this page helpful?
0 / 5 - 0 ratings

Related issues

lk-geimfari picture lk-geimfari  Â·  3Comments

faheel picture faheel  Â·  4Comments

dumprop picture dumprop  Â·  6Comments

jjgriff93 picture jjgriff93  Â·  5Comments

lk-geimfari picture lk-geimfari  Â·  4Comments