eetlijst-python 0.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. eetlijst/__init__.py +3 -0
  2. eetlijst/eetlijst.py +37 -0
  3. eetlijst/exceptions.py +2 -0
  4. eetlijst/generated/__init__.py +1153 -0
  5. eetlijst/generated/all_attendances.py +13 -0
  6. eetlijst/generated/all_events.py +13 -0
  7. eetlijst/generated/all_expenses.py +13 -0
  8. eetlijst/generated/all_groups.py +27 -0
  9. eetlijst/generated/all_settlements.py +13 -0
  10. eetlijst/generated/all_users_in_group.py +20 -0
  11. eetlijst/generated/app_status.py +16 -0
  12. eetlijst/generated/async_base_client.py +393 -0
  13. eetlijst/generated/automatic_events.py +18 -0
  14. eetlijst/generated/base_model.py +28 -0
  15. eetlijst/generated/client.py +1748 -0
  16. eetlijst/generated/create_expense.py +15 -0
  17. eetlijst/generated/create_group.py +15 -0
  18. eetlijst/generated/create_list_item.py +15 -0
  19. eetlijst/generated/create_many_list_items.py +20 -0
  20. eetlijst/generated/create_settlement.py +15 -0
  21. eetlijst/generated/enums.py +555 -0
  22. eetlijst/generated/exceptions.py +83 -0
  23. eetlijst/generated/fragments.py +237 -0
  24. eetlijst/generated/get_attendance.py +17 -0
  25. eetlijst/generated/get_event.py +15 -0
  26. eetlijst/generated/get_group.py +20 -0
  27. eetlijst/generated/get_user.py +13 -0
  28. eetlijst/generated/get_user_in_group.py +20 -0
  29. eetlijst/generated/group_total_expense.py +45 -0
  30. eetlijst/generated/input_types.py +4702 -0
  31. eetlijst/generated/join_group.py +17 -0
  32. eetlijst/generated/list_items.py +13 -0
  33. eetlijst/generated/remove_account.py +16 -0
  34. eetlijst/generated/settle_unsettled_expenses.py +21 -0
  35. eetlijst/generated/settlement_expenses.py +13 -0
  36. eetlijst/generated/update_attendance.py +17 -0
  37. eetlijst/generated/update_event.py +15 -0
  38. eetlijst/generated/update_expense.py +20 -0
  39. eetlijst/generated/update_expense_distribution.py +23 -0
  40. eetlijst/generated/update_group.py +15 -0
  41. eetlijst/generated/update_list_item.py +15 -0
  42. eetlijst/generated/update_many_attendance.py +22 -0
  43. eetlijst/generated/update_user.py +15 -0
  44. eetlijst/generated/update_user_in_group.py +17 -0
  45. eetlijst/generated/update_users_in_group.py +25 -0
  46. eetlijst/services/__init__.py +9 -0
  47. eetlijst/services/app/__init__.py +1 -0
  48. eetlijst/services/app/app.py +20 -0
  49. eetlijst/services/app/transformers.py +10 -0
  50. eetlijst/services/event_attendance/__init__.py +1 -0
  51. eetlijst/services/event_attendance/event_attendance.py +94 -0
  52. eetlijst/services/event_attendance/transformers.py +58 -0
  53. eetlijst/services/events/__init__.py +1 -0
  54. eetlijst/services/events/events.py +148 -0
  55. eetlijst/services/events/transformers.py +67 -0
  56. eetlijst/services/expenses/__init__.py +1 -0
  57. eetlijst/services/expenses/expenses.py +98 -0
  58. eetlijst/services/expenses/transformers.py +73 -0
  59. eetlijst/services/expenses/utils.py +31 -0
  60. eetlijst/services/group_list/__init__.py +1 -0
  61. eetlijst/services/group_list/group_list.py +95 -0
  62. eetlijst/services/group_list/transformers.py +38 -0
  63. eetlijst/services/group_users/__init__.py +1 -0
  64. eetlijst/services/group_users/group_users.py +130 -0
  65. eetlijst/services/group_users/transformers.py +84 -0
  66. eetlijst/services/groups/__init__.py +1 -0
  67. eetlijst/services/groups/groups.py +84 -0
  68. eetlijst/services/groups/transformers.py +140 -0
  69. eetlijst/services/settlements/__init__.py +1 -0
  70. eetlijst/services/settlements/settlements.py +225 -0
  71. eetlijst/services/settlements/transformers.py +95 -0
  72. eetlijst/services/settlements/utils.py +84 -0
  73. eetlijst/services/users/__init__.py +1 -0
  74. eetlijst/services/users/transformers.py +103 -0
  75. eetlijst/services/users/users.py +44 -0
  76. eetlijst/utils/__init__.py +0 -0
  77. eetlijst/utils/datetime.py +25 -0
  78. eetlijst_python-0.0.1.dist-info/METADATA +80 -0
  79. eetlijst_python-0.0.1.dist-info/RECORD +81 -0
  80. eetlijst_python-0.0.1.dist-info/WHEEL +5 -0
  81. eetlijst_python-0.0.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,17 @@
1
+ from typing import Optional
2
+
3
+ from pydantic import Field
4
+
5
+ from .base_model import BaseModel
6
+
7
+
8
+ class JoinGroup(BaseModel):
9
+ join_group: Optional["JoinGroupJoinGroup"] = Field(alias="joinGroup")
10
+
11
+
12
+ class JoinGroupJoinGroup(BaseModel):
13
+ accepted: bool
14
+ error: Optional[str]
15
+
16
+
17
+ JoinGroup.model_rebuild()
@@ -0,0 +1,13 @@
1
+ from .base_model import BaseModel
2
+ from .fragments import ItemFields
3
+
4
+
5
+ class ListItems(BaseModel):
6
+ eetschema_list: list["ListItemsEetschemaList"]
7
+
8
+
9
+ class ListItemsEetschemaList(ItemFields):
10
+ pass
11
+
12
+
13
+ ListItems.model_rebuild()
@@ -0,0 +1,16 @@
1
+ from typing import Optional
2
+
3
+ from .base_model import BaseModel
4
+
5
+
6
+ class RemoveAccount(BaseModel):
7
+ update_eetschema_user_by_pk: Optional["RemoveAccountUpdateEetschemaUserByPk"]
8
+
9
+
10
+ class RemoveAccountUpdateEetschemaUserByPk(BaseModel):
11
+ reason_to_remove_account_text: Optional[str]
12
+ reason_to_remove_account_selection: Optional[list[str]]
13
+ reason_to_remove_account_selection_all_options: Optional[list[str]]
14
+
15
+
16
+ RemoveAccount.model_rebuild()
@@ -0,0 +1,21 @@
1
+ from typing import Optional
2
+
3
+ from .base_model import BaseModel
4
+ from .fragments import ExpenseFields
5
+
6
+
7
+ class SettleUnsettledExpenses(BaseModel):
8
+ update_eetschema_expense: Optional["SettleUnsettledExpensesUpdateEetschemaExpense"]
9
+
10
+
11
+ class SettleUnsettledExpensesUpdateEetschemaExpense(BaseModel):
12
+ number_expenses: int
13
+ expenses: list["SettleUnsettledExpensesUpdateEetschemaExpenseExpenses"]
14
+
15
+
16
+ class SettleUnsettledExpensesUpdateEetschemaExpenseExpenses(ExpenseFields):
17
+ pass
18
+
19
+
20
+ SettleUnsettledExpenses.model_rebuild()
21
+ SettleUnsettledExpensesUpdateEetschemaExpense.model_rebuild()
@@ -0,0 +1,13 @@
1
+ from .base_model import BaseModel
2
+ from .fragments import ExpenseFields
3
+
4
+
5
+ class SettlementExpenses(BaseModel):
6
+ eetschema_expense: list["SettlementExpensesEetschemaExpense"]
7
+
8
+
9
+ class SettlementExpensesEetschemaExpense(ExpenseFields):
10
+ pass
11
+
12
+
13
+ SettlementExpenses.model_rebuild()
@@ -0,0 +1,17 @@
1
+ from typing import Optional
2
+
3
+ from .base_model import BaseModel
4
+ from .fragments import AttendanceFields
5
+
6
+
7
+ class UpdateAttendance(BaseModel):
8
+ update_eetschema_event_attendees_by_pk: Optional[
9
+ "UpdateAttendanceUpdateEetschemaEventAttendeesByPk"
10
+ ]
11
+
12
+
13
+ class UpdateAttendanceUpdateEetschemaEventAttendeesByPk(AttendanceFields):
14
+ pass
15
+
16
+
17
+ UpdateAttendance.model_rebuild()
@@ -0,0 +1,15 @@
1
+ from typing import Optional
2
+
3
+ from .base_model import BaseModel
4
+ from .fragments import EventFields
5
+
6
+
7
+ class UpdateEvent(BaseModel):
8
+ update_eetschema_event_by_pk: Optional["UpdateEventUpdateEetschemaEventByPk"]
9
+
10
+
11
+ class UpdateEventUpdateEetschemaEventByPk(EventFields):
12
+ pass
13
+
14
+
15
+ UpdateEvent.model_rebuild()
@@ -0,0 +1,20 @@
1
+ from typing import Optional
2
+
3
+ from .base_model import BaseModel
4
+ from .fragments import ExpenseFields
5
+
6
+
7
+ class UpdateExpense(BaseModel):
8
+ update_eetschema_expense: Optional["UpdateExpenseUpdateEetschemaExpense"]
9
+
10
+
11
+ class UpdateExpenseUpdateEetschemaExpense(BaseModel):
12
+ returning: list["UpdateExpenseUpdateEetschemaExpenseReturning"]
13
+
14
+
15
+ class UpdateExpenseUpdateEetschemaExpenseReturning(ExpenseFields):
16
+ pass
17
+
18
+
19
+ UpdateExpense.model_rebuild()
20
+ UpdateExpenseUpdateEetschemaExpense.model_rebuild()
@@ -0,0 +1,23 @@
1
+ from typing import Optional
2
+
3
+ from .base_model import BaseModel
4
+
5
+
6
+ class UpdateExpenseDistribution(BaseModel):
7
+ delete_eetschema_expense_distribution: Optional[
8
+ "UpdateExpenseDistributionDeleteEetschemaExpenseDistribution"
9
+ ]
10
+ insert_eetschema_expense_distribution: Optional[
11
+ "UpdateExpenseDistributionInsertEetschemaExpenseDistribution"
12
+ ]
13
+
14
+
15
+ class UpdateExpenseDistributionDeleteEetschemaExpenseDistribution(BaseModel):
16
+ affected_rows: int
17
+
18
+
19
+ class UpdateExpenseDistributionInsertEetschemaExpenseDistribution(BaseModel):
20
+ affected_rows: int
21
+
22
+
23
+ UpdateExpenseDistribution.model_rebuild()
@@ -0,0 +1,15 @@
1
+ from typing import Optional
2
+
3
+ from .base_model import BaseModel
4
+ from .fragments import GroupFields
5
+
6
+
7
+ class UpdateGroup(BaseModel):
8
+ group: Optional["UpdateGroupGroup"]
9
+
10
+
11
+ class UpdateGroupGroup(GroupFields):
12
+ pass
13
+
14
+
15
+ UpdateGroup.model_rebuild()
@@ -0,0 +1,15 @@
1
+ from typing import Optional
2
+
3
+ from .base_model import BaseModel
4
+ from .fragments import ItemFields
5
+
6
+
7
+ class UpdateListItem(BaseModel):
8
+ update_eetschema_list_by_pk: Optional["UpdateListItemUpdateEetschemaListByPk"]
9
+
10
+
11
+ class UpdateListItemUpdateEetschemaListByPk(ItemFields):
12
+ pass
13
+
14
+
15
+ UpdateListItem.model_rebuild()
@@ -0,0 +1,22 @@
1
+ from typing import Optional
2
+
3
+ from .base_model import BaseModel
4
+ from .fragments import AttendanceFields
5
+
6
+
7
+ class UpdateManyAttendance(BaseModel):
8
+ insert_eetschema_event_attendees: Optional[
9
+ "UpdateManyAttendanceInsertEetschemaEventAttendees"
10
+ ]
11
+
12
+
13
+ class UpdateManyAttendanceInsertEetschemaEventAttendees(BaseModel):
14
+ returning: list["UpdateManyAttendanceInsertEetschemaEventAttendeesReturning"]
15
+
16
+
17
+ class UpdateManyAttendanceInsertEetschemaEventAttendeesReturning(AttendanceFields):
18
+ pass
19
+
20
+
21
+ UpdateManyAttendance.model_rebuild()
22
+ UpdateManyAttendanceInsertEetschemaEventAttendees.model_rebuild()
@@ -0,0 +1,15 @@
1
+ from typing import Optional
2
+
3
+ from .base_model import BaseModel
4
+ from .fragments import UserFields
5
+
6
+
7
+ class UpdateUser(BaseModel):
8
+ update_eetschema_user_by_pk: Optional["UpdateUserUpdateEetschemaUserByPk"]
9
+
10
+
11
+ class UpdateUserUpdateEetschemaUserByPk(UserFields):
12
+ pass
13
+
14
+
15
+ UpdateUser.model_rebuild()
@@ -0,0 +1,17 @@
1
+ from typing import Optional
2
+
3
+ from .base_model import BaseModel
4
+ from .fragments import UserInGroupFields
5
+
6
+
7
+ class UpdateUserInGroup(BaseModel):
8
+ update_eetschema_users_in_group_by_pk: Optional[
9
+ "UpdateUserInGroupUpdateEetschemaUsersInGroupByPk"
10
+ ]
11
+
12
+
13
+ class UpdateUserInGroupUpdateEetschemaUsersInGroupByPk(UserInGroupFields):
14
+ pass
15
+
16
+
17
+ UpdateUserInGroup.model_rebuild()
@@ -0,0 +1,25 @@
1
+ from typing import Optional
2
+
3
+ from .base_model import BaseModel
4
+ from .fragments import UserInGroupFields
5
+
6
+
7
+ class UpdateUsersInGroup(BaseModel):
8
+ update_eetschema_users_in_group_many: Optional[
9
+ list[Optional["UpdateUsersInGroupUpdateEetschemaUsersInGroupMany"]]
10
+ ]
11
+
12
+
13
+ class UpdateUsersInGroupUpdateEetschemaUsersInGroupMany(BaseModel):
14
+ number_users_in_group: int
15
+ users_in_group: list[
16
+ "UpdateUsersInGroupUpdateEetschemaUsersInGroupManyUsersInGroup"
17
+ ]
18
+
19
+
20
+ class UpdateUsersInGroupUpdateEetschemaUsersInGroupManyUsersInGroup(UserInGroupFields):
21
+ pass
22
+
23
+
24
+ UpdateUsersInGroup.model_rebuild()
25
+ UpdateUsersInGroupUpdateEetschemaUsersInGroupMany.model_rebuild()
@@ -0,0 +1,9 @@
1
+ from .app import App
2
+ from .event_attendance import EventAttendance
3
+ from .events import Events
4
+ from .expenses import Expenses
5
+ from .group_list import GroupList
6
+ from .group_users import GroupUsers
7
+ from .groups import Groups
8
+ from .settlements import Settlements
9
+ from .users import Users
@@ -0,0 +1 @@
1
+ from .app import App
@@ -0,0 +1,20 @@
1
+ from dataclasses import dataclass
2
+
3
+ from eetlijst.generated import GraphQlClient
4
+
5
+ from eetlijst.exceptions import EetlijstException
6
+
7
+ from eetlijst.services.app.transformers import transform_app_status
8
+
9
+
10
+ @dataclass
11
+ class App:
12
+ _client: GraphQlClient
13
+
14
+ async def status(self):
15
+ result = await self._client.app_status()
16
+
17
+ if not result or not result.eetschema_app_status:
18
+ raise EetlijstException("App status not found")
19
+
20
+ return transform_app_status(result)
@@ -0,0 +1,10 @@
1
+ from eetlijst.generated.app_status import AppStatus, AppStatusEetschemaAppStatus
2
+
3
+ from eetlijst.exceptions import EetlijstException
4
+
5
+
6
+ def transform_app_status(status: AppStatus) -> AppStatusEetschemaAppStatus:
7
+ if not status.eetschema_app_status:
8
+ raise EetlijstException("App status not found")
9
+
10
+ return status.eetschema_app_status[0]
@@ -0,0 +1 @@
1
+ from .event_attendance import EventAttendance
@@ -0,0 +1,94 @@
1
+ from dataclasses import dataclass
2
+
3
+ from eetlijst.generated import GraphQlClient
4
+ from eetlijst.generated.base_model import UNSET, UnsetType
5
+ from eetlijst.generated.enums import AttendanceStatus
6
+ from eetlijst.generated.input_types import (
7
+ eetschema_event_attendees_bool_exp,
8
+ eetschema_event_attendees_insert_input,
9
+ eetschema_event_attendees_order_by,
10
+ eetschema_event_attendees_set_input,
11
+ )
12
+
13
+ from .transformers import (
14
+ transform_attendance,
15
+ transform_update_attendance,
16
+ transform_update_many_attendance,
17
+ )
18
+
19
+
20
+ class EventAttendceAttend(eetschema_event_attendees_insert_input):
21
+ user_id: str
22
+ event_id: str
23
+ status: AttendanceStatus
24
+
25
+
26
+ class EventAttendceUpdate(eetschema_event_attendees_set_input):
27
+ user_id: str
28
+ event_id: str
29
+
30
+
31
+ @dataclass
32
+ class EventAttendance:
33
+ _client: GraphQlClient
34
+
35
+ async def get(
36
+ self,
37
+ event_id: str,
38
+ user_id: str,
39
+ ):
40
+ result = await self._client.get_attendance(event_id, user_id)
41
+ return transform_attendance(result.eetschema_event_attendees_by_pk)
42
+
43
+ async def all(
44
+ self,
45
+ where: eetschema_event_attendees_bool_exp | UnsetType | None = UNSET,
46
+ order: list[eetschema_event_attendees_order_by] | UnsetType | None = UNSET,
47
+ limit: int | UnsetType | None = UNSET,
48
+ ):
49
+ result = await self._client.all_attendances(where, order, limit)
50
+ return [
51
+ transform_attendance(attendee)
52
+ for attendee in result.eetschema_event_attendees
53
+ ]
54
+
55
+ async def attend(self, data: EventAttendceAttend):
56
+ return await self.update_many([data])
57
+
58
+ async def update(self, data: EventAttendceUpdate):
59
+ result = await self._client.update_attendance(data.event_id, data.user_id, data)
60
+ return transform_update_attendance(result)
61
+
62
+ async def update_many(self, data: list[eetschema_event_attendees_insert_input]):
63
+ result = await self._client.update_many_attendance(data)
64
+ return transform_update_many_attendance(result)
65
+
66
+ async def comment(self, user_id: str, event_id: str, comment: str | None):
67
+ return await self.update(
68
+ EventAttendceUpdate(
69
+ user_id=user_id,
70
+ event_id=event_id,
71
+ comment=comment,
72
+ )
73
+ )
74
+
75
+ async def status(
76
+ self, user_id: str, event_id: str, status: AttendanceStatus | None
77
+ ):
78
+ return await self.update(
79
+ EventAttendceUpdate(
80
+ user_id=user_id,
81
+ event_id=event_id,
82
+ status=status,
83
+ user_changed_status=True,
84
+ )
85
+ )
86
+
87
+ async def guests(self, user_id: str, event_id: str, guests: int | None):
88
+ return await self.update(
89
+ EventAttendceUpdate(
90
+ user_id=user_id,
91
+ event_id=event_id,
92
+ number_guests=guests,
93
+ )
94
+ )
@@ -0,0 +1,58 @@
1
+ from datetime import datetime
2
+ from typing import Optional
3
+
4
+ from eetlijst.generated.base_model import BaseModel
5
+ from eetlijst.generated.enums import AttendanceStatus
6
+ from eetlijst.generated.fragments import (
7
+ AttendanceFields,
8
+ AttendanceFieldsLinkedEvent,
9
+ AttendanceFieldsUserInGroup,
10
+ )
11
+ from eetlijst.generated.update_attendance import UpdateAttendance
12
+ from eetlijst.generated.update_many_attendance import UpdateManyAttendance
13
+
14
+ from eetlijst.exceptions import EetlijstException
15
+
16
+
17
+ class Attendance(BaseModel):
18
+ created_at: datetime
19
+ updated_at: datetime
20
+ comment: Optional[str]
21
+ number_guests: int
22
+ status: AttendanceStatus
23
+ event: AttendanceFieldsLinkedEvent
24
+ user: Optional[AttendanceFieldsUserInGroup]
25
+
26
+
27
+ def transform_attendance(attendance: Optional[AttendanceFields]) -> Attendance:
28
+ if not attendance:
29
+ raise EetlijstException("Attendance not found")
30
+
31
+ data = attendance.model_dump()
32
+
33
+ # 'linked_event' -> 'event'
34
+ if "linked_event" in data:
35
+ data["event"] = data.pop("linked_event")
36
+
37
+ # 'user_in_group' -> 'user'
38
+ if "user_in_group" in data:
39
+ data["user"] = data.pop("user_in_group")
40
+
41
+ return Attendance(**data)
42
+
43
+
44
+ def transform_update_attendance(update: UpdateAttendance):
45
+ if not update.update_eetschema_event_attendees_by_pk:
46
+ raise EetlijstException("Failed to update attendance")
47
+
48
+ return transform_attendance(update.update_eetschema_event_attendees_by_pk)
49
+
50
+
51
+ def transform_update_many_attendance(updates: UpdateManyAttendance):
52
+ if not updates.insert_eetschema_event_attendees:
53
+ raise EetlijstException("Failed to update attendance")
54
+
55
+ return [
56
+ transform_attendance(update)
57
+ for update in updates.insert_eetschema_event_attendees.returning
58
+ ]
@@ -0,0 +1 @@
1
+ from .events import Events
@@ -0,0 +1,148 @@
1
+ from dataclasses import dataclass
2
+ from datetime import datetime
3
+
4
+ from eetlijst.generated import GraphQlClient, order_by
5
+ from eetlijst.generated.input_types import (
6
+ eetschema_event_bool_exp,
7
+ eetschema_event_order_by,
8
+ eetschema_event_set_input,
9
+ uuid_comparison_exp,
10
+ )
11
+
12
+ from eetlijst.services.event_attendance import EventAttendance
13
+
14
+ from eetlijst.utils.datetime import current_datetime, format_date
15
+
16
+ from .transformers import (
17
+ transform_automatic_events,
18
+ transform_event,
19
+ transform_update_event,
20
+ )
21
+
22
+
23
+ @dataclass
24
+ class Events:
25
+ _client: GraphQlClient
26
+ attendance: EventAttendance
27
+
28
+ async def populate_dinners(self, group_id: str, date: datetime | str):
29
+ result = await self._client.automatic_events(
30
+ group_id,
31
+ format_date(date),
32
+ )
33
+ return transform_automatic_events(result)
34
+
35
+ async def get(
36
+ self,
37
+ event_id: str,
38
+ include_attendees: bool = False,
39
+ include_expenses: bool = False,
40
+ ):
41
+ result = await self._client.get_event(
42
+ event_id,
43
+ include_attendees,
44
+ include_expenses,
45
+ )
46
+ return transform_event(result.eetschema_event_by_pk)
47
+
48
+ async def all(
49
+ self,
50
+ group_id: str,
51
+ where: eetschema_event_bool_exp | None = None,
52
+ order: list[eetschema_event_order_by] | None = None,
53
+ limit: int | None = None,
54
+ include_attendees: bool = False,
55
+ include_expenses: bool = False,
56
+ ):
57
+ if where is not None:
58
+ where_data = where.model_copy(
59
+ update={"group_id": uuid_comparison_exp(_eq=group_id)}
60
+ )
61
+ else:
62
+ where_data = eetschema_event_bool_exp(
63
+ group_id=uuid_comparison_exp(_eq=group_id)
64
+ )
65
+
66
+ order_data = order
67
+ if order is None:
68
+ order_data = [eetschema_event_order_by(start_date=order_by.desc)]
69
+
70
+ result = await self._client.all_events(
71
+ where_data,
72
+ order_data,
73
+ limit,
74
+ include_attendees,
75
+ include_expenses,
76
+ )
77
+ return [transform_event(event) for event in result.eetschema_event]
78
+
79
+ async def update(
80
+ self,
81
+ event_id: str,
82
+ data: eetschema_event_set_input,
83
+ include_attendees: bool = False,
84
+ include_expenses: bool = False,
85
+ ):
86
+ result = await self._client.update_event(
87
+ event_id,
88
+ data,
89
+ include_attendees,
90
+ include_expenses,
91
+ )
92
+ return transform_update_event(result)
93
+
94
+ async def close(
95
+ self,
96
+ event_id: str,
97
+ closed_by: str,
98
+ include_attendees: bool = False,
99
+ include_expenses: bool = False,
100
+ ):
101
+ return await self.update(
102
+ event_id,
103
+ eetschema_event_set_input(
104
+ open=False,
105
+ changed_signup_time=True,
106
+ closed_by=closed_by,
107
+ signup_deadline=current_datetime(),
108
+ ),
109
+ include_attendees,
110
+ include_expenses,
111
+ )
112
+
113
+ async def open(
114
+ self,
115
+ event_id: str,
116
+ include_attendees: bool = False,
117
+ include_expenses: bool = False,
118
+ ):
119
+ return await self.update(
120
+ event_id,
121
+ eetschema_event_set_input(
122
+ open=True,
123
+ changed_signup_time=True,
124
+ signup_deadline=current_datetime(),
125
+ ),
126
+ include_attendees,
127
+ include_expenses,
128
+ )
129
+
130
+ async def close_at(
131
+ self,
132
+ event_id: str,
133
+ closed_by: str,
134
+ signup_deadline: datetime,
135
+ include_attendees: bool = False,
136
+ include_expenses: bool = False,
137
+ ):
138
+ return await self.update(
139
+ event_id,
140
+ eetschema_event_set_input(
141
+ open=False,
142
+ changed_signup_time=True,
143
+ closed_by=closed_by,
144
+ signup_deadline=signup_deadline,
145
+ ),
146
+ include_attendees,
147
+ include_expenses,
148
+ )