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