| | import re |
| | from typing import Dict, List, Union |
| |
|
| |
|
| | def product_data_to_str(product_data: Dict[str, Union[str, List[str]]]) -> str: |
| | """ |
| | Convert product data to a string. |
| | |
| | Args: |
| | - product_data: a dictionary of product data |
| | |
| | Returns: |
| | - a string representation of the product data |
| | """ |
| | if product_data is None: |
| | return "" |
| |
|
| | data_list = [] |
| | for k, v in product_data.items(): |
| | data_line = None |
| | if isinstance(v, list): |
| | delimiter = "," |
| | for sub_v in v: |
| | if "," in sub_v: |
| | delimiter = ( |
| | ";" |
| | ) |
| |
|
| | for i, sub_v in enumerate(v): |
| | if ";" in sub_v: |
| | v[i] = f'"{sub_v}"' |
| |
|
| | data_line = f"{k}: {f'{delimiter} '.join(v)}" |
| | elif isinstance(v, str): |
| | data_line = f"{k}: {v}" |
| | else: |
| | raise ValueError( |
| | f"Unsupported data type for value of product data: {type(v)}. Only list and str are supported." |
| | ) |
| |
|
| | data_list.append(data_line) |
| |
|
| | return "\n".join(data_list) |
| |
|
| |
|
| | def to_snake_case(s): |
| | |
| | s = s.strip().lower() |
| | |
| | s = re.sub(r'[\s\-\.\+]', '_', s) |
| | |
| | s = re.sub(r'[^a-z0-9_]', '', s) |
| | |
| | s = re.sub(r'_+', '_', s) |
| | |
| | s = re.sub(r'^[0-9]+', '', s) |
| | |
| | if not s or not s[0].isalpha(): |
| | s = 'var_' + s |
| | return s |
| |
|