Skip to content

Commit ad37c91

Browse files
committed
rebase and adapt to new compute field fn
1 parent 1c62bf1 commit ad37c91

File tree

2 files changed

+64
-27
lines changed

2 files changed

+64
-27
lines changed

src/serializers/computed_fields.rs

Lines changed: 63 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -130,36 +130,73 @@ impl ComputedFields {
130130
// Do not serialize computed fields
131131
return Ok(());
132132
}
133+
if extra.sort_keys {
134+
let mut sorted_fields: Vec<&ComputedField> = self.0.iter().collect();
135+
sorted_fields.sort_by_cached_key(|field| match extra.serialize_by_alias_or(field.serialize_by_alias) {
136+
true => field.alias.as_str(),
137+
false => field.property_name.as_str(),
138+
});
139+
for computed_field in sorted_fields {
140+
let property_name_py = computed_field.property_name_py.bind(model.py());
141+
let (next_include, next_exclude) = match filter.key_filter(property_name_py, include, exclude) {
142+
Ok(Some((next_include, next_exclude))) => (next_include, next_exclude),
143+
Ok(None) => continue,
144+
Err(e) => return Err(convert_error(e)),
145+
};
133146

134-
for computed_field in &self.0 {
135-
let property_name_py = computed_field.property_name_py.bind(model.py());
136-
let (next_include, next_exclude) = match filter.key_filter(property_name_py, include, exclude) {
137-
Ok(Some((next_include, next_exclude))) => (next_include, next_exclude),
138-
Ok(None) => continue,
139-
Err(e) => return Err(convert_error(e)),
140-
};
141-
142-
let value = match model.getattr(property_name_py) {
143-
Ok(field_value) => field_value,
144-
Err(e) => {
145-
return Err(convert_error(e));
147+
let value = match model.getattr(property_name_py) {
148+
Ok(field_value) => field_value,
149+
Err(e) => {
150+
return Err(convert_error(e));
151+
}
152+
};
153+
if extra.exclude_none && value.is_none() {
154+
continue;
146155
}
147-
};
148-
if extra.exclude_none && value.is_none() {
149-
continue;
156+
157+
let field_extra = Extra {
158+
field_name: Some(&computed_field.property_name),
159+
..*extra
160+
};
161+
serialize(ComputedFieldToSerialize {
162+
computed_field,
163+
value,
164+
include: next_include,
165+
exclude: next_exclude,
166+
field_extra,
167+
})?;
150168
}
169+
} else {
170+
for computed_field in &self.0 {
171+
let property_name_py = computed_field.property_name_py.bind(model.py());
172+
let (next_include, next_exclude) = match filter.key_filter(property_name_py, include, exclude) {
173+
Ok(Some((next_include, next_exclude))) => (next_include, next_exclude),
174+
Ok(None) => continue,
175+
Err(e) => return Err(convert_error(e)),
176+
};
151177

152-
let field_extra = Extra {
153-
field_name: Some(&computed_field.property_name),
154-
..*extra
155-
};
156-
serialize(ComputedFieldToSerialize {
157-
computed_field,
158-
value,
159-
include: next_include,
160-
exclude: next_exclude,
161-
field_extra,
162-
})?;
178+
let value = match model.getattr(property_name_py) {
179+
Ok(field_value) => field_value,
180+
Err(e) => {
181+
return Err(convert_error(e));
182+
}
183+
};
184+
if extra.exclude_none && value.is_none() {
185+
continue;
186+
}
187+
188+
let field_extra = Extra {
189+
field_name: Some(&computed_field.property_name),
190+
..*extra
191+
};
192+
serialize(ComputedFieldToSerialize {
193+
computed_field,
194+
value,
195+
include: next_include,
196+
exclude: next_exclude,
197+
field_extra,
198+
})?;
199+
}
163200
}
164201
Ok(())
165202
}

src/serializers/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ impl SchemaSerializer {
160160

161161
#[allow(clippy::too_many_arguments)]
162162
#[pyo3(signature = (value, *, indent = None, ensure_ascii = false, include = None, exclude = None, by_alias = None,
163-
exclude_unset = false, exclude_defaults = false, exclude_none = false, round_trip = false,
163+
exclude_unset = false, exclude_defaults = false, exclude_none = false, round_trip = false,
164164
sort_keys = false,warnings = WarningsArg::Bool(true),
165165
fallback = None, serialize_as_any = false, context = None))]
166166
pub fn to_json(

0 commit comments

Comments
 (0)