Last active
August 16, 2022 06:34
-
-
Save rg3915/744aacde209046901748 to your computer and use it in GitHub Desktop.
Generate random values with Python gen_random faker gen_date fake gen date fake
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import string | |
from datetime import date, datetime, timedelta | |
from decimal import Decimal | |
from random import choice, randint, random, randrange | |
import pytz | |
from django.utils.text import slugify | |
from faker import Faker | |
utc = pytz.UTC | |
faker = Faker() | |
fake = Faker('pt-br') | |
def gen_description(): | |
return faker.text() | |
def gen_address(): | |
address = fake.address() | |
street = address.split('\n')[0] | |
district = address.split('\n')[1] | |
zipcode = address.split('\n')[2].split()[0] | |
city = ' '.join(address.split('\n')[2].split()[1:-2]) | |
uf = address.split()[-1] | |
return { | |
'street': street, | |
'district': district, | |
'city': city, | |
'uf': uf, | |
'zipcode': zipcode, | |
} | |
def gen_date(): | |
return faker.date_between(start_date='-1y') | |
def gen_datetime(): | |
return faker.date_time_between(start_date='-120d', tzinfo=utc) | |
def gen_date_between(start_date='-3d', end_date='3d'): | |
today = date.today() | |
_start_date = int(start_date[:-1]) | |
_end_date = int(end_date[:-1]) | |
date_start = today + timedelta(days=_start_date) | |
date_end = today + timedelta(days=_end_date) | |
return fake.date_between_dates(date_start=date_start, date_end=date_end) | |
def gen_string(max_length): | |
return str(''.join(choice(string.ascii_letters) for i in range(max_length))) | |
def gen_age(min_age=15, max_age=99): | |
# gera numeros inteiros entre 15 e 99 | |
return randint(min_age, max_age) | |
def gen_digits(max_length): | |
return str(''.join(choice(string.digits) for i in range(max_length))) | |
def gen_email(first_name: str, last_name: str, company: str = None): | |
suffix = ('email', 'gmail', 'yahoo', 'hotmail', 'uol') | |
first_name = slugify(first_name) | |
last_name = slugify(last_name) | |
email = '{}.{}@{}.com'.format(first_name, last_name, suffix) | |
return email | |
def gen_rg(): | |
return gen_digits(10) | |
def gen_cpf(): | |
def calcula_digito(digs): | |
s = 0 | |
qtd = len(digs) | |
for i in range(qtd): | |
s += n[i] * (1 + qtd - i) | |
res = 11 - s % 11 | |
if res >= 10: | |
return 0 | |
return res | |
n = [randrange(10) for i in range(9)] | |
n.append(calcula_digito(n)) | |
n.append(calcula_digito(n)) | |
return "%d%d%d%d%d%d%d%d%d%d%d" % tuple(n) | |
def gen_phone(): | |
return f'{gen_digits(2)} {gen_digits(4)}-{gen_digits(4)}' | |
def gen_decimal(max_digits=5, decimal_places=2): | |
def num_as_str(x): return ''.join([str(randint(0, 9)) for i in range(x)]) | |
return Decimal("%s.%s" % (num_as_str(max_digits - decimal_places), num_as_str(decimal_places))) | |
def gen_date(min_year=1900, max_year=datetime.now().year): | |
# gera um date no formato yyyy-mm-dd | |
start = date(min_year, 1, 1) | |
years = max_year - min_year + 1 | |
end = start + timedelta(days=365 * years) | |
return start + (end - start) * random.random() | |
def gen_datetime(min_year=1900, max_year=datetime.now().year): | |
# gera um datetime no formato yyyy-mm-dd hh:mm:ss.000000 | |
start = datetime(min_year, 1, 1, 00, 00, 00) | |
years = max_year - min_year + 1 | |
end = start + timedelta(days=365 * years) | |
return start + (end - start) * random.random() | |
def gen_timestamp(min_year=1915, max_year=1997): | |
# gera um datetime no formato yyyy-mm-dd hh:mm:ss.000000 | |
min_date = datetime(min_year, 1, 1) | |
max_date = datetime(max_year + 1, 1, 1) | |
delta = random() * (max_date - min_date).total_seconds() | |
return (min_date + timedelta(seconds=delta)).isoformat(" ") | |
''' sorteio que cai dia 29 de fevereiro | |
i,d=0,gen_timestamp() | |
while d[5:10] != '02-29' and i < 100000: | |
i, d=i+1,gen_timestamp() | |
i,d | |
''' | |
def gen_ipi(): | |
def num_as_str(x): return ''.join( | |
[str(randint(0, 9)) for i in range(x)]) | |
return Decimal("0.%s" % (num_as_str(2))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment