Git Product home page Git Product logo

Comments (5)

Tishka17 avatar Tishka17 commented on July 16, 2024

Идея:

class ASchema(Schena):
   def pre_parse(self, data):...

class BSchema(ASchema):
   def pre_parse(self, data):
      data = super().pre_parse(data)
      ...

проверить, что такое допустимо и работает

from adaptix.

Tishka17 avatar Tishka17 commented on July 16, 2024

Идея. Предположим меня есть два базовых датакласса и есть у них схемы, описывающие правила парсинга (какие поля парсить, предобработка и т.п.)

@dataclass
class A:
    a: int
    x: str = None


@dataclass
class B:
    b: int = 0
    y: str = None

class ASchema(Schema):
    only = ["a"]
    name_style = NameStyle.snake

    def pre_parse(self, data):
        print("aschema")
        data["a"] = data["a"] * 2
        return data


class BSchema(Schema):
    only = ["b"]
    exclude = ["y"]
    def pre_parse(self, data):
        print("bschema")
        data["b"] = -data["b"]
        return data


aschema = ASchema()
bschema = BSchema()

Если я наследую от них обоих новый датакласс, для него никакая схема применяться не будет.
Насколько логично иметь такой алгоритм:

  1. pre_parse/post_parse/pre_serialize/post_serialize вызываются в MRO порядке
  2. only, exclude, name_mapping объединяются в MRO порядке
  3. прочие настройки типа name_style проверяются чтобы не противоречили друг другу.
  4. кастомные parse, serialize не должны быть заданы

То есть в данном случае будет эквивалентно:

@dataclass
class C(A, B):
    pass

def c_pre_parse(self, data):
    data = aschema.pre_parse(self, data)
    data = bschema.pre_parse(self, data)
    return data


cschema = Schema(
    only = ["a", "b"],
    exclude = ["y"],
    name_style = NameStyle.snake,
    pre_parse = c_pre_parse,
)

from adaptix.

Tishka17 avatar Tishka17 commented on July 16, 2024

Вопрос: как быть в случае когда один класс наследуется от другого, а там определен только only

from adaptix.

Tishka17 avatar Tishka17 commented on July 16, 2024

Вопрос: что если два родительских класса с разными стилями имён?
Имеет смысл поддержать чтобы их поля оба парсились корректно

from adaptix.

zhPavel avatar zhPavel commented on July 16, 2024

This issue is not actual with the new major version

from adaptix.

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.