Пример #1
0
    def __init__(self,
                 name,
                 *,
                 only=None,
                 exclude=(),
                 many=False,
                 unknown=None,
                 **field_kwargs):
        Nested.__init__(
            self,
            name,
            only=only,
            exclude=exclude,
            many=many,
            unknown=unknown,
            **field_kwargs,
        )
        Related.__init__(self, **field_kwargs)
        self._many = many
        self._instances = set()
        self.allow_none = True

        # Pass through allowed_nests configuration to child schema
        self._copy_config("allowed_nests")
        self._copy_config("_show_audit_id")
Пример #2
0
    class TeacherSchema(SQLAlchemyAutoSchema):
        class Meta:
            model = models.Teacher
            load_instance = True
            sqla_session = session

        current_school = Related(["id", "name"])
        class SchoolSchema(ModelSchema):
            class Meta:
                model = models.School
                sqla_session = session

            students = RelatedList(Related(attribute="students"),
                                   attribute="students")
Пример #4
0
    def _property2relationship(self, prop, **kwargs):
        # The "name" is actually the name of the related model, NOT the name
        # of field
        cls = self._related_entity(prop)
        name = to_schema_name(cls.__name__)

        field_kwargs = self._get_field_kwargs_for_property(prop)
        field_kwargs.update(**kwargs)

        this_table = prop.parent.tables[0]
        if not allow_nest(this_table.name, prop.target.name):
            # Fields that are not allowed to be nested
            if prop.uselist:
                return RelatedList(Related, **field_kwargs)
            else:
                return Related(**field_kwargs)
        if prop.target.schema == "enum":
            # special carve-out for enums represented as foreign keys
            # (these should be stored in the 'enum' schema):
            return Enum(**field_kwargs)

        # Ignore fields that reference parent models in a nesting relationship
        exclude = []
        for p in cls.__mapper__.relationships:
            if self._should_exclude_field(p):
                # Fields that are already excluded do not need to be excluded again.
                continue
            id_ = self._get_field_name(p)
            if p.mapper.entity == prop.parent.entity:
                exclude.append(id_)

        return SmartNested(name,
                           many=prop.uselist,
                           exclude=exclude,
                           **field_kwargs)
    class TeacherSchema(SQLAlchemyAutoSchema):
        class Meta:
            model = models.Teacher
            load_instance = True
            sqla_session = session
            strict = True  # marshmallow 2 compat

        current_school = Related(["id", "name"])
Пример #6
0
class TransactionSchema(schemas.ModelSchema):
    created_at = field_for(models.Transaction, 'created_at', dump_only=True)
    detection_object = Nested(DetectionObjectSchema, dump_only=True)
    detection_object_id = Related(
        column='id',
        attribute='detection_object',
        load_only=True,
    )

    class Meta:
        model = models.Transaction
        sqla_session = db.session
        fields = (
            'id',
            'created_at',
            'amount',
            'type',
            'detection_object',
            'detection_object_id',
        )
 class StudentSchema(ModelSchema):
     class Meta:
         model = models.Student
         sqla_session = session
     current_school = Related(column='name')
Пример #8
0
class AnekSchema(ma.ModelSchema):
    class Meta:
        model = Anek
        dump_only = ('id', 'created_at')

    source = Related(column=('name', 'url'))