-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathbootstrapdb.py
More file actions
88 lines (70 loc) · 2.22 KB
/
bootstrapdb.py
File metadata and controls
88 lines (70 loc) · 2.22 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
from random import choice, choices
from string import digits
from faker import Faker
from sqlalchemy.exc import IntegrityError
from models import Employee, Department
from session import Session
def generate_pesel():
return "".join([choice(digits) for _ in range(11)])
def create_employee():
faker = Faker()
return Employee(
pesel=generate_pesel(),
first_name=faker.first_name(),
last_name=faker.last_name(),
email=faker.email(),
home_address=faker.address(),
phone=faker.phone_number(),
birth=faker.date_of_birth(minimum_age=18, maximum_age=65)
)
def create_employees(session: Session, count: int = 20):
total_employees = 0
while total_employees < count:
employee = create_employee()
session.add(employee)
try:
session.commit()
except IntegrityError:
print(f"Duplicate appeared {employee} / {total_employees}")
session.rollback()
else:
total_employees += 1
print(f"Total employees generated {total_employees}")
def pay_salaries(session: Session):
employees = session.query(Employee).all()
for employee in employees:
employee.pay(amount=5000)
session.commit()
def create_departments(session: Session):
departments = [
"HR", "HQ", "Sales", "IT", "Marketing", "Supply",
"Law", "Reclamation", "Support", "PR"
]
for department in departments:
session.add(
Department(
name=department,
address="Wiejska 1, Warszawa"
)
)
try:
session.commit()
except IntegrityError:
session.rollback()
def shuffle_employees(session: Session):
employees = session.query(Employee).all()
departments = choices(session.query(Department).all(), k=5)
for department in departments:
department.employees.extend(
choices(employees, k=20)
)
try:
session.commit()
except IntegrityError:
session.rollback()
if __name__ == "__main__":
session = Session()
create_employees(session)
pay_salaries(session)
create_departments(session)
shuffle_employees(session)