optimization: avoid updating whole org when only need to set one field (#1288)
- add update_users and update_slug_and_name - rename update to update_full
This commit is contained in:
		
							parent
							
								
									dc8d510b11
								
							
						
					
					
						commit
						1bc4697995
					
				| @ -166,7 +166,7 @@ class OrgOps: | ||||
|             else: | ||||
|                 default_org.name = DEFAULT_ORG | ||||
|                 default_org.slug = slug_from_name(DEFAULT_ORG) | ||||
|                 await self.update(default_org) | ||||
|                 await self.update_full(default_org) | ||||
|                 print(f'Default organization renamed to "{DEFAULT_ORG}"', flush=True) | ||||
|             return | ||||
| 
 | ||||
| @ -187,12 +187,24 @@ class OrgOps: | ||||
|         ) | ||||
|         await self.add_org(org) | ||||
| 
 | ||||
|     async def update(self, org: Organization): | ||||
|     async def update_full(self, org: Organization): | ||||
|         """Update existing org""" | ||||
|         return await self.orgs.find_one_and_update( | ||||
|         await self.orgs.find_one_and_update( | ||||
|             {"_id": org.id}, {"$set": org.to_dict()}, upsert=True | ||||
|         ) | ||||
| 
 | ||||
|     async def update_users(self, org: Organization): | ||||
|         """Update org users""" | ||||
|         return await self.orgs.find_one_and_update( | ||||
|             {"_id": org.id}, {"$set": org.dict(include={"users"})} | ||||
|         ) | ||||
| 
 | ||||
|     async def update_slug_and_name(self, org: Organization): | ||||
|         """Update org slug""" | ||||
|         return await self.orgs.find_one_and_update( | ||||
|             {"_id": org.id}, {"$set": {"slug": org.slug, "name": org.name}} | ||||
|         ) | ||||
| 
 | ||||
|     async def update_storage( | ||||
|         self, org: Organization, storage: Union[S3Storage, DefaultStorage] | ||||
|     ): | ||||
| @ -251,7 +263,7 @@ class OrgOps: | ||||
|     ): | ||||
|         """Add user to organization with specified role""" | ||||
|         org.users[str(userid)] = role or UserRole.OWNER | ||||
|         await self.update(org) | ||||
|         await self.update_users(org) | ||||
| 
 | ||||
|     async def get_org_owners(self, org: Organization): | ||||
|         """Return list of org's Owner users.""" | ||||
| @ -531,7 +543,7 @@ def init_orgs_api(app, mdb, user_manager, invites, user_dep): | ||||
|             org.slug = slug_from_name(rename.name) | ||||
| 
 | ||||
|         try: | ||||
|             await ops.update(org) | ||||
|             await ops.update_slug_and_name(org) | ||||
|         except DuplicateKeyError: | ||||
|             # pylint: disable=raise-missing-from | ||||
|             raise HTTPException(status_code=400, detail="duplicate_org_name") | ||||
| @ -654,7 +666,7 @@ def init_orgs_api(app, mdb, user_manager, invites, user_dep): | ||||
|             # pylint: disable=raise-missing-from | ||||
|             raise HTTPException(status_code=404, detail="no_such_org_user") | ||||
| 
 | ||||
|         await ops.update(org) | ||||
|         await ops.update_users(org) | ||||
|         return {"removed": True} | ||||
| 
 | ||||
|     @router.post("/add-user", tags=["invites"]) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user