python-gitlab 8.0.0__py3-none-any.whl → 8.2.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.
gitlab/_version.py CHANGED
@@ -3,4 +3,4 @@ __copyright__ = "Copyright 2013-2019 Gauvain Pocentek, 2019-2023 python-gitlab t
3
3
  __email__ = "gauvainpocentek@gmail.com"
4
4
  __license__ = "LGPL3"
5
5
  __title__ = "python-gitlab"
6
- __version__ = "8.0.0"
6
+ __version__ = "8.2.0"
gitlab/types.py CHANGED
@@ -1,8 +1,11 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
+ import json
4
5
  from typing import Any, TYPE_CHECKING
5
6
 
7
+ from gitlab import exceptions
8
+
6
9
 
7
10
  @dataclasses.dataclass(frozen=True)
8
11
  class RequiredOptional:
@@ -36,6 +39,13 @@ class RequiredOptional:
36
39
 
37
40
 
38
41
  class GitlabAttribute:
42
+ # Used in utils._transform_types() to decide if we should call get_for_api()
43
+ # on the attribute when transform_data is False (e.g. for POST/PUT/PATCH).
44
+ #
45
+ # This allows us to force transformation of data even when sending JSON bodies,
46
+ # which is useful for types like CommaSeparatedStringAttribute.
47
+ transform_in_body = False
48
+
39
49
  def __init__(self, value: Any = None) -> None:
40
50
  self._value = value
41
51
 
@@ -49,6 +59,16 @@ class GitlabAttribute:
49
59
  return (key, self._value)
50
60
 
51
61
 
62
+ class JsonAttribute(GitlabAttribute):
63
+ def set_from_cli(self, cli_value: str) -> None:
64
+ try:
65
+ self._value = json.loads(cli_value)
66
+ except (ValueError, TypeError) as e:
67
+ raise exceptions.GitlabParsingError(
68
+ f"Could not parse JSON data: {e}"
69
+ ) from e
70
+
71
+
52
72
  class _ListArrayAttribute(GitlabAttribute):
53
73
  """Helper class to support `list` / `array` types."""
54
74
 
@@ -82,9 +102,23 @@ class ArrayAttribute(_ListArrayAttribute):
82
102
 
83
103
 
84
104
  class CommaSeparatedListAttribute(_ListArrayAttribute):
85
- """For values which are sent to the server as a Comma Separated Values
86
- (CSV) string. We allow them to be specified as a list and we convert it
87
- into a CSV"""
105
+ """
106
+ For values which are sent to the server as a Comma Separated Values (CSV) string
107
+ in query parameters (GET), but as a list/array in JSON bodies (POST/PUT).
108
+ """
109
+
110
+
111
+ class CommaSeparatedStringAttribute(_ListArrayAttribute):
112
+ """
113
+ For values which are sent to the server as a Comma Separated Values (CSV) string.
114
+ Unlike CommaSeparatedListAttribute, this type ensures the value is converted
115
+ to a string even in JSON bodies (POST/PUT requests).
116
+ """
117
+
118
+ # Used in utils._transform_types() to ensure the value is converted to a string
119
+ # via get_for_api() even when transform_data is False (e.g. for POST/PUT/PATCH).
120
+ # This is needed because some APIs require a CSV string instead of a JSON array.
121
+ transform_in_body = True
88
122
 
89
123
 
90
124
  class LowercaseStringAttribute(GitlabAttribute):
gitlab/utils.py CHANGED
@@ -198,7 +198,15 @@ def _transform_types(
198
198
  files[attr_name] = (key, data.pop(attr_name))
199
199
  continue
200
200
 
201
- if not transform_data:
201
+ # If transform_data is False, it means we are preparing data for a JSON body
202
+ # (POST/PUT/PATCH). In this case, we normally skip transformation because
203
+ # most types (like ArrayAttribute) only need transformation for query
204
+ # parameters (GET).
205
+ #
206
+ # However, some types (like CommaSeparatedStringAttribute) need to be
207
+ # transformed even in JSON bodies (e.g. converting a list to a CSV string).
208
+ # The 'transform_in_body' flag on the attribute class controls this behavior.
209
+ if not transform_data and not gitlab_attribute.transform_in_body:
202
210
  continue
203
211
 
204
212
  if isinstance(gitlab_attribute, types.GitlabAttribute):
@@ -24,6 +24,8 @@ from .environments import *
24
24
  from .epics import *
25
25
  from .events import *
26
26
  from .export_import import *
27
+ from .feature_flag_user_lists import *
28
+ from .feature_flags import *
27
29
  from .features import *
28
30
  from .files import *
29
31
  from .geo_nodes import *
@@ -0,0 +1,27 @@
1
+ """
2
+ GitLab API:
3
+ https://docs.gitlab.com/api/feature_flag_user_lists
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from gitlab import types
9
+ from gitlab.base import RESTObject
10
+ from gitlab.mixins import CRUDMixin, ObjectDeleteMixin, SaveMixin
11
+ from gitlab.types import RequiredOptional
12
+
13
+ __all__ = ["ProjectFeatureFlagUserList", "ProjectFeatureFlagUserListManager"]
14
+
15
+
16
+ class ProjectFeatureFlagUserList(SaveMixin, ObjectDeleteMixin, RESTObject):
17
+ _id_attr = "iid"
18
+
19
+
20
+ class ProjectFeatureFlagUserListManager(CRUDMixin[ProjectFeatureFlagUserList]):
21
+ _path = "/projects/{project_id}/feature_flags_user_lists"
22
+ _obj_cls = ProjectFeatureFlagUserList
23
+ _from_parent_attrs = {"project_id": "id"}
24
+ _create_attrs = RequiredOptional(required=("name", "user_xids"))
25
+ _update_attrs = RequiredOptional(optional=("name", "user_xids"))
26
+ _list_filters = ("search",)
27
+ _types = {"user_xids": types.CommaSeparatedStringAttribute}
@@ -0,0 +1,106 @@
1
+ """
2
+ GitLab API:
3
+ https://docs.gitlab.com/api/feature_flags
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from typing import Any
9
+
10
+ from gitlab import types, utils
11
+ from gitlab.base import RESTObject
12
+ from gitlab.mixins import CRUDMixin, ObjectDeleteMixin, SaveMixin
13
+ from gitlab.types import RequiredOptional
14
+
15
+ __all__ = ["ProjectFeatureFlag", "ProjectFeatureFlagManager"]
16
+
17
+
18
+ class ProjectFeatureFlag(SaveMixin, ObjectDeleteMixin, RESTObject):
19
+ _id_attr = "name"
20
+ manager: ProjectFeatureFlagManager
21
+
22
+ def _get_save_url_id(self) -> str | int | None:
23
+ """Get the ID used to construct the API URL for the save operation.
24
+
25
+ For renames, this must be the *original* name of the flag. For other
26
+ updates, it is the current name.
27
+ """
28
+ if self._id_attr in self._updated_attrs:
29
+ # If the name is being changed, use the original name for the URL.
30
+ obj_id = self._attrs.get(self._id_attr)
31
+ if isinstance(obj_id, str):
32
+ return utils.EncodedId(obj_id)
33
+ return obj_id
34
+ return self.encoded_id
35
+
36
+ def save(self, **kwargs: Any) -> dict[str, Any] | None:
37
+ """Save the changes made to the object to the server.
38
+
39
+ This is the standard method to use when updating a feature flag object
40
+ that you have already retrieved.
41
+
42
+ It is overridden here to correctly handle renaming. When `name` is
43
+ changed, the API requires the *original* name in the URL, and this
44
+ method provides it.
45
+
46
+ Args:
47
+ **kwargs: Extra options to send to the server (e.g. sudo)
48
+
49
+ Returns:
50
+ The new object data (*not* a RESTObject)
51
+
52
+ Raises:
53
+ GitlabAuthenticationError: If authentication is not correct
54
+ GitlabUpdateError: If the server cannot perform the request
55
+ """
56
+ updated_data = self._get_updated_data()
57
+ if not updated_data:
58
+ return None
59
+
60
+ obj_id = self._get_save_url_id()
61
+ server_data = self.manager.update(obj_id, updated_data, **kwargs)
62
+ self._update_attrs(server_data)
63
+ return server_data
64
+
65
+
66
+ class ProjectFeatureFlagManager(CRUDMixin[ProjectFeatureFlag]):
67
+ _path = "/projects/{project_id}/feature_flags"
68
+ _obj_cls = ProjectFeatureFlag
69
+ _from_parent_attrs = {"project_id": "id"}
70
+ _create_attrs = RequiredOptional(
71
+ required=("name",), optional=("version", "description", "active", "strategies")
72
+ )
73
+ _update_attrs = RequiredOptional(
74
+ # new_name is used for renaming via CLI and mapped to 'name' in update()
75
+ optional=("name", "new_name", "description", "active", "strategies")
76
+ )
77
+ _list_filters = ("scope",)
78
+ _types = {"strategies": types.JsonAttribute}
79
+
80
+ def update(
81
+ self,
82
+ id: str | int | None = None,
83
+ new_data: dict[str, Any] | None = None,
84
+ **kwargs: Any,
85
+ ) -> dict[str, Any]:
86
+ """Update a Project Feature Flag.
87
+
88
+ This is a lower-level method called by `ProjectFeatureFlag.save()` and
89
+ is also used directly by the CLI.
90
+
91
+ The `new_name` parameter is a special case to support renaming via the
92
+ CLI (`--new-name`). It is converted to the `name` parameter that the
93
+ GitLab API expects in the request body.
94
+
95
+ Args:
96
+ id: The current name of the feature flag.
97
+ new_data: The dictionary of attributes to update.
98
+ **kwargs: Extra options to send to the server (e.g. sudo)
99
+ """
100
+ # Avoid mutating the caller-provided new_data dict by working on a copy.
101
+ data = dict(new_data or {})
102
+ # When used via CLI, we have 'new_name' to distinguish from the ID 'name'.
103
+ # When used via .save(), the object passes 'name' directly in new_data.
104
+ if "new_name" in data:
105
+ data["name"] = data.pop("new_name")
106
+ return super().update(id, data, **kwargs)
@@ -90,7 +90,13 @@ class ProjectApprovalRuleManager(
90
90
  _from_parent_attrs = {"project_id": "id"}
91
91
  _create_attrs = RequiredOptional(
92
92
  required=("name", "approvals_required"),
93
- optional=("user_ids", "group_ids", "protected_branch_ids", "usernames"),
93
+ optional=(
94
+ "user_ids",
95
+ "group_ids",
96
+ "protected_branch_ids",
97
+ "usernames",
98
+ "applies_to_all_protected_branches",
99
+ ),
94
100
  )
95
101
 
96
102
 
@@ -49,6 +49,8 @@ from .environments import ( # noqa: F401
49
49
  )
50
50
  from .events import ProjectEventManager # noqa: F401
51
51
  from .export_import import ProjectExportManager, ProjectImportManager # noqa: F401
52
+ from .feature_flag_user_lists import ProjectFeatureFlagUserListManager # noqa: F401
53
+ from .feature_flags import ProjectFeatureFlagManager # noqa: F401
52
54
  from .files import ProjectFileManager # noqa: F401
53
55
  from .hooks import ProjectHookManager # noqa: F401
54
56
  from .integrations import ProjectIntegrationManager, ProjectServiceManager # noqa: F401
@@ -201,6 +203,8 @@ class Project(
201
203
  environments: ProjectEnvironmentManager
202
204
  events: ProjectEventManager
203
205
  exports: ProjectExportManager
206
+ feature_flags: ProjectFeatureFlagManager
207
+ feature_flags_user_lists: ProjectFeatureFlagUserListManager
204
208
  files: ProjectFileManager
205
209
  forks: ProjectForkManager
206
210
  generic_packages: GenericPackageManager
@@ -17,6 +17,8 @@ from gitlab import types, utils
17
17
 
18
18
  if TYPE_CHECKING:
19
19
  # When running mypy we use these as the base classes
20
+ import gitlab.base
21
+
20
22
  _RestObjectBase = gitlab.base.RESTObject
21
23
  else:
22
24
  _RestObjectBase = object
@@ -38,7 +38,7 @@ class RunnerJobManager(ListMixin[RunnerJob]):
38
38
  _path = "/runners/{runner_id}/jobs"
39
39
  _obj_cls = RunnerJob
40
40
  _from_parent_attrs = {"runner_id": "id"}
41
- _list_filters = ("status",)
41
+ _list_filters = ("status", "order_by", "sort")
42
42
 
43
43
 
44
44
  class Runner(SaveMixin, ObjectDeleteMixin, RESTObject):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-gitlab
3
- Version: 8.0.0
3
+ Version: 8.2.0
4
4
  Summary: The python wrapper for the GitLab REST and GraphQL APIs.
5
5
  Author-email: Gauvain Pocentek <gauvain@pocentek.net>
6
6
  Maintainer-email: John Villalovos <john@sodarock.com>, Max Wittig <max.wittig@siemens.com>, Nejc Habjan <nejc.habjan@siemens.com>, Roger Meier <r.meier@siemens.com>
@@ -1,6 +1,6 @@
1
1
  gitlab/__init__.py,sha256=pdbvZNyXeXLn0fGXSTsBqi_ic7QLY7-9FL3uA6tvfdI,1416
2
2
  gitlab/__main__.py,sha256=HTesNl0UAU6mPb9EXWkTKMy6Q6pAUxGi3iPnDHTE2uE,68
3
- gitlab/_version.py,sha256=XPkEbYCcHOoGE7OT5IgIzRLRiX6RC1F_TmhzU09SKyE,249
3
+ gitlab/_version.py,sha256=lO0jawqMtdMHwi5iH_-GrOtH6EP6byD_JGN0JLWF6wA,249
4
4
  gitlab/base.py,sha256=xynWUZcMIbxiWLO17nnvqCsbC-lBvsy0rvWtTJOpuug,13790
5
5
  gitlab/cli.py,sha256=Bnu7T2RgDHUdxYiORBdwM4Qj9hYxoMNtmV9DtNYbWCI,12353
6
6
  gitlab/client.py,sha256=2l5FZGp4n0XqTq73moLNGfsZTaQB7KMCFDTg_7waMjo,54385
@@ -9,15 +9,15 @@ gitlab/const.py,sha256=IKpS-AQeRpAXIdT_KpzhDuTR8-KilbUudL-TQv4njFk,5179
9
9
  gitlab/exceptions.py,sha256=9Ql-z8qGQAmd_1rx1IAXzLRYmQThDeNq6vqOpCxXAjQ,8391
10
10
  gitlab/mixins.py,sha256=Z1LqcgN-kZBaxXnhk3h_j8TAmUPDxP0sSymP00hjPYQ,35515
11
11
  gitlab/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- gitlab/types.py,sha256=sBDnQgyxtNUR_5MWfCN8y8EZdxbyBlvMknnJpGIIppI,3282
13
- gitlab/utils.py,sha256=Fni1PAI84cAdz4AYWxOtxnTxSKoKbYyvbiIVHVBIoqk,9195
12
+ gitlab/types.py,sha256=fLexlOqtGDmHv1uqYlPzkFt2oHWtkpt6qjquionmFpk,4585
13
+ gitlab/utils.py,sha256=PcXYTr_IkE1pS0-91PtCh-v7ElprbuAMef7Kzgu3_Mg,9769
14
14
  gitlab/_backends/__init__.py,sha256=WalQZRIDzw19FuNxraG7fvck6ddg4cdNd3bi53QKvZM,392
15
15
  gitlab/_backends/graphql.py,sha256=wUEjrtz4KAFIFLc13cTj8D1757yeSeViX-xzoDy90Is,1450
16
16
  gitlab/_backends/protocol.py,sha256=_53iLo017Reni0GoxUR4sQcM5pWxOFY0ljQsYUwpFCU,705
17
17
  gitlab/_backends/requests_backend.py,sha256=BmIcITkrxfJtNTYrjqbT7ldXZsjlbGU2n8xBdBaPAQ0,5443
18
18
  gitlab/v4/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  gitlab/v4/cli.py,sha256=kZh-VdoEZTd9dQ6t2MeUPGf26t5StlD-tnrcXptbp4k,22849
20
- gitlab/v4/objects/__init__.py,sha256=cWZQgpn8TqbjmrNstzR_YlK3NntZT7zGrjQ1vbwQ0OM,2210
20
+ gitlab/v4/objects/__init__.py,sha256=xQG6MN27v4-4jdN0RMv832VhBFJBIA6YCThS5x-WS_k,2278
21
21
  gitlab/v4/objects/access_requests.py,sha256=QQ7cj6W4VYE8UH5HIwBO47MjXemMnO6jOqhTQttfM5I,1040
22
22
  gitlab/v4/objects/appearance.py,sha256=NGN4BJT5AqN3Ex1io7ZJjOK91oOkwvx_6JXjYG474MI,1815
23
23
  gitlab/v4/objects/applications.py,sha256=WddNZhXWrQsb4IPwanQStAVVCLCaA_4QN6_VnggldFs,599
@@ -44,6 +44,8 @@ gitlab/v4/objects/environments.py,sha256=sg80VwquEWWQXMtQXEq6NOZFllodXeTNJs4YKBf
44
44
  gitlab/v4/objects/epics.py,sha256=4H3mHQRQPitFmiGjgEelrKkeqBvJs3iWBscavY2AKlw,4018
45
45
  gitlab/v4/objects/events.py,sha256=SsMI5btCfHVMFcrNE601-2rLEIVnyOpuFuKAYQftfh8,5009
46
46
  gitlab/v4/objects/export_import.py,sha256=V0K4nOzDIm4NV1HB92kByvRjHojmfUP8m6KCR20opiI,1472
47
+ gitlab/v4/objects/feature_flag_user_lists.py,sha256=xQjzH0ZWRlJxI4Fh2SiGq5Hq15i-WbI59j59cljCIgY,921
48
+ gitlab/v4/objects/feature_flags.py,sha256=i3_r7OQPZ-MIAAcXBBKdHa1Ji7HEvg8ME4l6miEfHBY,3878
47
49
  gitlab/v4/objects/features.py,sha256=ZwuvXWWOb5rrBOpMQ-B9oGGVbtyn-bjzW9K7BwJL3Rs,1955
48
50
  gitlab/v4/objects/files.py,sha256=JWJ2FkyJLK2V5ATl6dhjVPv5JkDKuUSno6heJGIb4Ko,13148
49
51
  gitlab/v4/objects/geo_nodes.py,sha256=ebCfIulBIbmwdp_CfLxANDzsUdeFoxQTjfshlz0t_-E,3511
@@ -61,7 +63,7 @@ gitlab/v4/objects/labels.py,sha256=3zO2LkITsMI7NQTYknWspZvTpy8nSU7j_F58SuWtxFY,4
61
63
  gitlab/v4/objects/ldap.py,sha256=5UFQfP-2ULa2d025JlAwYFeLZGXpbAE6z2PX0Z_vQ_g,2171
62
64
  gitlab/v4/objects/member_roles.py,sha256=c98LD4i2ZQyP3uMrZz_cWJbl3LV0ivwKiPzKw4y6tn4,2833
63
65
  gitlab/v4/objects/members.py,sha256=0PEVwIcq4KzrA56a54NKdQFIKfd-OylCPNO7f4J1Y3k,3213
64
- gitlab/v4/objects/merge_request_approvals.py,sha256=N4Fx3AmTlc9cFa4JaP32ffxFFoTmN3TFNyic0CUiu40,6509
66
+ gitlab/v4/objects/merge_request_approvals.py,sha256=TW3nvWIzQsaKin9ATfTJsJOQ7cofMJT6q1Ujdw1Aiow,6617
65
67
  gitlab/v4/objects/merge_requests.py,sha256=P_QST0VT66UFbmDAOS84ROWE2w8RRdCiI1ypPRYj2cc,18279
66
68
  gitlab/v4/objects/merge_trains.py,sha256=32LD41AGkS0G921BDHnJevCYNOgcjVW3bH3vNJY-HB4,404
67
69
  gitlab/v4/objects/milestones.py,sha256=ZrW90nFEhNbIAS-8BNjHgBCeZ0FiCTS7ta9LGg4K8fY,6841
@@ -74,15 +76,15 @@ gitlab/v4/objects/pages.py,sha256=wUioc0uYDMIU_K9GpAiS9bG45WnS0NXC5874h6VUebk,15
74
76
  gitlab/v4/objects/personal_access_tokens.py,sha256=bm-MawqOH1zH8PvVgxFpU9uQacUndhUCMMRQxBS8lSs,1147
75
77
  gitlab/v4/objects/pipelines.py,sha256=01WpGWYU5JdkCvkA_UhYx94ukEbyOeMrE-Da_tTaLa8,10030
76
78
  gitlab/v4/objects/project_access_tokens.py,sha256=FZMg0NIo5TpT_F_SBZ5nD76JjaYIBOL3RddfYTGwxt8,869
77
- gitlab/v4/objects/projects.py,sha256=-UYTzcfoWW8_tT7VPuWhRb_QeGOluP3Me1PfMOeuUH4,49598
79
+ gitlab/v4/objects/projects.py,sha256=h4MTmf9OpjMkKc8GeEgtrAcN1HzLhfjHKS2HZ9FAGyI,49859
78
80
  gitlab/v4/objects/push_rules.py,sha256=CWOCljZupz2K1Wd2A2WP648alD0ux2FJQBydxDsPZd4,2902
79
81
  gitlab/v4/objects/registry_protection_repository_rules.py,sha256=T-8sO3Jg7ZL4KuI-paaQSrhx9gN22Hj3DD5Xa2FUAuw,1323
80
82
  gitlab/v4/objects/registry_protection_rules.py,sha256=FkhVtR5ugFlpdu5UO0Xuiy3WKKbo0JzY6sSXOjU4DZ0,1121
81
83
  gitlab/v4/objects/releases.py,sha256=H34LLpLaxneJkWL17j4AjCUnuVBr6gQPnN8ptYgkmP8,1557
82
- gitlab/v4/objects/repositories.py,sha256=FIgZua_hKmDvKvZT4uHH6aFYaDGRZTstQlScPd7eg9s,12911
84
+ gitlab/v4/objects/repositories.py,sha256=dFXhVQjcbY8JN_pFsyGiIMJN1Ucuovc5r0Iv0Xalv38,12935
83
85
  gitlab/v4/objects/resource_groups.py,sha256=k1IabzkYY1TdMSXDUgd3zS86NoGoT_rSHWoSMkBui9Y,1246
84
86
  gitlab/v4/objects/reviewers.py,sha256=BW87EGgnbUPGU41033QxMhaKG2JKYz_k7ZaVKKkjOb8,532
85
- gitlab/v4/objects/runners.py,sha256=LRzRUCeoSO4p3dY-_kWKfhEf66coW6MRyxYFbxGXkCI,4785
87
+ gitlab/v4/objects/runners.py,sha256=BNlMI7EyogHxDCXmC-UwcbbEfS-m1IZ1irUOCgI0-3k,4804
86
88
  gitlab/v4/objects/secure_files.py,sha256=XePX4HurVlxwmb07nIQ4kZrcn0ph23y7Jf2u-kOdZHY,3098
87
89
  gitlab/v4/objects/service_accounts.py,sha256=-S_MKo7c7JGvxdJYZgj5K6e86nNf0eqdqXUFsLQcnpU,640
88
90
  gitlab/v4/objects/settings.py,sha256=N1RyoX7oQ_zVhYkkEL4HM8z4OoWKLUkzDoqJnF0VAT8,4213
@@ -98,10 +100,10 @@ gitlab/v4/objects/triggers.py,sha256=1iYdlP8qpqwEctr6kKJSDanRulaKEHYnVwYwVGainI4
98
100
  gitlab/v4/objects/users.py,sha256=0-aCUflt2Wzl338H_eIaTJ_ElsXwbkgoh_SEw38u6m0,20987
99
101
  gitlab/v4/objects/variables.py,sha256=B7XHDKPrRg-sboVpClO0vYbxe6egH9U1-SPgVHv6tPc,2051
100
102
  gitlab/v4/objects/wikis.py,sha256=fR4QG4WIBeG10eBNfCN3CG-w3qlEBJIBVsJFxVVVhEs,1364
101
- python_gitlab-8.0.0.dist-info/licenses/AUTHORS,sha256=Z0P61GJSVnp7iFbRcMezhx3f4zMyPkVmG--TWaRo768,526
102
- python_gitlab-8.0.0.dist-info/licenses/COPYING,sha256=2n6rt7r999OuXp8iOqW9we7ORaxWncIbOwN1ILRGR2g,7651
103
- python_gitlab-8.0.0.dist-info/METADATA,sha256=mbEwIdItGKr4Lzg-7GQO_J7-WXfi2zsjf1jlFKBfxV0,8503
104
- python_gitlab-8.0.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
105
- python_gitlab-8.0.0.dist-info/entry_points.txt,sha256=nhpKLLP_uQPFByn8UtE9zsvQQwa402t52o_Cw9IFXMo,43
106
- python_gitlab-8.0.0.dist-info/top_level.txt,sha256=MvIaP8p_Oaf4gO_hXmHkX-5y2deHLp1pe6tJR3ukQ6o,7
107
- python_gitlab-8.0.0.dist-info/RECORD,,
103
+ python_gitlab-8.2.0.dist-info/licenses/AUTHORS,sha256=Z0P61GJSVnp7iFbRcMezhx3f4zMyPkVmG--TWaRo768,526
104
+ python_gitlab-8.2.0.dist-info/licenses/COPYING,sha256=2n6rt7r999OuXp8iOqW9we7ORaxWncIbOwN1ILRGR2g,7651
105
+ python_gitlab-8.2.0.dist-info/METADATA,sha256=72AgFjCm-EjnXopz9FVfARxiuqOqkjpOHK0Sy7gpQ7s,8503
106
+ python_gitlab-8.2.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
107
+ python_gitlab-8.2.0.dist-info/entry_points.txt,sha256=nhpKLLP_uQPFByn8UtE9zsvQQwa402t52o_Cw9IFXMo,43
108
+ python_gitlab-8.2.0.dist-info/top_level.txt,sha256=MvIaP8p_Oaf4gO_hXmHkX-5y2deHLp1pe6tJR3ukQ6o,7
109
+ python_gitlab-8.2.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.10.2)
2
+ Generator: setuptools (82.0.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5