Refactor #4206
closedPrepend all pulpcore model fields in the Content model hierarchy with _ (e.g. '_type', '_id', '_notes')
0%
Description
Motivations¶
1. Avoiding attribute naming collisions when content writer's subclass Content.
2. Allow users to easily see which attributes are from pulpcore and therefore common to all content types.
It was determined after long discussion here [0] that the solution to this should be to make sure all of the fields used by Pulpcore on models that are intended to be extended via the Plugin API are prepended with an underscore character.
Changes¶
Rename the Model fields here in the following ways:
https://github.com/pulp/pulp/blob/d1dc089890f167617fe9917af087d5587708296b/pulpcore/pulpcore/app/models/base.py#L25-L27
created -> _created
id -> _id
last_updated -> _last_updated
As well as the MasterModel "type" field here:
https://github.com/pulp/pulp/blob/d1dc089890f167617fe9917af087d5587708296b/pulpcore/pulpcore/app/models/base.py#L80
type -> _type
Also for the Content model itself:
https://github.com/pulp/pulp/blob/f9707edde3201e61a454efc395ad2d3e3d628f9b/pulpcore/pulpcore/app/models/content.py#L117-L118
notes -> _notes
artifacts -> _artifacts
After changing the field names, a lot of other code will need to be fixed likewise. Serializers and Django ORM queries will need to use the new names, to start with.
Details¶
This will be a backwards incompatible Beta change for both plugin writers and users. As such, the PR needs the 'breaking-changes', 'rest-API', and 'plugin-writer' labels.
As part of this issue, we should also switch to using 'pk' instead of 'id' in all Django ORM queries. 'pk' is a psuedonym for whatever the Primary Key field is set to, and will work no matter what said field is named. I would recommend searching for ".id", "id__in", and "id=" to make sure all of them are found, although that may not find all of them.
After making ^ change, go through pulp/pulp and update any references to the other field names.
After changing this in Pulpcore, we will need to go through each of the plugins (file, python, docker, rpm, ansible, + plugin_template) and do the same thing (replace usages of 'id' with 'pk' and other renamed fields with _field) in each of those. Link them back to this issue with "re" in the commit message.
[0] https://www.redhat.com/archives/pulp-dev/2018-August/msg00019.html
Related issues
Updated by dalley about 6 years ago
A side effect of this change will be that accidentally using 'id' in a Django ORM query will not behave as intended. If this becomes a problem, I would suggest creating a lint tool that searches for this pattern and reminds the programmer to use 'pk' instead.
Updated by dalley about 6 years ago
- Blocks Refactor #4207: Rename "update_type" and "errata_id" to "type" and "id", as they are named in createrepo_c added
Updated by daviddavis about 6 years ago
- Groomed changed from No to Yes
- Sprint Candidate changed from No to Yes
Updated by amacdona@redhat.com about 6 years ago
It looks like https://pulp.plan.io/issues/3704 is a dupe, but I'm not clear what the exact overlap is. Please have a look at both issues when assigning this one.
Updated by amacdona@redhat.com about 6 years ago
- Has duplicate Task #3704: Make MasterModel attributes private using leading underscores added
Updated by dalley about 6 years ago
- Has duplicate deleted (Task #3704: Make MasterModel attributes private using leading underscores)
Updated by dalley about 6 years ago
- Subject changed from Prepend all pulpcore model fields with _ (e.g. '_type', '_id', '_notes') to Prepend all plugin-api pulpcore model fields with _ (e.g. '_type', '_id', '_notes')
Updated by dalley about 6 years ago
- Subject changed from Prepend all plugin-api pulpcore model fields with _ (e.g. '_type', '_id', '_notes') to Prepend all pulpcore model fields in the Content model hierarchy with _ (e.g. '_type', '_id', '_notes')
Updated by CodeHeeler about 6 years ago
- Status changed from NEW to ASSIGNED
- Assignee set to CodeHeeler
Updated by daviddavis about 6 years ago
- Blocks Task #4067: Commit migrations to source control added
Added by CodeHeeler about 6 years ago
Added by CodeHeeler about 6 years ago
Revision cf30f2e9 | View on GitHub
Prepend pulpcore Content model fields with _
Prepend all pulpcore model fields in the Content model hierarchy with _ (e.g. '_type', '_id', '_notes')
Required PR: https://github.com/pulp/pulp_file/pull/148
Added by CodeHeeler about 6 years ago
Revision 349fdf8b | View on GitHub
Prepend Content model hierarchy with _
Prepend all pulpcore model fields in the Content model hierarchy with _ and do the same for all plugins reliant on them.
Required PR: https://github.com/pulp/pulp/pull/3798
Updated by CodeHeeler about 6 years ago
Added by CodeHeeler about 6 years ago
Revision 342fe67b | View on GitHub
Prepend Content model hierarchy with _
Prepend all pulpcore model fields in the Content model hierarchy with _ and do the same for all plugins reliant on them.
Required PR: https://github.com/pulp/pulp/pull/3798
Added by CodeHeeler almost 6 years ago
Revision 25c41c47 | View on GitHub
Prepend Content model hierarchy with _
Prepend all pulpcore model fields in the Content model hierarchy with _ and do the same for all plugins reliant on them.
Required PR: https://github.com/pulp/pulp/pull/3798
Updated by dalley almost 6 years ago
- Status changed from POST to MODIFIED
I think that should be everything. You updated file and python plugins and core, david updated RPM, I updated the plugin template and the ansible plugin, and the docker plugin didn't need anything done.
Updated by bmbouter about 5 years ago
- Status changed from MODIFIED to CLOSED - CURRENTRELEASE
Prepend pulpcore Content model fields with _
Prepend all pulpcore model fields in the Content model hierarchy with _ (e.g. '_type', '_id', '_notes')
Required PR: https://github.com/pulp/pulp_file/pull/148
ref #4206 https://pulp.plan.io/issues/4206