We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Need support to [...]/personal_access_tokens/self Gitlab API
## Description of the problem, including code/CLI snippet
So far, I'm unable to get scopes information from the 'personal access token' used to authenticate to Gitlab API.
Ofc, it is easy to get the list of the personal access token of the authenticated user, but I see no way to get the link with the one really used to authenticate.

It seems the dedicated Gitlab API entrypoint for that is [...]/personal_access_tokens/self which is not actually supported by python-gitlab.

Context: the idea is to check with efficiency some required scopes/permissions/rights, instead of trying an operation (like download repository tarball) because it could be time consuming although a simple check could be immediate.

## Expected Behavior

Get scopes (and roles ?) information of the 'personal access token' currently used to authenticate to Gitlab API.

## Actual Behavior

Unable to get this information.

## Specifications

  - python-gitlab version: 3.13.0
  - API version you are using (v3/v4): v4
  - Gitlab server version (or gitlab.com): gitlab.com


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `gitlab/v4/objects/personal_access_tokens.py`
Content:
```
1 from gitlab.base import RESTManager, RESTObject
2 from gitlab.mixins import CreateMixin, DeleteMixin, ListMixin, ObjectDeleteMixin
3 from gitlab.types import ArrayAttribute, RequiredOptional
4 
5 __all__ = [
6     "PersonalAccessToken",
7     "PersonalAccessTokenManager",
8     "UserPersonalAccessToken",
9     "UserPersonalAccessTokenManager",
10 ]
11 
12 
13 class PersonalAccessToken(ObjectDeleteMixin, RESTObject):
14     pass
15 
16 
17 class PersonalAccessTokenManager(DeleteMixin, ListMixin, RESTManager):
18     _path = "/personal_access_tokens"
19     _obj_cls = PersonalAccessToken
20     _list_filters = ("user_id",)
21 
22 
23 class UserPersonalAccessToken(RESTObject):
24     pass
25 
26 
27 class UserPersonalAccessTokenManager(CreateMixin, RESTManager):
28     _path = "/users/{user_id}/personal_access_tokens"
29     _obj_cls = UserPersonalAccessToken
30     _from_parent_attrs = {"user_id": "id"}
31     _create_attrs = RequiredOptional(
32         required=("name", "scopes"), optional=("expires_at",)
33     )
34     _types = {"scopes": ArrayAttribute}
35
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/gitlab/v4/objects/personal_access_tokens.py b/gitlab/v4/objects/personal_access_tokens.py
--- a/gitlab/v4/objects/personal_access_tokens.py
+++ b/gitlab/v4/objects/personal_access_tokens.py
@@ -1,5 +1,7 @@
+from typing import Any, cast, Union
+
 from gitlab.base import RESTManager, RESTObject
-from gitlab.mixins import CreateMixin, DeleteMixin, ListMixin, ObjectDeleteMixin
+from gitlab.mixins import CreateMixin, DeleteMixin, ObjectDeleteMixin, RetrieveMixin
 from gitlab.types import ArrayAttribute, RequiredOptional
 
 __all__ = [
@@ -14,11 +16,16 @@
     pass
 
 
-class PersonalAccessTokenManager(DeleteMixin, ListMixin, RESTManager):
+class PersonalAccessTokenManager(DeleteMixin, RetrieveMixin, RESTManager):
     _path = "/personal_access_tokens"
     _obj_cls = PersonalAccessToken
     _list_filters = ("user_id",)
 
+    def get(
+        self, id: Union[str, int], lazy: bool = False, **kwargs: Any
+    ) -> PersonalAccessToken:
+        return cast(PersonalAccessToken, super().get(id=id, lazy=lazy, **kwargs))
+
 
 class UserPersonalAccessToken(RESTObject):
     pass

{"golden_diff": "diff --git a/gitlab/v4/objects/personal_access_tokens.py b/gitlab/v4/objects/personal_access_tokens.py\n--- a/gitlab/v4/objects/personal_access_tokens.py\n+++ b/gitlab/v4/objects/personal_access_tokens.py\n@@ -1,5 +1,7 @@\n+from typing import Any, cast, Union\n+\n from gitlab.base import RESTManager, RESTObject\n-from gitlab.mixins import CreateMixin, DeleteMixin, ListMixin, ObjectDeleteMixin\n+from gitlab.mixins import CreateMixin, DeleteMixin, ObjectDeleteMixin, RetrieveMixin\n from gitlab.types import ArrayAttribute, RequiredOptional\n \n __all__ = [\n@@ -14,11 +16,16 @@\n     pass\n \n \n-class PersonalAccessTokenManager(DeleteMixin, ListMixin, RESTManager):\n+class PersonalAccessTokenManager(DeleteMixin, RetrieveMixin, RESTManager):\n     _path = \"/personal_access_tokens\"\n     _obj_cls = PersonalAccessToken\n     _list_filters = (\"user_id\",)\n \n+    def get(\n+        self, id: Union[str, int], lazy: bool = False, **kwargs: Any\n+    ) -> PersonalAccessToken:\n+        return cast(PersonalAccessToken, super().get(id=id, lazy=lazy, **kwargs))\n+\n \n class UserPersonalAccessToken(RESTObject):\n     pass\n", "issue": "Need support to [...]/personal_access_tokens/self Gitlab API\n## Description of the problem, including code/CLI snippet\r\nSo far, I'm unable to get scopes information from the 'personal access token' used to authenticate to Gitlab API.\r\nOfc, it is easy to get the list of the personal access token of the authenticated user, but I see no way to get the link with the one really used to authenticate.\r\n\r\nIt seems the dedicated Gitlab API entrypoint for that is [...]/personal_access_tokens/self which is not actually supported by python-gitlab.\r\n\r\nContext: the idea is to check with efficiency some required scopes/permissions/rights, instead of trying an operation (like download repository tarball) because it could be time consuming although a simple check could be immediate.\r\n\r\n## Expected Behavior\r\n\r\nGet scopes (and roles ?) information of the 'personal access token' currently used to authenticate to Gitlab API.\r\n\r\n## Actual Behavior\r\n\r\nUnable to get this information.\r\n\r\n## Specifications\r\n\r\n  - python-gitlab version: 3.13.0\r\n  - API version you are using (v3/v4): v4\r\n  - Gitlab server version (or gitlab.com): gitlab.com\r\n\n", "before_files": [{"content": "from gitlab.base import RESTManager, RESTObject\nfrom gitlab.mixins import CreateMixin, DeleteMixin, ListMixin, ObjectDeleteMixin\nfrom gitlab.types import ArrayAttribute, RequiredOptional\n\n__all__ = [\n    \"PersonalAccessToken\",\n    \"PersonalAccessTokenManager\",\n    \"UserPersonalAccessToken\",\n    \"UserPersonalAccessTokenManager\",\n]\n\n\nclass PersonalAccessToken(ObjectDeleteMixin, RESTObject):\n    pass\n\n\nclass PersonalAccessTokenManager(DeleteMixin, ListMixin, RESTManager):\n    _path = \"/personal_access_tokens\"\n    _obj_cls = PersonalAccessToken\n    _list_filters = (\"user_id\",)\n\n\nclass UserPersonalAccessToken(RESTObject):\n    pass\n\n\nclass UserPersonalAccessTokenManager(CreateMixin, RESTManager):\n    _path = \"/users/{user_id}/personal_access_tokens\"\n    _obj_cls = UserPersonalAccessToken\n    _from_parent_attrs = {\"user_id\": \"id\"}\n    _create_attrs = RequiredOptional(\n        required=(\"name\", \"scopes\"), optional=(\"expires_at\",)\n    )\n    _types = {\"scopes\": ArrayAttribute}\n", "path": "gitlab/v4/objects/personal_access_tokens.py"}], "after_files": [{"content": "from typing import Any, cast, Union\n\nfrom gitlab.base import RESTManager, RESTObject\nfrom gitlab.mixins import CreateMixin, DeleteMixin, ObjectDeleteMixin, RetrieveMixin\nfrom gitlab.types import ArrayAttribute, RequiredOptional\n\n__all__ = [\n    \"PersonalAccessToken\",\n    \"PersonalAccessTokenManager\",\n    \"UserPersonalAccessToken\",\n    \"UserPersonalAccessTokenManager\",\n]\n\n\nclass PersonalAccessToken(ObjectDeleteMixin, RESTObject):\n    pass\n\n\nclass PersonalAccessTokenManager(DeleteMixin, RetrieveMixin, RESTManager):\n    _path = \"/personal_access_tokens\"\n    _obj_cls = PersonalAccessToken\n    _list_filters = (\"user_id\",)\n\n    def get(\n        self, id: Union[str, int], lazy: bool = False, **kwargs: Any\n    ) -> PersonalAccessToken:\n        return cast(PersonalAccessToken, super().get(id=id, lazy=lazy, **kwargs))\n\n\nclass UserPersonalAccessToken(RESTObject):\n    pass\n\n\nclass UserPersonalAccessTokenManager(CreateMixin, RESTManager):\n    _path = \"/users/{user_id}/personal_access_tokens\"\n    _obj_cls = UserPersonalAccessToken\n    _from_parent_attrs = {\"user_id\": \"id\"}\n    _create_attrs = RequiredOptional(\n        required=(\"name\", \"scopes\"), optional=(\"expires_at\",)\n    )\n    _types = {\"scopes\": ArrayAttribute}\n", "path": "gitlab/v4/objects/personal_access_tokens.py"}]}