Skip to content

RefreshMixin.refresh() doesn't remove removed attributes #1155

@ericfrederich

Description

@ericfrederich

Description of the problem, including code/CLI snippet

When attributes disappear from an object on the server RefreshMixin.refresh() doesn't remove them.

For instance if a job that has artifacts will have an artifacts_file attribute. If you call .delete_artifacts() on it, then call .refresh() the artifacts_file attribute will still be there.

# get a job with artifacts
job = project.jobs.get(job_id)
# will succeed
assert hasattr(job, "artifacts_file")
# now delete the artifacts from the server
job.delete_artifacts()

# This will fail because the artifacts_file is still there; refresh() didn't remove it
job.refresh()
assert not hasattr(job, "artifacts_file")

# If you get the job again from the project it'll be fine
job = project.jobs.get(job_id)
assert not hasattr(job, "artifacts_file")

Expected Behavior

I would expect that the attributes dict on any object should be exactly the same between a freshly retrieved object and an old object after calling .refresh()

o.refresh()
# After a refresh this should always be true
o.attributes == o.manager.get(o.id).attributes

Actual Behavior

They're not equal

Specifications

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions