type = fields.String(attribute="discriminator") title = fields.String(attribute='title') slug = fields.String(attribute='slug') text = fields.String(attribute='cooked') class Meta: type_ = TOPIC_ID # Required author = IncludingHyperlinkRelated(BaseUser, '/users/{user_id}', url_kwargs={'user_id': '<owner_id>'}, many=False, include_data=True, type_='user') topic = TopicSchema() topic_paged = makePaginationSchema(TopicSchema)() ObjectField.registry[TOPIC_ID] = TopicSchema class LinkSchema(Schema): id = fields.Integer() created_at = fields.DateTime() owner_id = fields.Integer() type = fields.String(attribute="discriminator") title = fields.String(attribute='title') slug = fields.String(attribute='slug') url = fields.String(attribute='url') class Meta: type_ = LINK_ID # Required
from beavy.common.paging_schema import makePaginationSchema from beavy.schemas.object import ObjectField # , Schema, fields from beavy.common.including_hyperlink_related import IncludingHyperlinkRelated from marshmallow_jsonapi import Schema, fields from beavy.schemas.user import BaseUser from .models import PM_ID class PrivateMessageSchema(Schema): id = fields.Integer() created_at = fields.DateTime() title = fields.String() type = fields.String(attribute="discriminator") class Meta: type_ = 'private_message' # Required participants = IncludingHyperlinkRelated(BaseUser, '/users/{user_id}', url_kwargs={'user_id': '<id>'}, many=True, include_data=True, type_='user') pm = PrivateMessageSchema() pm_paged = makePaginationSchema(PrivateMessageSchema)() ObjectField.registry[PM_ID] = PrivateMessageSchema
from marshmallow_jsonapi import Schema, fields from beavy.schemas.user import BaseUser from .models import COMMENT_ID class CommentSchema(Schema): id = fields.Integer() created_at = fields.DateTime() owner_id = fields.Integer() type = fields.String(attribute="discriminator") text = fields.String(attribute='cooked') belongs_to_id = fields.Integer() in_reply_to_id = fields.Integer() class Meta: type_ = COMMENT_ID # Required author = IncludingHyperlinkRelated(BaseUser, '/users/{user_id}', url_kwargs={'user_id': '<owner_id>'}, many=False, include_data=True, type_='user' ) comment = CommentSchema() comment_paged = makePaginationSchema(CommentSchema)() ObjectField.registry[COMMENT_ID] = CommentSchema
# subject = fields.Nested(BaseUser) # created_at = fields.DateTime() # ActivityField.registry['like'] = BaseLike class UserLike(Schema): id = fields.Integer() created_at = fields.DateTime() TUPLE_KEY = 'Like' REMAP_TUPLE_KEYS = ('Object', ) class Meta: type_ = "like" @pre_dump def extract_items(self, item): if isinstance(item, tuple): tup = item item = getattr(item, self.TUPLE_KEY) for key in self.REMAP_TUPLE_KEYS: setattr(item, key.lower(), getattr(tup, key)) return item object = IncludingHyperlinkRelated(ObjectField()) user_likes_paged = makePaginationSchema(UserLike)(many=False)
# created_at = fields.DateTime() # ActivityField.registry['like'] = BaseLike class UserLike(Schema): id = fields.Integer() created_at = fields.DateTime() TUPLE_KEY = 'Like' REMAP_TUPLE_KEYS = ('Object', ) class Meta: type_ = "like" @pre_dump def extract_items(self, item): if isinstance(item, tuple): tup = item item = getattr(item, self.TUPLE_KEY) for key in self.REMAP_TUPLE_KEYS: setattr(item, key.lower(), getattr(tup, key)) return item object = IncludingHyperlinkRelated(ObjectField()) user_likes_paged = makePaginationSchema(UserLike)(many=False)
# , Schema, fields from beavy.common.including_hyperlink_related import IncludingHyperlinkRelated from marshmallow_jsonapi import Schema, fields from beavy.schemas.user import BaseUser from .models import PM_ID class PrivateMessageSchema(Schema): id = fields.Integer() created_at = fields.DateTime() title = fields.String() type = fields.String(attribute="discriminator") class Meta: type_ = 'private_message' # Required participants = IncludingHyperlinkRelated(BaseUser, '/users/{user_id}', url_kwargs={'user_id': '<id>'}, many=True, include_data=True, type_='user' ) pm = PrivateMessageSchema() pm_paged = makePaginationSchema(PrivateMessageSchema)() ObjectField.registry[PM_ID] = PrivateMessageSchema
# , Schema, fields from beavy.common.including_hyperlink_related import IncludingHyperlinkRelated from marshmallow_jsonapi import Schema, fields from beavy.schemas.user import BaseUser from .models import COMMENT_ID class CommentSchema(Schema): id = fields.Integer() created_at = fields.DateTime() owner_id = fields.Integer() type = fields.String(attribute="discriminator") text = fields.String(attribute="cooked") belongs_to_id = fields.Integer() in_reply_to_id = fields.Integer() class Meta: type_ = COMMENT_ID # Required author = IncludingHyperlinkRelated( BaseUser, "/users/{user_id}", url_kwargs={"user_id": "<owner_id>"}, many=False, include_data=True, type_="user" ) comment = CommentSchema() comment_paged = makePaginationSchema(CommentSchema)() ObjectField.registry[COMMENT_ID] = CommentSchema
from beavy.common.paging_schema import makePaginationSchema from beavy.common.morphing_schema import MorphingSchema from marshmallow_jsonapi import Schema, fields from .user import BaseUser class BaseObject(Schema): class Meta: type_ = "object" id = fields.Integer() created_at = fields.DateTime() owner = fields.Nested(BaseUser) belongs_to_id = fields.Integer() # don't leak type = fields.String(attribute="discriminator") class ObjectField(MorphingSchema): FALLBACK = BaseObject registry = {} class ObjectSchema(ObjectField, Schema): pass objects_paged = makePaginationSchema(ObjectSchema)()