def _get_provider_charges(cls, backend_message_id, backend_instance, direction, couch_id, backend_api_id): if backend_message_id: if backend_api_id == SQLTwilioBackend.get_api_id(): message = get_twilio_message(backend_instance, backend_message_id) status = message.status price = message.price elif backend_api_id == InfobipBackend.get_api_id(): message = get_infobip_message(backend_instance, backend_message_id) status = message['status']['name'] price = message['price']['pricePerMessage'] else: raise ProviderFeeNotSupportedException("backend_message_id=%s" % backend_message_id) if status is None or status.lower() in [ 'accepted', 'queued', 'sending', 'receiving', ] or price is None: raise RetryBillableTaskException("backend_message_id=%s" % backend_message_id) return _ProviderChargeInfo( abs(Decimal(price)), SmsGatewayFee.get_by_criteria( backend_api_id, direction, ) ) else: log_smsbillables_error( "Could not create gateway fee for message %s: no backend_message_id" % couch_id ) return _ProviderChargeInfo(None, None)
def _get_multipart_count(cls, backend_api_id, backend_instance, backend_message_id, multipart_count): if backend_api_id == SQLTwilioBackend.get_api_id(): twilio_message = get_twilio_message(backend_instance, backend_message_id) if twilio_message.num_segments is not None: return int(twilio_message.num_segments) else: raise RetryBillableTaskException("backend_message_id=%s" % backend_message_id) else: return multipart_count
def _get_multipart_count(cls, backend_api_id, backend_instance, backend_message_id, multipart_count): if backend_api_id == SQLTwilioBackend.get_api_id(): twilio_message = get_twilio_message(backend_instance, backend_message_id) if twilio_message.num_segments is not None: return int(twilio_message.num_segments) else: raise RetryBillableTaskException("backend_message_id=%s" % backend_message_id) elif backend_api_id == InfobipBackend.get_api_id(): infobip_message = get_infobip_message(backend_instance, backend_message_id) segments = infobip_message['messageCount'] \ if 'messageCount' in infobip_message else infobip_message['smsCount'] if segments is not None: return int(segments) else: raise RetryBillableTaskException("backend_message_id=%s" % backend_message_id) else: return multipart_count
def _get_twilio_charges(cls, backend_message_id, backend_instance, direction, couch_id): if backend_message_id: twilio_message = get_twilio_message(backend_instance, backend_message_id) if twilio_message.status in [ 'accepted', 'queued', 'sending', 'receiving', ] or twilio_message.price is None: raise RetryBillableTaskException("backend_message_id=%s" % backend_message_id) return _TwilioChargeInfo( Decimal(twilio_message.price) * -1, SmsGatewayFee.get_by_criteria( SQLTwilioBackend.get_api_id(), direction, ) ) else: log_smsbillables_error( "Could not create gateway fee for Twilio message %s: no backend_message_id" % couch_id ) return _TwilioChargeInfo(None, None)