Генерация фиктивных данных с Mimesis: Часть I

Генерация фиктивных данных с Mimesis: Часть I

Mimesis — это библиотека для языка программирования Python, которая помогает генерировать фиктивные данные для различных целей. Библиотека написана с использованием средств, включенных в стандартную библиотеку языка Python, потому не имеет никаких сторонних зависимостей. На данный момент библиотека поддерживает 30 языковых стандартов (в числе которых и русский) и более 20 классов-провайдеров, предоставляющих разного рода данные.

Возможность генерировать фиктивные, но в то же время валидные данные бывает очень полезна при разработке приложений, которые подразумевают работу с базой данных. Ручное заполнение базы данных представляется довольно затратным по времени и трудоемким процессом, который выполняется как минимум в 3 этапа — это:

  1. Сбор необходимой информации.
  2. Постобработка собранных данных.
  3. Программирования генераторов данных.

Эта непростая задача по-настоящему усложняется в тот момент, когда требуется сгенерировать не 10-15 пользователей, а 100-150 тысяч пользователей (или иного рода данные). В этой и двух последующих статьях мы постараемся обратить ваше внимание на инструмент, который в разы упрощает процесс генерации тестовых данных, начальной загрузки базы данных и тестирования в целом.

Общая информация

Поддерживаемые языковые стандарты:

№ Код Название 1 cs Чешский 2 da Датский 3 de Немецкий 4 de-at Австрийский немецкий 5 de-ch Швейцарский немецкий 6 en Английский 7 en-au Австралийский английский 8 en-ca Канадский английский 9 en-gb Британский английский 10 es Испанский 11 es-mx Мексиканский испанский 12 fa Персидский (Фарси) 13 fi Финский 14 fr Французский 15 hu Венгерский 16 is Исландский 17 it Итальянский 18 ja Японский 19 ko Корейский 20 nl Нидерландский 21 nl-be Бельгийский нидерландский 22 no Норвежский 23 pl Польский 24 pt Португальский 25 pt-br Бразильский португальский 26 ru Русский 27 sv Шведский 28 tr Турецкий 29 uk Украинский 30 zh Китайский

Список поддерживаемых классов-провайдеров постоянно расширяется. Все поддерживаемы поставщики данных перечислены тут.

Помимо перечисленных выше, поддерживаются так же специфичные для конкретных стран данные, которые можно импортировать из подпакета builtins :

№ Провайдер Методы 1 USASpecProvider tracking_number(), ssn(), personality() 2 JapanSpecProvider full_to_half(), half_to_full() 2 RussiaSpecProvider patronymic(), passport_series(), passport_number(), snils() 2 BrazilSpecProvider cpf(), cnpj() Установка

Установка Mimesis производится как обычно, т.е посредством пакетного менеджера pip . Чтобы установить последнюю свежую версию библиотеки выполните следующую команду:

Если по каким-то причинам у вас не получается установить пакет с помощью pip , то попробуйте установить его вручную, как показано ниже:

Обращаем ваше внимание, что библиотека работает только на Python 3.5 + . Никаких планов по добавлению поддержки Python 2.7 у разработчиков нет.

Генерация

Изначально мы планировали показать генерацию данных на примере небольшого веб-приложения на Flask, но решили отказаться от этой идеи, по той причине, что не все знакомы с Flask и не все горят желанием это исправлять. Потому мы будем показывать все на чистом Python. В случае, если вы захотите перенести все в свой проект на Flask или Django, то вам нужно всего лишь определить статический метод, выполняющий все манипуляции связанные с текущей моделью и вызывать его в тот момент, когда нужно выполнить начальную загрузку БД, как показано в примере ниже.

Модель для Flask ( Flask-SQLAlchemy ) будет выглядеть как-то так:

Переходим в shell-mode:

И генерируем данные, предварительно убедившись в том, что база данных и подопытная модель доступны.

Введение

Хотелось бы отметить, что мы будем приводить в примерах только базовые возможности библиотеки и, в основном, обойдемся несколькими наиболее часто встречающимися классами-провайдерами, ибо их слишком много, чтобы рассказывать обо всех в деталях. Если статья возбудит в вас интерес к библиотеке, то вы сможете найти полезные ссылки в самом конце статьи и самостоятельно все изучить.

Библиотека устроена довольно просто и все, что вам необходимо для того, чтобы начать работать с данным — это создать экземпляр класса-провайдера. Наиболее часто встречающиеся данные в веб-приложениях — это личные данные пользователя, такие как имя пользователя , имя , фамилия , возраст , кредитные данные и т.п. Для генерации таких данных существует специальный класс-провайдер — Personal() , который принимает код языкового стандарта в виде строки, как показано ниже:

Практически каждое веб-приложение требует ввода e-mail адреса при регистрации. Библиотека, разумеется поддерживает возможность генерировать e-mail адреса и делается это с помощью метода email() класса Personal() , как показано ниже:

В способе, что был приведен выше кроется небольшая проблема, которая может несколько загрязнять код, если в приложении используется не один единственный класс-провайдер, а несколько. В таких случаях следует использовать объект Generic() , который дает доступ ко всем провайдерам из одного единственного объекта, как показано ниже:

Комбинирование данных дает большой простор. К примеру можно создать фиктивных держателей (женского пола) карты Visa (или MasterCard, Maestro):

Как уже говорилось выше, библиотека поддерживает более 20 классов-провайдеров, которые содержат данные на все случаи жизни (если нет, то ждем PR с исправлением этого ужасного недоразумения). К примеру, если вы разрабатываете приложение ориентированное на грузоперевозки или на иную деятельность, связанную с транспортом и вам необходимо сгенерировать модели транспорта, то вы с легкостью сможете сделать это, воспользовавшись классом-провайдером Transport() , который содержит данные о транспорте:

Ну или можно указать маску модели транспорта:

Нередко при тестировании веб-приложений (тестирование блога — яркий пример) возникает необходимость сгенерировать текстовые данные ( текст , предложение , тег и.т.п.). Вбивать вручную текст при тестировании — это долго и скучно и Mimesis позволяет этого избежать, благодаря классу-провайдеру Text() :

Можно получить список случайных слов:

Cгенерировать название улицы:

Получить название субъекта/штата/провинции странны, к которой относится выбранный языковой стандарт. В данном случае — это субъект Российской Федерации:

В библиотеке так же есть средства для романизации кириллических языков (на момент написания статьи поддерживаются только русский и украинский):

На самом деле возможностей очень много и можно придумать огромное количество куда более наглядных примеров, в контексте которых данные будут выглядеть более ценными, чем выше. Мы ждем таких примеров от вас — читателей. Мы будем очень рады прочитать об успешном опыте применении библиотеки в ваших проектах.

Полезные ссылки:

Здесь вы можете найти вторую часть статьи. Здесь вы сможете прочитать дополненный вариант этой статьи и много других интересных статей на разные темы.

📎📎📎📎📎📎📎📎📎📎