Source code for dr_data.randoms
import random
from datetime import datetime, timedelta, timezone
from faker import Faker
from faker.providers import person, file, internet, phone_number
fake = Faker()
fake.add_provider(person)
fake.add_provider(file)
fake.add_provider(internet)
fake.add_provider(phone_number)
[docs]class Randoms:
"""
Class that produces random data
"""
[docs] @staticmethod
def get_hash(length):
"""
Creates a random hash value
:param length: length of the hadh
:type length: str
:return: string hash
:rtype: str
"""
choices = '0123456789abcdefghijklmnopqrstuvwxyz'
results = ''.join(random.choice(choices) for i in range(length))
return results
[docs] @staticmethod
def get_datetime(min_year=1900, max_year=datetime.now().year):
"""
Creates a random Datetime value
:param min_year: Minimum years to start at, default is 1900
:type min_year: int
:param max_year: Maximum years to end at, default is current date
:type max_year: int
:return: Datetime
:rtype: Datetime
"""
# generate a datetime in format 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()
[docs] @staticmethod
def get_datetime_with_timezone(min_year=1900, max_year=datetime.now().year):
"""
Creates a random Datetime value with timezone
:param min_year: Minimum years to start at, default is 1900
:type min_year: int
:param max_year: Maximum years to end at, default is current date
:type max_year: int
:return: Datetime
:rtype: Datetime
"""
start = datetime(min_year, 1, 1, 00, 00, 00, tzinfo=timezone.utc)
years = max_year - min_year + 1
end = start + timedelta(days=365 * years)
return start + (end - start) * random.random()
[docs] @staticmethod
def get_number():
"""
Creates a random number value
:return: string number
:rtype: str
"""
return str(random.randint(1, 999))
[docs] @staticmethod
def get_boolean():
"""
Creates a random boolean value
:return: Boolean
:rtype: bool
"""
return random.choice([True, False])
[docs] @staticmethod
def get_value_from_list(selected_list):
"""
Gets random value from list
:param selected_list: The list to select the random item
:type selected_list: list[str]
:return: Value from the list
:rtype: str
"""
return random.choice(selected_list)
[docs] @staticmethod
def get_custom_text(column_name):
"""
Creates custom text values based on the column type
:param column_name: Name of the column
:type column_name: str
:return: string value
:rtype: str
"""
column_name = str(column_name).lower()
if column_name == 'first_name' or column_name == 'firstname':
return fake.first_name()
elif column_name == 'last_name' or column_name == 'lastname':
return fake.last_name()
elif column_name == 'phone_number' or column_name == 'phonenumber':
return fake.phone_number()
elif column_name == 'file_name' or column_name == 'filename':
fake_files = [fake.file_path(depth=5, extension='csv'),
fake.file_path(depth=5, extension='txt'),
fake.file_path(depth=5, extension='bat')]
return Randoms.get_value_from_list(fake_files)
elif column_name == 'uri':
return fake.uri()
else:
return Randoms.get_hash(25)