Skip to content

Instantly share code, notes, and snippets.

@rg3915
Last active August 16, 2022 06:34
Show Gist options
  • Save rg3915/744aacde209046901748 to your computer and use it in GitHub Desktop.
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
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