-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcreate-sample-data.py
More file actions
116 lines (91 loc) · 3.57 KB
/
create-sample-data.py
File metadata and controls
116 lines (91 loc) · 3.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import asyncio
from sqlmodel import select
from sqlmodel.ext.asyncio.session import AsyncSession
from app.db import async_session_maker, get_user_db
from app.models import UserGroup
from app.schemas import UserCreate
from app.users import UserManager
async def create_sample_groups(session: AsyncSession) -> dict[str, UserGroup]:
"""Create sample user groups."""
groups_data = ["Admin", "Developer", "Guest"]
created_groups = {}
for group_name in groups_data:
# Check if group already exists
existing_group = (
await session.exec(select(UserGroup).where(UserGroup.name == group_name))
).first()
if existing_group:
print(f"Group '{group_name}' already exists")
created_groups[group_name] = existing_group
else:
group = UserGroup(name=group_name)
session.add(group)
await session.flush()
created_groups[group_name] = group
print(f"Created group: {group_name}")
await session.commit()
return created_groups
async def create_sample_users(
session: AsyncSession, groups: dict[str, UserGroup]
) -> None:
"""Create sample users."""
users_data = [
{
"email": "admin@example.com",
"password": "admin123",
"group": "Admin",
"is_superuser": True,
},
{"email": "dev1@example.com", "password": "dev123", "group": "Developer"},
{"email": "dev2@example.com", "password": "dev456", "group": "Developer"},
{"email": "guest1@example.com", "password": "guest123", "group": "Guest"},
{"email": "guest2@example.com", "password": "guest456", "group": "Guest"},
{"email": "guest3@example.com", "password": "guest789", "group": "Guest"},
]
user_db = await anext(get_user_db(session))
user_manager = UserManager(user_db)
for user_data in users_data:
try:
# Check if user already exists
existing_user = await user_manager.get_by_email(user_data["email"])
if existing_user:
print(f"User '{user_data['email']}' already exists")
continue
except Exception:
# User doesn't exist, create new one
pass
try:
# Create user
user_create = UserCreate(
email=user_data["email"],
password=user_data["password"],
is_superuser=user_data.get("is_superuser", False),
)
user = await user_manager.create(user_create)
# Assign group
group = groups.get(user_data["group"])
if group:
user.group = group
session.add(user)
await session.commit()
print(f"Created user: {user_data['email']} (group: {user_data['group']})")
except Exception as e:
print(f"Failed to create user {user_data['email']}: {e}")
await session.rollback()
async def main():
"""Main function."""
print("Creating sample data...")
async with async_session_maker() as session:
try:
# Create groups
print("\n=== Creating Groups ===")
groups = await create_sample_groups(session)
# Create users
print("\n=== Creating Users ===")
await create_sample_users(session, groups)
print("\n✅ Sample data created successfully!")
except Exception as e:
print(f"❌ Error: {e}")
await session.rollback()
if __name__ == "__main__":
asyncio.run(main())