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 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 AdminCommentSchema(ma.Schema): class Meta: model = Comment fields = ( "id", "user_id", "author", "proposal", "proposal_id", "content", "date_created", "reported", "hidden", ) proposal = ma.Nested("ProposalSchema", only=["id", "title", "brief"]) author = ma.Nested("SelfUserSchema", only=[ "id", "email_address", "display_name", "title", "avatar", "azimuth", ]) date_created = UnixDate(attribute='date_created')
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 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 RFWMilestoneClaimSchema(ma.Schema): class Meta: additional = ("id", "stage", "stage_message", "stage_url") date_created = UnixDate(attribute='date_created') stage_change_date = UnixDate(attribute='stage_change_date') worker = ma.Nested("RFWWorkerSchema", exclude=['claims', 'rfw']) milestone = ma.Nested("RFWMilestoneSchema", exclude=['claims', 'rfw'])
class RFWWorkerSchema(ma.Schema): class Meta: additional = ("id", "status", "status_message", "is_self") date_created = UnixDate(attribute='date_created') status_change_date = UnixDate(attribute='status_change_date') rfw = ma.Nested("RFWSchema", exclude=['workers', 'milestones']) user = ma.Nested("UserSchema") # , exclude=['rfws']) claims = ma.Nested("RFWMilestoneClaimSchema", many=True, exclude=['worker'])
class RFWMilestoneSchema(ma.Schema): class Meta: additional = ("id", "index", "title", "content", "effort_from", "effort_to", "bounty", "is_authed_active") date_created = UnixDate(attribute='date_created') rfw = ma.Nested("RFWSchema") claims = ma.Nested("RFWMilestoneClaimSchema", many=True, exclude=['milestone']) authed_claim = ma.Nested("RFWMilestoneClaimSchema", exclude=['milestone'])
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 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 RFWSchema(ma.Schema): class Meta: additional = ( "id", "title", "brief", "content", "status", "category", "bounty", # derived from ms "effort_from", # derived from ms "effort_to", # derived from ms ) date_created = UnixDate(attribute='date_created') status_change_date = UnixDate(attribute='status_change_date') workers = ma.Nested("RFWWorkerSchema", many=True, exclude=['rfw']) authed_worker = ma.Nested("RFWWorkerSchema", exclude=['rfw']) milestones = ma.Nested("RFWMilestoneSchema", many=True, exclude=['rfw']) tags = ma.Nested("TagSchema", many=True)
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 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
class AdminRFPSchema(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", "proposals", "is_version_two", "ccr") ccr = ma.Nested("CCRSchema", exclude=["rfp"]) 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"]) 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_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 def get_is_version_two(self, obj): return True if obj.version == '2' else False
class AdminLogSchema(ma.Schema): class Meta: model = AdminLog # Fields to expose fields = ( "id", "date_created", "event", "message", "user", "ip", ) date_created = UnixDate(attribute="date_created") user = ma.Nested("UserSchema")
class InviteWithProposalSchema(ma.Schema): class Meta: model = ProposalTeamInvite fields = ( "id", "date_created", "address", "accepted", "proposal" ) date_created = ma.Method("get_date_created") proposal = ma.Nested("ProposalSchema") 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", "category", "status", "matching", "bounty", "date_created", "date_closes", "date_opened", "date_closed", "accepted_proposals", ) 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"]) 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
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