api-python-tested/Controllers/Postgres/EnvTest/creator.py

88 lines
2.9 KiB
Python

import random
from faker import Faker
from faker_commerce import Provider
from Controllers.Postgres.engine import get_db, engine, Base
from Controllers.Postgres.schema import (
User,
Order,
Product,
Supplier,
ShippingAddress,
Category,
)
fake = Faker('en_US')
fake.add_provider(Provider)
num_rows = 1000
# Base.metadata.create_all(engine)
def commit_session_or_rollback(session, list_of_appends):
try:
session.add_all(list_of_appends)
session.commit()
except Exception as err:
print('Alchemy', str(err)[:113])
session.rollback()
raise
with get_db() as session:
# Generate and add unique Products
products = []
for _ in range(num_rows):
products.append(Product(name=fake.unique.ecommerce_name() + str(_), price=round(random.uniform(10, 2000), 2)))
commit_session_or_rollback(session, products)
product_ids = [p.id for p in session.query(Product).all()]
# Generate and add unique Categories
categories = []
for _ in range(num_rows):
categories.append(Category(name=fake.unique.domain_name() + str(_)))
commit_session_or_rollback(session, categories)
category_ids = [c.id for c in session.query(Category).all()]
# Generate and add unique Suppliers
suppliers = []
for _ in range(num_rows):
suppliers.append(Supplier(name=fake.unique.free_email() + str(_), rating=round(random.uniform(2.5, 5.0), 1)))
commit_session_or_rollback(session, suppliers)
supplier_ids = [s.id for s in session.query(Supplier).all()]
# Generate and add unique Shipping Addresses
shipping_addresses = []
for _ in range(num_rows):
shipping_addresses.append(ShippingAddress(
address_line_1=fake.unique.address(),
city=fake.unique.city(),
zip_code=fake.unique.zipcode()
))
commit_session_or_rollback(session, shipping_addresses)
shipping_address_ids = [sa.id for sa in session.query(ShippingAddress).all()]
# Generate and add unique Users
users = []
for _ in range(num_rows):
users.append(User(
username=fake.unique.user_name() + str(_),
account_balance=round(random.uniform(0, 5000), 2),
preferred_category_id=random.choice(category_ids),
last_ordered_product_id=random.choice(product_ids),
supplier_rating_id=random.choice(supplier_ids)
))
commit_session_or_rollback(session, users)
user_ids = [u.id for u in session.query(User).all()]
# Generate and add unique Orders
orders = []
for _ in range(num_rows):
orders.append(Order(
order_date=fake.unique.date(),
total_amount=round(random.uniform(10, 3000), 2),
user_id=random.choice(user_ids),
shipping_address_id=random.choice(shipping_address_ids)
))
commit_session_or_rollback(session, orders)