class PendingRepairDataModel(Model): Data = DictionaryField("d", default=ModelDefaultValueExt.Required, allow_none=False) MissingKeys = ArrayField("m", str, default=ModelDefaultValueExt.Required, allow_none=False)
class ChannelCollectionModel(Model): DefaultName = TextField("dn", default=ModelDefaultValueExt.Required, must_have_content=True) Name = DictionaryField("n", allow_none=False, default={}) Platform = PlatformField("p", default=ModelDefaultValueExt.Required) Token = TextField("t", default=ModelDefaultValueExt.Required, must_have_content=True) BotAccessible = BooleanField("acc", default=True) ChildChannelOids = ArrayField("ch", ObjectId)
class APIStatisticModel(Model): Timestamp = DateTimeField("t", default=ModelDefaultValueExt.Required, allow_none=False) SenderOid = ObjectIDField("sd", default=ModelDefaultValueExt.Optional, allow_none=True, stores_uid=True) ApiAction = APICommandField("a") Parameter = DictionaryField("p", allow_none=True) PathParameter = DictionaryField("pp", allow_none=True) Response = DictionaryField("r", allow_none=True) Success = BooleanField("s", allow_none=True) PathInfo = TextField("pi", default=ModelDefaultValueExt.Required, must_have_content=True, allow_none=False) PathInfoFull = TextField("pf", default=ModelDefaultValueExt.Required, must_have_content=True, allow_none=False)
class ChannelProfileModel(Model): # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # !!! Check `ProfileManager.process_create_profile_kwargs` when changing the variable name of this class. !!! # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ChannelOid = ObjectIDField("c", default=ModelDefaultValueExt.Required) Name = TextField("n", default="-", must_have_content=True) Color = ColorField("col") # 0 means no need to vote, > 0 means # votes needed to get this profile PromoVote = IntegerField("promo", positive_only=True) Permission = DictionaryField( "perm", default=ProfilePermissionDefault.get_default_code_str_dict(), allow_none=False) PermissionLevel = PermissionLevelField("plv") EmailKeyword = ArrayField("e-kw", str) @property def is_mod(self): return self.permission_level >= PermissionLevel.MOD @property def is_admin(self): return self.permission_level >= PermissionLevel.ADMIN @property def permission_list(self) -> List[ProfilePermission]: ret = set() for cat, permitted in self.permission.items(): if permitted: perm = ProfilePermission.cast(cat, silent_fail=True) if perm: ret.add(perm) ret = ret.union( ProfilePermissionDefault.get_overridden_permissions( self.permission_level)) return list(sorted(ret, key=lambda x: x.code)) def pre_iter(self): # Will be used when the data will be passed to MongoDB d = [ p.code_str for p in ProfilePermissionDefault.get_overridden_permissions( self.permission_level) ] for perm_cat in ProfilePermission: k = perm_cat.code_str if k not in self.permission: self.permission[k] = k in d
class ChannelModel(Model): Platform = PlatformField("p", default=ModelDefaultValueExt.Required) Token = TextField("t", default=ModelDefaultValueExt.Required, must_have_content=True) Name = DictionaryField("n", allow_none=False, default={}) Config = ModelField("c", ChannelConfigModel) BotAccessible = BooleanField("acc", default=True) def get_channel_name(self, root_oid: ObjectId): oid_str = str(root_oid) if oid_str in self.name: return self.name[oid_str] else: return self.config.default_name or self.token
class ModelTest(Model): FModel = ModelField("m", SubModel) FInt = IntegerField("i", default=ModelDefaultValueExt.Required) FModelArray = ModelArrayField("ma", SubModel, default=ModelDefaultValueExt.Optional) FDict = DictionaryField("d") FFloat = FloatField("f", default=7.5) FBool = BooleanField("b") FUrl = UrlField("u", default=ModelDefaultValueExt.Optional) FText = TextField("t") FOid = ObjectIDField("o") FGeneral = GeneralField("g") FDatetime = DateTimeField("dt") FColor = ColorField("c") FArray = ArrayField("a", int, default=[17, 21]) FArContent = AutoReplyContentTypeField("ac")
def get_field(self) -> BaseField: return DictionaryField("k", allow_none=True)
def get_field(self) -> BaseField: return DictionaryField("k")
def get_field(self) -> BaseField: return DictionaryField("k", auto_cast=False)
def test_repair_d(self): self.missing_has_default("d", {"d": DictionaryField.none_obj()})