@@ -258,6 +258,13 @@ class MgmtV1:
258258 project_import = "/v1/mgmt/project/import"
259259 project_list_projects = "/v1/mgmt/projects/list"
260260
261+ # Descoper
262+ descoper_create_path = "/v1/mgmt/descoper"
263+ descoper_update_path = "/v1/mgmt/descoper"
264+ descoper_load_path = "/v1/mgmt/descoper"
265+ descoper_delete_path = "/v1/mgmt/descoper"
266+ descoper_list_path = "/v1/mgmt/descoper/list"
267+
261268
262269class MgmtSignUpOptions :
263270 def __init__ (
@@ -468,3 +475,128 @@ def sort_to_dict(sort: List[Sort]) -> list:
468475 }
469476 )
470477 return sort_list
478+
479+
480+ class DescoperRole (Enum ):
481+ """Represents a Descoper role."""
482+
483+ ADMIN = "admin"
484+ DEVELOPER = "developer"
485+ SUPPORT = "support"
486+ AUDITOR = "auditor"
487+
488+
489+ class DescoperAttributes :
490+ """
491+ Represents Descoper attributes, such as name and email/phone.
492+ """
493+
494+ def __init__ (
495+ self ,
496+ display_name : Optional [str ] = None ,
497+ email : Optional [str ] = None ,
498+ phone : Optional [str ] = None ,
499+ ):
500+ self .display_name = display_name
501+ self .email = email
502+ self .phone = phone
503+
504+ def to_dict (self ) -> dict :
505+ return {
506+ "displayName" : self .display_name ,
507+ "email" : self .email ,
508+ "phone" : self .phone ,
509+ }
510+
511+
512+ class DescoperTagRole :
513+ """
514+ Represents a Descoper tags to role mapping.
515+ """
516+
517+ def __init__ (
518+ self ,
519+ tags : Optional [List [str ]] = None ,
520+ role : Optional [DescoperRole ] = None ,
521+ ):
522+ self .tags = tags if tags is not None else []
523+ self .role = role
524+
525+ def to_dict (self ) -> dict :
526+ return {
527+ "tags" : self .tags ,
528+ "role" : self .role .value if self .role else None ,
529+ }
530+
531+
532+ class DescoperProjectRole :
533+ """
534+ Represents a Descoper projects to role mapping.
535+ """
536+
537+ def __init__ (
538+ self ,
539+ project_ids : Optional [List [str ]] = None ,
540+ role : Optional [DescoperRole ] = None ,
541+ ):
542+ self .project_ids = project_ids if project_ids is not None else []
543+ self .role = role
544+
545+ def to_dict (self ) -> dict :
546+ return {
547+ "projectIds" : self .project_ids ,
548+ "role" : self .role .value if self .role else None ,
549+ }
550+
551+
552+ class DescoperRBAC :
553+ """
554+ Represents Descoper RBAC configuration.
555+ """
556+
557+ def __init__ (
558+ self ,
559+ is_company_admin : bool = False ,
560+ tags : Optional [List [DescoperTagRole ]] = None ,
561+ projects : Optional [List [DescoperProjectRole ]] = None ,
562+ ):
563+ self .is_company_admin = is_company_admin
564+ self .tags = tags if tags is not None else []
565+ self .projects = projects if projects is not None else []
566+
567+ def to_dict (self ) -> dict :
568+ return {
569+ "isCompanyAdmin" : self .is_company_admin ,
570+ "tags" : [t .to_dict () for t in self .tags ],
571+ "projects" : [p .to_dict () for p in self .projects ],
572+ }
573+
574+
575+ class DescoperCreate :
576+ """
577+ Represents a Descoper to be created.
578+ """
579+
580+ def __init__ (
581+ self ,
582+ login_id : str ,
583+ attributes : Optional [DescoperAttributes ] = None ,
584+ send_invite : bool = False ,
585+ rbac : Optional [DescoperRBAC ] = None ,
586+ ):
587+ self .login_id = login_id
588+ self .attributes = attributes
589+ self .send_invite = send_invite
590+ self .rbac = rbac
591+
592+ def to_dict (self ) -> dict :
593+ return {
594+ "loginId" : self .login_id ,
595+ "attributes" : self .attributes .to_dict () if self .attributes else None ,
596+ "sendInvite" : self .send_invite ,
597+ "rbac" : self .rbac .to_dict () if self .rbac else None ,
598+ }
599+
600+
601+ def descopers_to_dict (descopers : List [DescoperCreate ]) -> list :
602+ return [d .to_dict () for d in descopers ]
0 commit comments