Skip to content

Commit 3efedc9

Browse files
committed
Fix: Apply code formatting Using black
1 parent 7e1192b commit 3efedc9

File tree

90 files changed

+2177
-1428
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+2177
-1428
lines changed

.coverage

0 Bytes
Binary file not shown.

.github/workflows/ci.yaml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,20 @@ on:
77
branches: ["main"]
88

99
jobs:
10+
format-check:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- name: Checkout code
14+
uses: actions/checkout@v4
15+
16+
- name: Run Black code formatter check
17+
uses: psf/black@stable
18+
with:
19+
check: true
20+
1021
test:
1122
runs-on: ubuntu-latest
23+
needs: format-check
1224

1325
steps:
1426
- name: Checkout code
@@ -25,6 +37,6 @@ jobs:
2537
pip install -r requirements.txt
2638
pip install pytest pytest-cov
2739
28-
- name: Run tests
40+
- name: Run tests and coverage check
2941
run: |
3042
pytest --disable-warnings --maxfail=1 --cov=.

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,7 @@ pytest --disable-warnings
44

55
pytest --cov=.
66

7-
coverage html
7+
coverage html
8+
9+
10+
pytest --disable-warnings --maxfail=1 --cov=. --cov-fail-under=100

common/attendance.py

Lines changed: 46 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,23 @@
1212

1313
# === USER: CREATE ===
1414
def create_attendance(db: Session, punch_time, current_user: dict) -> Attendance:
15-
new_att = Attendance(
16-
punch_time=punch_time,
17-
fk_employee_id=current_user["id"]
18-
)
15+
new_att = Attendance(punch_time=punch_time, fk_employee_id=current_user["id"])
1916
db.add(new_att)
2017
db.commit()
2118
return new_att
2219

2320

2421
# === USER: READ OWN ===
2522
def get_my_attendance_all(db: Session, current_user: dict) -> List[Attendance]:
26-
return db.query(Attendance).filter(Attendance.fk_employee_id == current_user["id"]).all()
23+
return (
24+
db.query(Attendance)
25+
.filter(Attendance.fk_employee_id == current_user["id"])
26+
.all()
27+
)
2728

28-
2929

3030
def get_my_attendance_by_date(
31-
db: db_dependency,
32-
user: user_dependency,
33-
punch_date: date
31+
db: db_dependency, user: user_dependency, punch_date: date
3432
):
3533
start_dt = datetime.combine(punch_date, time.min)
3634
end_dt = datetime.combine(punch_date, time.max)
@@ -40,34 +38,32 @@ def get_my_attendance_by_date(
4038
.filter(
4139
Attendance.fk_employee_id == user["id"],
4240
Attendance.punch_time >= start_dt,
43-
Attendance.punch_time <= end_dt
41+
Attendance.punch_time <= end_dt,
4442
)
4543
.order_by(Attendance.punch_time)
4644
.all()
4745
)
4846

4947

50-
51-
5248
# MANAGER: All direct reports' attendance on a given date
5349
def get_manager_team_attendance_by_date(
5450
punch_date: date,
5551
db: Session,
5652
user: dict,
5753
) -> List[Attendance]:
5854
# Real check: does ANY employee report to this user?
59-
has_subordinates = db.query(Employee).filter(
60-
Employee.fk_manager_id == user["id"]
61-
).first()
55+
has_subordinates = (
56+
db.query(Employee).filter(Employee.fk_manager_id == user["id"]).first()
57+
)
6258

6359
if not has_subordinates:
6460
return [] # No one reports to you → empty list (safe)
6561

6662
managed_ids = [
67-
e.employee_id for e in
68-
db.query(Employee.employee_id)
69-
.filter(Employee.fk_manager_id == user["id"])
70-
.all()
63+
e.employee_id
64+
for e in db.query(Employee.employee_id)
65+
.filter(Employee.fk_manager_id == user["id"])
66+
.all()
7167
]
7268

7369
start_dt = datetime.combine(punch_date, time.min)
@@ -77,7 +73,7 @@ def get_manager_team_attendance_by_date(
7773
db.query(Attendance)
7874
.filter(
7975
Attendance.fk_employee_id.in_(managed_ids),
80-
Attendance.punch_time.between(start_dt, end_dt)
76+
Attendance.punch_time.between(start_dt, end_dt),
8177
)
8278
.order_by(Attendance.fk_employee_id, Attendance.punch_time)
8379
.all()
@@ -92,15 +88,17 @@ def get_manager_subordinate_attendance_by_date(
9288
user: dict,
9389
) -> List[Attendance]:
9490
# Security: employee must exist AND report directly to current user
95-
employee = db.query(Employee).filter(
96-
Employee.employee_id == employee_id,
97-
Employee.fk_manager_id == user["id"]
98-
).first()
91+
employee = (
92+
db.query(Employee)
93+
.filter(
94+
Employee.employee_id == employee_id, Employee.fk_manager_id == user["id"]
95+
)
96+
.first()
97+
)
9998

10099
if not employee:
101100
raise HTTPException(
102-
status_code=404,
103-
detail="Employee not found under your management"
101+
status_code=404, detail="Employee not found under your management"
104102
)
105103

106104
start_dt = datetime.combine(punch_date, time.min)
@@ -110,39 +108,43 @@ def get_manager_subordinate_attendance_by_date(
110108
db.query(Attendance)
111109
.filter(
112110
Attendance.fk_employee_id == employee_id,
113-
Attendance.punch_time.between(start_dt, end_dt)
111+
Attendance.punch_time.between(start_dt, end_dt),
114112
)
115113
.order_by(Attendance.punch_time)
116114
.all()
117115
)
118116

117+
119118
# === ADMIN: READ ALL ===
120119
def get_all_attendance(db: Session, user: user_dependency):
121120
_require_admin(user=user)
122121
return db.query(Attendance).all()
123122

124123

125-
def get_attendance_by_date_all_employees(db: Session, punch_date: datetime, user: user_dependency):
124+
def get_attendance_by_date_all_employees(
125+
db: Session, punch_date: datetime, user: user_dependency
126+
):
126127
_require_admin(user=user)
127128
start_dt = datetime.combine(punch_date, time.min)
128129
end_dt = datetime.combine(punch_date, time.max)
129130

130131
return (
131132
db.query(Attendance)
132-
.filter(
133-
Attendance.punch_time >= start_dt,
134-
Attendance.punch_time <= end_dt
135-
)
133+
.filter(Attendance.punch_time >= start_dt, Attendance.punch_time <= end_dt)
136134
.order_by(Attendance.punch_time)
137135
.all()
138136
)
139137

140138

141-
def get_attendance_by_date_one_employee(db: Session, employee_id: int, punch_date: datetime, user:user_dependency):
139+
def get_attendance_by_date_one_employee(
140+
db: Session, employee_id: int, punch_date: datetime, user: user_dependency
141+
):
142142
_require_admin(user=user)
143143
employee = db.query(Employee).filter(Employee.employee_id == employee_id).first()
144144
if not employee:
145-
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND,detail="Employee not found")
145+
raise HTTPException(
146+
status_code=status.HTTP_404_NOT_FOUND, detail="Employee not found"
147+
)
146148
start_dt = datetime.combine(punch_date, time.min)
147149
end_dt = datetime.combine(punch_date, time.max)
148150

@@ -158,13 +160,16 @@ def get_attendance_by_date_one_employee(db: Session, employee_id: int, punch_dat
158160
)
159161

160162

161-
def get_all_attendance_of_employee(db: Session, employee_id: int, user:user_dependency):
163+
def get_all_attendance_of_employee(
164+
db: Session, employee_id: int, user: user_dependency
165+
):
162166
_require_admin(user=user)
163-
employee = db.query(Employee).filter(Employee.employee_id==employee_id).first()
167+
employee = db.query(Employee).filter(Employee.employee_id == employee_id).first()
164168
if not employee:
165-
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Employee Not Founds")
166-
records = db.query(Attendance).filter(Attendance.fk_employee_id == employee_id).all()
169+
raise HTTPException(
170+
status_code=status.HTTP_404_NOT_FOUND, detail="Employee Not Founds"
171+
)
172+
records = (
173+
db.query(Attendance).filter(Attendance.fk_employee_id == employee_id).all()
174+
)
167175
return records
168-
169-
170-

common/common.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from fastapi import HTTPException, status
22

3+
34
def _require_admin(user: dict):
45
if not user.get("is_admin"):
56
raise HTTPException(
6-
status_code=status.HTTP_403_FORBIDDEN,
7-
detail="Admin privileges required"
7+
status_code=status.HTTP_403_FORBIDDEN, detail="Admin privileges required"
88
)

common/department.py

Lines changed: 46 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,21 @@
77
from common.common import _require_admin
88

99

10-
11-
1210
def _get_department_by_id(db: db_dependency, department_id: int) -> Department:
13-
department = db.query(Department).filter(Department.department_id == department_id).first()
11+
department = (
12+
db.query(Department).filter(Department.department_id == department_id).first()
13+
)
1414
if not department:
1515
raise HTTPException(status_code=404, detail="Department not found")
1616
return department
1717

1818

1919
def _get_department_by_name(db: db_dependency, department_name: str) -> Department:
20-
department = db.query(Department).filter(Department.department_name.ilike(department_name.strip())).first()
20+
department = (
21+
db.query(Department)
22+
.filter(Department.department_name.ilike(department_name.strip()))
23+
.first()
24+
)
2125
if not department:
2226
raise HTTPException(status_code=404, detail="Department not found")
2327
return department
@@ -33,10 +37,16 @@ def get_department_by_id(db: db_dependency, department_id: int):
3337

3438

3539
# === ADMIN: CREATE ===
36-
def create_department(db: db_dependency, department_name: str, user: dict) -> Department:
40+
def create_department(
41+
db: db_dependency, department_name: str, user: dict
42+
) -> Department:
3743
_require_admin(user)
3844
department_name = department_name.strip()
39-
if db.query(Department).filter(Department.department_name.ilike(department_name)).first():
45+
if (
46+
db.query(Department)
47+
.filter(Department.department_name.ilike(department_name))
48+
.first()
49+
):
4050
raise HTTPException(status_code=400, detail="Department already exists")
4151

4252
new_department = Department(department_name=department_name)
@@ -46,35 +56,55 @@ def create_department(db: db_dependency, department_name: str, user: dict) -> De
4656

4757

4858
# === ADMIN: UPDATE BY ID ===
49-
def update_department_by_id(db: db_dependency, department_id: int, new_department_name: str, user: dict) -> Department:
59+
def update_department_by_id(
60+
db: db_dependency, department_id: int, new_department_name: str, user: dict
61+
) -> Department:
5062
_require_admin(user)
5163
department = _get_department_by_id(db, department_id)
5264

5365
new_name = new_department_name.strip()
54-
if db.query(Department).filter(Department.department_name.ilike(new_name), Department.department_id != department_id).first():
55-
raise HTTPException(status_code=400, detail="Department with this name already exists")
66+
if (
67+
db.query(Department)
68+
.filter(
69+
Department.department_name.ilike(new_name),
70+
Department.department_id != department_id,
71+
)
72+
.first()
73+
):
74+
raise HTTPException(
75+
status_code=400, detail="Department with this name already exists"
76+
)
5677

5778
department.department_name = new_name
5879
db.commit()
5980
return department
6081

6182

6283
# === ADMIN: UPDATE BY NAME ===
63-
def update_department_by_name(db: db_dependency, current_department_name: str, new_department_name: str, user: dict) -> Department:
84+
def update_department_by_name(
85+
db: db_dependency,
86+
current_department_name: str,
87+
new_department_name: str,
88+
user: dict,
89+
) -> Department:
6490
_require_admin(user)
6591
department = _get_department_by_name(db, current_department_name)
6692

6793
new_name = new_department_name.strip()
6894
if db.query(Department).filter(Department.department_name.ilike(new_name)).first():
69-
raise HTTPException(status_code=400, detail="Department with this name already exists")
95+
raise HTTPException(
96+
status_code=400, detail="Department with this name already exists"
97+
)
7098

7199
department.department_name = new_name
72100
db.commit()
73101
return department
74102

75103

76104
# === ADMIN: DELETE BY ID ===
77-
def delete_department_by_id(db: db_dependency, department_id: int, user: dict) -> Dict[str, str]:
105+
def delete_department_by_id(
106+
db: db_dependency, department_id: int, user: dict
107+
) -> Dict[str, str]:
78108
_require_admin(user)
79109
department = _get_department_by_id(db, department_id)
80110
db.delete(department)
@@ -83,9 +113,11 @@ def delete_department_by_id(db: db_dependency, department_id: int, user: dict) -
83113

84114

85115
# === ADMIN: DELETE BY NAME ===
86-
def delete_department_by_name(db: db_dependency, department_name: str, user: dict) -> Dict[str, str]:
116+
def delete_department_by_name(
117+
db: db_dependency, department_name: str, user: dict
118+
) -> Dict[str, str]:
87119
_require_admin(user)
88120
department = _get_department_by_name(db, department_name)
89121
db.delete(department)
90122
db.commit()
91-
return {"detail": "Department deleted successfully"}
123+
return {"detail": "Department deleted successfully"}

0 commit comments

Comments
 (0)