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]]
Ejemplo n.º 2
0
 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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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')
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
    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]))