Giter Site home page Giter Site logo

Comments (6)

evanfwelch avatar evanfwelch commented on May 16, 2024 1

I would also find this valuable... a mapping you can can pass to class_schema that gets merged with _native_to_marshmallow.

    if typ in _marshmallow_mapping:
        field_fn = _marshmallow_mapping[typ]
        if inpsect.isfunction(field_fn):
            return field_fn(typ, **metadata)
        else: #assume it's just a marshmallow field
             return field_fn(**metadata)

from marshmallow_dataclass.

alextremblay avatar alextremblay commented on May 16, 2024 1

There was an idea introduced in another issue (#23) That I think could work very well here:

from typing import List
from ipaddress import IPv4Address

from marshmallow.fields import Field
from marshmallow_dataclass import dataclass, NewType

class IPField(Field):
    ... # serializes an IPv4Address instance into a str, and deserializes back into an instance

#IP = NewType('IP', str, validate=my_validation_function) 
#This was the suggestion in the other issue

IP = NewType('IP', IPv4Address, marshmallow_field=IPField)

@dataclass
class Company:
    name: str
    ipv4s: List[IP]

The idea is to have a NewType implementation that works the same as typing.NewType, but also stores all the field metadata that we would normally store on a dataclass field, like validation functions and marshmallow_field selections.

Thoughts?

from marshmallow_dataclass.

lovasoa avatar lovasoa commented on May 16, 2024

The supported way to use custom fields for your type is to add a marshmallow_field key to your field metadata, and make it contain your marshmallow field.

from marshmallow_dataclass.

rakanalh avatar rakanalh commented on May 16, 2024

I did see it in the documentation. The reason i wanted to not do this is because of what i wrote in a comment in a different issue:
#15 (comment)

from marshmallow_dataclass.

lovasoa avatar lovasoa commented on May 16, 2024

I just published version 6.1.0rc1 with support for NewType. You can check out the README, the documentation, and try it. If you encounter any issues, or find that something could be improved in the documentation, open an issue. If no one complains, then I'll publish it as 6.1.0 and close this issue.

from marshmallow_dataclass.

lovasoa avatar lovasoa commented on May 16, 2024

Version 6.1.0 was just released with support for NewType, so I am closing this.
https://pypi.org/project/marshmallow-dataclass/6.1.0/

from marshmallow_dataclass.

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.