140 lines
6.0 KiB
Python
140 lines
6.0 KiB
Python
from src.system_var.constants import (COLUMNS_KEY, COLUMNS_TYPE,
|
|
DATE_PATTERN_YYYYMMDDTHHMMSSTZ,
|
|
DATETIME_COLUMN_DEFAULT_VALUE,
|
|
DATETIME_COLUMN_KEY,
|
|
DATETIME_COLUMN_TYPE, IS_SKIP_KEY,
|
|
IS_SKIP_TYPE,
|
|
IS_UPDATE_LAST_FETCH_DATETIME_KEY,
|
|
IS_UPDATE_LAST_FETCH_DATETIME_TYPE,
|
|
LAST_FETCH_DATETIME_FILE_NAME_KEY,
|
|
LAST_FETCH_DATETIME_FILE_NAME_TYPE,
|
|
LAST_FETCH_DATETIME_FROM_KEY,
|
|
LAST_FETCH_DATETIME_TO_KEY,
|
|
OBJECT_NAME_KEY, OBJECT_NAME_TYPE,
|
|
OBJECTS_KEY, OBJECTS_TYPE,
|
|
UPLOAD_FILE_NAME_KEY,
|
|
UPLOAD_FILE_NAME_TYPE)
|
|
from src.util.dict_checker import DictChecker
|
|
from src.util.execute_datetime import ExecuteDateTime
|
|
|
|
|
|
class FetchTargetObjects():
|
|
def __init__(self, object_info_file_dict) -> None:
|
|
self.__objects = object_info_file_dict
|
|
self.__dict_checker = DictChecker(self.__objects)
|
|
self.validate()
|
|
self.__i = 0
|
|
|
|
def __iter__(self):
|
|
return self
|
|
|
|
def __next__(self):
|
|
if self.__i == len(self.__objects[OBJECTS_KEY]):
|
|
raise StopIteration()
|
|
value = self.__objects[OBJECTS_KEY][self.__i]
|
|
self.__i += 1
|
|
return value
|
|
|
|
def validate(self) -> None:
|
|
self.__dict_checker.assert_key_exist(OBJECTS_KEY)
|
|
self.__dict_checker.assert_data_type(OBJECTS_KEY, OBJECTS_TYPE)
|
|
|
|
|
|
class TargetObject():
|
|
def __init__(self, object_info, execute_datetime: ExecuteDateTime) -> None:
|
|
self.__dict_checker = DictChecker(object_info)
|
|
self.__object_info = object_info
|
|
self.__execute_datetime = execute_datetime
|
|
self.__validate()
|
|
|
|
def __validate(self) -> None:
|
|
self.__validate_required_properties()
|
|
self.__validate_optional_properties()
|
|
|
|
return
|
|
|
|
def __validate_required_properties(self) -> None:
|
|
self.__dict_checker.assert_key_exist(OBJECT_NAME_KEY)
|
|
self.__dict_checker.assert_data_type(OBJECT_NAME_KEY, OBJECT_NAME_TYPE)
|
|
self.__dict_checker.assert_key_exist(COLUMNS_KEY)
|
|
self.__dict_checker.assert_data_type(COLUMNS_KEY, COLUMNS_TYPE)
|
|
|
|
return
|
|
|
|
def __validate_optional_properties(self) -> None:
|
|
if self.__dict_checker.check_key_exist(IS_SKIP_KEY):
|
|
self.__dict_checker.assert_data_type(IS_SKIP_KEY, IS_SKIP_TYPE)
|
|
|
|
if self.__dict_checker.check_key_exist(IS_UPDATE_LAST_FETCH_DATETIME_KEY):
|
|
self.__dict_checker.assert_data_type(IS_UPDATE_LAST_FETCH_DATETIME_KEY, IS_UPDATE_LAST_FETCH_DATETIME_TYPE)
|
|
|
|
if self.__dict_checker.check_key_exist(LAST_FETCH_DATETIME_FILE_NAME_KEY):
|
|
self.__dict_checker.assert_data_type(LAST_FETCH_DATETIME_FILE_NAME_KEY, LAST_FETCH_DATETIME_FILE_NAME_TYPE)
|
|
|
|
if self.__dict_checker.check_key_exist(UPLOAD_FILE_NAME_KEY):
|
|
self.__dict_checker.assert_data_type(UPLOAD_FILE_NAME_KEY, UPLOAD_FILE_NAME_TYPE)
|
|
|
|
if self.__dict_checker.check_key_exist(DATETIME_COLUMN_KEY):
|
|
self.__dict_checker.assert_data_type(DATETIME_COLUMN_KEY, DATETIME_COLUMN_TYPE)
|
|
|
|
return
|
|
|
|
@property
|
|
def object_name(self) -> str:
|
|
return self.__object_info[OBJECT_NAME_KEY]
|
|
|
|
@property
|
|
def columns(self) -> list:
|
|
return self.__object_info[COLUMNS_KEY]
|
|
|
|
@property
|
|
def is_skip(self) -> bool:
|
|
return self.__object_info[IS_SKIP_KEY] if self.__dict_checker.check_key_exist(IS_SKIP_KEY) else False
|
|
|
|
@property
|
|
def is_update_last_fetch_datetime(self) -> bool:
|
|
if self.__dict_checker.check_key_exist(IS_UPDATE_LAST_FETCH_DATETIME_KEY):
|
|
return self.__object_info[IS_UPDATE_LAST_FETCH_DATETIME_KEY]
|
|
return False
|
|
|
|
@property
|
|
def last_fetch_datetime_file_name(self) -> str:
|
|
if self.__dict_checker.check_key_exist(LAST_FETCH_DATETIME_FILE_NAME_KEY):
|
|
return self.__object_info[LAST_FETCH_DATETIME_FILE_NAME_KEY]
|
|
return f'{self.__object_info[OBJECT_NAME_KEY]}.json'
|
|
|
|
@property
|
|
def upload_file_name(self) -> str:
|
|
if self.__dict_checker.check_key_exist(UPLOAD_FILE_NAME_KEY):
|
|
return self.__object_info[UPLOAD_FILE_NAME_KEY].format(execute_datetime=self.__execute_datetime.format_date())
|
|
return f'{self.__object_info[OBJECT_NAME_KEY]}_{self.__execute_datetime.format_date()}'
|
|
|
|
@property
|
|
def datetime_column(self) -> str:
|
|
return self.__object_info[DATETIME_COLUMN_KEY] if self.__dict_checker.check_key_exist(DATETIME_COLUMN_KEY) else DATETIME_COLUMN_DEFAULT_VALUE
|
|
|
|
|
|
class LastFetchDatetime():
|
|
def __init__(self, last_fetch_datetime_file_dict, execute_datetime) -> None:
|
|
self.__dict_checker = DictChecker(last_fetch_datetime_file_dict)
|
|
self.__execute_datetime = execute_datetime
|
|
self.__last_fetch_datetime_file_dict = last_fetch_datetime_file_dict
|
|
self.__validate()
|
|
|
|
def __validate(self) -> None:
|
|
if self.__dict_checker.check_key_exist(LAST_FETCH_DATETIME_FROM_KEY):
|
|
self.__dict_checker.assert_match_pattern(LAST_FETCH_DATETIME_FROM_KEY, DATE_PATTERN_YYYYMMDDTHHMMSSTZ)
|
|
if self.__dict_checker.check_key_exist(LAST_FETCH_DATETIME_TO_KEY):
|
|
self.__dict_checker.assert_match_pattern(LAST_FETCH_DATETIME_TO_KEY, DATE_PATTERN_YYYYMMDDTHHMMSSTZ)
|
|
return
|
|
|
|
@property
|
|
def last_fetch_datetime_from(self) -> str:
|
|
return self.__last_fetch_datetime_file_dict[LAST_FETCH_DATETIME_FROM_KEY]
|
|
|
|
@property
|
|
def last_fetch_datetime_to(self) -> str:
|
|
if self.__dict_checker.check_key_exist(LAST_FETCH_DATETIME_TO_KEY):
|
|
return self.__last_fetch_datetime_file_dict[LAST_FETCH_DATETIME_TO_KEY]
|
|
return self.__execute_datetime
|