Giter Site home page Giter Site logo

Comments (2)

sloria avatar sloria commented on May 21, 2024 1

Here are a couple different approaches you could take:

Option 1: Field parameter

from marshmallow import Schema, fields, pre_load

class BaseSchema(Schema):
    @pre_load
    def check_update_fields(self, data)
        non_update_fields = set([
            fname, fobj for fname, obj in self.fields
            if fobj.metadata.get('can_update') is False
        ])
        return {
            key: value for key, value in data.items()
            if key not in non_update_fields
        }

class UserSchema(BaseSchema):
    name = fields.Str()
    email = fields.Str(can_update=False)

Option 2: class Meta option

from marshmallow import Schema, SchemaOpts, fields, pre_load
class BaseSchemaOpts(SchemaOpts):
    def __init__(self, meta):
        super().__init__(meta)
        self.update_fields = getattr(meta, 'update_fields', set())

class BaseSchema(Schema):
    OPTIONS_CLASS = BaseSchemaOpts

    email = fields.Str(can_update=False)

    @pre_load
    def check_update_fields(self, data)
        non_update_fields = set(self.fields) - set(self.opts.update_fields)
        return {
            key: value for key, value in data.items()
            if key not in non_update_fields
        }

class UserSchema(BaseSchema):

    name = fields.Str()
    email = fields.Str()

    class Meta:
        update_fields = ('name', )

Will either of these meet your use case?

from marshmallow-sqlalchemy.

EdCampion avatar EdCampion commented on May 21, 2024

Hi Steven,
Thanks very much, leaning towards the second option.

from marshmallow-sqlalchemy.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.