def create_api_assets(cloud, api_client, benchmark_volumes, extra_assets): """ Create our API assets, and return a list of PhysicalAsset, Quantity """ provider = api_client.providers.get_or_create(name=cloud.provider) location = api_client.locations.get_or_create(name=cloud.location, provider=provider) instance_type = api_client.abstract_assets.get_or_create(name=cloud.instance_type) instance = api_client.physical_assets.get_or_create(asset=instance_type, location=location) assets = [instance] for benchmark_volume in benchmark_volumes: for asset in benchmark_volume.assets: abstract_asset = api_client.abstract_assets.get_or_create(name=asset) physical_asset = api_client.physical_assets.get_or_create(asset=abstract_asset, location=location) assets.append(physical_asset) for asset in extra_assets: abstract_asset = api_client.abstract_assets.get_or_create(name=asset) physical_asset = api_client.physical_assets.get_or_create(asset=abstract_asset, location=location) assets.append(physical_asset) frozen_assets = [freeze_dict(asset) for asset in assets] assets_with_count = collections.Counter(frozen_assets).most_common() return [(unfreeze_dict(asset), quantity) for asset, quantity in assets_with_count]
def create_api_assets(cloud, api_client, benchmark_volumes, extra_assets): """ Create our API assets, and return a list of PhysicalAsset, Quantity """ provider = api_client.providers.get_or_create(name=cloud.provider) location = api_client.locations.get_or_create(name=cloud.location, provider=provider) instance_type = api_client.abstract_assets.get_or_create( name=cloud.instance_type) instance = api_client.physical_assets.get_or_create(asset=instance_type, location=location) assets = [instance] for benchmark_volume in benchmark_volumes: for asset in benchmark_volume.assets: abstract_asset = api_client.abstract_assets.get_or_create( name=asset) physical_asset = api_client.physical_assets.get_or_create( asset=abstract_asset, location=location) assets.append(physical_asset) for asset in extra_assets: abstract_asset = api_client.abstract_assets.get_or_create(name=asset) physical_asset = api_client.physical_assets.get_or_create( asset=abstract_asset, location=location) assets.append(physical_asset) frozen_assets = [freeze_dict(asset) for asset in assets] assets_with_count = collections.Counter(frozen_assets).most_common() return [(unfreeze_dict(asset), quantity) for asset, quantity in assets_with_count]
def get_or_create(self, **kwargs): key = freeze_dict(kwargs) if key not in self.objects: return self.create(**kwargs) return self._from_objects(key)
def test_freeze(self): test_dict = {"a": "b", "c": {"d": "e"}, "f": {"g": {"h": "i"}}} self.assertEqual(test_dict, unfreeze_dict(freeze_dict(test_dict)))
def create(self, **kwargs): key = freeze_dict(kwargs) self.objects[key] = kwargs return self._from_objects(key)