migrator functions updated
This commit is contained in:
@@ -14,8 +14,7 @@ class ActionsSchema(ABC):
|
||||
from databases import EndpointRestriction
|
||||
|
||||
endpoint_restriction = EndpointRestriction.filter_one(
|
||||
EndpointRestriction.endpoint_name.ilike(f"%{self.endpoint}%"),
|
||||
system=True
|
||||
EndpointRestriction.endpoint_name.ilike(f"%{self.endpoint}%"), system=True
|
||||
).data
|
||||
if not endpoint_restriction:
|
||||
raise HTTPException(
|
||||
|
||||
@@ -558,7 +558,9 @@ class AuthenticationRefreshTokenEventMethods(MethodToEvent):
|
||||
cls, request: Request, data: Remember, token_dict: dict = None
|
||||
):
|
||||
token_refresher = UsersTokens.filter_by_one(
|
||||
token=data.refresh_token, domain=data.domain, **UsersTokens.valid_record_dict
|
||||
token=data.refresh_token,
|
||||
domain=data.domain,
|
||||
**UsersTokens.valid_record_dict,
|
||||
).data
|
||||
if not token_refresher:
|
||||
return JSONResponse(
|
||||
|
||||
@@ -71,6 +71,12 @@ class AuthenticationLoginEventMethods(MethodToEvent):
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid credentials"
|
||||
)
|
||||
access_object = access_dict.get("access_object")
|
||||
if not access_object:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
detail="This User has no active role registered. Please contact your administrator."
|
||||
)
|
||||
|
||||
return JSONResponse(
|
||||
content={
|
||||
@@ -111,11 +117,15 @@ class AuthenticationSelectEventMethods(MethodToEvent):
|
||||
},
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
)
|
||||
if selected_company := Companies.find_one(uu_id=data.company_uu_id):
|
||||
if selected_company := Companies.filter_one(
|
||||
Companies.uu_id==data.company_uu_id,
|
||||
*Companies.valid_record_args(Companies),
|
||||
).data:
|
||||
department_ids = [
|
||||
department.id
|
||||
for department in Departments.filter_by_active(
|
||||
company_id=selected_company.id
|
||||
for department in Departments.filter_all(
|
||||
Departments.company_id==selected_company.id,
|
||||
*Departments.valid_record_args(Departments),
|
||||
).data
|
||||
]
|
||||
duties_ids = [
|
||||
@@ -154,12 +164,12 @@ class AuthenticationSelectEventMethods(MethodToEvent):
|
||||
Departments.id == duties.department_id,
|
||||
).data
|
||||
bulk_id = Duty.filter_by_one(
|
||||
duty_code="BULK", **Duty.valid_record_args(Duty)
|
||||
duty_code="BULK", **Duty.valid_record_dict
|
||||
).data
|
||||
bulk_duty_id = Duties.filter_by_one(
|
||||
company_id=selected_company.id,
|
||||
duties_id=bulk_id.id,
|
||||
*Duties.valid_record_dict,
|
||||
**Duties.valid_record_dict,
|
||||
).data
|
||||
update_selected_to_redis(
|
||||
request=request,
|
||||
@@ -187,13 +197,13 @@ class AuthenticationSelectEventMethods(MethodToEvent):
|
||||
status_code=status.HTTP_200_OK,
|
||||
)
|
||||
elif token_user.user_type == 2:
|
||||
occupant_type = OccupantTypes.filter_by_one(uu_id=data.occupant_uu_id).data
|
||||
occupant_type = OccupantTypes.filter_by_one(system=True, uu_id=data.occupant_uu_id).data
|
||||
if not occupant_type:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
detail="Occupant Type is not found",
|
||||
)
|
||||
build_part = BuildParts.filter_by_one(uu_id=data.build_part_uu_id).data
|
||||
build_part = BuildParts.filter_by_one(system=True, uu_id=data.build_part_uu_id).data
|
||||
if not build_part:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
@@ -213,7 +223,7 @@ class AuthenticationSelectEventMethods(MethodToEvent):
|
||||
Companies.id == related_company.company_id,
|
||||
*Companies.valid_record_args(Companies),
|
||||
).data
|
||||
responsible_employee = Employees.find_one(
|
||||
responsible_employee = Employees.filter_one(
|
||||
Employees.id == related_company.employee_id,
|
||||
*Employees.valid_record_args(Employees),
|
||||
).data
|
||||
@@ -389,7 +399,7 @@ class AuthenticationCreatePasswordEventMethods(MethodToEvent):
|
||||
},
|
||||
status_code=status.HTTP_202_ACCEPTED,
|
||||
)
|
||||
found_user.create_password(found_user=found_user,password=data.password)
|
||||
found_user.create_password(found_user=found_user, password=data.password)
|
||||
# send_email_completed = send_email(
|
||||
# subject=f"Dear {found_user.user_tag}, your password has been changed.",
|
||||
# receivers=[str(found_user.email)],
|
||||
@@ -409,7 +419,6 @@ class AuthenticationCreatePasswordEventMethods(MethodToEvent):
|
||||
)
|
||||
|
||||
|
||||
|
||||
class AuthenticationDisconnectUserEventMethods(MethodToEvent):
|
||||
|
||||
event_type = "UPDATE"
|
||||
@@ -441,7 +450,10 @@ class AuthenticationDisconnectUserEventMethods(MethodToEvent):
|
||||
for key in already_tokens:
|
||||
token_user = json.loads(redis_cli.get(key) or {})
|
||||
redis_cli.delete(key)
|
||||
selected_user = Users.find_one(uu_id=token_user.get("uu_id"))
|
||||
selected_user = Users.filter_one(
|
||||
Users.uu_id==token_user.get("uu_id"),
|
||||
*Users.valid_record_args(Users),
|
||||
)
|
||||
selected_user.remove_refresher_token(
|
||||
domain=data.domain, disconnect=True
|
||||
)
|
||||
@@ -499,7 +511,10 @@ class AuthenticationLogoutEventMethods(MethodToEvent):
|
||||
for token_user in token_users:
|
||||
if token_dict.domain == data.domain:
|
||||
redis_cli.delete(token_user)
|
||||
selected_user = Users.find_one(uu_id=token_user.get("uu_id"))
|
||||
selected_user = Users.filter_one(
|
||||
Users.uu_id==token_user.get("uu_id"),
|
||||
*Users.valid_record_args(Users),
|
||||
)
|
||||
selected_user.remove_refresher_token(domain=data.domain)
|
||||
# UserLogger.log_error(
|
||||
# str(
|
||||
@@ -537,8 +552,8 @@ class AuthenticationRefreshTokenEventMethods(MethodToEvent):
|
||||
def authentication_refresher_token(
|
||||
cls, request: Request, data: Remember, token_dict: dict = None
|
||||
):
|
||||
token_refresher = UsersTokens.find_one(
|
||||
token=data.refresh_token, domain=data.domain
|
||||
token_refresher = UsersTokens.filter_by_one(
|
||||
system=True, token=data.refresh_token, domain=data.domain
|
||||
)
|
||||
if not token_refresher:
|
||||
return JSONResponse(
|
||||
|
||||
@@ -60,27 +60,19 @@ class CompanyCreateEventMethods(MethodToEvent):
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def company_create(cls, data: InsertCompany, token_dict):
|
||||
def company_create(
|
||||
cls, data: InsertCompany, token_dict: typing.Union[EmployeeTokenObject, OccupantTokenObject]
|
||||
):
|
||||
created_company = Companies.create_action(
|
||||
data=data, token=token_dict.companies_list
|
||||
data=data, token=token_dict
|
||||
)
|
||||
created_company.related_company = token_dict.get("company_uu_id")
|
||||
created_company.flush()
|
||||
created_company.related_company = token_dict.selected_company.company_uu_id
|
||||
created_company.save()
|
||||
return JSONResponse(
|
||||
content={
|
||||
"completed": True,
|
||||
"message": "Create Company record",
|
||||
"data": created_company.get_dict(),
|
||||
"password_token": {
|
||||
"password_token": created_company.password_token,
|
||||
"password_expires_day": str(created_company.password_expires_day),
|
||||
"password_expiry_begins": str(
|
||||
created_company.password_expiry_begins
|
||||
),
|
||||
"hash_password": created_company.hash_password,
|
||||
"related_company": created_company.related_company,
|
||||
},
|
||||
"data": created_company.get_dict()
|
||||
},
|
||||
status_code=status.HTTP_200_OK,
|
||||
)
|
||||
|
||||
@@ -58,11 +58,11 @@ class EmployeeCreateEventMethods(MethodToEvent):
|
||||
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
|
||||
):
|
||||
person = People.filter_one(
|
||||
People.uu_id==data.people_uu_id,
|
||||
People.uu_id == data.people_uu_id,
|
||||
*People.valid_record_args(People),
|
||||
).data
|
||||
staff = Staff.filter_one(
|
||||
Staff.uu_id==data.staff_uu_id,
|
||||
Staff.uu_id == data.staff_uu_id,
|
||||
*Staff.valid_record_args(Staff),
|
||||
).data
|
||||
if not staff:
|
||||
@@ -101,7 +101,7 @@ class EmployeeUpdateEventMethods(MethodToEvent):
|
||||
@classmethod
|
||||
def employee_update(cls, employee_uu_id: str, data: PatchRecord, token_dict):
|
||||
find_one_employee = Employees.filter_one(
|
||||
Employees.uu_id==employee_uu_id,
|
||||
Employees.uu_id == employee_uu_id,
|
||||
*Employees.valid_record_args(Employees),
|
||||
).data
|
||||
access_authorized_employee = Employees.select_action(
|
||||
@@ -188,12 +188,11 @@ class Employee2PeopleEmployEventMethods(MethodToEvent):
|
||||
@classmethod
|
||||
def company_employee_employ(cls, data: BindEmployees2People, token_dict):
|
||||
selected_staff = Staff.filter_one(
|
||||
Staff.uu_id==data.staff_uu_id,
|
||||
Staff.uu_id == data.staff_uu_id,
|
||||
*Staff.valid_record_args(Staff),
|
||||
).data
|
||||
selected_people = People.filter_one(
|
||||
People.uu_id==data.people_uu_id,
|
||||
*People.valid_record_args
|
||||
People.uu_id == data.people_uu_id, *People.valid_record_args
|
||||
).data
|
||||
if not selected_staff:
|
||||
raise HTTPException(
|
||||
@@ -251,7 +250,7 @@ class Employee2PeopleFireEventMethods(MethodToEvent):
|
||||
@classmethod
|
||||
def company_employee_fire(cls, data: BindEmployees2People, token_dict):
|
||||
selected_people = People.filter_one(
|
||||
People.uu_id==data.people_uu_id,
|
||||
People.uu_id == data.people_uu_id,
|
||||
*People.valid_record_args(People),
|
||||
).data
|
||||
if not selected_people:
|
||||
@@ -261,7 +260,7 @@ class Employee2PeopleFireEventMethods(MethodToEvent):
|
||||
)
|
||||
|
||||
find_one_employee: Employees = Employees.filter_one(
|
||||
Employees.people_id==selected_people.id,
|
||||
Employees.people_id == selected_people.id,
|
||||
*Employees.valid_record_args(Employees),
|
||||
).data
|
||||
if not find_one_employee:
|
||||
|
||||
@@ -45,7 +45,7 @@ class StaffCreateEventMethods(MethodToEvent):
|
||||
def staff_create(cls, data: InsertStaff, token_dict: EmployeeTokenObject):
|
||||
data_dict = data.excluded_dump()
|
||||
duties = Duties.filter_one(
|
||||
Duties.uu_id==data.duties_uu_id,
|
||||
Duties.uu_id == data.duties_uu_id,
|
||||
*Duties.valid_record_args(Duties),
|
||||
).data
|
||||
if not duties:
|
||||
@@ -77,12 +77,10 @@ class StaffGetByUUIDEventMethods(MethodToEvent):
|
||||
def staff_get_by_uu_id(cls, data: SelectStaff, token_dict):
|
||||
if data.duties_uu_id:
|
||||
duties_id = Duties.filter_one(
|
||||
Duties.uu_id==data.duties_uu_id,
|
||||
*Duties.valid_record_args(Duties)
|
||||
Duties.uu_id == data.duties_uu_id, *Duties.valid_record_args(Duties)
|
||||
).data
|
||||
selected_staffs = Staff.filter_all(
|
||||
Staff.duties_id == duties_id.id,
|
||||
*Staff.valid_record_args(Staff)
|
||||
Staff.duties_id == duties_id.id, *Staff.valid_record_args(Staff)
|
||||
)
|
||||
return JSONResponse(
|
||||
content={
|
||||
|
||||
@@ -43,7 +43,7 @@ class DecisionBookDecisionBookItemsListEventMethods(MethodToEvent):
|
||||
token_dict: typing.Union[EmployeeTokenObject, OccupantTokenObject],
|
||||
):
|
||||
decision_book = BuildDecisionBook.filter_one(
|
||||
BuildDecisionBook.uu_id==data.build_decision_book_uu_id,
|
||||
BuildDecisionBook.uu_id == data.build_decision_book_uu_id,
|
||||
*BuildDecisionBook.valid_record_args(BuildDecisionBook),
|
||||
)
|
||||
if not decision_book:
|
||||
@@ -232,17 +232,17 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
|
||||
== f"{decision_book.decision_type}_{data_info_type.key}",
|
||||
).data
|
||||
management_room = BuildParts.filter_one(
|
||||
BuildParts.build_id==build_id,
|
||||
BuildParts.part_no==0,
|
||||
BuildParts.build_id == build_id,
|
||||
BuildParts.part_no == 0,
|
||||
*BuildParts.valid_record_args(BuildParts),
|
||||
).data
|
||||
occupant_man = OccupantTypes.filter_by_one(
|
||||
occupant_code="MT-VPR", occupant_category_type="MT"
|
||||
).data
|
||||
manager_living_space = BuildLivingSpace.filter_one(
|
||||
BuildLivingSpace.build_parts_id==management_room.id,
|
||||
BuildLivingSpace.occupant_type==occupant_man.id,
|
||||
*BuildLivingSpace.valid_record_args(BuildLivingSpace)
|
||||
BuildLivingSpace.build_parts_id == management_room.id,
|
||||
BuildLivingSpace.occupant_type == occupant_man.id,
|
||||
*BuildLivingSpace.valid_record_args(BuildLivingSpace),
|
||||
).data
|
||||
if not manager_living_space.data:
|
||||
raise HTTPException(
|
||||
@@ -322,12 +322,12 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
|
||||
)
|
||||
|
||||
decision_book_person = BuildDecisionBookPerson.filter_one(
|
||||
BuildDecisionBookPerson.token==data.token,
|
||||
*BuildDecisionBookPerson.valid_record_args(BuildDecisionBookPerson)
|
||||
BuildDecisionBookPerson.token == data.token,
|
||||
*BuildDecisionBookPerson.valid_record_args(BuildDecisionBookPerson),
|
||||
).data
|
||||
decision_book = BuildDecisionBook.filter_one(
|
||||
BuildDecisionBook.id==decision_book_person.build_decision_book_id,
|
||||
*BuildDecisionBook.valid_record_args(BuildDecisionBook)
|
||||
BuildDecisionBook.id == decision_book_person.build_decision_book_id,
|
||||
*BuildDecisionBook.valid_record_args(BuildDecisionBook),
|
||||
).data
|
||||
BuildDecisionBookItems.check_meeting_is_valid_to_start_add_attendance(
|
||||
decision_book=decision_book,
|
||||
|
||||
@@ -62,8 +62,8 @@ class DecisionBookPersonAddEventMethods(MethodToEvent):
|
||||
)
|
||||
elif isinstance(token_dict, OccupantTokenObject):
|
||||
decision_book = BuildDecisionBook.filter_one(
|
||||
BuildDecisionBook.uu_id==data.build_decision_book_uu_id,
|
||||
*BuildDecisionBook.valid_record_args(BuildDecisionBook)
|
||||
BuildDecisionBook.uu_id == data.build_decision_book_uu_id,
|
||||
*BuildDecisionBook.valid_record_args(BuildDecisionBook),
|
||||
).data
|
||||
if not decision_book:
|
||||
raise HTTPException(
|
||||
@@ -281,7 +281,7 @@ class DecisionBookPersonAssignOccupantEventMethods(MethodToEvent):
|
||||
|
||||
build_parts_of_token = BuildParts.filter_all(
|
||||
BuildParts.build_id == token_dict.selected_occupant.build_id,
|
||||
*BuildParts.valid_record_args(BuildParts)
|
||||
*BuildParts.valid_record_args(BuildParts),
|
||||
).data
|
||||
selected_living_space = BuildLivingSpace.filter_one(
|
||||
BuildLivingSpace.uu_id == data.build_living_space_uu_id,
|
||||
|
||||
@@ -136,7 +136,8 @@ class BuildDecisionBookInvitationsCreateEventMethods(MethodToEvent):
|
||||
|
||||
# Get all the parts of the building that is occupant in token
|
||||
build_parts = BuildParts.filter_all(
|
||||
BuildParts.build_id == occupant_building.id, *BuildParts.valid_record_args(BuildParts)
|
||||
BuildParts.build_id == occupant_building.id,
|
||||
*BuildParts.valid_record_args(BuildParts),
|
||||
)
|
||||
|
||||
# Get all build living spaces that is found in building with distinct person id
|
||||
@@ -184,9 +185,10 @@ class BuildDecisionBookInvitationsCreateEventMethods(MethodToEvent):
|
||||
# Check if the invitation is already created at database
|
||||
for build_living_spaces_user in build_living_spaces_people:
|
||||
if invite := BuildDecisionBookPerson.filter_one(
|
||||
BuildDecisionBookPerson.invite_id==book_invitation.id,
|
||||
BuildDecisionBookPerson.build_living_space_id==build_living_spaces_user.id,
|
||||
*BuildDecisionBookPerson.valid_record_args(BuildDecisionBookPerson)
|
||||
BuildDecisionBookPerson.invite_id == book_invitation.id,
|
||||
BuildDecisionBookPerson.build_living_space_id
|
||||
== build_living_spaces_user.id,
|
||||
*BuildDecisionBookPerson.valid_record_args(BuildDecisionBookPerson),
|
||||
).data:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
@@ -217,7 +219,7 @@ class BuildDecisionBookInvitationsCreateEventMethods(MethodToEvent):
|
||||
|
||||
manager_living_spaces = BuildLivingSpace.filter_all(
|
||||
BuildLivingSpace.person_id == token_dict.person_id,
|
||||
*BuildLivingSpace.valid_record_args(BuildLivingSpace)
|
||||
*BuildLivingSpace.valid_record_args(BuildLivingSpace),
|
||||
)
|
||||
manager_people = BuildDecisionBookPerson.filter_all(
|
||||
BuildDecisionBookPerson.invite_id == book_invitation.id,
|
||||
@@ -227,12 +229,14 @@ class BuildDecisionBookInvitationsCreateEventMethods(MethodToEvent):
|
||||
for manager_living_space in manager_living_spaces.data
|
||||
]
|
||||
),
|
||||
*BuildLivingSpace.valid_record_args(BuildLivingSpace)
|
||||
*BuildLivingSpace.valid_record_args(BuildLivingSpace),
|
||||
)
|
||||
manager_people_occupants = BuildDecisionBookPersonOccupants.filter_all(
|
||||
BuildDecisionBookPersonOccupants.build_decision_book_person_id
|
||||
== manager_people.get(1).id,
|
||||
*BuildDecisionBookPersonOccupants.valid_record_args(BuildDecisionBookPersonOccupants)
|
||||
*BuildDecisionBookPersonOccupants.valid_record_args(
|
||||
BuildDecisionBookPersonOccupants
|
||||
),
|
||||
)
|
||||
manager_people_occupants.query.delete()
|
||||
manager_people.query.delete()
|
||||
|
||||
@@ -66,7 +66,7 @@ class EventBindOccupantEventMethods(MethodToEvent):
|
||||
|
||||
events_to_add_to_occupant = Events.filter_all(
|
||||
Events.uu_id.in_(list(data.event_uu_id_list)),
|
||||
*Events.valid_record_args(Events)
|
||||
*Events.valid_record_args(Events),
|
||||
)
|
||||
if not events_to_add_to_occupant.data:
|
||||
return JSONResponse(
|
||||
|
||||
@@ -38,15 +38,14 @@ class ServiceBindOccupantEventMethods(MethodToEvent):
|
||||
|
||||
living_space = BuildLivingSpace.filter_one(
|
||||
BuildLivingSpace.id == build_living_space_id,
|
||||
*BuildLivingSpace.valid_record_args(BuildLivingSpace)
|
||||
*BuildLivingSpace.valid_record_args(BuildLivingSpace),
|
||||
).data
|
||||
service = Services.filter_one(
|
||||
Services.id == service_id,
|
||||
*Services.valid_record_args(Services)
|
||||
Services.id == service_id, *Services.valid_record_args(Services)
|
||||
).data
|
||||
add_events_list = Service2Events.filter_all(
|
||||
Service2Events.service_id == service.id,
|
||||
*Service2Events.valid_record_args(Service2Events)
|
||||
*Service2Events.valid_record_args(Service2Events),
|
||||
).data
|
||||
if not add_events_list:
|
||||
raise Exception(
|
||||
@@ -106,7 +105,9 @@ class ServiceBindOccupantEventMethods(MethodToEvent):
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
)
|
||||
|
||||
occupant_occupant_type = OccupantTypes.filter_by_one(uu_id=data.occupant_uu_id).data
|
||||
occupant_occupant_type = OccupantTypes.filter_by_one(
|
||||
uu_id=data.occupant_uu_id
|
||||
).data
|
||||
if not occupant_occupant_type:
|
||||
return JSONResponse(
|
||||
content={
|
||||
@@ -142,7 +143,7 @@ class ServiceBindOccupantEventMethods(MethodToEvent):
|
||||
BuildLivingSpace.build_parts_id == occupants_build_part.id,
|
||||
BuildLivingSpace.occupant_types_id == occupant_occupant_type.id,
|
||||
BuildLivingSpace.person_id == token_dict.person_id,
|
||||
*BuildLivingSpace.valid_record_args(BuildLivingSpace)
|
||||
*BuildLivingSpace.valid_record_args(BuildLivingSpace),
|
||||
).data
|
||||
if not living_space:
|
||||
return JSONResponse(
|
||||
@@ -188,8 +189,12 @@ class ServiceBindEmployeeEventMethods(MethodToEvent):
|
||||
def bind_services_employee(cls, service_id: int, employee_id: int):
|
||||
from sqlalchemy.dialects.postgresql import insert
|
||||
|
||||
employee = Employees.filter_by_one(id=employee_id, **Employees.valid_record_dict).data
|
||||
service = Services.filter_by_one(id=service_id, **Services.valid_record_dict).data
|
||||
employee = Employees.filter_by_one(
|
||||
id=employee_id, **Employees.valid_record_dict
|
||||
).data
|
||||
service = Services.filter_by_one(
|
||||
id=service_id, **Services.valid_record_dict
|
||||
).data
|
||||
service_events = Service2Events.filter_all(
|
||||
Service2Events.service_id == service.id,
|
||||
*Service2Events.valid_record_args(Service2Events),
|
||||
@@ -220,6 +225,9 @@ class ServiceBindEmployeeEventMethods(MethodToEvent):
|
||||
count_row = session_execute.rowcount
|
||||
print(f"{count_row} events are added to employee {employee.uu_id}")
|
||||
Services.save()
|
||||
for service_event in service_events:
|
||||
service_event.is_confirmed = True
|
||||
Service2Events.save()
|
||||
|
||||
@classmethod
|
||||
def bind_services_employee_super_user(
|
||||
@@ -263,7 +271,7 @@ class ServiceBindEmployeeEventMethods(MethodToEvent):
|
||||
|
||||
service_events = Service2Events.filter_all(
|
||||
Service2Events.service_id == service.id,
|
||||
*Service2Events.valid_record_args(Service2Events)
|
||||
*Service2Events.valid_record_args(Service2Events),
|
||||
).data
|
||||
if not service_events:
|
||||
raise HTTPException(
|
||||
|
||||
Reference in New Issue
Block a user