def test_keyword_lengths_vary_between_2_max_len(self): df2 = kw_generate(['one', 'two'], ['three', 'four'], max_len=2) self.assertEqual(set(df2['Keyword'].str.count(' ') + 1), {2}) df3 = kw_generate(['one', 'two'], ['three', 'four'], max_len=3) self.assertEqual(set(df3['Keyword'].str.count(' ') + 1), {2, 3}) df4 = kw_generate(['one', 'two'], ['three', 'four', 'five'], max_len=4) self.assertEqual(set(df4['Keyword'].str.count(' ') + 1), {2, 3, 4})
def test_keyword_lengths_vary_between_2_max_len(self): df2 = kw_generate(['one', 'two'], ['three', 'four'], max_len=2) self.assertEqual(set(df2['Keyword'].str.count(' ')+1), {2}) df3 = kw_generate(['one', 'two'], ['three', 'four'], max_len=3) self.assertEqual(set(df3['Keyword'].str.count(' ')+1), {2, 3}) df4 = kw_generate(['one', 'two'], ['three', 'four', 'five'], max_len=4) self.assertEqual(set(df4['Keyword'].str.count(' ')+1), {2, 3, 4})
def test_all_match_types_used(self): df_exact = kw_generate(['one'], ['two'], match_types=['Exact']) df_phrase = kw_generate(['one'], ['two'], match_types=['Phrase']) df_broad = kw_generate(['one'], ['two'], match_types=['Broad']) df_e_p_b = kw_generate(['one'], ['two'], match_types=['Exact','Phrase', 'Broad', 'Modified']) self.assertEqual(set(df_exact['Criterion Type']), {'Exact'}) self.assertEqual(set(df_phrase['Criterion Type']), {'Phrase'}) self.assertEqual(set(df_broad['Criterion Type']), {'Broad'}) self.assertEqual(set(df_e_p_b['Criterion Type']), {'Exact', 'Phrase', 'Broad'})
def test_right_combinatorics_fuction_selected(self): df_perm = kw_generate(['one', 'two'], ['three', 'four'], order_matters=True) self.assertTrue({'one three', 'three one'}.issubset(set(df_perm['Keyword']))) df_comb = kw_generate(['one', 'two'], ['three', 'four'], order_matters=False) self.assertFalse({'one three', 'three one'}.issubset(set(df_comb['Keyword'])))
def test_right_combinatorics_fuction_selected(self): df_perm = kw_generate(['one', 'two'], ['three', 'four'], order_matters=True) self.assertTrue({'one three', 'three one'} .issubset(set(df_perm['Keyword']))) df_comb = kw_generate(['one', 'two'], ['three', 'four'], order_matters=False) self.assertFalse({'one three', 'three one'} .issubset(set(df_comb['Keyword'])))
def test_all_match_types_used(self): df_exact = kw_generate(['one'], ['two'], match_types=['Exact']) df_phrase = kw_generate(['one'], ['two'], match_types=['Phrase']) df_broad = kw_generate(['one'], ['two'], match_types=['Broad']) df_e_p_b = kw_generate(['one'], ['two'], match_types=['Exact', 'Phrase', 'Broad', 'Modified']) self.assertEqual(set(df_exact['Criterion Type']), {'Exact'}) self.assertEqual(set(df_phrase['Criterion Type']), {'Phrase'}) self.assertEqual(set(df_broad['Criterion Type']), {'Broad'}) self.assertEqual(set(df_e_p_b['Criterion Type']), {'Exact', 'Phrase', 'Broad'})
def test_correct_permutations_are_generated(self): products = ['one', 'two'] words = ['three', 'four'] test_combs = [] for i in range(2, 4): for prod in products: for perm in permutations([prod] +words, i): if prod not in perm: continue test_combs.append(' '.join(perm)) df = kw_generate(products, words, match_types=['Exact'], order_matters=True) self.assertEqual(set(test_combs), set(df['Keyword']))
def test_correct_permutations_are_generated(self): products = ['one', 'two'] words = ['three', 'four'] test_combs = [] for i in range(2, 4): for prod in products: for perm in permutations([prod] + words, i): if prod not in perm: continue test_combs.append(' '.join(perm)) df = kw_generate(products, words, match_types=['Exact'], order_matters=True) self.assertEqual(set(test_combs), set(df['Keyword']))
def generate_kw_df(button, products, words, match_types, campaign_name, order_matters): if button and products and words and match_types and campaign_name: logging.info(msg=locals()) if products and words: product_list = list({x.strip() for x in products.split('\n') if x}) if '' in product_list: product_list.remove('') word_list = list({x.strip() for x in words.split('\n')}) return adv.kw_generate(product_list, word_list, match_types=match_types, order_matters=bool(order_matters), campaign_name=campaign_name).to_dict('records')
def test_returns_pd_dataframe(self): df = kw_generate(['one'], ['two'], order_matters=True) self.assertEqual(type(df), pd.core.frame.DataFrame) self.assertEqual(df.shape, (6, 5))
def test_raises_error_for_wrong_match_types(self): with self.assertRaises(ValueError): kw_generate(['one', 'two'], ['three', 'four'], match_types=['hello', 'world'])
def test_match_types_are_capitalized(self): df = kw_generate(['one', 'two'], ['three', 'four'], match_types=['eXact', 'PHRase', 'BRoad']) self.assertEqual(set(df['Criterion Type']), {'Exact', 'Phrase', 'Broad'})
def test_raises_error_for_wrong_max_len(self): with self.assertRaises(ValueError): kw_generate(['one', 'two'], ['three', 'four'], max_len=1)
def test_ad_group_names_capitalized(self): df = kw_generate(['oNe', 'TWO', 'THree', 'four', 'fivE'], ['six']) self.assertEqual(set(['One', 'Two', 'Three', 'Four', 'Five']), set(df['Ad Group']))
def test_all_products_in_final_result(self): products = {'One', 'Two', 'Three'} df = kw_generate(products, ['four', 'five']) self.assertEqual(products, set(df['Ad Group']))
def test_correct_column_names_used(self): headers = [ 'Campaign', 'Ad Group', 'Keyword', 'Criterion Type', 'Labels' ] df = kw_generate(['one', 'two'], ['three', 'four']) self.assertEqual(list(df.columns.values), headers)
def test_correct_campaign_name(self): df = kw_generate(['one', 'two'], ['three'], campaign_name='My_campaign') self.assertEqual(df['Campaign'][0], 'My_campaign') self.assertTrue(len(set(df['Campaign'])) == 1)
def test_correct_column_names_used(self): headers = ['Campaign', 'Ad Group', 'Keyword', 'Criterion Type', 'Labels'] df = kw_generate(['one', 'two'], ['three', 'four']) self.assertEqual(list(df.columns.values), headers)
def test_modified_adds_plus_sign_as_many_as_spaces(self): df = kw_generate(['one', 'two'], ['three'], match_types=['Modified']) self.assertTrue( all(df['Keyword'].str.count('\+') == df['Keyword'].str.count(' ') + 1)) self.assertTrue(set(df['Criterion Type']) == {'Broad'})
'border-radius': '12px', 'font-size': 18 }), html.Br(), html.Br(), dt.DataTable( id='output_df', editable=False, sortable=True, filterable=False, max_rows_in_viewport=10, columns=[ 'Campaign', 'Ad Group', 'Keyword', 'Criterion Type', 'Labels' ], rows=adv.kw_generate( [''], [''], match_types=['Broad']).to_dict('records')), html.Br(), html.A('Download Keywords', id='download_link', download="rawdata.csv", href="", target="_blank", n_clicks=0), html.Div(id='kw_df_summary', style={ 'width': '80%', 'margin-left': '5%' }) ], style={ 'width': '60%',
def test_modified_adds_plus_sign_as_many_as_spaces(self): df = kw_generate(['one', 'two'], ['three'], match_types=['Modified']) self.assertTrue(all(df['Keyword'].str.count(r'\+') == df['Keyword'].str.count(' ')+1)) self.assertTrue(set(df['Criterion Type']) == {'Broad'})
import advertools as adv print(adv.kw_generate(products=('Hackerrank'), words=['buy', 'coding'])) # print((adv.serp_goog('hackerrank', '004124293475798993048:uu7vpk6keyt', "AIzaSyDcn5WPaRmpPo7HVCN8nS9DLm-hliBNaxM",num=10))) # print(adv.extract_urls())