def __get_date_range_for_index_calculation__(self) -> list: date_range_values = self._access_layer.get_date_range_for_index( self._index) if self._df_index.shape[0] == 0: return date_range_values date_start = self._df_index.iloc[-1][CN.DATE] date_start = MyDate.get_date_str_from_datetime( MyDate.adjust_by_days(date_start, 1)) return [date_start, date_range_values[1]]
def get_data_dict_for_sale_relation_table(self, master_id: str): today_string = MyDate.get_date_str_from_datetime() return { SLDC.MASTER_ID: master_id, SLDC.CHILD_ID: self.sale_id, SLDC.START_DATE: today_string, SLDC.END_DATE: '', SLDC.LAST_CHECK_DATE: today_string, SLDC.COMMENT: 'First load' }
def insert_entity_category(self, entity_key: str, category_string: str): start_date = MyDate.get_date_str_from_datetime() if self._access_layer_entity_category.is_entity_key_available( entity_key): return self._access_layer_entity_category.update_category_list( entity_key, category_string, start_date) else: data_dict = self._access_layer_entity_category.get_insert_dict_for_keys( entity_key, category_string, start_date) print('insert_entity_category: {}'.format(data_dict)) return self._access_layer_entity_category.insert_data(data_dict)
def process_optimize_log_files(self): log_types_for_processing = self.__get_log_types_for_process_optimize_log_files__() date_compare = MyDate.get_date_str_from_datetime(MyDate.adjust_by_days(None, -7)) for log_type in log_types_for_processing: file_path = self.get_file_path_for_log_type(log_type) line_to_keep_list = [] with open(file_path, 'r') as file: for line in file.readlines(): log_line = FileLogLine(line) if log_line.is_valid: if log_line.date >= date_compare: line_to_keep_list.append(line) else: print('{}: Line not valid in log file: {}'.format(file_path, line)) MyFile(file_path).replace_file_when_changed(line_to_keep_list)
def __init_data_dict_entries__(self): self.set_value(SLDC.IS_MY_SALE, self._is_my_sale) self.set_value( SLDC.SOURCE, SLSRC.TUTTI_CH) # ToDo - get rid of Tutti.ch -- all platforms.... self.set_value(SLDC.SALE_STATE, SLST.OPEN) self.set_value(SLDC.PRODUCT_CATEGORY, '') self.set_value(SLDC.PRODUCT_SUB_CATEGORY, '') self.set_value(SLDC.DESCRIPTION, '') self.set_value(SLDC.PRICE, 0) self.set_value(SLDC.PRICE_SINGLE, 0) self.set_value(SLDC.PRICE_ORIGINAL, 0) self.set_value(SLDC.IS_OUTLIER, 0) self.set_value(SLDC.VISITS, 0) self.set_value(SLDC.BOOK_MARKS, 0) self.set_value(SLDC.LAST_CHECK_DATE, MyDate.get_date_str_from_datetime()) self.set_value(SLDC.COMMENT, '1. load')
def check_status_of_sales_in_database(self, process_counter: MyProcessCounter): self._access_layer_sale.reset_counters() today_str = MyDate.get_date_str_from_datetime() sale_ids = self._access_layer_sale.get_sale_ids_from_db_by_sale_state( SLST.OPEN) process_counter.processed_records = len(sale_ids) for idx, sale_id in enumerate(sale_ids): if idx % 100 == 0: print('{}/{}: Check_status_of_sales_in_database...'.format( idx + 1, len(sale_ids))) sale_available = self.can_sale_be_accessed_via_request_by_sale_id( sale_id) if not sale_available: process_counter.updated_records += 1 url = self._web_parser.get_url_for_sale_id(sale_id) print('{}/{}: {} - Result: {}'.format(idx + 1, len(sale_ids), url, sale_available)) self._access_layer_sale.change_sale_state( sale_id, SLST.VANISHED, today_str)
def check_similarity_against_master_sale(self, source_sale: SalesmanSale, similar_sales_in_db: list, change_in_db=False): child_id_master_id_list = [] for similar_sale_in_db in similar_sales_in_db: if self.are_sales_similar(source_sale, similar_sale_in_db, True): pass else: similar_sale_in_db.set_value(SLDC.SALE_STATE, SLST.DELETE) child_id_master_id_list.append( [similar_sale_in_db.sale_id, source_sale.sale_id]) print('child_id_master_id_list to be ended: {}'.format( child_id_master_id_list)) if change_in_db and len(child_id_master_id_list) > 0: current_date = MyDate.get_date_str_from_datetime() input_dict_list = [{ SLDC.CHILD_ID: entry[0], SLDC.MASTER_ID: entry[1], SLDC.END_DATE: current_date } for entry in child_id_master_id_list] self._access_layer_sale.insert_or_update_sale_relation_data( input_dict_list)
def write_sale_after_checks_to_db(self, sale: SalesmanSale, sale_master: SalesmanSale = None, enforce_writing=False): if not (self.sys_config.write_to_database or enforce_writing): return if not sale.is_sale_ready_for_sale_table(): return sale_dict = sale.get_data_dict_for_sale_table() sale_from_db = self.get_sale_from_db_by_sale_id(sale.sale_id) master_id = '' if sale_master is None else sale_master.sale_id if sale_from_db is None: self._access_layer_sale.insert_sale_data([sale_dict]) else: today_str = MyDate.get_date_str_from_datetime() if sale_from_db.last_check_date == today_str and not enforce_writing: return identical_check = SaleIdenticalCheck(sale, sale_from_db, number_from_db=2) if identical_check.are_identical: if sale_from_db.last_check_date != today_str: self.update_last_check_date(sale_from_db, today_str) else: sale_dict[SLDC.COMMENT] = 'Changes: {}'.format( identical_check.different_columns) sale_dict[ SLDC. START_DATE] = today_str # we change the start date since some changes.... self._access_layer_sale.insert_sale_data([sale_dict]) if master_id != '': self._access_layer_sale.insert_or_update_sale_relation_data( [sale.get_data_dict_for_sale_relation_table(master_id)])
def _init_cells_(self): user_label_div = MyHTML.div('my_user_label_div', 'Username:'******'my_user_name_div', 'Josef Sertl', False) date_str = MyDate.get_date_str_from_datetime(datetime.now()) time_str = MyDate.get_time_from_datetime(datetime.now()) login_label_div = MyHTML.div('my_login_label_div', 'Last login:'******'my_login_div', '{} {}'.format(date_str, time_str), False) sound_label_div = MyHTML.div('my_sound_label_div', 'Sound:', True, True) sound_div = MyHTML.div('my_sound_div', '', False) mode_label_div = MyHTML.div('my_mode_label_div', 'Mode:', True, True) mode_div = MyHTML.div('my_mode_div', '', False) max_buy_label_div = MyHTML.div('my_max_buy_label_div', 'Max buy value:', True, True) max_buy_div = MyHTML.div('my_max_buy_div', '', False) small_profit_label_div = MyHTML.div('my_small_profit_label_div', 'Small profit taking:', True, True) small_profit_div = MyHTML.div('my_small_profit_div', '', False) my_user_div = MyHTML.div_embedded([user_label_div, MyHTML.span(' '), user_div]) my_login_div = MyHTML.div_embedded([login_label_div, MyHTML.span(' '), login_date_time_div]) my_sound_div = MyHTML.div_embedded([sound_label_div, MyHTML.span(' '), sound_div]) my_mode_div = MyHTML.div_embedded([mode_label_div, MyHTML.span(' '), mode_div]) my_max_buy_div = MyHTML.div_embedded([max_buy_label_div, MyHTML.span(' '), max_buy_div]) my_small_profit_div = MyHTML.div_embedded([small_profit_label_div, MyHTML.span(' '), small_profit_div]) dash_board_title_div = MyHTML.div('my_dashboard_title_div', 'Pattern Detection Dashboard', inline=False) dash_board_sub_title_div = MyHTML.div('my_dashboard_sub_title_div', '', bold=False, color='red') time_label_div = MyHTML.div('my_time_label_div', 'Time:', True) time_value_div = MyHTML.div('my_time_div', '', False) time_div = MyHTML.div_embedded([time_label_div, MyHTML.span(' '), time_value_div]) last_refresh_label_div = MyHTML.div('my_last_refresh_label_div', 'Last refresh:', True) last_refresh_time_div = MyHTML.div('my_last_refresh_time_div', time_str) next_refresh_label_div = MyHTML.div('my_next_refresh_label_div', 'Next refresh:', True) next_refresh_time_div = MyHTML.div('my_next_refresh_time_div', time_str) last_refresh_div = MyHTML.div_embedded([last_refresh_label_div, MyHTML.span(' '), last_refresh_time_div]) next_refresh_div = MyHTML.div_embedded([next_refresh_label_div, MyHTML.span(' '), next_refresh_time_div]) http_connection_label_div = MyHTML.div('my_http_connection_label_div', 'Connection:', True, True) http_connection_div = MyHTML.div('my_http_connection_div', MyHttpClient.get_status_message(), False) my_http_connection_div = MyHTML.div_embedded([http_connection_label_div, MyHTML.span(' '), http_connection_div]) online_trade_label_div = MyHTML.div('my_online_trade_label_div', 'Trades - Online:', True) online_trade_active_div = MyHTML.div('my_online_trade_active_div', '0') online_trade_all_div = MyHTML.div('my_online_trade_all_div', '0') stored_trade_label_div = MyHTML.div('my_stored_trade_label_div', 'Trades - Replay:', True) stored_trade_div = MyHTML.div('my_stored_trade_div', '0') stored_pattern_label_div = MyHTML.div('my_stored_pattern_label_div', 'Pattern - Replay:', True) stored_pattern_div = MyHTML.div('my_stored_pattern_div', '0') trade_div = MyHTML.div_embedded([stored_trade_label_div, MyHTML.span(' '), stored_trade_div]) pattern_div = MyHTML.div_embedded([stored_pattern_label_div, MyHTML.span(' '), stored_pattern_div]) real_online_trade_label_div = MyHTML.div('my_real_online_trade_label_div', 'Trades - real:', True) real_online_trade_div = MyHTML.div('my_real_online_trade_div', '') simulation_online_trade_label_div = MyHTML.div('my_simulation_online_trade_label_div', 'Trades - simul.:', True) simulation_online_trade_div = MyHTML.div('my_simulation_online_trade_div', '') online_div = MyHTML.div_embedded([ online_trade_label_div, MyHTML.span(' '), online_trade_active_div, MyHTML.span('/'), online_trade_all_div], inline=True) real_online_trade_div = MyHTML.div_embedded( [real_online_trade_label_div, MyHTML.span(' '), real_online_trade_div]) simulation_online_trade_div = MyHTML.div_embedded( [simulation_online_trade_label_div, MyHTML.span(' '), simulation_online_trade_div]) self.set_value(1, 1, MyHTML.div_embedded([my_user_div, my_login_div, my_sound_div, my_mode_div, my_max_buy_div, my_small_profit_div])) self.set_value(1, 2, MyHTML.div_embedded([dash_board_title_div, dash_board_sub_title_div])) self.set_value(1, 3, MyHTML.div_embedded([time_div, next_refresh_div, last_refresh_div, my_http_connection_div])) self.set_value(2, 1, MyDCC.markdown('my_position_markdown')) self.set_value(2, 2, MyDCC.markdown('my_dashboard_markdown')) self.set_value(2, 3, MyHTML.div_embedded( [online_div, trade_div, pattern_div, real_online_trade_div, simulation_online_trade_div]))