def _upsert_userinfo(self, sess, user_info): """ update user info to database. Args: sess: sqlalchemy session user_info: a dict of {username: {display_name, phone_number, tags, admin} Return: None """ for username in user_info: u = query_for_user(session=sess, username=username) if u is None: self.logger.info("create user {}".format(username)) u = User(username=username) sess.add(u) if self.arborist_client: self.arborist_client.create_user({"name": username}) u.email = user_info[username].get("email", "") u.display_name = user_info[username].get("display_name", "") u.phone_number = user_info[username].get("phone_number", "") u.is_admin = user_info[username].get("admin", False) # do not update if there is no tag if user_info[username]["tags"] == {}: continue # remove user db tags if they are not shown in new tags for tag in u.tags: if tag.key not in user_info[username]["tags"]: u.tags.remove(tag) # sync for k, v in user_info[username]["tags"].items(): found = False for tag in u.tags: if tag.key == k: found = True tag.value = v # create new tag if not found if not found: tag = Tag(key=k, value=v) u.tags.append(tag)
def create_providers(data, db_session): s = db_session providers = data["providers"] for provider in providers: prov = CloudProvider() prov.name = provider["name"] prov.backend = provider["backend"] prov.service = provider["service"] s.add(prov) s.flush for name, user in list(data["users"].items()): new_user = User() new_user.username = name new_user.email = user["email"] new_user.is_admin = user["is_admin"] s.add(new_user) user["id"] = new_user.id for project in data["projects"]: new_project = Project() new_project.name = project["name"] s.add(new_project) for storage in project["storage_access"]: provider = s.query(CloudProvider).filter_by(name=storage).first() if provider: new_storage_access = StorageAccess(provider_id=provider.id, project_id=new_project.id) s.add(new_storage_access) for bucket in project["buckets"]: new_bucket = Bucket() new_bucket.name = bucket["name"] provider = s.query(CloudProvider).filter_by( name=bucket["provider"]).first() new_bucket.provider_id = provider.id s.add(new_bucket) s.flush() project_to_bucket = ProjectToBucket() project_to_bucket.bucket_id = new_bucket.id project_to_bucket.project_id = new_project.id s.add(project_to_bucket) s.flush() for user in project["users"]: access = AccessPrivilege() access.user_id = data["users"][user["name"]]["id"] access.project_id = new_project.id s.add(access)