Tested changes:
[Pavel Milanes (CO7WT) pavelmc@gmail.com] [PATCH][Feature] Add the know clones of the btech with the new alias feature, fixes #3749
This patch explicitly adds the following Btech clones to the UI: * Jetstream JT2705M * Juentai JT-6188 Mini * Juentai JT-6188 Plus * Sainsonic GT-890
This radios do show properly now in the download/upload dialog as vendor/model, this will ease the handling of clones in the user side.
But it has a catch and the users will be notified on the chirp_user list: when you opens a saved image of a clone it will show in Chirp as the real radio, not the clone.
73 Pavel CO7WT
[Dan Smith dsmith@danplanet.com] Add radio alias support
This introduces a small class called Alias which defines the identifying attributes of a radio model. Radio inherits from that, and also has a list of ALIASES that can be zero or more of those classes. When we construct the clone box where a user chooses a model, show them all the models, including aliases.
#0
[Pavel Milanes (CO7WT) pavelmc@gmail.com] [PATCH][KT-8900R] Fix the second ID to cope with a new variant, fixes #3547
The latest added variant has the second ID without the leading spaces, instead it's filled with '123456'
We removed the leading spaces as the ID is the same of the others but they changed the leding spaces.
[Nathan Crapo nathan@n4nc3o.com] Make radio model identification for TH-7800 and TH-9800 more specific so they don't interfere with each other, or completely different radios. The TH-7800 was ahead of the TH-9800 in the list of Radios to identify against, so Chirp would use it for TH-7800 _and_ TH-9800 radios. This patch makes both TH-7800 and TH-9800 drivers check their model more carefully so order of Radios Classes doesn't matter. It's more robust that way.
TH-7800 seems to use "TH9800" for a model string too. Check for a "TH9800" _or_ "TH7800" string in the th7800.py driver in case TYT doesn't consistently set the model or in case owners change their model name.
Fixes #3737.
Full log:
Started by an SCM change Building in workspace /var/lib/jenkins/jobs/chirp-test/workspace [workspace] $ hg showconfig paths.default [workspace] $ hg pull --rev default [workspace] $ hg update --clean --rev default 6 files updated, 0 files merged, 0 files removed, 0 files unresolved [workspace] $ hg log --rev . --template {node} [workspace] $ hg log --rev . --template {rev} [workspace] $ hg log --rev c26bf979eff5f68e4504d3577e91d205556f4017 [workspace] $ hg log --template "<changeset node='{node}' author='{author|xmlescape}' rev='{rev}' date='{date}'><msg>{desc|xmlescape}</msg><added>{file_adds|stringify|xmlescape}</added><deleted>{file_dels|stringify|xmlescape}</deleted><files>{files|stringify|xmlescape}</files><parents>{parents}</parents></changeset>\n" --rev default:0 --follow --prune c26bf979eff5f68e4504d3577e91d205556f4017 No emails were triggered. [workspace] $ /bin/sh -xe /tmp/hudson4304353312775718957.sh [workspace] $ /bin/sh -xe /tmp/hudson6332999146587888929.sh + PATH=/usr/bin:/bin:/usr/local/bin ./run_all_tests.sh test_bit_array (tests.unit.test_bitwise.TestBitType) ... ok test_bit_array_fail (tests.unit.test_bitwise.TestBitType) ... ok test_bitfield_u16 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok test_bitfield_u24 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok test_bitfield_u8 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok test_bitfield_ul16 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok test_bitfield_ul24 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok test_bbcd (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok test_bbcd_array (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok test_lbcd (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok test_lbcd_array (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok test_int_array (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok test_type_u16 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok test_type_u24 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok test_type_u32 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok test_type_u8 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok test_type_ul16 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok test_type_ul24 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok test_type_ul32 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok test_char (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok test_string (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok test_string_invalid_chars (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok test_string_wrong_length (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok test_comment_cppstyle (tests.unit.test_bitwise.TestBitwiseComments) ... ok test_comment_inline_cppstyle (tests.unit.test_bitwise.TestBitwiseComments) ... ok test_missing_semicolon (tests.unit.test_bitwise.TestBitwiseErrors) ... ok test_seek (tests.unit.test_bitwise.TestBitwiseSeek) ... ok test_seekto (tests.unit.test_bitwise.TestBitwiseSeek) ... ok test_struct_one_element (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok test_struct_two_elements (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok test_struct_writes (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok split_tone_encode_test_cross_dtcs_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok split_tone_encode_test_cross_none_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok split_tone_encode_test_cross_none_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok split_tone_encode_test_cross_tone_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok split_tone_encode_test_cross_tone_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok split_tone_encode_test_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok split_tone_encode_test_none (tests.unit.test_chirp_common.TestSplitTone) ... ok split_tone_encode_test_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok split_tone_encode_test_tsql (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_cross_dtcs_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_cross_dtcs_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_cross_none_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_cross_none_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_cross_tone_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_cross_tone_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_none (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_tsql (tests.unit.test_chirp_common.TestSplitTone) ... ok test_fix_rounded_step_250 (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_fix_rounded_step_500 (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_fix_rounded_step_750 (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_is_12_5 (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_is_2_5 (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_is_5_0 (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_is_6_25 (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_is_fractional_step (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_required_step (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_required_step_fail (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_format_freq (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok test_parse_freq_bad (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok test_parse_freq_decimal (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok test_parse_freq_whitespace (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok test_parse_freq_whole (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok test_ensure_has_calls_almost_full (tests.unit.test_import_logic.DstarTests) ... ok test_ensure_has_calls_empty (tests.unit.test_import_logic.DstarTests) ... ok test_ensure_has_calls_partial (tests.unit.test_import_logic.DstarTests) ... ok test_ensure_has_calls_rptcall_full1 (tests.unit.test_import_logic.DstarTests) ... ok test_ensure_has_calls_rptcall_full2 (tests.unit.test_import_logic.DstarTests) ... ok test_ensure_has_calls_urcall_full (tests.unit.test_import_logic.DstarTests) ... ok test_import_bank (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_dtcs_diffA_dtcs (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_dtcs_diffB_dtcs (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_duplex_negative (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_duplex_too_big_vhf (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_duplex_uhf (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_duplex_vhf (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_mem (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_mem_with_errors (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_mem_with_warnings (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_mode_invalid (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_mode_valid_am (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_mode_valid_fm (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_name (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_power_closest (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_power_no_dst (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_power_no_src (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_power_same (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_tone_diffA_tsql (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_tone_diffB_tsql (tests.unit.test_import_logic.ImportFieldTests) ... ok test_mapping (tests.unit.test_mappingmodel.TestBaseBank) ... ok test_mapping_eq (tests.unit.test_mappingmodel.TestBaseBank) ... ok test_base_class (tests.unit.test_mappingmodel.TestBaseBankModel) ... ok test_get_name (tests.unit.test_mappingmodel.TestBaseBankModel) ... ok test_mapping (tests.unit.test_mappingmodel.TestBaseMapping) ... ok test_mapping_eq (tests.unit.test_mappingmodel.TestBaseMapping) ... ok test_base_class (tests.unit.test_mappingmodel.TestBaseMappingModel) ... ok test_get_name (tests.unit.test_mappingmodel.TestBaseMappingModel) ... ok test_base_class (tests.unit.test_mappingmodel.TestBaseMappingModelIndexInterface) ... ok test_add_memory_to_mapping (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok test_get_mapping_memories (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok test_get_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok test_get_memory_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok test_get_num_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok test_remove_memory_from_mapping (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok test_remove_memory_from_mapping_no_bank (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok test_remove_memory_from_mapping_wrong_bank (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok test_icom_bank (tests.unit.test_mappingmodel.TestIcomBanks) ... ok test_mapping (tests.unit.test_mappingmodel.TestIcomBanks) ... ok test_mapping_eq (tests.unit.test_mappingmodel.TestIcomBanks) ... ok test_add_memory_to_mapping (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_get_index_bounds (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_get_mapping_memories (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_get_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_get_memory_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_get_memory_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_get_next_mapping_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_get_num_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_remove_memory_from_mapping (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_remove_memory_from_mapping_no_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_remove_memory_from_mapping_wrong_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_set_memory_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_set_memory_index_bad_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_set_memory_index_bad_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_auto_tone_mode_cross (tests.unit.test_memedit_edits.TestEdits) ... ok test_auto_tone_mode_dtcs (tests.unit.test_memedit_edits.TestEdits) ... ok test_auto_tone_mode_dtcs_pol (tests.unit.test_memedit_edits.TestEdits) ... ok test_auto_tone_mode_dtcs_rx (tests.unit.test_memedit_edits.TestEdits) ... ok test_auto_tone_mode_tone (tests.unit.test_memedit_edits.TestEdits) ... ok test_auto_tone_mode_tsql (tests.unit.test_memedit_edits.TestEdits) ... ok test_init (tests.unit.test_platform.Win32PlatformTest) ... ok test_serial_ports_bad_portnames (tests.unit.test_platform.Win32PlatformTest) ... ok test_serial_ports_sorted (tests.unit.test_platform.Win32PlatformTest) ... ok test_apply_callback (tests.unit.test_settings.TestSettingContainers) ... ok test_radio_setting (tests.unit.test_settings.TestSettingContainers) ... ok test_radio_setting_group (tests.unit.test_settings.TestSettingContainers) ... ok test_radio_setting_multi (tests.unit.test_settings.TestSettingContainers) ... ok test_changed (tests.unit.test_settings.TestSettingValues) ... ok test_radio_setting_value_boolean (tests.unit.test_settings.TestSettingValues) ... ok test_radio_setting_value_float (tests.unit.test_settings.TestSettingValues) ... ok test_radio_setting_value_integer (tests.unit.test_settings.TestSettingValues) ... ok test_radio_setting_value_list (tests.unit.test_settings.TestSettingValues) ... ok test_radio_setting_value_string (tests.unit.test_settings.TestSettingValues) ... ok test_validate_callback (tests.unit.test_settings.TestSettingValues) ... ok test_delete_hole_with_all (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok test_delete_hole_with_all_full (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok test_delete_hole_with_hole (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok test_delete_hole_without_hole (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok test_insert_hole_with_space (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok test_insert_hole_without_space (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
---------------------------------------------------------------------- Ran 151 tests in 0.050s
OK FAIL: Please keep commit message lines to <80 columns Checking for PEP8 regressions... ./chirp/drivers/ft60.py:521:45: W291 trailing whitespace ./chirp/drivers/ft60.py:522:25: E128 continuation line under-indented for visual indent ./chirp/drivers/ft60.py:523:13: E301 expected 1 blank line, found 0 ./chirp/drivers/ft817.py:587:41: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:684:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:688:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:691:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:692:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:695:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:696:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:699:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:702:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:705:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:708:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:711:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:714:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:717:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:720:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:721:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:724:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:725:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:728:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:731:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:732:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:735:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:736:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:739:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:740:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:743:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:744:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:747:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:750:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:753:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:754:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:757:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:758:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:761:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:764:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:767:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:768:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:771:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:772:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:775:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:776:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:779:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:782:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:783:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:786:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:789:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:790:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:793:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:794:29: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:810:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:811:31: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:814:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:817:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:821:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:827:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:832:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:836:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:840:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:844:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:848:25: E128 continuation line under-indented for visual indent ./chirp/drivers/kguv8d.py:893:25: E128 continuation line under-indented for visual indent ./chirp/drivers/thd72.py:188:1: E302 expected 2 blank lines, found 1 ./chirp/drivers/thd72.py:203:23: E201 whitespace after '[' ./chirp/drivers/thd72.py:203:80: E501 line too long (171 > 79 characters) ./chirp/drivers/thd72.py:203:170: E202 whitespace before ']' ./chirp/drivers/thd72.py:204:13: E201 whitespace after '[' ./chirp/drivers/thd72.py:204:61: E202 whitespace before ']' ./chirp/drivers/thd72.py:205:23: E201 whitespace after '[' ./chirp/drivers/thd72.py:205:74: E202 whitespace before ']' ./chirp/drivers/thd72.py:206:18: E201 whitespace after '[' ./chirp/drivers/thd72.py:206:65: E202 whitespace before ']' ./chirp/drivers/thd72.py:595:1: W293 blank line contains whitespace ./chirp/drivers/thd72.py:603:1: W293 blank line contains whitespace ./chirp/ui/mainapp.py:637:13: E128 continuation line under-indented for visual indent ./chirp/ui/mainapp.py:651:5: E303 too many blank lines (2) ./chirp/ui/mainapp.py:1354:80: E501 line too long (81 > 79 characters) ./chirp/ui/mainapp.py:1358:80: E501 line too long (80 > 79 characters) ./chirp/ui/mainapp.py:1643:80: E501 line too long (85 > 79 characters)
real 0m7.521s user 0m7.372s sys 0m0.072s ================================================ Tests FAILED: style tests, driver tests Build step 'Execute shell' marked build as failure Email was triggered for: Failure Sending email for trigger: Failure