Project

Profile

Help

Refactor #4206

Updated by dalley almost 3 years ago

h3. Motivations

1. Avoiding attribute naming collisions when content writer's subclass Content.

2. Allow users
Pulpcore adds a number of fields to easily see models which attributes are from pulpcore and therefore common likely (or known) to all conflict with the names of fields on certain content types. For instance, errata contain fields named 'id' and 'type', which conflict with the default field names for the pk field and a field used by the MasterModel mechanism, respectively.

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. Thus:

h3. Changes

Rename
* A primary key field would be created on the Model fields here in base model named '_id' to replace the following ways: default-generated 'id' one.
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
* 'type' on 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:
would be renamed to '_type'
https://github.com/pulp/pulp/blob/f9707edde3201e61a454efc395ad2d3e3d628f9b/pulpcore/pulpcore/app/models/content.py#L117-L118

notes -> _notes
* 'notes' would be renamed to '_notes'
artifacts -> _artifacts

After changing the field names, a lot of other code will need
* And so forth. This is not intended to be fixed likewise. Serializers and Django ORM queries will need to use the new names, to start with.

h3. Details
an exhaustive list.

This will be a backwards incompatible Beta change is already the case for both plugin writers some fields, such as '_created' and users. As such, the PR needs the 'breaking-changes', 'rest-API', and 'plugin-writer' labels. '_last_updated'

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) 'pk') 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

Back