from __future__ import absolute_import, division, print_function


class VoipException(Exception):
    def __init__(self, err_code=""):
        self.err_code = err_code

    def __str__(self):
        err_code_map = {
            'account_with_dids': 'The Account has DIDs assigned to it.',
            'api_not_enabled': 'API has not been enabled or has been disabled',
            'api_limit_exceeded': 'API requests limit per minute has been reached',
            'cancel_failed': "The cancellation wasn't completed.",
            'can_have_only_one_profile_without_pin': 'The conference can just have one profile member without pin',
            'conference_member_relation_not_found': 'There is no relation between the profile member and the conference.',
            'did_in_use': 'DID Number is already in use',
            'duplicated_pin': 'The given pin has been duplicated',
            'error_deleting_msg': 'Error when deleting message',
            'error_moving_msg': 'Error when move the voicemail message to folder',
            'existing_did': "You can't set a callback to an existing VoIP.ms DID number",
            'exceeds_file_size': 'The file exceeds the limite size allowed.',
            'forwards_exceeded': 'Your account is limited to 4 forward entries',
            'invalid_account': 'This is not a valid account',
            'invalid_address': 'Address is missing or the format is invalid.',
            'invalid_admin': 'This is not a valid admin',
            'invalid_agent_ring_timeout': 'This is not a valid Agent ring time out value',
            'invalid_allowedcodecs': 'One of the codecs provided is invalidFormat and Values: ulaw;g729;gsm;all',
            'invalid_attachid': "The given ID is invalid or doesn't exist.",
            'invalid_announce_join_leave': 'This is not a valid "Announce join leave"',
            'invalid_announce_only_user': 'This is not a valid "Announce only user"',
            'invalid_announce_position_frequency': 'This is not a valid Announce position frequency',
            'invalid_announce_round_seconds': 'This is not a valid "Announce round seconds"',
            'invalid_announce_user_count': 'This is not a valid "Announce user count"',
            'invalid_attachmessage': 'this is not a valid AttachMessageShould be: yes/no',
            'invalid_area_code': 'this is not a valid Area Code.',
            'invalid_authtype': 'This is not a valid Auth Type',
            'invalid_authtype_h323': 'You must select IP Auth to use H.323',
            'invalid_authtype_iax2': 'You must use User/Password Authentication for IAX2',
            'invalid_balancemanagement': 'This is not a valid BalanceManagement',
            'invalid_base_recording': 'This is not a valid recording path',
            'invalid_billingtype': 'This is not a valid Billing Type Allowed values: 1 = PerMinute, 2 = Flat',
            'invalid_callback': 'This is not a valid Callback',
            'invalid_callback_enable': 'This is not a valid Callback enable value',
            'invalid_callback_retry': 'This is not a valid Callback retry',
            'invalid_callerid': 'This is not a valid CallerID',
            'invalid_calleridprefix': 'This is not a valid CID Prefix, lenght should be less than 20 chars',
            'invalid_callerid_override': 'This is not a valid CallerID Override',
            'invalid_callhunting': 'This is not a valid Call Hunting',
            'invalid_canada_routing': 'This is not a valid Canada Route',
            'invalid_carrier': 'This is not a valid Carrier',
            'invalid_charge': 'This is not a valid Charge',
            'invalid_client': 'This is not a valid Client',
            'invalid_cnam': 'This is not a valid CNAMShould be: 1/0',
            'invalid_codec': 'This is not a valid Codec',
            'invalid_contact': 'This is not a valid Contact Number',
            'invalid_conference': 'This is not a valid Conference ID',
            'invalid_countryid': 'This is not a valid Country ID',
            'invalid_city': 'City is missing or the format is invalid.',
            'invalid_country': (
                'Country is missing or the format is invalid, must be in format ISO 3166-1 alpha-2, '
                'example: US, CA, etc. (You can use the values returned by the method getCountries)'
            ),
            'invalid_credentials': 'Username or Password is incorrect',
            'invalid_date': 'This is not a valid dateFormat is: yyyy-mm-dd',
            'invalid_datetime': 'This is not a valid datetimeFormat is: yyyy-mm-dd hh:mm:ss',
            'invalid_daterange': 'Date Range should be 92 days or less',
            'invalid_dayrange': 'This is not a valid Day Range',
            'invalid_delay_before': 'This is not a valid DelayBefore',
            'invalid_deletemessage': 'This is not a valid DeleteMessageShould be: yes/no',
            'invalid_description': 'This is not a valid Description',
            'invalid_devicetype': 'This is not a valid Device Type',
            'invalid_dialtime': 'This is not a valid Dialtime',
            'invalid_did': 'This is not a valid DID',
            'invalid_digits': 'These are not valid Digits    OrderDIDVirtual: Digits must be 3 numbers  ',
            'invalid_digit_timeout': 'This is not a valid DigitTimeOut',
            'invalid_disa': 'This is not a valid DISA',
            'invalid_destination_folder': 'This is not a valid Destination Folder',
            'invalid_drop_silence': 'This is not a valid "drop silence" value',
            'invalid_dst': 'This is not a valid Destination Number',
            'invalid_dtmf_digits': 'This is no a valid DTMF digit',
            'invalid_dtmfmode': 'This is no a valid DTMF Mode',
            'invalid_email': 'This is not a valid email or email is already in database',
            'invalid_email_attachment_format': 'This is not a valid format value',
            'invalid_email_enable': 'This is not a valid email enable value',
            'invalid_endhour': 'This is not a valid End Hour',
            'invalid_endminute': 'This is not a valid End Minute',
            'invalid_extension': 'This is not a valid extensionExtension can only contain digits',
            'invalid_failover_header': 'This is not a valid failover headerShould be: account/vm/fwd/none',
            'invalid_fax_id': 'This is not a valid Fax Message ID',
            'invalid_file': 'This is not a valid File',
            'invalid_filter': 'This is not a valid Filter',
            'invalid_folder': 'This is not a valid Folder',
            'invalid_folder_id': 'This is not a valid Fax Folder ID',
            'invalid_forward_enable': 'This is not a valid forward enable value',
            'invalid_forwarding': 'This is not a valid forwarding',
            'invalid_forwarding_did': 'Forwarding to the same did is not allowed',
            'invalid_frequency_announcement': 'This is not a valid Frequency announce',
            'invalid_from_number': 'This is not a valid sender number.',
            'invalid_attach_file': 'Valid formats: PDF, MS Word, BMP, JPG',
            'invalid_firstname': 'First name is missing or the format is invalid.',
            'invalid_foc_startdate': 'Invalid date format, must be: YYYY-mm-dd. Example: 2018-02-22',
            'invalid_foc_enddate': 'Invalid date format, must be: YYYY-mm-dd. Example: 2018-02-22',
            'invalid_id': 'This is not a valid ID',
            'invalid_if_announce_position_enabled_report_estimated_hold_time': 'This is not a Report estimated hold time type',
            'invalid_internaldialtime': 'This is not a valid Internal DialtimeShould be: 1 to 60',
            'invalid_internalvoicemail': 'This is not a valid Internal Voicemail',
            'invalid_internationalroute': 'This is not a valid International Route',
            'invalid_ip': 'This is an invalid IP',
            'invalid_ip_auth': 'Do not provide an IP address for User/Pass Authentication',
            'invalid_ip_iax2': 'Do not provide an IP address for IAX2',
            'invalid_ivr': 'This is not a valid IVR',
            'invalid_jitter_buffer': 'This is not a valid "jitter buffer" value',
            'invalid_join_empty_type': "This is not a valid 'JoinWhenEmpty' Type for a Queue",
            'invalid_join_announcement': "This is not a valid 'Join Announcement' Type for a Queue",
            'invalid_language': 'This is not a valid LanguageShould be: es/en/fr',
            'invalid_lastname': 'Lastname is missing or the format is invalid.',
            'invalid_listened': 'This is not a valid Listened value',
            'invalid_location': 'This is not a valid Location',
            'invalid_lockinternational': 'This is not a valid Lock International',
            'invalid_mailbox': 'This is not a valid mailbox',
            'invalid_maximum_callers': 'This is not a valid maximum callers value',
            'invalid_maximum_wait_time': 'This is not a valid maximum wait time value',
            'invalid_method': 'This is not a valid Method',
            'invalid_member': 'This is not a valid Member',
            'invalid_member_delay': 'This is not a valid Member Delay',
            'invalid_message_num': 'This is not a valid Voicemail Message Number',
            'invalid_minute': 'This is not a valid Minute Rate',
            'invalid_mixed_numbers': 'Toll-free numbers and local numbers can not be mixed in the same order.',
            'invalid_monthly': 'This is not a valid Montly Fee',
            'invalid_musiconhold': 'This is not a valid Music on Hold',
            'invalid_name': 'This is not a valid name, Alphanumeric Only',
            'invalid_nat': 'This is not a valid NAT',
            'invalid_note': 'This is not a valid Note, lenght should be less than 50 chars',
            'invalid_number': 'This is not a valid Number',
            'invalid_number_porttype': 'You have entered a local number (not valid in this portability process)',
            'invalid_number_canadian': 'You have entered a Canadian number (not valid in this portability process).',
            'invalid_number_us': 'You have entered a USA number (not valid in this portability process).',
            'invalid_number_fax': 'The Fax number can not be ported into our network',
            'invalid_number_exist': 'The number is already in our network',
            'invalid_numbermembers': (
                'The element format of multiple data is not correct '
                'or it size does not match with other elements'
            ),
            'invalid_order': 'This is not a valid "order" value',
            'invalid_package': 'This is not a valid Package',
            'invalid_password': (
                'This is not a valid password, Voicemail: Must be 4 Digits, '
                'SubAccounts: More than 6 chars, Must Contain Alphanumeric and !#$%&/()=?*[]_:.,{}+-'
            ),
            'invalid_password_auth': 'Do not provide a Password for IP Authentication',
            'invalid_password_lessthan_8characters_long': 'This is not a valid password (Less than 8 characters long)',
            'invalid_password_missing_uppercase': 'This is not a valid password (Missing upper case character)',
            'invalid_password_missing_lowercase': 'This is not a valid password (Missing lower case character)',
            'invalid_password_ilegal_characters': (
                'This is not a valid password (Allowed characters: '
                'Alphanumeric and ! # $ % & / ( ) = ? * [ ] _ : . , { } + -)'
            ),
            'invalid_password_missing_number': 'This is not a valid password (Missing a number)',
            'invalid_pause': 'This is not a valid Pause',
            'invalid_payment': 'This is not a valid Payment',
            'invalid_phonebook': 'This is not a valid Phonebook',
            'invalid_phonenumber': 'This is not a valid Phone Number',
            'invalid_pin': 'This is not a valid PIN',
            'invalid_pin_number': 'Must provide the account PIN number.',
            'invalid_playinstructions': 'This is not a valid PlayInstructionsShould be: u/su',
            'invalid_priority': 'This is not a valid Priority',
            'invalid_protocol': 'This is not a valid Protocol',
            'invalid_province': 'This is not a valid Province',
            'invalid_provider_name': 'You must provide the service provider name',
            'invalid_provider_account': 'You must provide your account # with the current provider',
            'invalid_portingid': "The given ID is invalid or doesn't exist.",
            'invalid_porttype': 'Must provide a valid port type.',
            'invalid_port_status': 'The status code is invalid. (You can use the values returned by the method getListStatus)',
            'invalid_quantity': 'This is not a valid quantity',
            'invalid_query': 'This is not a valid Query',
            'invalid_queue': 'This is not a valid Queue',
            'invalid_quiet': 'This is not a valid "quiet" value',
            'invalid_recording': 'This is not a valid recording',
            'invalid_recording_sound_join': '"join" is not a valid recording',
            'invalid_recording_sound_leave': '"leave" is not a valid recording',
            'invalid_recording_sound_has_joined': '"has_joined" is not a valid recording',
            'invalid_recording_sound_has_left': '"has_left" is not a valid recording',
            'invalid_recording_sound_kicked': '"kicked" is not a valid recording',
            'invalid_recording_sound_muted': '"muted" is not a valid recording',
            'invalid_recording_sound_unmuted': '"unmuted" is not a valid recording',
            'invalid_recording_sound_only_person': '"only person" is not a valid recording',
            'invalid_recording_sound_only_one': '"only one" is not a valid recording',
            'invalid_recording_sound_there_are': '"there are" is not a valid recording',
            'invalid_recording_sound_participants_muted': '"participants muted" is not a valid recording',
            'invalid_recording_sound_other_in_party': '"other in party" is not a valid recording',
            'invalid_recording_sound_place_into_conference': '"place into conference" is not a valid recording',
            'invalid_recording_sound_get_pin': '"get pin" is not a valid recording',
            'invalid_recording_sound_invalid_pin': '"invalid pin" is not a valid recording',
            'invalid_recording_sound_locked': '"locked" is not a valid recording',
            'invalid_recording_sound_locked_now': '"locked now" is not a valid recording',
            'invalid_recording_sound_unlocked_now': '"unlocked now" is not a valid recording',
            'invalid_recording_sound_error_menu': '"error menu" is not a valid recording',
            'invalid_recording_sound_participants_unmuted': '"participants unmuted" is not a valid recording',
            'invalid_report_hold_time_agent': 'This is not a valid Report hold time agent',
            'invalid_resellerclient': 'This is not a valid Reseller Client',
            'invalid_resellernextbilling': (
                'This is not a valid Reseller Next Billing date, '
                'date should not be set in the past.'
            ),
            'invalid_resellerpackage': 'This is not a valid Reseller Package',
            'invalid_response_timeout': 'This is not a valid ResponseTimeOut',
            'invalid_retry_timer': 'This is not a valid Retry timer',
            'invalid_ringgroup': 'This is not a valid Ring group',
            'invalid_ring_inuse': 'This is not a valid Ring in use value',
            'invalid_route': 'This is not a valid Route',
            'invalid_routing_header': 'This is not a valid Routing headerShould be: account/vm/fwd',
            'invalid_saycallerid': 'This is not a valid SayCallerIDShould be: yes/no',
            'invalid_saytime': 'This is not a valid SayTimeShould be: yes/no',
            'invalid_security_code': 'This is not a valid Security Code.Should be alphanumeric.',
            'invalid_serverpop': 'This is not a valid Server POP',
            'invalid_setup': 'This is not a valid Setup Fee',
            'invalid_silence_threshold': 'This is not a valid "silence threshold" value',
            'invalid_sipuri': 'This is not a valid SIPURI',
            'invalid_sms': 'This is not a valid SMS',
            'invalid_sms_forward': 'This is not a valid SMS forward',
            'invalid_snn': 'Must provide the 4 last digits of the SSN.',
            'invalid_statement_name': 'Statement Name is missing or the format is invalid.',
            'invalid_skippassword': 'This is not a valid skippasswordShould be: 1/0  - or -  yes/no',
            'invalid_speed_dial': 'This is not a valid Speed Dial',
            'invalid_starthour': 'This is not a valid Start Hour',
            'invalid_startminute': 'This is not a valid Start Minute',
            'invalid_start_muted': 'This is not a valid Start Muted',
            'invalid_state': 'This is not a valid State',
            'invalid_strategy': 'This is not a valid Ring Strategy',
            'invalid_talking_threshold': 'This is not a valid "talking threshold" value',
            'invalid_talk_detection': 'This is not a valid talk detection value',
            'invalid_tfnumber_porttype': 'You have entered a toll-free number (not valid in this portability process).',
            'invalid_thankyou_for_your_patience': 'This is not a valid Thankyou for your patience value',
            'Invalid_threshold': 'This is not a valid Threshold Amount. The Threshold Amount should be between 1 and 250',
            'invalid_timecondition': 'This is not a valid Time Condition',
            'invalid_timeout': 'This is not a valid timeout',
            'invalid_timerange': 'This is not a valid Timer Range',
            'invalid_timezone': (
                'This is not a valid TimezoneCDR and resellerCDR: '
                'Must be numericVoicemail: Values from getTimezone'
            ),
            'invalid_type': 'This is not a valid Type',
            'invalid_to_number': 'This is not a valid destination number',
            'invalid_username': 'This is not a valid Username',
            'invalid_voice_announcement': 'This is not a valid Voice announce',
            'invalid_voicemailsetup': 'This is not a valid voicemail',
            'invalid_wrapup_time': 'This is not a valid Wrapup time',
            'invalid_weekdayend': 'This is not a valid Week End',
            'invalid_weekdaystart': 'This is not a valid Week Start',
            'invalid_priority_weight': 'This is not valid weight/priority value',
            'invalid_urgent': 'This is not valid urgent value',
            'invalid_zip': 'Zip Code is missing or the format is invalid.',
            'ip_not_enabled': 'This IP is not enabled for API use',
            'limit_reached': 'You have reached the maximum number of messages allowed per day.',
            'max_phonebook': 'Your account is limited to 8 SIP, IAX or SIP URI members',
            'member_already_included': 'The member has been included already',
            'members_exceeded': 'You have reached the maximum allowed entries for the Phonebook',
            'message_empty': 'The SMS Message is empty',
            'message_not_found': 'The voicemail message was not found',
            'method_maintenance': 'This API method is under maintenance',
            'mismatch_email_confirm': 'e-mail confirm does not match with e-mail',
            'mismatch_password_confirm': 'Pasword confirm does not match with Password',
            'missing_account': 'Account was not provided',
            'missing_address': 'Address was not provided',
            'missing_agent_ring_timeout': 'Agent ring time out was not provided',
            'missing_allowedcodecs': 'Allowed Codecs were not provided',
            'missing_attachmessage': 'AttachMessage was not provided',
            'missing_authtype': 'Auth Type was not provided',
            'missing_balancemanagement': 'BalanceManagemente was not provided',
            'missing_billingtype': 'Billing Type was not provided',
            'missing_callback': 'Callback was not provided',
            'missing_callerid': 'CallerID was not provided',
            'missing_callhunting': 'Call hunting was not provided',
            'missing_carrier': 'Carrier was not provided',
            'missing_charge': 'Charge was not provided.',
            'missing_choices': 'Choices was not provided',
            'missing_city': 'City was not provided',
            'missing_client': 'Client was not provided',
            'missing_cnam': 'CNAM was not provided',
            'missing_codec': 'Codec was not provided',
            'missing_conference': 'Conference was not provided',
            'missing_country': 'Country was not provided',
            'missing_countryid': 'Country ID was not provided',
            'missing_credentials': 'Username or Password was not provided',
            'missing_datetime': 'DateTime value was not provided',
            'missing_delay_before': 'DelayBefore was not provided',
            'missing_deletemessage': 'DeleteMessage was not provided',
            'missing_description': 'Description was not provided',
            'missing_devicetype': 'Device Type was not provided',
            'missing_dialtime': 'Dialtime was not provided',
            'missing_did': 'DID was not provided',
            'missing_digits': 'Digits were not provided',
            'missing_digit_timeout': 'DigitTimeOut was not provided',
            'missing_disa': 'DISA was not provided',
            'missing_dtmfmode': 'DTMF Mode was not provided',
            'missing_email': 'e-mail was not provided',
            'missing_email_confirm': 'e-mail confirm was not provided',
            'missing_enable': 'Enable was not provided',
            'missing_endhour': 'End Hour was not provided',
            'missing_endminute': 'End Minute was not provided',
            'missing_failover_busy': 'Failover Busy was not provided',
            'missing_failover_noanswer': 'Failover NoAnswer was not provided',
            'missing_failover_unreachable': 'Failover Unreachable was not provided',
            'missing_file': 'File was not provided',
            'missing_filter': 'Filter was not provided',
            'missing_firstname': 'Firstname was not provided',
            'missing_folder': 'folder was not provided',
            'missing_forwarding': 'Forwarding was not provided',
            'missing_id': 'ID was not provided',
            'missing_if_announce_position_enabled_report_estimated_hold_time': (
                "'If announce position enabled report "
                "estimated hold time' type was not provided"
            ),
            'missing_internationalroute': 'International Route was not provided',
            'missing_ip': 'You need to provide an IP if you select IP Authentication Method',
            'missing_ip_h323': 'You must enter an IP Address for H.323',
            'missing_ivr': 'IVR was not provided',
            'missing_join_when_empty': "'JoinWhenEmpty' type was not provided",
            'missing_language': 'Language was not provided',
            'missing_lastname': 'Lastname was not provided',
            'missing_leave_when_empty': "'LeaveWhenEmpty' type was not provided",
            'missing_listened': 'Listened code was not provided',
            'missing_location': 'Location was not provided',
            'missing_lockinternational': 'Lock International was not provided',
            'missing_mailbox': 'Mailbox was not provided',
            'missing_members': 'You need at least 1 member to create a ring group',
            'missing_member': 'Member was not provided',
            'missing_message_num': 'Voicemail message number was not provided',
            'missing_method': 'Method must be provided when using the REST/JSON API',
            'missing_minute': 'Minute Rate was not provided',
            'missing_monthly': 'Monthly Fee was not provided',
            'missing_musiconhold': 'Music on Hold was not provided',
            'missing_name': 'Name was not provided',
            'missing_nat': 'NAT was not provided',
            'missing_number': 'Number was not provided',
            'missing_numbers': 'You must enter at least one valid phone number.',
            'missing_params': 'Required parameters were not provided',
            'missing_package': 'Package was not provided',
            'missing_password': 'Password was not provided',
            'missing_password_confirm': 'Password Confirm was not provided',
            'missing_payment': 'Payment was not provided.',
            'missing_phonebook': 'Phonebook was not provided',
            'missing_phonenumber': 'Phone Number was not provided',
            'missing_pin': 'PIN was not provided',
            'missing_playinstructions': 'PlayInstructions was not provided',
            'missing_priority': 'Priority was not provided',
            'missing_protocol': 'Protocol was not provided',
            'missing_province': 'Province was not provided',
            'missing_query': 'Query was not provided',
            'missing_recording': 'Recording was not provided',
            'missing_report_hold_time_agent': 'Report hold time agent was not provided',
            'missing_resellerclient': "Provide a Reseller Client or don't provide a Reseller Package",
            'missing_resellerpackage': "Provide a Reseller Package or don't provide a Reseller Client",
            'missing_response_timeout': 'ResponseTimeOut was not provided',
            'missing_ringgroup': 'Ring group was not provided',
            'missing_ring_inuse': 'Ring in use was not provided',
            'missing_ring_strategy': 'Ring strategy was not provided',
            'missing_route': 'Route was not provided',
            'missing_routing': 'Routing was not provided',
            'missing_saycallerid': 'SayCallerID was not provided',
            'missing_saytime': 'SayTime was not provided',
            'missing_serverpop': 'Server POP was not provided',
            'missing_setup': 'Setup Fee was not provided',
            'missing_sipuri': 'SIPURI was not provided',
            'missing_sms': 'SMS was not provided',
            'missing_skippassword': 'SkipPassword was not provided',
            'missing_speed_dial': 'Speed Dial was not provided',
            'missing_starthour': 'Start Hour was not provided',
            'missing_startminute': 'Start Minute was not provided',
            'missing_state': 'State was not provided',
            'missing_thankyou_for_your_patience': 'Thankyou for your patience was not provided',
            'missing_timecondition': 'Time Condition was not provided',
            'missing_timeout': 'Timeout was not provided',
            'missing_timezone': 'Timezone was not provided',
            'missing_type': 'Type was not provided',
            'missing_urgent': 'Urgent code was not provided',
            'missing_uri': 'URI was not provided',
            'missing_username': 'Username was not provided',
            'missing_voicemailsetup': 'Voice mail setup was not provided',
            'missing_weekdayend': 'Week End was not provide',
            'missing_weekdaystart': ' Week Start was not provided',
            'missing_priority_weight': ' Priority/Weight was not provided',
            'missing_zip': 'Zip Code was not provided',
            'moving_fail': 'The Fax Message was not moved',
            'name_toolong': 'The name exceeds character size limit',
            'non_sufficient_funds': 'Your account does not have sufficient funds to proceed',
            'no_account': 'There are no accounts',
            'no_attachments': 'Theres no attachments records to show.',
            'no_base64file': 'File not encoded in base64',
            'no_callback': 'There are not Callbacks',
            'no_callhunting': 'There are no Call Huntings',
            'no_callstatus': (
                'No Call Status was provided. One of the following parameters needs to be set to "1": '
                'answered, noanswer, busy, failed'
            ),
            'no_cdr': 'There are no CDR entries for the filter',
            'no_change_billingtype': 'Imposible change DID billing plan',
            'no_client': 'There are no Clients',
            'no_conference': 'There are no Conferences',
            'no_did': 'There are no DIDs',
            'no_disa': 'There are no DISAs',
            'no_filter': 'There are no Filters',
            'no_forwarding': 'There was no Forwarding',
            'no_ivr': 'There are no ivr',
            'no_mailbox': 'There are no Mailboxes',
            'no_message': 'There are no Fax Message(s)',
            'no_messages': 'There are no Voicemail Message(s)',
            'no_member': 'There are no Static Members',
            'no_numbers': 'There are no Fax Numbers',
            'no_package': 'there are no Packages',
            'no_phonebook': 'There are no Phonebook entries',
            'no_queue': 'There are no Queue entries',
            'no_rate': 'There are no Rates',
            'no_recording': 'There are no recordings',
            'no_ringgroup': 'There are no Ring groups',
            'no_sipuri': 'There are no SIP URIs',
            'no_sms': 'There are no SMS messages',
            'no_timecondition': 'There are no Time Conditions',
            'note_toolong': 'The note exceeds character size limit',
            'order_failed': "The order wasn't completed.",
            'provider_outofservice': 'One of our providers is out of service',
            'recording_in_use_did': 'You have a DID using this Recording',
            'recording_in_use_queue': 'You have a Calling Queue using this Recording',
            'recording_in_use_ivr': 'You have an IVR using this Recording',
            'recording_in_use_caller_id_filtering': 'You have a Caller ID Filtering using this Recording',
            'recording_in_use_caller_timecondition': 'You have a Time Condition using this Recording',
            'repeated_ip': 'You already have a Subaccount using this IP and Protocol',
            'reserved_ip': 'This is a reserved IP used by VoIP.ms or other Companies',
            'same_did_billingtype': 'The Billing Type provided and DID billing type are the same',
            'sipuri_in_phonebook': "This SIPURI can't be deleted, it is mapped in the phonebook",
            'sent_fail': "The Fax Message it wasn't send.",
            'sms_toolong': 'The SMS message exceeds 160 characters',
            'sms_failed': 'The SMS message was not sent',
            'tls_error': 'Theres was a TLS error, please try later.',
            'Unable_to_purchase': 'Unable to purchase DIDs',
            'unavailable_info': 'The information you requested is unavailable at this moment',
            'unsifficient_stock': 'Theres no sufficient stock to complete the order.',
            'used_description': 'You already have a record with this Description',
            'used_extension': 'You already have a subaccount using this extension',
            'used_filter': 'You already have a record with this Filter',
            'used_ip': 'There is already another customer using this IP Address',
            'used_name': 'You already have an entry using this name',
            'used_number': 'You already have a record with this Number',
            'used_password': 'This password has been used previously by this account.',
            'used_speed_dial': 'You have an entry with this Speed Dial',
            'used_username': 'You already have a subaccount using this Username.',
            'weak_password': 'This Password is too weak or too common'}
        err_desc = err_code_map[self.err_code] or self.err_code
        return "API Call failed as: {}".format(err_desc)


class VoipRestException(VoipException):
    def __str__(self):
        return self.err_code or "<empty message>"
