fluidattacks_gitlab_sdk 1.0.0__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 (42) hide show
  1. fluidattacks_gitlab_sdk/__init__.py +22 -0
  2. fluidattacks_gitlab_sdk/_decoders.py +170 -0
  3. fluidattacks_gitlab_sdk/_gql_client/__init__.py +8 -0
  4. fluidattacks_gitlab_sdk/_gql_client/_client.py +101 -0
  5. fluidattacks_gitlab_sdk/_gql_client/_error.py +24 -0
  6. fluidattacks_gitlab_sdk/_gql_client/_handlers.py +87 -0
  7. fluidattacks_gitlab_sdk/_handlers.py +40 -0
  8. fluidattacks_gitlab_sdk/_http_client/__init__.py +28 -0
  9. fluidattacks_gitlab_sdk/_http_client/_client_1.py +206 -0
  10. fluidattacks_gitlab_sdk/_http_client/_core.py +152 -0
  11. fluidattacks_gitlab_sdk/_logger.py +36 -0
  12. fluidattacks_gitlab_sdk/ids.py +135 -0
  13. fluidattacks_gitlab_sdk/issues/__init__.py +7 -0
  14. fluidattacks_gitlab_sdk/issues/_client/__init__.py +28 -0
  15. fluidattacks_gitlab_sdk/issues/_client/_decode.py +165 -0
  16. fluidattacks_gitlab_sdk/issues/_client/_get_issue.py +79 -0
  17. fluidattacks_gitlab_sdk/issues/_client/_most_recent.py +119 -0
  18. fluidattacks_gitlab_sdk/issues/_client/_updated_by.py +157 -0
  19. fluidattacks_gitlab_sdk/issues/core.py +99 -0
  20. fluidattacks_gitlab_sdk/members/__init__.py +25 -0
  21. fluidattacks_gitlab_sdk/members/_client.py +49 -0
  22. fluidattacks_gitlab_sdk/members/_decode.py +40 -0
  23. fluidattacks_gitlab_sdk/members/core.py +23 -0
  24. fluidattacks_gitlab_sdk/merge_requests/__init__.py +9 -0
  25. fluidattacks_gitlab_sdk/merge_requests/_client.py +265 -0
  26. fluidattacks_gitlab_sdk/merge_requests/_decode.py +234 -0
  27. fluidattacks_gitlab_sdk/merge_requests/core.py +137 -0
  28. fluidattacks_gitlab_sdk/milestones/__init__.py +4 -0
  29. fluidattacks_gitlab_sdk/milestones/_client.py +147 -0
  30. fluidattacks_gitlab_sdk/milestones/_decode.py +78 -0
  31. fluidattacks_gitlab_sdk/milestones/core.py +40 -0
  32. fluidattacks_gitlab_sdk/mr_approvals/__init__.py +4 -0
  33. fluidattacks_gitlab_sdk/mr_approvals/_client.py +69 -0
  34. fluidattacks_gitlab_sdk/mr_approvals/_decode.py +30 -0
  35. fluidattacks_gitlab_sdk/mr_approvals/core.py +25 -0
  36. fluidattacks_gitlab_sdk/py.typed +0 -0
  37. fluidattacks_gitlab_sdk/users/__init__.py +5 -0
  38. fluidattacks_gitlab_sdk/users/core.py +26 -0
  39. fluidattacks_gitlab_sdk/users/decode.py +25 -0
  40. fluidattacks_gitlab_sdk-1.0.0.dist-info/METADATA +13 -0
  41. fluidattacks_gitlab_sdk-1.0.0.dist-info/RECORD +42 -0
  42. fluidattacks_gitlab_sdk-1.0.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,147 @@
1
+ from __future__ import (
2
+ annotations,
3
+ )
4
+
5
+ import inspect
6
+ import logging
7
+ from dataclasses import (
8
+ dataclass,
9
+ )
10
+
11
+ from fa_purity import (
12
+ Cmd,
13
+ Coproduct,
14
+ CoproductFactory,
15
+ FrozenDict,
16
+ FrozenList,
17
+ Maybe,
18
+ NewFrozenList,
19
+ Result,
20
+ ResultE,
21
+ cast_exception,
22
+ )
23
+ from fa_purity.json import JsonObj, Primitive, UnfoldedFactory
24
+ from fluidattacks_etl_utils.bug import Bug
25
+ from fluidattacks_etl_utils.decode import int_to_str
26
+
27
+ from fluidattacks_gitlab_sdk._decoders import assert_multiple, decode_maybe_single
28
+ from fluidattacks_gitlab_sdk._handlers import NotFound, handle_not_found
29
+ from fluidattacks_gitlab_sdk._http_client import (
30
+ ClientFactory,
31
+ Credentials,
32
+ HttpJsonClient,
33
+ RelativeEndpoint,
34
+ )
35
+ from fluidattacks_gitlab_sdk.ids import MilestoneFullId, MilestoneInternalId, ProjectId
36
+
37
+ from ._decode import decode_milestone_and_id
38
+ from .core import Milestone, MilestoneClient
39
+
40
+ LOG = logging.getLogger(__name__)
41
+
42
+
43
+ def handler_empty(
44
+ item: Maybe[tuple[MilestoneFullId, Milestone]],
45
+ ) -> Result[tuple[MilestoneFullId, Milestone], Coproduct[NotFound, Exception]]:
46
+ return item.to_coproduct().map(
47
+ Result.success,
48
+ lambda _: Result.failure(Coproduct.inl(NotFound(ValueError("Milestone Not Found")))),
49
+ )
50
+
51
+
52
+ def handler_empty_two(
53
+ item: ResultE[Maybe[tuple[MilestoneFullId, Milestone]]],
54
+ ) -> Result[tuple[MilestoneFullId, Milestone], Coproduct[NotFound, Exception]]:
55
+ factory: CoproductFactory[NotFound, Exception] = CoproductFactory()
56
+ return item.alt(lambda i: factory.inr(i)).bind(handler_empty)
57
+
58
+
59
+ def get_milestone(
60
+ client: HttpJsonClient,
61
+ project: ProjectId,
62
+ milestone_id: MilestoneInternalId,
63
+ ) -> Cmd[Result[tuple[MilestoneFullId, Milestone], Coproduct[NotFound, Exception]]]:
64
+ endpoint = RelativeEndpoint.new(
65
+ "projects",
66
+ int_to_str(project.project_id.value),
67
+ f"milestones?iids[]={int_to_str(milestone_id.internal.value)}", # cspell:ignore iids
68
+ )
69
+ msg = Cmd.wrap_impure(lambda: LOG.info("[API] get_milestone(%s, %s)", project, milestone_id))
70
+ return msg + client.get(
71
+ endpoint,
72
+ FrozenDict({}),
73
+ ).map(
74
+ lambda r: r.alt(
75
+ lambda e: e.map(handle_not_found, lambda e: Coproduct.inr(cast_exception(e))),
76
+ )
77
+ .bind(lambda v: assert_multiple(v).alt(Coproduct.inr))
78
+ .bind(lambda v: handler_empty_two(decode_milestone_and_id(v)))
79
+ .alt(
80
+ lambda c: c.map(
81
+ Coproduct.inl,
82
+ lambda e: Coproduct.inr(
83
+ Bug.new(
84
+ "_get_milestone",
85
+ inspect.currentframe(),
86
+ e,
87
+ (),
88
+ ),
89
+ ),
90
+ ),
91
+ ),
92
+ )
93
+
94
+
95
+ def most_recent_milestone(
96
+ client: HttpJsonClient,
97
+ project: ProjectId,
98
+ ) -> Cmd[ResultE[Maybe[tuple[MilestoneFullId, Milestone]]]]:
99
+ endpoint = RelativeEndpoint.new(
100
+ "projects",
101
+ int_to_str(project.project_id.value),
102
+ "milestones",
103
+ )
104
+ params: dict[str, Primitive] = {
105
+ "order_by": "created_at",
106
+ "sort": "desc",
107
+ "per_page": 1,
108
+ }
109
+ empty: Maybe[tuple[MilestoneFullId, Milestone]] = Maybe.empty()
110
+ return client.get(
111
+ endpoint,
112
+ UnfoldedFactory.from_dict(params),
113
+ ).map(
114
+ lambda r: r.alt(
115
+ lambda e: cast_exception(
116
+ Bug.new(
117
+ "most_recent_milestone",
118
+ inspect.currentframe(),
119
+ e,
120
+ (),
121
+ ),
122
+ ),
123
+ )
124
+ .bind(assert_multiple)
125
+ .map(NewFrozenList)
126
+ .map(decode_maybe_single)
127
+ .bind(
128
+ lambda m: m.to_coproduct().map(
129
+ lambda r: decode_milestone_and_id(FrozenList[JsonObj]((r,))),
130
+ lambda _: Result.success(empty),
131
+ ),
132
+ ),
133
+ )
134
+
135
+
136
+ def _from_client(client: HttpJsonClient) -> MilestoneClient:
137
+ return MilestoneClient(
138
+ lambda p, i: get_milestone(client, p, i),
139
+ lambda p: most_recent_milestone(client, p),
140
+ )
141
+
142
+
143
+ @dataclass(frozen=True)
144
+ class MilestoneFactory:
145
+ @staticmethod
146
+ def new(creds: Credentials) -> MilestoneClient:
147
+ return _from_client(ClientFactory.new(creds))
@@ -0,0 +1,78 @@
1
+ import inspect
2
+ import logging
3
+
4
+ from fa_purity import FrozenList, Maybe, Result, ResultE
5
+ from fa_purity.json import JsonObj, JsonUnfolder
6
+ from fluidattacks_etl_utils import smash
7
+ from fluidattacks_etl_utils.bug import Bug
8
+ from fluidattacks_etl_utils.decode import DecodeUtils
9
+
10
+ from fluidattacks_gitlab_sdk._decoders import (
11
+ decode_date,
12
+ decode_milestone_full_id,
13
+ )
14
+ from fluidattacks_gitlab_sdk.ids import MilestoneFullId
15
+ from fluidattacks_gitlab_sdk.milestones.core import Milestone, MilestoneDates
16
+
17
+ LOG = logging.getLogger(__name__)
18
+
19
+
20
+ def decode_milestone_dates(raw: JsonObj) -> ResultE[MilestoneDates]:
21
+ return smash.smash_result_4(
22
+ JsonUnfolder.require(raw, "created_at", DecodeUtils.to_date_time),
23
+ JsonUnfolder.optional(raw, "updated_at", DecodeUtils.to_opt_date_time).map(
24
+ lambda v: v.bind(lambda j: j),
25
+ ),
26
+ JsonUnfolder.optional(
27
+ raw,
28
+ "due_date",
29
+ lambda v: DecodeUtils.to_maybe(v, lambda i: DecodeUtils.to_str(i).bind(decode_date)),
30
+ ).map(lambda m: m.bind(lambda x: x)),
31
+ JsonUnfolder.optional(
32
+ raw,
33
+ "start_date",
34
+ lambda v: DecodeUtils.to_maybe(v, lambda i: DecodeUtils.to_str(i).bind(decode_date)),
35
+ ).map(lambda m: m.bind(lambda x: x)),
36
+ ).map(lambda v: MilestoneDates(*v))
37
+
38
+
39
+ def decode_milestone(raw: JsonObj) -> ResultE[Milestone]:
40
+ dates = decode_milestone_dates(raw)
41
+ group = smash.smash_result_4(
42
+ JsonUnfolder.require(raw, "title", DecodeUtils.to_str),
43
+ JsonUnfolder.require(raw, "description", DecodeUtils.to_str),
44
+ JsonUnfolder.require(raw, "state", DecodeUtils.to_str),
45
+ JsonUnfolder.require(raw, "expired", DecodeUtils.to_bool),
46
+ )
47
+ return (
48
+ smash.smash_result_2(
49
+ group,
50
+ dates,
51
+ )
52
+ .map(
53
+ lambda v: Milestone(
54
+ *v[0],
55
+ v[1],
56
+ ),
57
+ )
58
+ .alt(
59
+ lambda e: Bug.new(
60
+ "decode_mr",
61
+ inspect.currentframe(),
62
+ e,
63
+ (JsonUnfolder.dumps(raw),),
64
+ ),
65
+ )
66
+ )
67
+
68
+
69
+ def decode_milestone_and_id(
70
+ raw: FrozenList[JsonObj],
71
+ ) -> ResultE[Maybe[tuple[MilestoneFullId, Milestone]]]:
72
+ if not raw:
73
+ return Result.success(Maybe.empty())
74
+
75
+ return smash.smash_result_2(
76
+ decode_milestone_full_id(raw[0]),
77
+ decode_milestone(raw[0]),
78
+ ).map(Maybe.some)
@@ -0,0 +1,40 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Callable
4
+ from dataclasses import dataclass
5
+ from datetime import date
6
+
7
+ from fa_purity import Cmd, Coproduct, Maybe, Result, ResultE
8
+ from fa_purity.date_time import DatetimeUTC
9
+
10
+ from fluidattacks_gitlab_sdk._handlers import NotFound
11
+ from fluidattacks_gitlab_sdk.ids import MilestoneFullId, MilestoneInternalId, ProjectId
12
+
13
+
14
+ @dataclass(frozen=True)
15
+ class Milestone:
16
+ title: str
17
+ description: str
18
+ state: str
19
+ expired: bool
20
+ dates: MilestoneDates
21
+
22
+
23
+ @dataclass(frozen=True)
24
+ class MilestoneDates:
25
+ create_at: DatetimeUTC
26
+ update_at: Maybe[DatetimeUTC]
27
+ due_date: Maybe[date]
28
+ start_date: Maybe[date]
29
+
30
+
31
+ @dataclass(frozen=True)
32
+ class MilestoneClient:
33
+ get_milestone: Callable[
34
+ [ProjectId, MilestoneInternalId],
35
+ Cmd[Result[tuple[MilestoneFullId, Milestone], Coproduct[NotFound, Exception]]],
36
+ ]
37
+ most_recent_milestone: Callable[
38
+ [ProjectId],
39
+ Cmd[ResultE[Maybe[tuple[MilestoneFullId, Milestone]]]],
40
+ ]
@@ -0,0 +1,4 @@
1
+ from ._client import MrApprovalsFactory
2
+ from .core import ApprovalsClient, Approver
3
+
4
+ __all__ = ["ApprovalsClient", "Approver", "MrApprovalsFactory"]
@@ -0,0 +1,69 @@
1
+ from __future__ import (
2
+ annotations,
3
+ )
4
+
5
+ import inspect
6
+ from dataclasses import dataclass
7
+
8
+ from fa_purity import (
9
+ Cmd,
10
+ FrozenDict,
11
+ ResultE,
12
+ cast_exception,
13
+ )
14
+ from fluidattacks_etl_utils.bug import Bug
15
+ from fluidattacks_etl_utils.decode import int_to_str
16
+
17
+ from fluidattacks_gitlab_sdk._decoders import assert_single
18
+ from fluidattacks_gitlab_sdk._http_client import (
19
+ ClientFactory,
20
+ Credentials,
21
+ HttpJsonClient,
22
+ RelativeEndpoint,
23
+ )
24
+ from fluidattacks_gitlab_sdk.ids import MrFullId, MrInternalId, ProjectId
25
+ from fluidattacks_gitlab_sdk.mr_approvals.core import ApprovalsClient, MrApprovals
26
+
27
+ from ._decode import decode_id_and_mr_approvals
28
+
29
+
30
+ def _get_mr_approvals(
31
+ client: HttpJsonClient,
32
+ project: ProjectId,
33
+ mr_internal: MrInternalId,
34
+ ) -> Cmd[ResultE[tuple[MrFullId, MrApprovals]]]:
35
+ endpoint = RelativeEndpoint.new(
36
+ "projects",
37
+ int_to_str(project.project_id.value),
38
+ "merge_requests",
39
+ int_to_str(mr_internal.internal.value),
40
+ "approvals",
41
+ )
42
+ return client.get(
43
+ endpoint,
44
+ FrozenDict({}),
45
+ ).map(
46
+ lambda r: r.alt(
47
+ lambda e: cast_exception(
48
+ Bug.new(
49
+ "get_mr_approvals",
50
+ inspect.currentframe(),
51
+ e,
52
+ (),
53
+ ),
54
+ ),
55
+ )
56
+ .bind(assert_single)
57
+ .bind(decode_id_and_mr_approvals),
58
+ )
59
+
60
+
61
+ def _from_client(client: HttpJsonClient) -> ApprovalsClient:
62
+ return ApprovalsClient(lambda p, i: _get_mr_approvals(client, p, i))
63
+
64
+
65
+ @dataclass(frozen=True)
66
+ class MrApprovalsFactory:
67
+ @staticmethod
68
+ def new(creds: Credentials) -> ApprovalsClient:
69
+ return _from_client(ClientFactory.new(creds))
@@ -0,0 +1,30 @@
1
+ from fa_purity import ResultE
2
+ from fa_purity.json import JsonObj, JsonUnfolder, Unfolder
3
+ from fluidattacks_etl_utils import smash
4
+ from fluidattacks_etl_utils.decode import DecodeUtils
5
+
6
+ from fluidattacks_gitlab_sdk._decoders import decode_mr_full_id
7
+ from fluidattacks_gitlab_sdk.ids import MrFullId
8
+ from fluidattacks_gitlab_sdk.mr_approvals.core import Approver, MrApprovals
9
+ from fluidattacks_gitlab_sdk.users.decode import decode_user_obj
10
+
11
+
12
+ def decode_mr_approvals(raw: JsonObj) -> ResultE[MrApprovals]:
13
+ return smash.smash_result_2(
14
+ JsonUnfolder.require(raw, "approved", DecodeUtils.to_bool),
15
+ JsonUnfolder.require(
16
+ raw,
17
+ "approved_by",
18
+ lambda v: Unfolder.to_list_of(
19
+ v,
20
+ lambda x: Unfolder.to_json(x)
21
+ .bind(lambda user_obj: JsonUnfolder.require(user_obj, "user", Unfolder.to_json))
22
+ .bind(decode_user_obj)
23
+ .map(lambda u: Approver(u)),
24
+ ).map(lambda approvers: tuple(approvers)),
25
+ ),
26
+ ).map(lambda v: MrApprovals(v[0], v[1]))
27
+
28
+
29
+ def decode_id_and_mr_approvals(raw: JsonObj) -> ResultE[tuple[MrFullId, MrApprovals]]:
30
+ return smash.smash_result_2(decode_mr_full_id(raw), decode_mr_approvals(raw))
@@ -0,0 +1,25 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Callable
4
+ from dataclasses import dataclass
5
+
6
+ from fa_purity import Cmd, FrozenList, ResultE
7
+
8
+ from fluidattacks_gitlab_sdk.ids import MrFullId, MrInternalId, ProjectId
9
+ from fluidattacks_gitlab_sdk.users import UserObj
10
+
11
+
12
+ @dataclass(frozen=True)
13
+ class Approver:
14
+ user: UserObj
15
+
16
+
17
+ @dataclass(frozen=True)
18
+ class MrApprovals:
19
+ approved: bool
20
+ approved_by: FrozenList[Approver]
21
+
22
+
23
+ @dataclass
24
+ class ApprovalsClient:
25
+ get_approvals: Callable[[ProjectId, MrInternalId], Cmd[ResultE[tuple[MrFullId, MrApprovals]]]]
File without changes
@@ -0,0 +1,5 @@
1
+ from fluidattacks_gitlab_sdk.users.core import UserObj
2
+
3
+ __all__ = [
4
+ "UserObj",
5
+ ]
@@ -0,0 +1,26 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+
5
+ from fluidattacks_gitlab_sdk.ids import UserId
6
+
7
+
8
+ @dataclass(frozen=True)
9
+ class User:
10
+ """The name of the user in the system."""
11
+
12
+ value: str
13
+
14
+
15
+ @dataclass(frozen=True)
16
+ class UserName:
17
+ """The real name of the user."""
18
+
19
+ value: str
20
+
21
+
22
+ @dataclass(frozen=True)
23
+ class UserObj:
24
+ user_id: UserId
25
+ user: User
26
+ name: UserName
@@ -0,0 +1,25 @@
1
+ from fa_purity import ResultE
2
+ from fa_purity.json import JsonObj, JsonUnfolder
3
+ from fluidattacks_etl_utils.decode import DecodeUtils
4
+ from fluidattacks_etl_utils.natural import Natural
5
+
6
+ from fluidattacks_gitlab_sdk.ids import UserId
7
+ from fluidattacks_gitlab_sdk.users.core import User, UserName, UserObj
8
+
9
+
10
+ def decode_user_obj(raw: JsonObj) -> ResultE[UserObj]:
11
+ return JsonUnfolder.require(raw, "id", DecodeUtils.to_int).bind(
12
+ lambda uid: Natural.from_int(uid)
13
+ .map(UserId)
14
+ .bind(
15
+ lambda user_id: JsonUnfolder.require(raw, "username", DecodeUtils.to_str)
16
+ .map(User)
17
+ .bind(
18
+ lambda user: JsonUnfolder.require(raw, "name", DecodeUtils.to_str)
19
+ .map(UserName)
20
+ .map(
21
+ lambda name: UserObj(user_id, user, name),
22
+ ),
23
+ ),
24
+ ),
25
+ )
@@ -0,0 +1,13 @@
1
+ Metadata-Version: 2.4
2
+ Name: fluidattacks_gitlab_sdk
3
+ Version: 1.0.0
4
+ Summary: gitlab SDK
5
+ Author-email: Product Team <development@fluidattacks.com>
6
+ Requires-Python: >=3.11
7
+ Requires-Dist: gql >=3.5.0, <4.0.0
8
+ Requires-Dist: requests-toolbelt >=1.0.0, <2.0.0
9
+ Requires-Dist: fa-purity >=2.5.2, <3.0.0
10
+ Requires-Dist: pure-requests >=3.0.0, <4.0.0
11
+ Requires-Dist: python-dateutil >=2.8.0, <3.0.0
12
+ Requires-Dist: fluidattacks-etl-utils >=1.0.0, <2.0.0
13
+ Requires-Dist: fluidattacks-utils-logger >=1.0.0, <2.0.0
@@ -0,0 +1,42 @@
1
+ fluidattacks_gitlab_sdk/__init__.py,sha256=AmTm9uvbmWfcQcTQFrXTaMRXErqCp2-mzZYRUfLIolw,348
2
+ fluidattacks_gitlab_sdk/_decoders.py,sha256=FWkAm3KgARFGL06GIF5UiPgvVpXVrHor3ysngHLVWng,4933
3
+ fluidattacks_gitlab_sdk/_handlers.py,sha256=OZD6ke6UYHmZuJb0KrU400eabOcZ7DbDf3sBt0WOkSs,1109
4
+ fluidattacks_gitlab_sdk/_logger.py,sha256=8pUsO-S3wlWfrGhAeZgsd9CqNQOaEFWkcoTtbR0vSZw,847
5
+ fluidattacks_gitlab_sdk/ids.py,sha256=U26vgVHOKlVv5ZSIF30MVqPiDv4_0lA2XoPPEEhJxz4,2258
6
+ fluidattacks_gitlab_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ fluidattacks_gitlab_sdk/_gql_client/__init__.py,sha256=J5w-T87PPUhVKl08-IEXbWZZXxVgah_fUrOhvtZ0oMw,156
8
+ fluidattacks_gitlab_sdk/_gql_client/_client.py,sha256=X9so6QnOHjSOxfKufP_pLm6aI6n85Eq9iwl4cBAOju8,2580
9
+ fluidattacks_gitlab_sdk/_gql_client/_error.py,sha256=2c6YyUzx6gMQVqhRMqDuzVM1tH2Uxpf5-g33bSSIwok,354
10
+ fluidattacks_gitlab_sdk/_gql_client/_handlers.py,sha256=KOueIk1B9e3MoJ4wslOuW5LOr8gUgDrzLvJMYaEN4yY,2394
11
+ fluidattacks_gitlab_sdk/_http_client/__init__.py,sha256=sV8TJlA8nkL10JzKPwlSbKdeARviKJCXkHZ5vljdvcY,556
12
+ fluidattacks_gitlab_sdk/_http_client/_client_1.py,sha256=XZ4Vibs-HgDXlCinNMUCEqwhwT4_Uifvs6_eh4ijpe0,5597
13
+ fluidattacks_gitlab_sdk/_http_client/_core.py,sha256=DyvtPFzjJkN0p5LSSclsA6_oDcx7WDjH1pdYpv936YQ,3529
14
+ fluidattacks_gitlab_sdk/issues/__init__.py,sha256=pgJHw1IRhp0EgLXydXGDPAIgcVDtCaMt5F-vOtr0PMc,130
15
+ fluidattacks_gitlab_sdk/issues/core.py,sha256=9PkRct6UJ3Pal7QPd376HO3ecwFa97Ge0hFZx939oF0,2119
16
+ fluidattacks_gitlab_sdk/issues/_client/__init__.py,sha256=A9n17RsnsuiYUMPh-DaG5QHRIUmKyk5EP2BAZEMFXAY,911
17
+ fluidattacks_gitlab_sdk/issues/_client/_decode.py,sha256=zy_Ulga-EeIkSNuO16LgVnGO2xlmu3hrydaMuy9h4ls,5411
18
+ fluidattacks_gitlab_sdk/issues/_client/_get_issue.py,sha256=AuKoV0KKT4m9Xhx9yWNuDUkykpcRoUdQ5ww6yRxIsmA,2609
19
+ fluidattacks_gitlab_sdk/issues/_client/_most_recent.py,sha256=zJd9-2A47Gi66QxNeRcsJtQuyH7TAfqYT-0H6m9nz_A,3807
20
+ fluidattacks_gitlab_sdk/issues/_client/_updated_by.py,sha256=D9-LMpadc-bgm2_pmo6w9hhS2xMelDBn_JXDTdhjp5o,4657
21
+ fluidattacks_gitlab_sdk/members/__init__.py,sha256=YiAfp-an9gfNZ5DLmyb6NWjueV8xGazJ6YQFhhBtoNE,586
22
+ fluidattacks_gitlab_sdk/members/_client.py,sha256=GusGlJb7bCxFLfPjuVcEX2WgAwNqgpViWbrZfvWnJKI,1276
23
+ fluidattacks_gitlab_sdk/members/_decode.py,sha256=26cDfzrB9Xpv5qBRyn8IKmhaffANcoEwR7R2hypsABQ,1408
24
+ fluidattacks_gitlab_sdk/members/core.py,sha256=x0PIggJfuJsaiNPDm7X1fx7QZpb6OLLOzJ9UTThHBLI,488
25
+ fluidattacks_gitlab_sdk/merge_requests/__init__.py,sha256=_0Fm7BvA0_rKh3ior9v1_1LwCRzpGQECSMJ4FcsAmfw,202
26
+ fluidattacks_gitlab_sdk/merge_requests/_client.py,sha256=Xr4ANyLeANBjuCGQcchGKNW9w5EaHTZKMhg0hi7pk_g,7099
27
+ fluidattacks_gitlab_sdk/merge_requests/_decode.py,sha256=yuK7igap9HGNW1Jh1QJi_y73OSY_W16lz8eQT_DT1AM,7980
28
+ fluidattacks_gitlab_sdk/merge_requests/core.py,sha256=-gSNX-6DH_EHVXXDHSn-cU5W0-QcFafu7Bx1ErNuG6c,3136
29
+ fluidattacks_gitlab_sdk/milestones/__init__.py,sha256=HimZnvYbXT6D731ijJ9q7Ak7iFWGRI3jv_YnfRcNenY,123
30
+ fluidattacks_gitlab_sdk/milestones/_client.py,sha256=0bcRxYsaLl8g84E-9M6L1T7AJej7iFzSpGS2q6XZxek,4291
31
+ fluidattacks_gitlab_sdk/milestones/_decode.py,sha256=2gpI2BMfFhnD7WCT4aE7DT4BB5yRP65bnS2Jc5f_D6A,2464
32
+ fluidattacks_gitlab_sdk/milestones/core.py,sha256=55xS5yzzjCQB9qQPMa7xng3AvEeFTBhVBgAMJGQffSU,1026
33
+ fluidattacks_gitlab_sdk/mr_approvals/__init__.py,sha256=EUEXhC5FPOACU0ZGo8TOfB91n3SwzakAk-dJMCuK-VA,149
34
+ fluidattacks_gitlab_sdk/mr_approvals/_client.py,sha256=PMbeyAulvW_HSfU2C6seuvljDavKUL546aOGnOdWjkc,1763
35
+ fluidattacks_gitlab_sdk/mr_approvals/_decode.py,sha256=oqGZgQGh90JtBUCt49JiojeMNUdCBCaTs8-vIbbPVno,1250
36
+ fluidattacks_gitlab_sdk/mr_approvals/core.py,sha256=lHUanNXpI6rj-w15zBBbTzM3pyxF-Nfg-RtutVUzaZs,577
37
+ fluidattacks_gitlab_sdk/users/__init__.py,sha256=gfG-LZrj-ZMZjhqA7_aamyrNGgBx1ZVa2bskbJ6F-eA,85
38
+ fluidattacks_gitlab_sdk/users/core.py,sha256=xzXBt3mxBMFatNP8bc6VeIBzUA3P8ffLUF-S6TUWOZs,408
39
+ fluidattacks_gitlab_sdk/users/decode.py,sha256=cDrGglJM32HPtPks-Hd-Yy-bqYLrIvpPVsS0R0kxLnU,885
40
+ fluidattacks_gitlab_sdk-1.0.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
41
+ fluidattacks_gitlab_sdk-1.0.0.dist-info/METADATA,sha256=iZe7qNWtgKyNh-tIJktBt-jXDTzS4jhX6pRlpxWQo1I,497
42
+ fluidattacks_gitlab_sdk-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: flit 3.12.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any