Giter Site home page Giter Site logo

Comments (7)

fuhrysteve avatar fuhrysteve commented on May 22, 2024 1

Hmm, not sure if I am misunderstanding your issue or not, but you could also do something like this if you wanted something resembling a custom TYPE_MAPPING in your BaseSchema:

class BaseSchema(ModelSchema):
    class Meta:
        model_converter = MyDefaultConverter
        # other defaults

class MyModelSchema(BaseSchema):
    class Meta(BaseSchema.Meta):
        # MyModelSchema specific customizations
        pass

The only downside is that you need to remember to have your Meta classes extend BaseSchema.Meta if you want to customize it further.

from marshmallow-sqlalchemy.

fuhrysteve avatar fuhrysteve commented on May 22, 2024

@dwieeb You're pretty close. I think you're looking for something like this:

from marshmallow_sqlalchemy import ModelSchema, ModelConverter
from sqlalchemy_utils.types import TimezoneType
from marshmallow import fields

class SQLAlchemyUtilsConverter(ModelConverter):
    SQLA_TYPE_MAPPING = dict(
        list(ModelConverter.SQLA_TYPE_MAPPING.items()) +
        [(TimezoneType, fields.Str)]
    )

class MyModelSchema(ModelSchema):
    class Meta:
        model_converter = SQLAlchemyUtilsConverter

only in your case, something more like:

class MyConverter(ModelConverter):
    SQLA_TYPE_MAPPING = dict(
        list(ModelConverter.SQLA_TYPE_MAPPING.items()) +
        [(datetime, APIDateTime)]
    )

from marshmallow-sqlalchemy.

imhoffd avatar imhoffd commented on May 22, 2024

Yeah, I know I can override ModelConverter, I just don't want to. Code bases can easily use thousands of schemas. I shouldn't have to specify model_converter = for each one when I have a BaseSchema with a TYPE_MAPPING that should be picked up.

I think marshmallow-sqlalchemy needs a patch such that _get_field_class_for_data_type() is called with a reference to model from fields_for_model() so that it can use the TYPE_MAPPING from the user's schema classes OR fall back to marshmallow.Schema's TYPE_MAPPING.

from marshmallow-sqlalchemy.

imhoffd avatar imhoffd commented on May 22, 2024

Yeah, that'd be fine for my use case.

I still think the built-in ModelConverter should respect the schema class's type mapping, and not be hardcoded to use the marshmallow schema's type mapping--that's not how inheritance should work. 😕

Perhaps I will do a PR to see how the change is received.

from marshmallow-sqlalchemy.

fuhrysteve avatar fuhrysteve commented on May 22, 2024

Yeah, I'm not sure if that's intentional or not. PR would be a great way to find out haha

from marshmallow-sqlalchemy.

sloria avatar sloria commented on May 22, 2024

#49 should address this issue. ModelSchema will now respect a Schema subclass's TYPE_MAPPING.

from marshmallow-sqlalchemy.

imhoffd avatar imhoffd commented on May 22, 2024

Awesome, @sloria! Thank you.

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.