id,summary,reporter,owner,description,type,status,priority,milestone,component,version,severity,resolution,keywords,cc,branch,changelog,apichanges,internalchanges 11648,Model classes should have a resource property,Ryan J Ollos,Ryan J Ollos,"The `Changeset`, `Milestone` and `Node` classes have a `resource` read-only property while the `Attachment`, `Ticket`, `Repository` and `WikiPage` classes create the `resource` attribute in their `__init__` method. Having `resource` as a read-only property seems simpler since we don't have to worry about updating the `resource` attribute as the object changes. For example: [browser:/tags/trac-1.0.1/trac/ticket/model.py@:252#L236]. As a read-only property, `resource` will be implicitly updated as the object changes. This change prevent defects like the one we saw in #11138. With this change and the one in #11609, if we ever find it worthwhile to create a `ModelBase` class it will be clear that `resource` and `realm` should be abstract properties (decorated with `abc.abstractproperty`). I also wanted to make this change ahead of modifying the `Component` and `Version` classes in #1233 so that the pattern to follow is clear.",enhancement,assigned,normal,1.1.3,general,,normal,,model,,,,"Every model class has a `resource` property and the `Resource` objects are created on access, replacing several cases in which `resource` was an attribute and the `Resource` object was created in the initializer and other class methods.",