def _create_optimized_description(original_description: str, fields: Dict[str, Any]) -> str: """Appends the fields to the description. Args: original_description: The original product description. fields: the fields to be appended. Returns: The original description with as many fields as possible appended. """ if not fields: return original_description fields_to_append_to_description = [] for _, mined_attribute_values in fields.items(): if isinstance(mined_attribute_values, str): fields_to_append_to_description.append(mined_attribute_values) elif isinstance(mined_attribute_values, list): fields_to_append_to_description.extend(mined_attribute_values) field_with_keywords_appended = optimization_util.append_keywords_to_field( original_description, fields_to_append_to_description, len(original_description), _MAX_DESCRIPTION_LENGTH, constants.ALL_ALPHABETIC_CLOTHING_SIZES) return field_with_keywords_appended
def test_append_keywords_to_field_not_append_when_keywords_empty(self): target_field = 'dummy field' actual_output = optimization_util.append_keywords_to_field( target_field, [], 0, len(target_field)) self.assertEqual(target_field, actual_output)
def test_append_keywords_to_field_appends_when_keyword_is_in_allowlist_and_is_in_the_field( self): target_field = 'dummy field' actual_output = optimization_util.append_keywords_to_field( target_field, ['M'], 0, 100, allowlist=['M']) self.assertEqual('dummy field… M', actual_output)
def test_append_keywords_to_field_not_append_when_keywords_already_there( self, keywords, expected_output): target_field = 'dummy field' actual_output = optimization_util.append_keywords_to_field( target_field, keywords, 0, len(target_field)) self.assertEqual(expected_output, actual_output)
def test_append_keywords_to_field_append_keywords_after_removing_last_characters_when_length_exceeds_max( self, keywords, expected_output): target_field = 'dummy field' actual_output = optimization_util.append_keywords_to_field( target_field, keywords, 0, len(target_field)) self.assertEqual(expected_output, actual_output)
def test_append_keywords_to_field_append_keywords_when_length_under_max( self, keywords, expected_output): target_field = 'dummy field' actual_output = optimization_util.append_keywords_to_field( target_field, keywords, 0, 100) self.assertEqual(expected_output, actual_output)
def test_append_keywords_to_field_does_not_append_when_no_space_to_append( self): original_field = 'dummy field' keywords = ['keyword1', 'keyword2'] chars_to_preserve = len(original_field) actual_output = optimization_util.append_keywords_to_field( original_field, keywords, chars_to_preserve, len(original_field)) self.assertEqual(original_field, actual_output)
def test_append_keywords_to_field_does_not_truncate_description_if_field_can_fit_in_whitespace( self): original_field = 'dummy field' field_to_append = 'Field to append' keywords = [field_to_append] max_len = len(original_field) + len('… ') + len(field_to_append) expected_field = f'{original_field}… {field_to_append}' actual_output = optimization_util.append_keywords_to_field( original_field, keywords, 0, max_len) self.assertEqual(expected_field, actual_output)
def test_append_keywords_to_field_does_not_split_numbers_when_description_truncated_to_fit_attributes( self): original_title = 'Original title' appended_desc = 'Description 1.2g that can be truncated' original_field = f'{original_title}{appended_desc}' field_to_append = 'Field to append' max_len_modifier = 7 max_len = len(original_title) + (len(appended_desc) - max_len_modifier) expected_field = 'Original titleDescription… Field to append' actual_output = optimization_util.append_keywords_to_field( original_field, [field_to_append], len(original_title), max_len) self.assertEqual(expected_field, actual_output)
def test_append_keywords_to_field_truncates_description_if_field_cannot_fit_in_whitespace( self): original_title = 'Original title' appended_desc = 'Description that can be truncated' original_field = f'{original_title}{appended_desc}' field_to_append = 'Field to append' max_len_modifier = 5 max_len = len(original_title) + (len(appended_desc) - max_len_modifier) expected_field = 'Original titleDescription… Field to append' actual_output = optimization_util.append_keywords_to_field( original_field, [field_to_append], len(original_title), max_len) self.assertEqual(expected_field, actual_output)
def test_append_keywords_to_field_only_appends_fields_that_will_fit(self): original_field = 'dummy field' field_to_append = 'Field to append' field_that_is_too_long_to_append = ( 'Super long field that does not have' 'space to be appended') keywords = [field_that_is_too_long_to_append, field_to_append] chars_to_preserve = len(original_field) max_len = len(original_field) + 20 expected_field = f'{original_field}… {field_to_append}' actual_output = optimization_util.append_keywords_to_field( original_field, keywords, chars_to_preserve, max_len) self.assertEqual(expected_field, actual_output)
def _append_fields_to_title(product: Dict[str, Any], fields: List[str], chars_to_preserve: int) -> None: """Appends the fields to the title. Args: product: Product data. fields: the field values to be appended. chars_to_preserve: The num of chars to leave unchanged (used to make sure the original title is preserved). """ original_title = product.get('title', '') product['title'] = optimization_util.append_keywords_to_field( original_title, fields, chars_to_preserve, _MAX_TITLE_LENGTH, constants.ALL_ALPHABETIC_CLOTHING_SIZES) if product['title'] != original_title: logging.info('Modified item %s: Appended field values to title: %s', product['offerId'], product['title'])