Add initial schema changes

This commit is contained in:
Kevin Chung
2020-08-20 03:20:21 -04:00
parent 6b0629ed2a
commit d78d7518f9
2 changed files with 25 additions and 2 deletions

View File

@@ -1,6 +1,6 @@
from marshmallow import fields
from CTFd.models import Fields, UserFieldEntries, db, ma
from CTFd.models import Fields, TeamFieldEntries, UserFieldEntries, db, ma
class FieldSchema(ma.ModelSchema):
@@ -22,3 +22,17 @@ class UserFieldEntriesSchema(ma.ModelSchema):
name = fields.Nested(FieldSchema, only=("name"), attribute="field")
description = fields.Nested(FieldSchema, only=("description"), attribute="field")
type = fields.Nested(FieldSchema, only=("field_type"), attribute="field")
class TeamFieldEntriesSchema(ma.ModelSchema):
class Meta:
model = TeamFieldEntries
sqla_session = db.session
include_fk = True
load_only = ("id",)
exclude = ("field", "team", "team_id")
dump_only = ("team_id", "name", "description", "type")
name = fields.Nested(FieldSchema, only=("name"), attribute="field")
description = fields.Nested(FieldSchema, only=("description"), attribute="field")
type = fields.Nested(FieldSchema, only=("field_type"), attribute="field")

View File

@@ -1,7 +1,9 @@
from marshmallow import ValidationError, pre_load, validate
from marshmallow.fields import Nested
from marshmallow_sqlalchemy import field_for
from CTFd.models import Teams, Users, ma
from CTFd.models import TeamFieldEntries, TeamFields, Teams, Users, ma
from CTFd.schemas.fields import TeamFieldEntriesSchema
from CTFd.utils import get_config, string_types
from CTFd.utils.crypto import verify_password
from CTFd.utils.user import get_current_team, get_current_user, is_admin
@@ -44,6 +46,9 @@ class TeamSchema(ma.ModelSchema):
],
)
country = field_for(Teams, "country", validate=[validate_country_code])
fields = Nested(
TeamFieldEntriesSchema, partial=True, many=True, attribute="field_entries"
)
@pre_load
def validate_name(self, data):
@@ -197,6 +202,7 @@ class TeamSchema(ma.ModelSchema):
"id",
"oauth_id",
"captain_id",
"fields",
],
"self": [
"website",
@@ -210,6 +216,7 @@ class TeamSchema(ma.ModelSchema):
"oauth_id",
"password",
"captain_id",
"fields",
],
"admin": [
"website",
@@ -227,6 +234,7 @@ class TeamSchema(ma.ModelSchema):
"oauth_id",
"password",
"captain_id",
"fields",
],
}
@@ -236,5 +244,6 @@ class TeamSchema(ma.ModelSchema):
kwargs["only"] = self.views[view]
elif isinstance(view, list):
kwargs["only"] = view
self.view = view
super(TeamSchema, self).__init__(*args, **kwargs)