def revoke_line(self, line): try: logger.info('Attempting to revoke fulfillment of Line [%d]...', line.id) UUID = line.product.attr.UUID entitlement_option = Option.objects.get(code='course_entitlement') course_entitlement_uuid = line.attributes.get(option=entitlement_option).value entitlement_api_client = EdxRestApiClient( get_lms_entitlement_api_url(), jwt=line.order.site.siteconfiguration.access_token ) # DELETE to the Entitlement API. entitlement_api_client.entitlements(course_entitlement_uuid).delete() audit_log( 'line_revoked', order_line_id=line.id, order_number=line.order.number, product_class=line.product.get_product_class().name, UUID=UUID, certificate_type=getattr(line.product.attr, 'certificate_type', ''), user_id=line.order.user.id ) return True except Exception: # pylint: disable=broad-except logger.exception('Failed to revoke fulfillment of Line [%d].', line.id) return False
def is_entitlement_expired(entitlement_uuid, site): """ Checks to see if a given entitlement is expired. Args: entitlement_uuid: UUID site: (Site) Returns: bool: True if the entitlement is expired """ entitlement_api_client = EdxRestApiClient( get_lms_entitlement_api_url(), jwt=site.siteconfiguration.access_token) partner_short_code = site.siteconfiguration.partner.short_code key = 'course_entitlement_detail_{}{}'.format(entitlement_uuid, partner_short_code) entitlement_cached_response = TieredCache.get_cached_response(key) if entitlement_cached_response.is_found: entitlement = entitlement_cached_response.value else: logger.debug('Trying to get entitlement {%s}', entitlement_uuid) entitlement = entitlement_api_client.entitlements( entitlement_uuid).get() TieredCache.set_all_tiers(key, entitlement, settings.COURSES_API_CACHE_TIMEOUT) expired = entitlement.get('expired_at') logger.debug('Entitlement {%s} expired = {%s}', entitlement_uuid, expired) return expired