#22819 closed Cleanup/optimization (fixed)
Rename attribute `output_type` on the Query Expression API
| Reported by: | jorgecarleitao | Owned by: | Tim Graham | 
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 1.7-beta-2 | 
| Severity: | Release blocker | Keywords: | |
| Cc: | jorgecarleitao | Triage Stage: | Accepted | 
| Has patch: | no | Needs documentation: | no | 
| Needs tests: | no | Patch needs improvement: | no | 
| Easy pickings: | no | UI/UX: | no | 
Description
Since the output_type used in the Query Expression API is becoming part of the Public API in the 1.7,
I would like to propose to rename it before 1.7 is out. Here is why:
output_type is a property of classes that follow the Query Expression API and is defined on any object that follows the Query Expression API as
@property
def output_type(self):
    return IntegerField()  # example, it only requires to be a subclass of `Field`
However,
print(type(IntegerField())) # <class '__main__.IntegerField'> print(type(IntegerField)) # <class 'type'>
IMHO, output_type can be misleadingly interpreted as being a type rather than an instance of (a subclass of) a Field.
I imagine it would be very easy to someone write
@property
def output_type(self):
    return CustomField
instead of
@property
def output_type(self):
    return CustomField()
Given that some types that comply with the Query Expression API already have the attribute source (Aggregate, Col, and GeoAggregate), one possibility would be use just output.
Change History (10)
comment:1 by , 11 years ago
| Component: | Uncategorized → Database layer (models, ORM) | 
|---|
comment:2 by , 11 years ago
| Severity: | Normal → Release blocker | 
|---|
comment:3 by , 11 years ago
Could we not enforce a check that it is a field instance and not a class?
That said, if the impact of renaming it is minimal, let's do it now.
comment:4 by , 11 years ago
If it were to be renamed, I vote for "output_field", which gives a little more information about what it actually is - an instance of a model_field. Documentation can describe what the current name is, but no such documentation exists (yet) that is clear.
comment:5 by , 11 years ago
The current name is something I just picked while hacking - there wasn't that much though put into it. The reasoning is something along lines "what data type the DB produces for the expression", hence output_type. Fields happen to represent also database data types, so that is why field instances are used.
If some better name can be found I don't have any objections against changing the name.
comment:6 by , 11 years ago
| Triage Stage: | Unreviewed → Accepted | 
|---|
Now we just have to agree on a name. @jorgecarleitao what do you think of output_field?
comment:8 by , 11 years ago
| Owner: | changed from to | 
|---|---|
| Status: | new → assigned | 
comment:9 by , 11 years ago
| Resolution: | → fixed | 
|---|---|
| Status: | assigned → closed | 
Bumping to release blocker so we make a decision before 1.7 is released.