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,103 @@
1
+ from datetime import datetime
2
+ from typing import Optional
3
+
4
+ from pydantic import BaseModel
5
+
6
+ from eetlijst.generated.fragments import UserFields, UserFieldsPrivate
7
+ from eetlijst.generated.get_user import GetUser
8
+ from eetlijst.generated.remove_account import (
9
+ RemoveAccount,
10
+ RemoveAccountUpdateEetschemaUserByPk,
11
+ )
12
+ from eetlijst.generated.update_user import UpdateUser
13
+
14
+ from eetlijst.exceptions import EetlijstException
15
+
16
+
17
+ class CookPointsImportResult(BaseModel):
18
+ cook_points: float
19
+ allowed_to_edit: bool
20
+
21
+
22
+ class UserResult(BaseModel):
23
+ id: str
24
+ name: str
25
+ origin: Optional[str] = None
26
+ email: Optional[str] = None
27
+ birthday: Optional[datetime] = None
28
+ profile_image: Optional[str] = None
29
+ profile_image_url: Optional[str] = None
30
+ order_of_buttom_bar: Optional[str] = None
31
+ funnel_lead: Optional[str] = None
32
+ cook_points_imports: list[CookPointsImportResult] = []
33
+
34
+
35
+ class UserPrivateResult(UserFieldsPrivate):
36
+ profile_image_url: Optional[str] = None
37
+
38
+
39
+ def transform_user_private(user: Optional[UserFieldsPrivate]) -> UserPrivateResult:
40
+ if not user:
41
+ raise EetlijstException("User not found")
42
+
43
+ profile_image_url = (
44
+ f"https://node.eetlijst.nl/api/v1/drive/get_file/{user.profile_image}"
45
+ if user.profile_image
46
+ else None
47
+ )
48
+
49
+ return UserPrivateResult(
50
+ **user.model_dump(),
51
+ profile_image_url=profile_image_url,
52
+ )
53
+
54
+
55
+ def transform_user(user: Optional[UserFields]) -> UserResult:
56
+ if not user:
57
+ raise EetlijstException("User not found")
58
+
59
+ profile_image_url = (
60
+ f"https://node.eetlijst.nl/api/v1/drive/get_file/{user.profile_image}"
61
+ if user.profile_image
62
+ else None
63
+ )
64
+
65
+ cook_points_imports = [
66
+ CookPointsImportResult(
67
+ cook_points=entry.cook_points,
68
+ allowed_to_edit=entry.allowed_to_edit,
69
+ )
70
+ for entry in (user.cook_points_imports or [])
71
+ if entry is not None
72
+ ]
73
+
74
+ user_data = user.model_dump(exclude={"cook_points_imports"})
75
+
76
+ return UserResult(
77
+ **user_data,
78
+ profile_image_url=profile_image_url,
79
+ cook_points_imports=cook_points_imports,
80
+ )
81
+
82
+
83
+ def transform_get_user(result: GetUser) -> UserPrivateResult:
84
+ if not result.eetschema_user_private or len(result.eetschema_user_private) == 0:
85
+ raise EetlijstException("User not found")
86
+
87
+ return transform_user_private(result.eetschema_user_private[0])
88
+
89
+
90
+ def transform_update_user(result: UpdateUser) -> UserResult:
91
+ if not result.update_eetschema_user_by_pk:
92
+ raise EetlijstException("Failed to update user")
93
+
94
+ return transform_user(result.update_eetschema_user_by_pk)
95
+
96
+
97
+ def transform_remove_account_reasons(
98
+ result: RemoveAccount,
99
+ ) -> RemoveAccountUpdateEetschemaUserByPk:
100
+ if not result.update_eetschema_user_by_pk:
101
+ raise EetlijstException("Failed to remove user")
102
+
103
+ return result.update_eetschema_user_by_pk
@@ -0,0 +1,44 @@
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.input_types import eetschema_user_set_input
6
+
7
+ from .transformers import (
8
+ transform_get_user,
9
+ transform_remove_account_reasons,
10
+ transform_update_user,
11
+ )
12
+
13
+
14
+ @dataclass
15
+ class Users:
16
+ _client: GraphQlClient
17
+
18
+ async def get(self, user_id: str):
19
+ result = await self._client.get_user(user_id=user_id)
20
+ return transform_get_user(result)
21
+
22
+ async def update(self, user_id: str, data: eetschema_user_set_input):
23
+ result = await self._client.update_user(
24
+ user_id=user_id,
25
+ set_=data,
26
+ )
27
+ return transform_update_user(result)
28
+
29
+ async def remove_reasons(
30
+ self,
31
+ user_id: str,
32
+ reason_to_remove_account_text: str,
33
+ reason_to_remove_account_selection: list[str] | UnsetType | None = UNSET,
34
+ reason_to_remove_account_selection_all_options: (
35
+ list[str] | UnsetType | None
36
+ ) = UNSET,
37
+ ):
38
+ result = await self._client.remove_account(
39
+ user_id,
40
+ reason_to_remove_account_text,
41
+ reason_to_remove_account_selection,
42
+ reason_to_remove_account_selection_all_options,
43
+ )
44
+ return transform_remove_account_reasons(result)
File without changes
@@ -0,0 +1,25 @@
1
+ from datetime import datetime
2
+
3
+
4
+ def current_datetime() -> datetime:
5
+ return datetime.now()
6
+
7
+
8
+ def format_date(date: datetime | str) -> str:
9
+ if isinstance(date, str):
10
+ return date
11
+
12
+ return date.strftime("%Y-%m-%d:%H:%M:%S")
13
+
14
+
15
+ def coerce_datetime(date: datetime | str | None) -> datetime | None:
16
+ if date is None:
17
+ return None
18
+
19
+ if isinstance(date, datetime):
20
+ return date
21
+
22
+ try:
23
+ return datetime.fromisoformat(date)
24
+ except ValueError:
25
+ return datetime.strptime(date, "%Y-%m-%d:%H:%M:%S")
@@ -0,0 +1,80 @@
1
+ Metadata-Version: 2.4
2
+ Name: eetlijst-python
3
+ Version: 0.0.1
4
+ Summary: Python rewrite of the Eetlijst GraphQL client
5
+ Requires-Python: <3.15,>=3.14
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: httpx>=0.28
8
+ Requires-Dist: pydantic>=2.0.0
9
+ Provides-Extra: dev
10
+ Requires-Dist: ariadne-codegen>=0.18; extra == "dev"
11
+ Requires-Dist: mypy>=1.8.0; extra == "dev"
12
+ Requires-Dist: black>=24.0; extra == "dev"
13
+ Requires-Dist: isort>=5.13; extra == "dev"
14
+ Requires-Dist: pylint>=3.0; extra == "dev"
15
+
16
+ # eetlijst-python
17
+
18
+ A simple Python API client for Eetlijst.
19
+
20
+ > [!NOTE]
21
+ > This project is made for use in a student house, and will probably not be maintained.
22
+ > Most of this Python port was converted from the TypeScript version (https://github.com/DJ1TJOO/eetlijst-api-ts) using Google Gemini.
23
+
24
+ ## Usage
25
+
26
+ Create a virtual environment and install the package:
27
+
28
+ python -m venv .venv
29
+ # Activate virtual environment (.venv\Scripts\Activate.ps1 on Windows or source .venv/bin/activate on Linux/macOS)
30
+ python -m pip install -e .
31
+
32
+ The API key can be retrieved from the account page, under Developer API key (BETA), at https://v5.eetlijst.nl/account
33
+
34
+ ```python
35
+ import asyncio
36
+ from eetlijst import Eetlijst
37
+
38
+ eetlijst = Eetlijst("<API_KEY>")
39
+
40
+ async def main():
41
+ app_status = await eetlijst.app.status()
42
+ print(app_status)
43
+
44
+ if __name__ == "__main__":
45
+ asyncio.run(main())
46
+ ```
47
+
48
+ See Examples (./examples/) for more.
49
+
50
+ ## What is Included
51
+
52
+ - Service classes for app, events, expenses, groups, users, groups.users, groups.list, events.attendance, and expenses.settlements.
53
+ - A complete GraphQL operation manifest at src/eetlijst/operations.graphql for ariadne-codegen.
54
+ - Example scripts matching the TS examples.
55
+
56
+ ## Development & Codegen
57
+
58
+ This project uses ariadne-codegen (https://github.com/mirumee/ariadne-codegen) for GraphQL code generation.
59
+
60
+ Run code generation:
61
+
62
+ ```
63
+ ariadne-codegen
64
+ ```
65
+
66
+ The configuration in pyproject.toml points to the GraphQL schema and outputs generated code into src/generated/.
67
+
68
+ ### Building
69
+
70
+ To build the package locally, install the build tool first:
71
+
72
+ ```
73
+ python -m pip install build
74
+ ```
75
+
76
+ Build the package:
77
+
78
+ ```
79
+ python -m build
80
+ ```
@@ -0,0 +1,81 @@
1
+ eetlijst/__init__.py,sha256=Uv7wCdW3hmZDfgCP18RDns2lq9N0HJ2iVGttJn4zy8A,58
2
+ eetlijst/eetlijst.py,sha256=K4rNmiEtvc0xEkZrQrpEU6dKeJim5D8vW65wIqiJXAc,982
3
+ eetlijst/exceptions.py,sha256=byiuMnnL_GbTYxpSg3na7LhNiP2yQLFUQw1Mrws4Alo,47
4
+ eetlijst/generated/__init__.py,sha256=qOId4p_hP91VJstXM4TCVvuNAFFXjAOztGTQWtaAth4,49545
5
+ eetlijst/generated/all_attendances.py,sha256=Wn-bHHqLsPwwtLlcEsKzZMkKqCeqzsNtUpaNmLx-xzk,306
6
+ eetlijst/generated/all_events.py,sha256=NUYz1O2JaI_DoiqS56lumLt6B8v5vhbwszdIEUjcG5Q,248
7
+ eetlijst/generated/all_expenses.py,sha256=LulW5u5U4rD1dSAJ_i9QFXpO1fBIynA3ZniPXR1mIV4,266
8
+ eetlijst/generated/all_groups.py,sha256=wlBcsdT661DDSjQTCuo-SuzKrl7GbteGMnPJZdCdj2Y,723
9
+ eetlijst/generated/all_settlements.py,sha256=2Kn0yL0A6mvkQMHmS_6eFs29LT58dIPWfoMIltDbpAg,296
10
+ eetlijst/generated/all_users_in_group.py,sha256=yVgLGSEEBKP762wbT7we7c8uSJnkREZrf8cN6ngk34Y,531
11
+ eetlijst/generated/app_status.py,sha256=qdvCStKngW5vcXPocie1Z97KM2WjFYbQFeEtCJx5A48,308
12
+ eetlijst/generated/async_base_client.py,sha256=WNk2lIM0IVNw9QckmOH7SLaid7bhm52RXN6DUqvdl3w,13808
13
+ eetlijst/generated/automatic_events.py,sha256=pIqUbWrgJq85jGfXM7lRdIjCS6-SF0P2jsWAudyUFns,373
14
+ eetlijst/generated/base_model.py,sha256=xnyBFwZE7YMfmZ2-t1TuXEfFHER-DbkOBx4EKPBYsKw,636
15
+ eetlijst/generated/client.py,sha256=V3707Xfb-2b_5Sb-qYfGqTlkrLIhrry1guWlvB1ZzYs,58041
16
+ eetlijst/generated/create_expense.py,sha256=rlMXOtTjqCwZUeqMMuty3sEHKHPOaTMRMH_JT3M8WlU,338
17
+ eetlijst/generated/create_group.py,sha256=CF-LN9TNDyhUD1RSKQVLfSpduE9hy1WH3RhIz5Q_zSI,263
18
+ eetlijst/generated/create_list_item.py,sha256=fq2YFet2CYKC92EPR66hGBzhutkgi2CoCfYjawXw9Ag,327
19
+ eetlijst/generated/create_many_list_items.py,sha256=GoMxvFbViI14HpV_3W92ae2l_zMa4kKGCRzwtlDN9AU,536
20
+ eetlijst/generated/create_settlement.py,sha256=6QbQ4ckeWe1ptM8ulhTFZGKZiIoP4LQ-YmfeGh6Y3Rc,308
21
+ eetlijst/generated/enums.py,sha256=vwfbnQhlvS-NK6zgZWGUVLo8KuR7nulL9Rj7dS3vV8g,14719
22
+ eetlijst/generated/exceptions.py,sha256=ceIXJa7sQ7Zo6ZKzER9Uf4h8avgC_max4_F8BvBSrBE,2468
23
+ eetlijst/generated/fragments.py,sha256=ODNL-BdhmTjvA8oSdNJ_IQe6UNG7c3zSll9hPVgo_GQ,6001
24
+ eetlijst/generated/get_attendance.py,sha256=73ggSH9jYkIXrg_2SqldxdxmGwqq1ERatOKpOK5z_yk,367
25
+ eetlijst/generated/get_event.py,sha256=9XaWsUQyaExS8Ufl6gJRhm0biZ05nilvNnTtH81zClI,293
26
+ eetlijst/generated/get_group.py,sha256=ZgBpTF6vXPIntAtWrbJyBTiLXFnJGXQNS3krvfOcIt4,514
27
+ eetlijst/generated/get_user.py,sha256=2nZvBiseqrAleJw64RnB-k1ey2LPmXC4fDb60P1vxeE,271
28
+ eetlijst/generated/get_user_in_group.py,sha256=-lvvro4JELSY-hicqPIHJl7NPf6Fp8949f1w6LCWEyg,524
29
+ eetlijst/generated/group_total_expense.py,sha256=lINnASVtiR4HlbWWsx_lE7l_kcUC7rnXAdm-qnEpNkk,1558
30
+ eetlijst/generated/input_types.py,sha256=XZgnxrnWxQobLk-DSLpYQx7ClvU8HBZEp_yPqokpQ9M,190949
31
+ eetlijst/generated/join_group.py,sha256=BkKMQ6oJS5N18XlDhi8jA6C3ysMYFTNJ1AwOAECNuRU,323
32
+ eetlijst/generated/list_items.py,sha256=4RhRadU6MGYy1IGt_yHxe-aE3kAx6DTr2ea1MX0SkB0,243
33
+ eetlijst/generated/remove_account.py,sha256=7sWPtsQvBg5FgZFnK7-kP5Wb1wk-J_yO7oPiVCcLvLE,465
34
+ eetlijst/generated/settle_unsettled_expenses.py,sha256=Mx55LqpU4gPVefzdjgPm6gQkWhJKHzKK4DE8Cv--ieM,611
35
+ eetlijst/generated/settlement_expenses.py,sha256=8fs8ANH1c2CYzG_0okrvJKySq8if8Mz6eHdAecW4KHw,294
36
+ eetlijst/generated/update_attendance.py,sha256=laSSdl431k8_RAaNZX8ns4JIhRDtI_VVm8vVhOWkGNc,398
37
+ eetlijst/generated/update_event.py,sha256=jN1GnYczG7Kn_V51fuYxcvbsBxlktIlFLW3CphCj-08,324
38
+ eetlijst/generated/update_expense.py,sha256=gF3ljCBUpaiRs-G605dzTrnB8EUJqNcrrkw7-kh6LjQ,518
39
+ eetlijst/generated/update_expense_distribution.py,sha256=_pC4UdWrk62NV_oJ8lj_nZBHIpjknHQa3e0nkyn-PGE,640
40
+ eetlijst/generated/update_group.py,sha256=PzJcFJp9y9I-yrYXPtCyRelRVS0UpPycvjxSwMyafLg,263
41
+ eetlijst/generated/update_list_item.py,sha256=YJ6zF2x4coj7gg6h19kG_l9IjEfvI7P5kQNql-PQF_I,331
42
+ eetlijst/generated/update_many_attendance.py,sha256=JLfzzS6qbrnFFcfVR3qq2IKnpe482KU1Qorcwo06ZV4,632
43
+ eetlijst/generated/update_user.py,sha256=PGj2nFJaMKvrAf5Yd_0TY0w819q-jtiK9wPeFfH0TG4,315
44
+ eetlijst/generated/update_user_in_group.py,sha256=Z8WzWpxZ6jeeRdhhy1MVsknhpoHWWTNgE-cm7biSGic,399
45
+ eetlijst/generated/update_users_in_group.py,sha256=pbyJMbxnDSkC45G6zp_ozIKQslQzcQPfQHK0Xjz1BoQ,709
46
+ eetlijst/services/__init__.py,sha256=FMK1faOaUeUCOncah0zMtfcLbug9i1xgmJe-W3ezipA,293
47
+ eetlijst/services/app/__init__.py,sha256=-odkIPEUEZlpaoMbd7hlHydlQ5yUSClDjKIMAyjKCzc,22
48
+ eetlijst/services/app/app.py,sha256=KKKpbk1GzuRvaLSneEJKgc2yNrjoiRJ73QPtxWWvAYc,513
49
+ eetlijst/services/app/transformers.py,sha256=NNvCndii2X3x-22LZqdbHAXdUJvrcyrTn-xI559124w,359
50
+ eetlijst/services/event_attendance/__init__.py,sha256=jd3MNjhTcxV4M1Gktxf-rrWtUhprqDrnBXfamlOSCYo,47
51
+ eetlijst/services/event_attendance/event_attendance.py,sha256=Gj6XHtxwdks-JhejQTJxy1-Rfq6uK7BBy7kUTRV5UJQ,2999
52
+ eetlijst/services/event_attendance/transformers.py,sha256=kbrUKscdOTRmCAqzFQ-NlaTi_SO5Hw0zbhyuDCu20jI,1829
53
+ eetlijst/services/events/__init__.py,sha256=Ukz7t6f0DH4wc5Q0I7wF2RDZEqeXhc932eQlBD6OsDo,28
54
+ eetlijst/services/events/events.py,sha256=Rf4i7zVW_05e_Nnwh5nKehT9KZeR_fHyuGvNsRKMsYs,4236
55
+ eetlijst/services/events/transformers.py,sha256=Kx4ekE6yusqurJHi2AzHXzEoRJiwTkavyXLoc0ChdfA,1975
56
+ eetlijst/services/expenses/__init__.py,sha256=hlv1estNFmNjUpfNbV1Tu4aSdjficE0F1NgIf7XnZHc,32
57
+ eetlijst/services/expenses/expenses.py,sha256=JwTqcyp7WmMbjcNJMo7kPlP7K7vm7MiL6Zyv_UjvdPM,3182
58
+ eetlijst/services/expenses/transformers.py,sha256=8HIHm2gx-mmkibditqyYBesVmhvvqYIkHzVFSh-wy2U,2469
59
+ eetlijst/services/expenses/utils.py,sha256=f7TPXKEhnvF30tzrSYO75wviBDWNujT6Hz_9l8dqYGc,916
60
+ eetlijst/services/group_list/__init__.py,sha256=Acdz1WLky37QUBX-a-mui0rAIxG_Pv81tD7szbBakhM,35
61
+ eetlijst/services/group_list/group_list.py,sha256=qYGn2uy26i2B47JpBA87yGA8_XkLnCR-K4-si6F4SkE,3035
62
+ eetlijst/services/group_list/transformers.py,sha256=yz4cWIKVInXlKdx7gTTZrrgdrvbIxNy_aSCdmrlIE3Q,1275
63
+ eetlijst/services/group_users/__init__.py,sha256=UyTfgrB2yf14Ua4DET93CgQYZ0mLIwmrtEqlJS0LxIY,37
64
+ eetlijst/services/group_users/group_users.py,sha256=QoaEnDtVCIqfjvzP6g3hDKRDnPZMnVu_beoQjPSuCn8,4327
65
+ eetlijst/services/group_users/transformers.py,sha256=-UqQ1waNTho8Bf3lInx96nx1NG_M3PcLG3qkiDA3jWU,2704
66
+ eetlijst/services/groups/__init__.py,sha256=zTB7hG_2JUKvcwFFGKdtfzmpovc401-kPso9O6Wj_mg,28
67
+ eetlijst/services/groups/groups.py,sha256=pDGe2HrErp_H6I0NXUW491V-BmaLtpPXtoc7H2xwUW8,2664
68
+ eetlijst/services/groups/transformers.py,sha256=2NA57roFmTPOywbYX1VlRhoyoqgInOJ9rxJXFUB1_SQ,4107
69
+ eetlijst/services/settlements/__init__.py,sha256=qQY4xnOlvo3gVDaC7XV7osvLNIl0bIABhUyO2XPkLK8,38
70
+ eetlijst/services/settlements/settlements.py,sha256=wfY7VOiPBrckiLQyVtKNN-h641XUle3V4xbqu3kwQeU,8053
71
+ eetlijst/services/settlements/transformers.py,sha256=l7wVU9gBnfHIF_Q3PrCyW7saW30rdCYwYnsqKnuqFNM,2876
72
+ eetlijst/services/settlements/utils.py,sha256=Q11HLluchJZZ9F-kLhZ6Rhmeypb65N2OXczXwQcQ9Uc,2348
73
+ eetlijst/services/users/__init__.py,sha256=KSAl1bezotk-ufijQc-ziCZuVCLAqCObyWyPaz-JEsc,26
74
+ eetlijst/services/users/transformers.py,sha256=Q7gn_mvDb-yWKJh3ISDRlfaiVI154Aj6qdMfkpAO9y4,3042
75
+ eetlijst/services/users/users.py,sha256=tKm7OMRxlnoXjrkTXvRu_C-DB7P7KXbqu2vlE_gG-Ig,1407
76
+ eetlijst/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
+ eetlijst/utils/datetime.py,sha256=u7zDY_A4D5PIfa9QIlRhNgAAHsLFKuealjG0-qOX0iI,569
78
+ eetlijst_python-0.0.1.dist-info/METADATA,sha256=j3dqePjMJK029hum3p_LJWlO1qMPuigDoN7-oveRU_o,2239
79
+ eetlijst_python-0.0.1.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
80
+ eetlijst_python-0.0.1.dist-info/top_level.txt,sha256=Wqj-R7K0ln1vVmxZ7NkPxrMCOF2kFE7_QagNHizJuts,9
81
+ eetlijst_python-0.0.1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (83.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1 @@
1
+ eetlijst