FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Not possible to create note in issue · Issue #1477 · python-gitlab/python-gitlab · GitHub

Repository navigation

Not possible to create note in issue #1477

Description

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 str

Specifications

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

Activity

  1. JohnVillalovos commented on May 27, 2021

    Member

    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)
    
  2. JohnVillalovos commented on May 28, 2021

    Member

    Also there is a functional test that creates a note in an issue:

    note = issue.notes.create({"body": "This is an issue note"})

  3. nejch commented on May 30, 2021

    Member

    @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.

  4. Cynerd commented on May 30, 2021

    Author

    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
    
  5. JohnVillalovos commented on May 30, 2021

    Member

    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]

    So that is confusing for me.

    • Can you verify that it is 2.7.1 installed.
    • Maybe paste the first 100 lines of your /usr/lib/python3.8/site-packages/gitlab/base.py file here.

    Thanks.

  6. Cynerd commented on May 30, 2021

    Author

    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
    
  7. JohnVillalovos commented on May 30, 2021

    Member

    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

  8. Cynerd commented on May 30, 2021

    Author
    <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>}
    
  9. nejch commented on May 30, 2021

    Member

    @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.

  10. JohnVillalovos commented on May 30, 2021

    Member

    @nejch Nice job figuring it out!

  11. locked as resolved and limited conversation to collaborators on Sep 12, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions


      Back | FazBrowse Home | New Git URL