@@ -36,7 +36,7 @@ def calculate_user_quota(user: db_models.User) -> List[api_models.AdjustUserQuot
3636 user_max_quota_dict = {k : 0 for k in db_models .QuotaType }
3737 for q in session .exec (select (db_models .UserQuota ).where (db_models .UserQuota .user_id == user .id )).all ():
3838 user_max_quota_dict [db_models .QuotaType .from_str (q .type )] += q .quantity
39-
39+
4040 return [api_models .AdjustUserQuota (
4141 username = user .username ,
4242 type = k ,
@@ -49,7 +49,7 @@ def calculate_project_quota(project: db_models.Project) -> List[api_models.Adjus
4949 project_max_quota_dict = {k : 0 for k in db_models .QuotaType }
5050 for q in session .exec (select (db_models .UserQuotaShare ).where (db_models .UserQuotaShare .project_id == project .id )).all ():
5151 project_max_quota_dict [db_models .QuotaType .from_str (q .type )] += q .quantity
52-
52+
5353 return [api_models .AdjustProjectQuota (
5454 username = "" ,
5555 project_name = project .name ,
@@ -82,7 +82,7 @@ def get_user_left_quota_by_type(user: db_models.User, quota_type: db_models.Quot
8282 user_quota_own = 0
8383 for q in session .exec (select (db_models .UserQuota ).where (db_models .UserQuota .user_id == user .id ).where (db_models .UserQuota .type == quota_type )).all ():
8484 user_quota_own += q .quantity
85-
85+
8686 user_quota_used = 0
8787 for q in session .exec (select (db_models .UserQuotaShare ).where (db_models .UserQuotaShare .user_id == user .id ).where (db_models .UserQuotaShare .type == quota_type )).all ():
8888 user_quota_used += q .quantity
@@ -188,11 +188,6 @@ def set_quota_to_project(
188188 if not project_membership and project_find .owner_id != user_find .id :
189189 raise HTTPException (status_code = 400 , detail = "User not in project" )
190190
191- # check if user has enough quota to share
192- if get_user_left_quota_by_type (user_find , db_models .QuotaType .from_str (create_quota .type )) < create_quota .quantity :
193- raise HTTPException (status_code = 400 , detail = "User do not have enough quota to share" )
194-
195- # check if user has already shared quota
196191 quota = session .exec (
197192 select (db_models .UserQuotaShare )
198193 .where (
@@ -202,6 +197,14 @@ def set_quota_to_project(
202197 )
203198 ).first ()
204199 previous_quantity = 0
200+ if quota :
201+ previous_quantity = quota .quantity
202+
203+ # check if user has enough quota to share
204+ if get_user_left_quota_by_type (user_find , db_models .QuotaType .from_str (create_quota .type )) + previous_quantity < create_quota .quantity :
205+ raise HTTPException (status_code = 400 , detail = "User do not have enough quota to share" )
206+
207+ # check if user has already shared quota
205208 if quota :
206209 previous_quantity = quota .quantity
207210 quota .quantity = create_quota .quantity
@@ -215,10 +218,12 @@ def set_quota_to_project(
215218 type = create_quota .type
216219 )
217220 session .add (quota )
221+ if create_quota .quantity == 0 :
222+ session .delete (quota )
218223 session .commit ()
219224 try :
220225 sync_project_quota (project_find )
221- except (nova_exceptions .ClientException , cinder_exceptions .ClientException ) as e :
226+ except (nova_exceptions .ClientException , cinder_exceptions .ClientException ):
222227 session .refresh (quota )
223228 quota .quantity = previous_quantity
224229 session .commit ()
@@ -254,7 +259,7 @@ def show_project_adjustements(
254259 raise HTTPException (status_code = 400 , detail = "Project not found" )
255260 if not user .is_admin and not session .exec (select (db_models .ProjectUserMembership ).where (db_models .ProjectUserMembership .project_id == project_find .id , db_models .ProjectUserMembership .user_id == user .id )).first () and project_find .owner_id != user .id :
256261 raise HTTPException (status_code = 403 , detail = "Not allowed to see Adjustements for this project" )
257-
262+
258263 shared_quotas = []
259264 for q in session .exec (select (db_models .UserQuotaShare ).where (db_models .UserQuotaShare .project_id == project_find .id )).all ():
260265 user = session .exec (select (db_models .User ).where (db_models .User .id == q .user_id )).first ()
0 commit comments