| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
I tried it without issue using gitlab.com:
GL = gitlab.Gitlab(url="https://gitlab.com/", private_token=TOKEN)
print(GL)
print()
project = GL.projects.get(my_project)
print(project)
print()
issue = project.issues.get(1)
print(issue)
print()
result = issue.notes.create({'body': 'note content'})
print(result)
Also there is a functional test that creates a note in an issue:
| note = issue.notes.create({"body": "This is an issue note"}) |
@Cynerd I'm not able to reproduce this either. Could you post the entire snippet, maybe logs with ctx.enable_debug() (with the token masked)?
Does your token have write API access to the project? This definitely works in functional tests and 2 GitLab instances I've tried.
This is the absolute minimal script to reproduce it:
#!/usr/bin/env python3
import gitlab
ctx = gitlab.Gitlab("https://gitlab.labs.nic.cz", private_token="masked")
project = ctx.projects.get(265)
print(project)
issue = project.issues.get(729)
print(issue)
issue.notes.create({'body': 'note content'})
It prints (with truncated lines):
$ ./t.py <class 'gitlab.v4.objects.Project'> => {'id': 265, ....
<class 'gitlab.v4.objects.ProjectIssue'> => {'id': 13996, 'iid': 729, 'project_id': 265, ...
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 59, in __getattr__
return self.__dict__["_updated_attrs"][name]
KeyError: 'project_id'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "./t.py", line 8, in <module>
issue.notes.create({'body': 'note content'})
File "/usr/lib/python3.8/site-packages/gitlab/exceptions.py", line 279, in wrapped_f
return f(*args, **kwargs)
File "/usr/lib/python3.8/site-packages/gitlab/mixins.py", line 215, in create
return self._obj_cls(self, server_data)
File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 44, in __init__
self._create_managers()
File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 129, in _create_managers
manager = cls(self.manager.gitlab, parent=self)
File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 252, in __init__
self._computed_path = self._compute_path()
File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 265, in _compute_path
data = {
File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 266, in <dictcomp>
self_attr: getattr(self._parent, parent_attr, None)
File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 62, in __getattr__
value = self.__dict__["_attrs"][name]
TypeError: list indices must be integers or slices, not str
Thanks for the info.
I don't understand this though:
$ ./t.py <class 'gitlab.v4.objects.Project'> => {'id': 265, .... <class 'gitlab.v4.objects.ProjectIssue'> => {'id': 13996, 'iid': 729, 'project_id': 265, ... Traceback (most recent call last): File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 59, in __getattr__ return self.__dict__["_updated_attrs"][name] KeyError: 'project_id'
Line 59 in base.py in version 2.7.1 does not have the line return self.__dict__["_updated_attrs"][name]
Line 59 in 37af229
| } |
So that is confusing for me.
Thanks.
I am sorry. I forgot to enable the environment. This was version 2.5.0. This is output from correct environment:
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 77, in __getattr__
return self.__dict__["_updated_attrs"][name]
KeyError: 'project_id'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "./t.py", line 8, in <module>
issue.notes.create({'body': 'note content'})
File "/usr/lib/python3.8/site-packages/gitlab/exceptions.py", line 287, in wrapped_f
return f(*args, **kwargs)
File "/usr/lib/python3.8/site-packages/gitlab/mixins.py", line 325, in create
return self._obj_cls(self, server_data)
File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 62, in __init__
self._create_managers()
File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 151, in _create_managers
manager = cls(self.manager.gitlab, parent=self)
File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 290, in __init__
self._computed_path = self._compute_path()
File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 305, in _compute_path
data = {
File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 306, in <dictcomp>
self_attr: getattr(self._parent, parent_attr, None)
File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 80, in __getattr__
value = self.__dict__["_attrs"][name]
TypeError: list indices must be integers or slices, not str
$ pip list | grep gitlab projects-teams-refactor%= python-gitlab 2.7.1
This is confusing.
Before creating the note can you do this?
import pprint print(issue) print(type(issue)) print() print(type(issue.__dict__)) print() pprint.pprint(issue.__dict__))
Not sure why line 80 in base.py is failing. Seems like the __dict__ or __dict__["_updated_attrs"] is corrupt
<class 'gitlab.v4.objects.issues.ProjectIssue'> => {'id': 13996, 'iid': 729, 'project_id': 265, 'title': 'foris-controller-openvpn-module: IPv6 fix listening on IPv6', 'description': 'Fix "listen on IPv6" feature.\n\n- [ ] [foris-controller-openvpn-module: fix listening on IPv6](https://gitlab.nic.cz/turris/foris-controller/foris-controller-openvpn-module/-/milestones/1)', 'state': 'opened', 'created_at': '2021-02-09T19:52:36.020+01:00', 'updated_at': '2021-04-30T14:19:07.534+02:00', 'closed_at': None, 'closed_by': None, 'labels': ['To Do'], 'milestone': {'id': 1283, 'iid': 57, 'group_id': 35, 'title': 'Turris OS 5.4.0', 'description': '* Pakon plugin\r\n* reForis as default web interface', 'state': 'active', 'created_at': '2020-11-09T09:46:14.728+01:00', 'updated_at': '2020-11-16T11:07:50.373+01:00', 'due_date': None, 'start_date': None, 'expired': None, 'web_url': 'https://gitlab.nic.cz/groups/turris/-/milestones/57'}, 'assignees': [{'id': 1540, 'name': 'Martin Matějek', 'username': 'mmatejek', 'state': 'active', 'avatar_url': 'https://gitlab.nic.cz/uploads/-/system/user/avatar/1540/avatar.png', 'web_url': 'https://gitlab.nic.cz/mmatejek'}], 'author': {'id': 1540, 'name': 'Martin Matějek', 'username': 'mmatejek', 'state': 'active', 'avatar_url': 'https://gitlab.nic.cz/uploads/-/system/user/avatar/1540/avatar.png', 'web_url': 'https://gitlab.nic.cz/mmatejek'}, 'assignee': {'id': 1540, 'name': 'Martin Matějek', 'username': 'mmatejek', 'state': 'active', 'avatar_url': 'https://gitlab.nic.cz/uploads/-/system/user/avatar/1540/avatar.png', 'web_url': 'https://gitlab.nic.cz/mmatejek'}, 'user_notes_count': 0, 'merge_requests_count': 0, 'upvotes': 0, 'downvotes': 0, 'due_date': None, 'confidential': False, 'discussion_locked': None, 'web_url': 'https://gitlab.nic.cz/turris/os/packages/-/issues/729', 'time_stats': {'time_estimate': 0, 'total_time_spent': 0, 'human_time_estimate': None, 'human_total_time_spent': None}, 'task_completion_status': {'count': 1, 'completed_count': 0}, 'has_tasks': True, 'task_status': '0 of 1 task completed', '_links': {'self': 'https://gitlab.nic.cz/api/v4/projects/265/issues/729', 'notes': 'https://gitlab.nic.cz/api/v4/projects/265/issues/729/notes', 'award_emoji': 'https://gitlab.nic.cz/api/v4/projects/265/issues/729/award_emoji', 'project': 'https://gitlab.nic.cz/api/v4/projects/265'}, 'references': {'short': '#729', 'relative': '#729', 'full': 'turris/os/packages#729'}, 'subscribed': False, 'moved_to_id': None, 'service_desk_reply_to': None}
<class 'gitlab.v4.objects.issues.ProjectIssue'>
<class 'dict'>
{'_attrs': {'_links': {'award_emoji': 'https://gitlab.nic.cz/api/v4/projects/265/issues/729/award_emoji',
'notes': 'https://gitlab.nic.cz/api/v4/projects/265/issues/729/notes',
'project': 'https://gitlab.nic.cz/api/v4/projects/265',
'self': 'https://gitlab.nic.cz/api/v4/projects/265/issues/729'},
'assignee': {'avatar_url': 'https://gitlab.nic.cz/uploads/-/system/user/avatar/1540/avatar.png',
'id': 1540,
'name': 'Martin Matějek',
'state': 'active',
'username': 'mmatejek',
'web_url': 'https://gitlab.nic.cz/mmatejek'},
'assignees': [{'avatar_url': 'https://gitlab.nic.cz/uploads/-/system/user/avatar/1540/avatar.png',
'id': 1540,
'name': 'Martin Matějek',
'state': 'active',
'username': 'mmatejek',
'web_url': 'https://gitlab.nic.cz/mmatejek'}],
'author': {'avatar_url': 'https://gitlab.nic.cz/uploads/-/system/user/avatar/1540/avatar.png',
'id': 1540,
'name': 'Martin Matějek',
'state': 'active',
'username': 'mmatejek',
'web_url': 'https://gitlab.nic.cz/mmatejek'},
'closed_at': None,
'closed_by': None,
'confidential': False,
'created_at': '2021-02-09T19:52:36.020+01:00',
'description': 'Fix "listen on IPv6" feature.\n'
'\n'
'- [ ] [foris-controller-openvpn-module: fix '
'listening on '
'IPv6](https://gitlab.nic.cz/turris/foris-controller/foris-controller-openvpn-module/-/milestones/1)',
'discussion_locked': None,
'downvotes': 0,
'due_date': None,
'has_tasks': True,
'id': 13996,
'iid': 729,
'labels': ['To Do'],
'merge_requests_count': 0,
'milestone': {'created_at': '2020-11-09T09:46:14.728+01:00',
'description': '* Pakon plugin\r\n'
'* reForis as default web interface',
'due_date': None,
'expired': None,
'group_id': 35,
'id': 1283,
'iid': 57,
'start_date': None,
'state': 'active',
'title': 'Turris OS 5.4.0',
'updated_at': '2020-11-16T11:07:50.373+01:00',
'web_url': 'https://gitlab.nic.cz/groups/turris/-/milestones/57'},
'moved_to_id': None,
'project_id': 265,
'references': {'full': 'turris/os/packages#729',
'relative': '#729',
'short': '#729'},
'service_desk_reply_to': None,
'state': 'opened',
'subscribed': False,
'task_completion_status': {'completed_count': 0, 'count': 1},
'task_status': '0 of 1 task completed',
'time_stats': {'human_time_estimate': None,
'human_total_time_spent': None,
'time_estimate': 0,
'total_time_spent': 0},
'title': 'foris-controller-openvpn-module: IPv6 fix listening on '
'IPv6',
'updated_at': '2021-04-30T14:19:07.534+02:00',
'upvotes': 0,
'user_notes_count': 0,
'web_url': 'https://gitlab.nic.cz/turris/os/packages/-/issues/729'},
'_module': <module 'gitlab.v4.objects.issues' from '/usr/lib/python3.8/site-packages/gitlab/v4/objects/issues.py'>,
'_parent_attrs': {'project_id': 265},
'_updated_attrs': {},
'awardemojis': <gitlab.v4.objects.award_emojis.ProjectIssueAwardEmojiManager object at 0x7ffbfac5b910>,
'discussions': <gitlab.v4.objects.discussions.ProjectIssueDiscussionManager object at 0x7ffbfacc4760>,
'links': <gitlab.v4.objects.issues.ProjectIssueLinkManager object at 0x7ffbfac7a580>,
'manager': <gitlab.v4.objects.issues.ProjectIssueManager object at 0x7ffbfac5b940>,
'notes': <gitlab.v4.objects.notes.ProjectIssueNoteManager object at 0x7ffbfac7a400>,
'resourcelabelevents': <gitlab.v4.objects.events.ProjectIssueResourceLabelEventManager object at 0x7ffbfac7a8b0>,
'resourcemilestoneevents': <gitlab.v4.objects.events.ProjectIssueResourceMilestoneEventManager object at 0x7ffbfac7a9a0>,
'resourcestateevents': <gitlab.v4.objects.events.ProjectIssueResourceStateEventManager object at 0x7ffbfac7ac10>}
@Cynerd this is caused by your nginx redirect to your new instance URL (from your instance login page), I was able to register on your gitlab and reproduce it, but then was able to post an issue note via the new URL:
So use the new URL and you should be fine:
ctx = gitlab.Gitlab("https://gitlab.nic.cz", private_token=token)
Proxies can do weird stuff sometimes, not sure how many edge cases python-gitlab should really try to handle. We might try and investigate this in case it's more common.
@nejch Nice job figuring it out!
| Back | FazBrowse Home | New Git URL |
Description of the problem, including code/CLI snippet
I am unable to create notes. I am simply trying to do:
project = ctx.projects.get(265) issue = project.issues.get(729) issue.notes.create({'body': 'note content'})(Lifted pretty much strait from documentation)
Expected Behavior
Note is posted
Actual Behavior
An exception is thrown:
Traceback (most recent call last): File "./turris-os-milestone-rename.py", line 60, in <module> main() File "./turris-os-milestone-rename.py", line 20, in main issue.notes.create({'body': 'note content'}) File "/usr/lib/python3.8/site-packages/gitlab/exceptions.py", line 287, in wrapped_f return f(*args, **kwargs) File "/usr/lib/python3.8/site-packages/gitlab/mixins.py", line 325, in create return self._obj_cls(self, server_data) File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 62, in __init__ self._create_managers() File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 151, in _create_managers manager = cls(self.manager.gitlab, parent=self) File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 290, in __init__ self._computed_path = self._compute_path() File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 305, in _compute_path data = { File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 306, in <dictcomp> self_attr: getattr(self._parent, parent_attr, None) File "/usr/lib/python3.8/site-packages/gitlab/base.py", line 80, in __getattr__ value = self.__dict__["_attrs"][name] TypeError: list indices must be integers or slices, not strSpecifications