I'm getting Attribute error as below while calling BaseSocketDataHandler
class function by getting string from key name as string and converting it to method name with self.method_name = getattr(self, "self.__process_" + key.lower().replace(" ", "_"))
while iterating info_dict_map
AttributeError: 'DataHandler' object has no attribute 'self.__process_info'
I don't get why I am getting this error. Is it proper way to call an function by string, or I should do something else?
class BaseSocketDataHandler(object):
def __init__(self, sql_address, sql_user, sql_pswd, sql_db_name):
.....
self.db_connector = MySqlConnector(address=sql_address, suser=sql_user, spwd=sql_pswd, db_name=sql_db_name)
.....
self.info_dict = dict()
self.info_dict_map = {"date_time": (0, 12), "info_len": (12, 13), "info": (13, 14), "reserved": (36, 37)}
self.hex_data_dict = {"data_content": "0123456789abcdef10111213141516171819"
@staticmethod
def __convert_to_int(data):
return int(data, 16)
@staticmethod
def __process_reserved(data):
return data
def __process_date_time(self, date_time_in_hex):
date_time = tuple()
for x in date_time_in_hex:
date_time += self.__convert_to_int(x)
return date_time
def __process_info_len(self, info_len):
return self.__convert_to_int(info_len)
def __process_info(self, info):
return self.__convert_to_int(number_of_sat)
def make_info(self):
for key, val in self.info_dict_map.items():
method_name = getattr(self, "self.__process_" + key.lower().replace(" ", "_"))
key_var = key
setattr(self, key_var, method_name(self.hex_data_dict["data_content"][val[0]: val[1]]))
self._info_dict.update({key: key_var})
self.method_name = None
class DataHandler(BaseSocketDataHandler):
def __init__(self):
super(DataHandler, self).__init__(sql_address, sql_user, sql_pswd, sql_db_name)
def run_forever(self):
while True:
try:
self.make_info()
except Exception as uee:
self.log.exception(self._log_msg(uee))
break