Tips and Tricks¶
Creating objects¶
If your app requires data in one particular language, it’s preferable to
use class Generic()
, giving access to all class providers through a
single object, rather than through multiple separate class providers.
Using Generic()
will allow you to get rid of several extra lines of
code.
Incorrect:
from mimesis import Person, Datetime, Text, Code
from mimesis.locales import Locale
person = Person(Locale.RU)
datetime = Datetime(Locale.RU)
text = Text(Locale.RU)
code = Code(Locale.RU)
Correct:
from mimesis import Generic
from mimesis.locales import Locale
generic = Generic(locale=Locale.EN)
generic.person.username()
# Output: 'sherley3354'
generic.datetime.date()
# Output: '14-05-2007'
Still correct:
from mimesis import Person
from mimesis.locales import Locale
p_en = Person(Locale.EN)
p_sv = Person(Locale.SV)
Also correct:
from mimesis import Person
person = Person(Locale.EN)
with person.override_locale(Locale.SV)
pass
It means that importing class providers separately makes sense only if
you limit yourself to the data available through the class you imported,
otherwise it’s better to use Generic()
.
Inserting data into database¶
If you need to generate data and import it into a database we strongly recommend generating data in chunks rather than 600k at once. Keep in mind the possible limitations of databases, ORM, etc. The smaller the generated data chunks are, the faster the process will go. Below you can see an abstract example of a Django command which uses Mimesis to bootstrap database.
Good:
~ python manage.py fill_fake_db --count=1000 --locale=de
Very bad:
~ python manage.py fill_fake_db --count=600000 --locale=de
Romanization of Cyrillic data¶
If your locale belongs to the family of Cyrillic languages, but you need
romanized locale-specific data, then you can use function romanize()
which
help you romanize your data.
Example of usage for romanization of Russian full name:
from mimesis.shortcuts import romanize
from mimesis.locales import Locale
romanize("Вероника Денисова", locale=Locale.RU)
# Output: 'Veronika Denisova'
At this moment it works only for Russian (ru), Ukrainian (uk) and Kazakh (kk):
Dummy API Endpoints¶
You can create dummy API endpoints when you have not data, but need them and know the structure of the endpoint’s response.
Let’s define the structure of the dummy response.
dummy_endpoints.py:
from mimesis.schema import Field, Schema
from mimesis.locales import Locale
from mimesis.enums import Gender
_ = Field(Locale.EN)
dummy_users = Schema(
lambda: {
'id': _('uuid'),
'name': _('name', gender=Gender.MALE),
'surname': _('surname', gender=Gender.MALE),
'email': _('email'),
'age': _('age'),
'username': _('username', template='UU_d'),
'occupation': _('occupation'),
"address": {
"street": _('street_name'),
"city": _('city'),
"zipcode": _('zip_code'),
},
}
)
Now, you can return unique response with JSON for each request.
Django/DRF Dummy API Endpoint¶
Basically you need just create simple view, which returns JsonResponse:
from dummy_endpoints import dummy_users
def users(request):
dummy_data = dummy_users.create(iterations=1)
return JsonResponse(dummy_data)
For DRF the same, but in terms of DRF:
from dummy_endpoints import dummy_users
class Users(APIView):
def get(self, request):
data = dummy_users.create(iterations=1)
return Response(data)
Response:
[
{
"id": "a46313ab-e218-41cb-deee-b9afd755a4dd",
"name": "Wally",
"surname": "Stein",
"email": "artiller1855@yahoo.com",
"age": 51,
"username": "SystemicZeuzera_1985",
"occupation": "Travel Courier",
"address": {
"street": "Lessing",
"city": "Urbandale",
"zipcode": "03983"
}
},
]
Flask Dummy API Endpoint¶
The same way as above:
from dummy_endpoints import dummy_users
@app.route('/users')
def users():
dummy_data = dummy_users.create(iterations=1)
return jsonify(dummy_data)
Response:
[
{
"id": "f2b326e3-4ce7-1ae9-9e6d-34a28fb70106",
"name": "Johnny",
"surname": "Waller",
"email": "vault1907@live.com",
"age": 47,
"username": "CaterpillarsSummational_1995",
"occupation": "Scrap Dealer",
"address": {
"street": "Tonquin",
"city": "Little Elm",
"zipcode": "30328"
}
},
]
Integration with third-party libraries¶
mimesis-factory - Integration with
factory_boy
.pytest-mimesis - is a pytest plugin that provides pytest fixtures for Mimesis providers.