@@ -519,6 +519,60 @@ def set_project_access(self, project_path, access):
519519 detail = f"Project path: { project_path } "
520520 raise ClientError (str (e ), detail )
521521
522+ def add_user_permissions_to_project (self , project_path , usernames , permission_level ):
523+ """
524+ Add specified permissions to specified users to project
525+ :param project_path: project full name (<namespace>/<name>)
526+ :param usernames: list of usernames to be granted specified permission level
527+ :param permission_level: string (reader, writer, owner)
528+ """
529+ if permission_level not in ["owner" , "reader" , "writer" ]:
530+ raise ClientError ("Unsupported permission level" )
531+
532+ project_info = self .project_info (project_path )
533+ access = project_info .get ('access' )
534+ for name in usernames :
535+ if permission_level == "owner" :
536+ access .get ("ownersnames" ).append (name )
537+ if permission_level == "writer" or permission_level == "owner" :
538+ access .get ("writersnames" ).append (name )
539+ if permission_level == "writer" or permission_level == "owner" or permission_level == "reader" :
540+ access .get ("readersnames" ).append (name )
541+ self .set_project_access (project_path , access )
542+
543+ def remove_user_permissions_from_project (self , project_path , usernames ):
544+ """
545+ Removes specified users from project
546+ :param project_path: project full name (<namespace>/<name>)
547+ :param usernames: list of usernames to be granted specified permission level
548+ """
549+ project_info = self .project_info (project_path )
550+ access = project_info .get ('access' )
551+ for name in usernames :
552+ if name in access .get ("ownersnames" ):
553+ access .get ("ownersnames" ).remove (name )
554+ if name in access .get ("writersnames" ):
555+ access .get ("writersnames" ).remove (name )
556+ if name in access .get ("readersnames" ):
557+ access .get ("readersnames" ).remove (name )
558+ self .set_project_access (project_path , access )
559+
560+ def project_user_permissions (self , project_path ):
561+ """
562+ Returns permissions for project
563+ :param project_path: project full name (<namespace>/<name>)
564+ :return dict("owners": list(usernames),
565+ "writers": list(usernames),
566+ "readers": list(usernames))
567+ """
568+ project_info = self .project_info (project_path )
569+ access = project_info .get ('access' )
570+ result = {}
571+ result ["owners" ] = access .get ("ownersnames" )
572+ result ["writers" ] = access .get ("writersnames" )
573+ result ["readers" ] = access .get ("readersnames" )
574+ return result
575+
522576 def push_project (self , directory ):
523577 """
524578 Upload local changes to the repository.
0 commit comments