本文整理汇总了Python中pulp.server.db.model.consumer.UnitProfile类的典型用法代码示例。如果您正苦于以下问题:Python UnitProfile类的具体用法?Python UnitProfile怎么用?Python UnitProfile使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了UnitProfile类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: update
def update(self, consumer_id, content_type, profile):
"""
Update a unit profile.
Created if not already exists.
@param consumer_id: uniquely identifies the consumer.
@type consumer_id: str
@param content_type: The profile (content) type ID.
@type content_type: str
@param profile: The unit profile
@type profile: object
"""
try:
profiler, config = plugin_api.get_profiler_by_type(content_type)
except plugin_exceptions.PluginNotFound:
# Not all profile types have a type specific profiler, so let's use the baseclass
# Profiler
profiler, config = (Profiler(), {})
consumer = factory.consumer_manager().get_consumer(consumer_id)
# Allow the profiler a chance to update the profile before we save it
profile = profiler.update_profile(consumer, content_type, profile, config)
try:
p = self.get_profile(consumer_id, content_type)
p['profile'] = profile
# We store the profile's hash anytime the profile gets altered
p['profile_hash'] = UnitProfile.calculate_hash(profile)
except MissingResource:
p = UnitProfile(consumer_id, content_type, profile)
collection = UnitProfile.get_collection()
collection.save(p, safe=True)
return p
示例2: tearDown
def tearDown(self):
super(BaseProfilerConduitTests, self).tearDown()
Consumer.get_collection().remove()
Repo.get_collection().remove()
RepoDistributor.get_collection().remove()
Bind.get_collection().remove()
RepoContentUnit.get_collection().remove()
UnitProfile.get_collection().remove()
typedb.clean()
factory.reset()
示例3: setUp
def setUp(self):
base.PulpWebserviceTests.setUp(self)
Consumer.get_collection().remove()
UnitProfile.get_collection().remove()
plugin_api._create_manager()
mock_plugins.install()
profiler = plugin_api.get_profiler_by_type('errata')[0]
profiler.unit_applicable = \
mock.Mock(side_effect=lambda i,u,c,x:
ApplicabilityReport(u, True, self.SUMMARY, self.DETAILS))
示例4: setUp
def setUp(self):
base.PulpServerTests.setUp(self)
Consumer.get_collection().remove()
UnitProfile.get_collection().remove()
plugins._create_manager()
mock_plugins.install()
profiler, cfg = plugins.get_profiler_by_type('rpm')
profiler.units_applicable = \
Mock(side_effect=lambda i,r,t,u,c,x:
[ApplicabilityReport('mysummary', 'mydetails')])
示例5: setUp
def setUp(self):
super(BaseProfilerConduitTests, self).setUp()
Consumer.get_collection().remove()
RepoDistributor.get_collection().remove()
Bind.get_collection().remove()
RepoContentUnit.get_collection().remove()
UnitProfile.get_collection().remove()
plugin_api._create_manager()
typedb.update_database([self.TYPE_1_DEF, self.TYPE_2_DEF])
mock_plugins.install()
示例6: tearDown
def tearDown(self):
super(BaseProfilerConduitTests, self).tearDown()
Consumer.get_collection().remove()
model.Repository.objects.delete()
model.Distributor.objects.delete()
Bind.get_collection().remove()
RepoContentUnit.get_collection().remove()
UnitProfile.get_collection().remove()
typedb.clean()
factory.reset()
mock_plugins.reset()
示例7: batch_regenerate_applicability
def batch_regenerate_applicability(repo_id, existing_applicability_ids):
"""
Regenerate and save applicability data for a batch of existing applicabilities
:param repo_id: Repository id for which applicability is being calculated
:type repo_id: str
:param existing_applicability_ids: Tuple of Object Ids for applicability profiles
:type existing_applicability_ids: tuple of dicts in form of {"_id": ObjectID('mongo-id')}
"""
id_list = [id['_id'] for id in existing_applicability_ids]
existing_applicabilities = RepoProfileApplicability.get_collection().find(
{"_id": {"$in": id_list}})
for existing_applicability in existing_applicabilities:
# Convert cursor to RepoProfileApplicability object
existing_applicability = RepoProfileApplicability(**dict(existing_applicability))
profile_hash = existing_applicability['profile_hash']
unit_profile = UnitProfile.get_collection().find_one({'profile_hash': profile_hash},
fields=['id', 'content_type'])
if unit_profile is None:
# Unit profiles change whenever packages are installed or removed on consumers,
# and it is possible that existing_applicability references a UnitProfile
# that no longer exists. This is harmless, as Pulp has a monthly cleanup task
# that will identify these dangling references and remove them.
continue
# Regenerate applicability data for given unit_profile and repo id
ApplicabilityRegenerationManager.regenerate_applicability(
profile_hash, unit_profile['content_type'], unit_profile['id'], repo_id,
existing_applicability)
示例8: regenerate_applicability_for_repos
def regenerate_applicability_for_repos(repo_criteria):
"""
Regenerate and save applicability data affected by given updated repositories.
:param repo_criteria: The repo selection criteria
:type repo_criteria: dict
"""
repo_criteria = Criteria.from_dict(repo_criteria)
repo_query_manager = managers.repo_query_manager()
# Process repo criteria
repo_criteria.fields = ['id']
repo_ids = [r['id'] for r in repo_query_manager.find_by_criteria(repo_criteria)]
for repo_id in repo_ids:
# Find all existing applicabilities for given repo_id
existing_applicabilities = RepoProfileApplicability.get_collection().find(
{'repo_id': repo_id})
for existing_applicability in existing_applicabilities:
# Convert cursor to RepoProfileApplicability object
existing_applicability = RepoProfileApplicability(**dict(existing_applicability))
profile_hash = existing_applicability['profile_hash']
unit_profile = UnitProfile.get_collection().find_one({'profile_hash': profile_hash},
fields=['id', 'content_type'])
if unit_profile is None:
# Unit profiles change whenever packages are installed or removed on consumers,
# and it is possible that existing_applicability references a UnitProfile
# that no longer exists. This is harmless, as Pulp has a monthly cleanup task
# that will identify these dangling references and remove them.
continue
# Regenerate applicability data for given unit_profile and repo id
ApplicabilityRegenerationManager.regenerate_applicability(
profile_hash, unit_profile['content_type'], unit_profile['id'], repo_id,
existing_applicability)
示例9: regenerate_applicability_for_repos
def regenerate_applicability_for_repos(self, repo_criteria=None):
"""
Regenerate and save applicability data affected by given updated repositories.
:param repo_criteria: The repo selection criteria
:type repo_criteria: pulp.server.db.model.criteria.Criteria
"""
repo_query_manager = managers.repo_query_manager()
# Process repo criteria
repo_criteria.fields = ['id']
repo_ids = [r['id'] for r in repo_query_manager.find_by_criteria(repo_criteria)]
for repo_id in repo_ids:
# Find all existing applicabilities for given repo_id
existing_applicabilities = RepoProfileApplicability.get_collection().find({'repo_id':repo_id})
for existing_applicability in existing_applicabilities:
# Convert cursor to RepoProfileApplicability object
existing_applicability = RepoProfileApplicability(**dict(existing_applicability))
profile_hash = existing_applicability['profile_hash']
unit_profile = UnitProfile.get_collection().find_one({'profile_hash': profile_hash},
fields=['id','content_type'])
# Regenerate applicability data for given unit_profile and repo id
self.regenerate_applicability(profile_hash, unit_profile['content_type'],
unit_profile['id'],
repo_id,
existing_applicability)
示例10: test_create
def test_create(self):
# Setup
self.populate()
# Test
manager = factory.consumer_profile_manager()
manager.create(self.CONSUMER_ID, self.TYPE_1, self.PROFILE_1)
# Verify
collection = UnitProfile.get_collection()
cursor = collection.find({'consumer_id': self.CONSUMER_ID})
profiles = list(cursor)
self.assertEquals(len(profiles), 1)
self.assertEquals(profiles[0]['consumer_id'], self.CONSUMER_ID)
self.assertEquals(profiles[0]['content_type'], self.TYPE_1)
self.assertEquals(profiles[0]['profile'], self.PROFILE_1)
expected_hash = UnitProfile.calculate_hash(self.PROFILE_1)
self.assertEqual(profiles[0]['profile_hash'], expected_hash)
示例11: regenerate_applicability_for_repos
def regenerate_applicability_for_repos(repo_criteria):
"""
Regenerate and save applicability data affected by given updated repositories.
:param repo_criteria: The repo selection criteria
:type repo_criteria: dict
"""
repo_criteria = Criteria.from_dict(repo_criteria)
repo_query_manager = managers.repo_query_manager()
# Process repo criteria
repo_criteria.fields = ["id"]
repo_ids = [r["id"] for r in repo_query_manager.find_by_criteria(repo_criteria)]
for repo_id in repo_ids:
# Find all existing applicabilities for given repo_id
existing_applicabilities = RepoProfileApplicability.get_collection().find({"repo_id": repo_id})
for existing_applicability in existing_applicabilities:
# Convert cursor to RepoProfileApplicability object
existing_applicability = RepoProfileApplicability(**dict(existing_applicability))
profile_hash = existing_applicability["profile_hash"]
unit_profile = UnitProfile.get_collection().find_one(
{"profile_hash": profile_hash}, fields=["id", "content_type"]
)
# Regenerate applicability data for given unit_profile and repo id
ApplicabilityRegenerationManager.regenerate_applicability(
profile_hash, unit_profile["content_type"], unit_profile["id"], repo_id, existing_applicability
)
示例12: test_fetch_by_type2
def test_fetch_by_type2(self):
# Setup
self.populate()
collection = UnitProfile.get_collection()
manager = factory.consumer_profile_manager()
manager.update(self.CONSUMER_ID, self.TYPE_1, self.PROFILE_1)
manager.update(self.CONSUMER_ID, self.TYPE_2, self.PROFILE_2)
# Test
profile = manager.get_profile(self.CONSUMER_ID, self.TYPE_2)
# Verify
self.assertTrue(profile is not None)
self.assertEquals(profile['consumer_id'], self.CONSUMER_ID)
self.assertEquals(profile['content_type'], self.TYPE_2)
self.assertEquals(profile['profile'], self.PROFILE_2)
expected_hash = UnitProfile.calculate_hash(self.PROFILE_2)
self.assertEqual(profile['profile_hash'], expected_hash)
示例13: regenerate_applicability
def regenerate_applicability(profile_hash, content_type, profile_id, bound_repo_id, existing_applicability=None):
"""
Regenerate and save applicability data for given profile and bound repo id.
If existing_applicability is not None, replace it with the new applicability data.
:param profile_hash: hash of the unit profile
:type profile_hash: basestring
:param content_type: profile (unit) type ID
:type content_type: str
:param profile_id: unique id of the unit profile
:type profile_id: str
:param bound_repo_id: repo id to be used to calculate applicability
against the given unit profile
:type bound_repo_id: str
:param existing_applicability: existing RepoProfileApplicability object to be replaced
:type existing_applicability: pulp.server.db.model.consumer.RepoProfileApplicability
"""
profiler_conduit = ProfilerConduit()
# Get the profiler for content_type of given unit_profile
profiler, profiler_cfg = ApplicabilityRegenerationManager._profiler(content_type)
# Check if the profiler supports applicability, else return
if profiler.calculate_applicable_units == Profiler.calculate_applicable_units:
# If base class calculate_applicable_units method is called,
# skip applicability regeneration
return
# Find out which content types have unit counts greater than zero in the bound repo
repo_content_types = ApplicabilityRegenerationManager._get_existing_repo_content_types(bound_repo_id)
# Get the intersection of existing types in the repo and the types that the profiler
# handles. If the intersection is not empty, regenerate applicability
if set(repo_content_types) & set(profiler.metadata()["types"]):
# Get the actual profile for existing_applicability or lookup using profile_id
if existing_applicability:
profile = existing_applicability.profile
else:
unit_profile = UnitProfile.get_collection().find_one({"id": profile_id}, fields=["profile"])
profile = unit_profile["profile"]
call_config = PluginCallConfiguration(plugin_config=profiler_cfg, repo_plugin_config=None)
try:
applicability = profiler.calculate_applicable_units(
profile, bound_repo_id, call_config, profiler_conduit
)
except NotImplementedError:
logger.debug("Profiler for content type [%s] does not support applicability" % content_type)
return
if existing_applicability:
# Update existing applicability object
existing_applicability.applicability = applicability
existing_applicability.save()
else:
# Create a new RepoProfileApplicability object and save it in the db
RepoProfileApplicability.objects.create(
profile_hash, bound_repo_id, unit_profile["profile"], applicability
)
示例14: _add_profiles_to_consumer_map_and_get_hashes
def _add_profiles_to_consumer_map_and_get_hashes(consumer_ids, consumer_map):
"""
Query for all the profiles associated with the given list of consumer_ids, add those
profiles to the consumer_map, and then return a list of all profile_hashes.
:param consumer_ids: A list of consumer_ids that we want to map the profiles to
:type consumer_ids: list
:param consumer_map: A dictionary mapping consumer_ids to a dictionary with key 'profiles',
which indexes a list that this method will append the found profiles
to.
:type consumer_map: dict
:return: A list of the profile_hashes that were associated with the given
consumers
:rtype: list
"""
profiles = UnitProfile.get_collection().find(
{'consumer_id': {'$in': consumer_ids}},
projection=['consumer_id', 'profile_hash'])
profile_hashes = set()
for p in profiles:
consumer_map[p['consumer_id']]['profiles'].append(p)
profile_hashes.add(p['profile_hash'])
# Let's return a list of all the unique profile_hashes for the query we will do a
# bit later for applicability data
return list(profile_hashes)
示例15: test_consumer_deleted
def test_consumer_deleted(self):
# Setup
self.populate()
collection = UnitProfile.get_collection()
manager = factory.consumer_profile_manager()
manager.update(self.CONSUMER_ID, self.TYPE_1, self.PROFILE_1)
manager.update(self.CONSUMER_ID, self.TYPE_2, self.PROFILE_2)
collection = UnitProfile.get_collection()
cursor = collection.find({"consumer_id": self.CONSUMER_ID})
profiles = list(cursor)
self.assertEquals(len(profiles), 2)
# Test
manager.consumer_deleted(self.CONSUMER_ID)
cursor = collection.find()
profiles = list(cursor)
self.assertEquals(len(profiles), 0)