partnercenter/azext_partnercenter/clients/plan_listing_client.py (52 lines of code) (raw):

# -------------------------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- # pylint: disable=line-too-long # pylint: disable=protected-access from azext_partnercenter.models import PlanListing from azext_partnercenter.clients import (OfferClient, PlanClient) from ._util import get_combined_paged_results from ._base_client import BaseClient class PlanListingClient(BaseClient): def __init__(self, cli_ctx, *_): super().__init__(cli_ctx, *_) self._offer_client = OfferClient(cli_ctx, *_) self._plan_client = PlanClient(cli_ctx, *_) def get(self, offer_external_id, plan_external_id) -> PlanListing: """Gets the listing using the external offer and plan ID.""" offer = self._offer_client.get(offer_external_id) listing = self._get_listing_instance(offer, plan_external_id) if listing is None: return None return PlanListing( offer_id=offer_external_id, id=plan_external_id, name=listing.title, summary=(listing.short_description if hasattr(listing, 'short_description') else ''), description=(listing.description if hasattr(listing, 'description') else '') ) def update(self, offer_external_id, plan_external_id, parameters: PlanListing): offer = self._offer_client.get(offer_external_id) updated_listing = self._get_listing_instance(offer, plan_external_id) updated_listing.title = parameters.name updated_listing.short_description = parameters.summary updated_listing.description = parameters.description self._sdk.listing_client.products_product_id_listings_listing_id_put( offer.resource.durable_id, updated_listing.id, self._get_access_token(), microsoft_ingestion_api_models_listings_azure_listing=updated_listing) return PlanListing( offer_id=offer_external_id, id=plan_external_id, name=updated_listing.title, summary=updated_listing.short_description, description=updated_listing.description ) def _get_listing_instance(self, offer, plan_external_id): offer_durable_id = offer.resource.durable_id branches = get_combined_paged_results(lambda: self._sdk.branches_client.products_product_id_branches_get_by_module_modulemodule_get( offer_durable_id, "Listing", self._get_access_token())) plan = self._plan_client.get(offer.id, plan_external_id) if plan is None: return None branch_listing = next((b for b in branches if hasattr(b, 'variant_id') and b.variant_id == plan._resource.durable_id), None) if branch_listing is None: return None instance_id = branch_listing.current_draft_instance_id listing = self._sdk.listing_client.products_product_id_listings_get_by_instance_id_instance_i_dinstance_id_get( offer_durable_id, instance_id, self._get_access_token() ) return listing.value[0]