1from marshmallow import Schema, fields 2 3 4def camelcase(s): 5 parts = iter(s.split("_")) 6 return next(parts) + "".join(i.title() for i in parts) 7 8 9class CamelCaseSchema(Schema): 10 """Schema that uses camel-case for its external representation 11 and snake-case for its internal representation. 12 """ 13 14 def on_bind_field(self, field_name, field_obj): 15 field_obj.data_key = camelcase(field_obj.data_key or field_name) 16 17 18# ----------------------------------------------------------------------------- 19 20 21class UserSchema(CamelCaseSchema): 22 first_name = fields.Str(required=True) 23 last_name = fields.Str(required=True) 24 25 26schema = UserSchema() 27loaded = schema.load({"firstName": "David", "lastName": "Bowie"}) 28print(loaded) # => {'last_name': 'Bowie', 'first_name': 'David'} 29dumped = schema.dump(loaded) 30print(dumped) # => {'lastName': 'Bowie', 'firstName': 'David'} 31