classFlagsAPI:""" Interface for interacting with the `/api/v1/flags` CTFd API endpoint. """def__init__(self,client:APIClient):self._client=client@admin_onlydeflist(self,*,type:FlagType|None=None,challenge_id:int|None=None,content:str|None=None,data:str|None=None,q:str|None=None,field:Literal["type","content","data"]|None=None,)->list[Flag]:# Check if q and field are both provided or both not providedifqisNone!=fieldisNone:raiseValueError("q and field must be provided together")params={}iftypeisnotNone:params["type"]=type.valueifchallenge_idisnotNone:params["challenge_id"]=challenge_idifcontentisnotNone:params["content"]=contentifdataisnotNone:params["data"]=dataifqisnotNone:params["q"]=qparams["field"]=fieldreturnself._client.request("GET","/api/v1/flags",params=params,response_model=flag_list_adapter,error_models={400:BadRequest,401:Unauthorized,403:Forbidden,},)@admin_onlyasyncdefasync_list(self,*,type:FlagType|None=None,challenge_id:int|None=None,content:str|None=None,data:str|None=None,q:str|None=None,field:Literal["type","content","data"]|None=None,)->list[Flag]:# Check if q and field are both provided or both not providedifqisNone!=fieldisNone:raiseValueError("q and field must be provided together")params={}iftypeisnotNone:params["type"]=type.valueifchallenge_idisnotNone:params["challenge_id"]=challenge_idifcontentisnotNone:params["content"]=contentifdataisnotNone:params["data"]=dataifqisnotNone:params["q"]=qparams["field"]=fieldreturnawaitself._client.arequest("GET","/api/v1/flags",params=params,response_model=flag_list_adapter,error_models={400:BadRequest,401:Unauthorized,403:Forbidden,},)@overloaddefcreate(self,*,payload:CreateFlagPayload)->Flag:...@overloadasyncdefasync_create(self,*,payload:CreateFlagPayload)->Flag:...@overloaddefcreate(self,*,challenge_id:int,content:str,type:FlagType=FlagType.STATIC,case_insensitive:bool=False,)->Flag:...@overloadasyncdefasync_create(self,*,challenge_id:int,content:str,type:FlagType=FlagType.STATIC,case_insensitive:bool=False,)->Flag:...@admin_onlydefcreate(self,*,payload:CreateFlagPayload=MISSING,challenge_id:int|None=None,content:str|None=None,type:FlagType=FlagType.STATIC,case_insensitive:bool=False,)->Flag:ifpayloadisMISSING:data="case_insensitive"ifcase_insensitiveelse""try:payload=CreateFlagPayload(challenge_id=challenge_id,content=content,type=type,data=data,)exceptValidationErrorase:raiseModelValidationError(e.errors())fromereturnself._client.request("POST","/api/v1/flags",json=payload.dump_json(),response_model=Flag,error_models={400:BadRequest,401:Unauthorized,403:Forbidden,},)@admin_onlyasyncdefasync_create(self,*,payload:CreateFlagPayload=MISSING,challenge_id:int|None=None,content:str|None=None,type:FlagType=FlagType.STATIC,case_insensitive:bool=False,)->Flag:ifpayloadisMISSING:data="case_insensitive"ifcase_insensitiveelse""try:payload=CreateFlagPayload(challenge_id=challenge_id,content=content,type=type,data=data,)exceptValidationErrorase:raiseModelValidationError(e.errors())fromereturnawaitself._client.arequest("POST","/api/v1/flags",json=payload.dump_json(),response_model=Flag,error_models={400:BadRequest,401:Unauthorized,403:Forbidden,},)@admin_onlydefget_flag_types(self)->dict[str,FlagTypeInfo]:returnself._client.request("GET","/api/v1/flags/types",response_model=flag_type_info_dict_adapter,error_models={400:BadRequest,401:Unauthorized,403:Forbidden},)@admin_onlyasyncdefasync_get_flag_types(self)->dict[str,FlagTypeInfo]:returnawaitself._client.arequest("GET","/api/v1/flags/types",response_model=flag_type_info_dict_adapter,error_models={400:BadRequest,401:Unauthorized,403:Forbidden},)@admin_onlydefget_flag_type(self,type:str)->FlagTypeInfo:returnself._client.request("GET",f"/api/v1/flags/types/{type}",response_model=FlagTypeInfo,error_models={400:BadRequest,401:Unauthorized,403:Forbidden,500:NotFound,# it raises KeyError when the flag type does not exist},)@admin_onlyasyncdefasync_get_flag_type(self,type:str)->FlagTypeInfo:returnawaitself._client.arequest("GET",f"/api/v1/flags/types/{type}",response_model=FlagTypeInfo,error_models={400:BadRequest,401:Unauthorized,403:Forbidden,500:NotFound,# it raises KeyError when the flag type does not exist},)@admin_onlydefget(self,flag_id:int)->Flag:returnself._client.request("GET",f"/api/v1/flags/{flag_id}",response_model=Flag,error_models={400:BadRequest,401:Unauthorized,403:Forbidden,404:NotFound,},)@admin_onlyasyncdefasync_get(self,flag_id:int)->Flag:returnawaitself._client.arequest("GET",f"/api/v1/flags/{flag_id}",response_model=Flag,error_models={400:BadRequest,401:Unauthorized,403:Forbidden,404:NotFound,},)@overloaddefupdate(self,flag_id:int,*,payload:UpdateFlagPayload)->Flag:...@overloadasyncdefasync_update(self,flag_id:int,*,payload:UpdateFlagPayload)->Flag:...@overloaddefupdate(self,flag_id:int,*,challenge_id:int=MISSING,content:str=MISSING,type:FlagType=MISSING,case_insensitive:bool=MISSING,)->Flag:...@overloadasyncdefasync_update(self,flag_id:int,*,challenge_id:int=MISSING,content:str=MISSING,type:FlagType=MISSING,case_insensitive:bool=MISSING,)->Flag:...@admin_onlydefupdate(self,flag_id:int,*,payload:UpdateFlagPayload=MISSING,**kwargs,)->Flag:ifpayloadisMISSING:case_insensitive=kwargs.pop("case_insensitive",MISSING)ifcase_insensitiveisnotMISSING:kwargs["data"]="case_insensitive"ifcase_insensitiveelse""try:payload=UpdateFlagPayload(**kwargs)exceptValidationErrorase:raiseModelValidationError(e.errors())fromereturnself._client.request("PATCH",f"/api/v1/flags/{flag_id}",json=payload.dump_json(),response_model=Flag,error_models={400:BadRequest,401:Unauthorized,403:Forbidden,404:NotFound,},)@admin_onlyasyncdefasync_update(self,flag_id:int,*,payload:UpdateFlagPayload=MISSING,**kwargs,)->Flag:ifpayloadisMISSING:case_insensitive=kwargs.pop("case_insensitive",MISSING)ifcase_insensitiveisnotMISSING:kwargs["data"]="case_insensitive"ifcase_insensitiveelse""try:payload=UpdateFlagPayload(**kwargs)exceptValidationErrorase:raiseModelValidationError(e.errors())fromereturnawaitself._client.arequest("PATCH",f"/api/v1/flags/{flag_id}",json=payload.dump_json(),response_model=Flag,error_models={400:BadRequest,401:Unauthorized,403:Forbidden,404:NotFound,},)@admin_onlydefdelete(self,flag_id:int)->Literal[True]:returnself._client.request("DELETE",f"/api/v1/flags/{flag_id}",error_models={400:BadRequest,401:Unauthorized,403:Forbidden,404:NotFound,},)@admin_onlyasyncdefasync_delete(self,flag_id:int)->Literal[True]:returnawaitself._client.arequest("DELETE",f"/api/v1/flags/{flag_id}",error_models={400:BadRequest,401:Unauthorized,403:Forbidden,404:NotFound,},)