class CCRSchema(ma.Schema): class Meta: model = CCR # Fields to expose fields = ( "author", "id", "title", "brief", "ccr_id", "content", "status", "target", "date_created", "reject_reason", "rfp" ) rfp = ma.Nested("RFPSchema") date_created = ma.Method("get_date_created") author = ma.Nested("UserSchema") ccr_id = ma.Method("get_ccr_id") def get_date_created(self, obj): return dt_to_unix(obj.date_created) def get_ccr_id(self, obj): return obj.id
class SelfUserSchema(ma.Schema): class Meta: model = User # Fields to expose fields = ( "title", "email_address", "social_medias", "avatar", "display_name", "userid", "email_verified", "arbiter_proposals", "silenced", "banned", "banned_reason", "is_admin", ) social_medias = ma.Nested("SocialMediaSchema", many=True) avatar = ma.Nested("AvatarSchema") arbiter_proposals = ma.Nested("ProposalArbiterSchema", many=True, exclude=["user"]) userid = ma.Method("get_userid") email_verified = ma.Method("get_email_verified") def get_userid(self, obj): return obj.id def get_email_verified(self, obj): return obj.email_verification.has_verified
class ProposalSchema(ma.Schema): class Meta: model = Proposal # Fields to expose fields = ("stage", "date_created", "title", "proposal_id", "proposal_address", "body", "comments", "updates", "milestones", "category", "team") date_created = ma.Method("get_date_created") proposal_id = ma.Method("get_proposal_id") body = ma.Method("get_body") comments = ma.Nested("CommentSchema", many=True) updates = ma.Nested("ProposalUpdateSchema", many=True) team = ma.Nested("UserSchema", many=True) milestones = ma.Nested("MilestoneSchema", many=True) def get_body(self, obj): return obj.content def get_proposal_id(self, obj): return obj.id def get_date_created(self, obj): return dt_to_unix(obj.date_created)
class CommentSchema(ma.Schema): class Meta: model = Comment # Fields to expose fields = ( "id", "proposal_id", "author", "content", "parent_comment_id", "date_created", "replies", "reported", "hidden", ) content = ma.Method("get_content") date_created = UnixDate(attribute='date_created') author = ma.Nested("UserSchema") # custome handling of replies, was: replies = ma.Nested("CommentSchema", many=True) replies = ma.Method("get_replies") def get_content(self, obj): return HIDDEN_CONTENT if obj.hidden else obj.content # filter out "dead" comments def get_replies(self, obj): return comments_schema.dump(filter_dead(obj.replies))
class HistoryEventSchema(ma.Schema): class Meta: model = HistoryEvent # Fields to expose fields = ("id", "title", "title_raw", "content", "content_raw", "date", "user", "proposal") date = UnixDate(attribute="date") user = ma.Nested("UserSchema") proposal = ma.Nested("ProposalSchema") title = ma.Method("text_title") title_raw = ma.Method("raw_title") content = ma.Method("markdown_content") content_raw = ma.Method("raw_content") def text_title(self, obj): return make_text(obj, "title") def raw_title(self, obj): return obj.title def raw_content(self, obj): return obj.content def markdown_content(self, obj): return make_markdown(obj, "content")
class ProposalSchema(ma.Schema): class Meta: model = Proposal # Fields to expose fields = ( "id", "stage", "status", "date_created", "date_approved", "date_published", "reject_reason", "title", "brief", "target", "is_failed", "content", "updates", "milestones", "current_milestone", "category", "team", "invites", "rfp", "private", "authed_follows", "followers_count", "comments_count" ) date_created = ma.Method("get_date_created") date_approved = ma.Method("get_date_approved") date_published = ma.Method("get_date_published") updates = ma.Nested("ProposalUpdateSchema", many=True) team = ma.Nested("UserSchema", many=True) milestones = ma.Nested("MilestoneSchema", many=True) current_milestone = ma.Nested("MilestoneSchema") invites = ma.Nested("ProposalTeamInviteSchema", many=True) rfp = ma.Nested("RFPSchema", exclude=["accepted_proposals"]) def get_date_created(self, obj): return dt_to_unix(obj.date_created) def get_date_approved(self, obj): return dt_to_unix(obj.date_approved) if obj.date_approved else None def get_date_published(self, obj): return dt_to_unix(obj.date_published) if obj.date_published else None
class UserCommentSchema(ma.Schema): class Meta: model = Comment fields = ( "id", "proposal", "content", "date_created", "reported", "hidden", ) proposal = ma.Nested("ProposalSchema", exclude=[ "team", "milestones", "content", "invites", "updates", ]) content = ma.Method("get_content") date_created = UnixDate(attribute='date_created') def get_content(self, obj): return HIDDEN_CONTENT if obj.hidden else obj.content
class AdminRFPSchema(ma.Schema): class Meta: model = RFP # Fields to expose fields = ( "id", "title", "brief", "content", "category", "status", "matching", "bounty", "date_created", "date_closes", "date_opened", "date_closed", "proposals", ) status = ma.Method("get_status") date_created = ma.Method("get_date_created") date_closes = ma.Method("get_date_closes") date_opened = ma.Method("get_date_opened") date_closed = ma.Method("get_date_closed") proposals = ma.Nested("ProposalSchema", many=True, exclude=["rfp"]) def get_status(self, obj): # Force it into closed state if date_closes is in the past if obj.date_closes and obj.date_closes <= datetime.today(): return RFPStatus.CLOSED return obj.status def get_date_created(self, obj): return dt_to_unix(obj.date_created) def get_date_closes(self, obj): return dt_to_unix(obj.date_closes) if obj.date_closes else None def get_date_opened(self, obj): return dt_to_unix(obj.date_opened) if obj.date_opened else None def get_date_closed(self, obj): return dt_to_unix(obj.date_closes) if obj.date_closes else None
class ProposalUpdateSchema(ma.Schema): class Meta: model = ProposalUpdate # Fields to expose fields = ("update_id", "date_created", "proposal_id", "title", "content") date_created = ma.Method("get_date_created") proposal_id = ma.Method("get_proposal_id") update_id = ma.Method("get_update_id") def get_update_id(self, obj): return obj.id def get_proposal_id(self, obj): return obj.proposal_id def get_date_created(self, obj): return dt_to_unix(obj.date_created)
class CommentSchema(ma.Schema): class Meta: model = Comment # Fields to expose fields = ( "user_id", "content", "proposal_id", "date_created", "body", ) body = ma.Method("get_body") date_created = ma.Method("get_date_created") def get_body(self, obj): return obj.content def get_date_created(self, obj): return dt_to_unix(obj.date_created)
class UserSchema(ma.Schema): class Meta: model = User # Fields to expose fields = ("title", "social_medias", "avatar", "display_name", "userid", "email_verified", "tip_jar_address") social_medias = ma.Nested("SocialMediaSchema", many=True) avatar = ma.Nested("AvatarSchema") userid = ma.Method("get_userid") email_verified = ma.Method("get_email_verified") tip_jar_address = ma.Method("get_tip_jar_address") def get_userid(self, obj): return obj.id def get_email_verified(self, obj): return obj.email_verification.has_verified def get_tip_jar_address(self, obj): return obj.settings.tip_jar_address
class SocialMediaSchema(ma.Schema): class Meta: model = SocialMedia # Fields to expose fields = ( "url", "service", "username", ) url = ma.Method("get_url") def get_url(self, obj): return generate_social_url(obj.service, obj.username)
class ProposalTeamInviteSchema(ma.Schema): class Meta: model = ProposalTeamInvite fields = ( "id", "date_created", "address", "accepted" ) date_created = ma.Method("get_date_created") def get_date_created(self, obj): return dt_to_unix(obj.date_created)
class RFPSchema(ma.Schema): class Meta: model = RFP # Fields to expose fields = ("id", "title", "brief", "content", "status", "matching", "bounty", "date_created", "date_closes", "date_opened", "date_closed", "accepted_proposals", "authed_liked", "likes_count", "is_version_two", "ccr") ccr = ma.Nested("CCRSchema", exclude=["rfp"]) status = ma.Method("get_status") date_closes = ma.Method("get_date_closes") date_opened = ma.Method("get_date_opened") date_closed = ma.Method("get_date_closed") accepted_proposals = ma.Nested("ProposalSchema", many=True, exclude=["rfp"]) is_version_two = ma.Method("get_is_version_two") def get_status(self, obj): # Force it into closed state if date_closes is in the past if obj.date_closes and obj.date_closes <= datetime.today(): return RFPStatus.CLOSED return obj.status def get_date_closes(self, obj): return dt_to_unix(obj.date_closes) if obj.date_closes else None def get_date_opened(self, obj): return dt_to_unix(obj.date_opened) if obj.date_opened else None def get_date_closed(self, obj): return dt_to_unix(obj.date_closed) if obj.date_closed else None def get_is_version_two(self, obj): return True if obj.version == '2' else False
class MilestoneSchema(ma.Schema): class Meta: model = Milestone # Fields to expose fields = ( "title", "body", "content", "stage", "date_estimated", "payout_percent", "immediate_payout", "date_created", ) body = ma.Method("get_body") def get_body(self, obj): return obj.content
class UserSchema(ma.Schema): class Meta: model = User # Fields to expose fields = ( "account_address", "title", "email_address", "social_medias", "avatar", "display_name", "userid" ) social_medias = ma.Nested("SocialMediaSchema", many=True) avatar = ma.Nested("AvatarSchema") userid = ma.Method("get_userid") def get_userid(self, obj): return obj.id