Skip to content

Commit

Permalink
Add DateTime utility class and enhance data generation capabilities
Browse files Browse the repository at this point in the history
  • Loading branch information
Hunter87ff committed Dec 15, 2024
1 parent ed69f3d commit 5d206ef
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 4 deletions.
Empty file added app/core/locale/_address.py
Empty file.
49 changes: 49 additions & 0 deletions app/core/locale/_datetime.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
from datetime import datetime, timedelta
import random

class DateTime:
"""
DateTime class to generate datetime objects
"""

@staticmethod
def get_date(between_yr:str="2020-2025", format:str="%d/%m/%Y", era:str=""):
"""
Get date based on the era
"""
if "now"==era:
return datetime.now().strftime(format)
try:
_from = between_yr.split("-")[0]
_to = between_yr.split("-")[1]
_rand_yr = random.randint(int(_from), int(_to))
_date = (datetime.now() - timedelta(days=random.randint(1,10000)))
_yr = _date.year
return _date.strftime(format).replace(str(_yr), str(_rand_yr))

except Exception as e:
return str(e)

@staticmethod
def get_time(era:str="now"):
"""
Get time based on the era
"""
if era=="past":
return (datetime.now() - timedelta(hours=random.randint(1, 23))).time()
elif era=="future":
return (datetime.now() + timedelta(hours=random.randint(1, 23))).time()
return datetime.now().time()

@staticmethod
def get_datetime(era:str="past", format:str="%d/%m/%Y %H:%M:%S"):
"""
Get datetime based on the era
"""
if era=="past":
return (datetime.now() - timedelta(days=random.randint(1,1000))).strftime(format)
elif era=="future":
return (datetime.now() + timedelta(days=random.randint(1,1000))).strftime(format)
return datetime.now().strftime(format)

print(DateTime.get_datetime(""))
13 changes: 9 additions & 4 deletions app/core/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import traceback
import random, datetime,re
from faker import Faker
from core.locale import _datetime

_faker = Faker()
class Gen:
"""
Expand Down Expand Up @@ -53,24 +55,27 @@ def gen_static(query: str):
return Gen.gen_list(query.replace("list-", ""))

_data: dict = Gen.query_parser(query)
_type = _data["type"]
_type = _data.get("type")

# Dictionary mapping types to their generator functions
type_generators = {
"name": lambda: _faker.name(),
"email": lambda: _faker.email(domain=_data.get("domain", "gmail.com")),
"password": lambda: _faker.password(length=_data.get("len", 8)),
"text": lambda: _faker.text(max_nb_chars=int(_data.get("len", 3))),
"text": lambda: _faker.text(max_nb_chars=int(_data.get("len", 5))),
"str": lambda: _faker.text(max_nb_chars=int(_data.get("len", 3))),
"int": lambda: random.randint(10**(int(_data.get("len", 3))-1), (10**int(_data.get("len", 3)))-1),
"time": lambda: datetime.datetime.now().time(),
"date": lambda: _faker.date("%d-%m-%Y"),
"date": lambda: _datetime.DateTime.get_date(era=_data.get("era"), format=_data.get("format", "%d/%m/%Y"), between_yr=_data.get("between", "2000-2024")),
"address": lambda: _faker.address(),
"company": lambda: _faker.company(),
"phone": lambda: Gen.generate_mobile_number(country_code=_data.get("code", 91)),
"bool": lambda: random.choice([True, False]),
"float": lambda: random.uniform(1, 100),
"age": lambda: random.randint(int(_data.get("min",1)), int(_data.get("max", 100)))
"age": lambda: random.randint(int(_data.get("min",1)), int(_data.get("max", 100))),
"description": lambda: _faker.sentence(nb_words=int(_data.get("words", 4))),
"image": lambda: _faker.image_url(width=int(_data.get("width", 200)), height=int(_data.get("height", 200))),
"subject": lambda: _faker.sentence(nb_words=int(_data.get("words", 3))),
}

return type_generators.get(_type, lambda: "Invalid type")()
Expand Down

0 comments on commit 5d206ef

Please sign in to comment.