def _fix_pkg_group_category_repoid(repoid, typeid): """ Looks up units with in a repo and validate if the repoid in the unit metadata matches the repo the unit is associated with. If they dont match, * take a deep copy of the pkg group or category unit * create(save) new unit with fixed repoid * re-associate new unit with the repo """ units = ass_query_mgr.get_units(repo_id=repoid, criteria=UnitAssociationCriteria(type_ids=typeid)) for unit in units: if unit['metadata']['repo_id'] != repoid: _log.debug("Found unit %s to migrate" % unit['id']) # take a copy of the unit and fix the repoid new_unit_metadata = _safe_copy_unit(unit['metadata']) new_unit_metadata['repo_id'] = repoid try: new_unit_id = content_mgr.add_content_unit(content_type=typeid, unit_id=None, unit_metadata=new_unit_metadata) # Grab the association doc itself from the DB directly association = RepoContentUnit.get_collection().find_one({'_id' : unit['_id']}) # Update to point to the new unit association['unit_id'] = new_unit_id # Save it back to the DB RepoContentUnit.get_collection().save(association, safe=True) except pymongo.errors.DuplicateKeyError: # If migrating this Unit to have the correct repo_id causes a duplicate, then there already # is a Unit that has the correct metadata in place in this repository. Because of this, we # should remove the association of the unit with the repository RepoContentUnit.get_collection().remove({'_id': unit['_id']}) # Since we removed a Unit from the repo, we should decrement the repo unit count repo_mgr.update_unit_count(repoid, typeid, -1)
def _fix_pkg_group_category_repoid(repoid, typeid): """ Looks up units with in a repo and validate if the repoid in the unit metadata matches the repo the unit is associated with. If they dont match, * take a deep copy of the pkg group or category unit * create(save) new unit with fixed repoid * re-associate new unit with the repo """ units = ass_query_mgr.get_units(repo_id=repoid, criteria=UnitAssociationCriteria(type_ids=typeid)) for unit in units: if unit['metadata']['repo_id'] != repoid: _log.debug("Found unit %s to migrate" % unit['id']) # take a copy of the unit and fix the repoid new_unit_metadata = _safe_copy_unit(unit['metadata']) new_unit_metadata['repo_id'] = repoid new_unit_id = content_mgr.add_content_unit(content_type=typeid, unit_id=None, unit_metadata=new_unit_metadata) # Grab the association doc itself from the DB directly association = RepoContentUnit.get_collection().find_one({'_id' : unit['_id']}) # Update to point to the new unit association['unit_id'] = new_unit_id # Save it back to the DB RepoContentUnit.get_collection().save(association, safe=True)
def _fix_pkg_group_category_repoid(repoid, typeid): """ Looks up units with in a repo and validate if the repoid in the unit metadata matches the repo the unit is associated with. If they dont match, * take a deep copy of the pkg group or category unit * create(save) new unit with fixed repoid * re-associate new unit with the repo """ units = ass_query_mgr.get_units( repo_id=repoid, criteria=UnitAssociationCriteria(type_ids=typeid)) for unit in units: if unit['metadata']['repo_id'] != repoid: _log.debug("Found unit %s to migrate" % unit['id']) # take a copy of the unit and fix the repoid new_unit_metadata = _safe_copy_unit(unit['metadata']) new_unit_metadata['repo_id'] = repoid try: new_unit_id = content_mgr.add_content_unit( content_type=typeid, unit_id=None, unit_metadata=new_unit_metadata) # Grab the association doc itself from the DB directly association = RepoContentUnit.get_collection().find_one( {'_id': unit['_id']}) # Update to point to the new unit association['unit_id'] = new_unit_id # Save it back to the DB RepoContentUnit.get_collection().save(association, safe=True) except pymongo.errors.DuplicateKeyError: # If migrating this Unit to have the correct repo_id causes a duplicate, # then there already # is a Unit that has the correct metadata in place in this repository. Because of # this, we # should remove the association of the unit with the repository RepoContentUnit.get_collection().remove({'_id': unit['_id']}) # Since we removed a Unit from the repo, we should decrement the repo unit count repo_mgr.update_unit_count(repoid, typeid, -1)