Untitled
unknown
plain_text
2 years ago
2.2 kB
11
Indexable
""" Check if script selects from sandbox(_analysts) schema """
import logging
import re
from scripts.validator.linters.dwh.common_dwh_linter_factory import common_dwh_linter_factory
from simple_ddl_parser import DDLParser
path = "../../../../../dwh/dm/cms_chat_message"
def sandbox_check(files: dict):
yml_pars = files["specification"]
yml_table_name = yml_pars.get('table-name', "")
logging.info(f"Наименование таблицы - {yml_table_name}")
colum_index = 0
errors = []
for yml_column_t in yml_pars['structure'][0]['column-name']:
yml_column = yml_pars['structure'][colum_index]['column-name']
yml_type = str.upper(yml_pars['structure'][colum_index]['data-type']).split('(')[0]
logging.info(f" {colum_index} Колонка - {yml_column}")
logging.info(f" {colum_index} Тип - {yml_type}")
check_colum_name = {
'BOOL': [r'^is_'],
'TIME': [r'time$'],
'UUID': [r'uuid$'],
'VARCHAR': [r'_nm$', r'_txt$', r'_hash$', r'_list$', r'_code$'],
'NUMERIC': [r'_amt$', r'_num$', r'_cnt$', r'_pct$', r'_rate$'],
'FLOAT': [r'_amt$', r'_num$', r'_cnt$', r'_pct$', r'_rate$'],
'TIMESTAMP': [r'_dttm$', r'_dt$'],
'DATA': [r'_dttm$', r'_dt$', r'date$']
}
if check_colum_name.get(yml_type, False):
correct = False
for check in check_colum_name[yml_type]:
if bool(re.search(check, yml_column, re.IGNORECASE)):
correct = True
break
if not correct:
logging.error(f"Для типа:{yml_type} поле:{yml_column}, не соответсвует правилам наименования")
colum_index += 1
if errors:
for error in errors:
logging.error(error)
return False
return True
common_check = common_dwh_linter_factory([sandbox_check])
common_check.set_path(path)
common_check.local_test()Editor is loading...
Leave a Comment