def _create_or_update_type(type_def): """ This method creates or updates a type definition in MongoDB. :param type_def: the type definition to update or create. If a type definition with the same as an existing type, the type is updated, otherwise it is created. :type type_def: ContentType :return: This method will always return None :rtype: None """ # Make sure a collection exists for the type database = connection.get_database() collection_name = unit_collection_name(type_def.id) if collection_name not in database.collection_names(): connection.get_collection(collection_name, create=True) # Add or update an entry in the types list content_type_collection = ContentType.get_collection() content_type = ContentType(type_def.id, type_def.display_name, type_def.description, type_def.unit_key, type_def.search_indexes, type_def.referenced_types) # no longer rely on _id = id existing_type = content_type_collection.find_one({'id': type_def.id}, projection=[]) if existing_type is not None: content_type._id = existing_type['_id'] # XXX this still causes a potential race condition when 2 users are updating the same type content_type_collection.save(content_type)
def _create_or_update_type(type_def): # Make sure a collection exists for the type database = pulp_db.get_database() collection_name = unit_collection_name(type_def.id) if collection_name not in database.collection_names(): pulp_db.get_collection(collection_name, create=True) # Add or update an entry in the types list content_type_collection = ContentType.get_collection() content_type = ContentType(type_def.id, type_def.display_name, type_def.description, type_def.unit_key, type_def.search_indexes, type_def.referenced_types) # no longer rely on _id = id existing_type = content_type_collection.find_one({'id': type_def.id}, fields=[]) if existing_type is not None: content_type._id = existing_type['_id'] # XXX this still causes a potential race condition when 2 users are updating the same type content_type_collection.save(content_type, safe=True)