def main(): """ main test the FileUtil class. """ file1 = FileUtil('test_file.txt') print "\n\nself.readlines():" print file1.readlines() clean_list = file1.readlines_clean() print "\n\nself.readlines_clean():" print clean_list file1.replace_string_in_file("alon", "ilan") print "\n\nself.replace_string_in_file('alon', 'ilan'):" print file1.readlines() print "\n\nself.return_string_in_lines('ilan\\S*'):" print file1.return_string_in_lines("ilan\\S*") file1.append_file("THIS IS THE APPENDED LINE") print "\n\nself.append_file('THIS IS THE APPENDED LINE'):" print file1.readlines() file2 = FileUtil('output_file.csv') input_list = file1.readlines() file2.create_csv_file_from_list(input_list) file3 = FileUtil('output_file.bak') file3.writelines(file1.readlines()) print "\n\nSelf.writelenes('output_file.bak') \n\n" print "Colums 2, delimetar=' ':", file1.read_column(1, " "), "\n\n"
def test_fully_qualified_path(self): # Test 1, Windows (should be unchanged) path1 = r'c:\temp\subdir\subsubdir' with mock.patch('platform.system') as mocked_platform: mocked_platform.return_value = 'Windows' mocked_fu = FileUtil() exp1 = path1 + mocked_fu.separator + self.fn self.assertEqual( exp1, mocked_fu.fully_qualified_path(dirPath=path1, filename=self.fn), 'Test 1 fail') # Test 2, Linux without the leading / test2 = r'dir/to/path' # Test 3, Linux with the leading / (should be unchanged) with mock.patch('platform.system') as mocked_platform: mocked_platform.return_value = 'Linux' mocked_fu = FileUtil() exp2 = mocked_fu.separator + test2 + mocked_fu.separator + self.fn self.assertEqual( exp2, mocked_fu.fully_qualified_path(dirPath=test2, filename=self.fn, dir_path_is_array=False), "Test 2 fail") test3 = mocked_fu.separator + test2 exp3 = test3 + mocked_fu.separator + self.fn self.assertEqual( exp3, mocked_fu.fully_qualified_path(dirPath=test3, filename=self.fn, dir_path_is_array=False), "Test 3 fail")
def test_is_windows(self): with mock.patch('platform.system') as mocked_platform: mocked_platform.return_value = 'Linux' mocked_fu = FileUtil() test1 = mocked_fu.is_Windows self.assertFalse(test1) with mock.patch('platform.system') as mocked_platform: mocked_platform.return_value = 'Windows' mocked_fu = FileUtil() self.assertTrue(mocked_fu.is_Windows)
def __init__(self): self.filename = None self.worksheetName = None self._df = None self._fu = FileUtil() # make the df display look better: https://stackoverflow.com/questions/11707586/how-do-i-expand-the-output-display-to-see-more-columns-of-a-pandas-dataframe pd.set_option('display.max_rows', 100) pd.set_option('display.max_columns', 50) pd.set_option('display.width', 800)
def get_worksheets(self, excelFileName=None): if excelFileName: self.filename = excelFileName fu = FileUtil() if fu.file_exists(self.filename): xl = pd.ExcelFile(self.filename) return xl.sheet_names else: logger.error(f'Cannot find Excel file {self.filename}.') return None
def __init__(self, *args, **kwargs): super(Test_FileUtil, self).__init__(*args, **kwargs) self.path = r'c:\temp' if platform.system() == 'Windows' else r'/tmp' self._fu = FileUtil() self._du = DateUtil() self.features_dict = { 'book': "Hitchhiker's Guide", 'characters': { 'answer': 42, 'name': 'Dent. Arthur Dent.' } }
def executing_directory(self) -> str: """ Get the current executing directory using executing_file and stripping off the filename. Note differences between Windows and Linux. :return: """ fu = FileUtil() path, _ = fu.split_qualified_path(self.executing_file()) logger.debug(f'executing file is {self.executing_file()}') logger.debug(f'path (minus filename) is {path}') return path
def test_qualified_path(self): # Test 1. Normal case. expected = self.path + sep + self.fn actual = self._fu.qualified_path(self.path, self.fn) self.assertEqual(actual, expected, "Test 1 fail") # Test 2. Using an array and a Linux mock. with mock.patch('platform.system') as mocked_platform: mocked_platform.return_value = 'Windows' mocked_fu = FileUtil() dir_to_path = mocked_fu.separator.join( ['C:', 'dir', 'to', 'path']) # should be C:\dir\to\path for Windows pathArray = dir_to_path.split(mocked_fu.separator) expected = dir_to_path + mocked_fu.separator + self.fn self.assertEqual( expected, mocked_fu.fully_qualified_path(pathArray, self.fn, dir_path_is_array=True), "Test 2 fail") # Test 3, using a windows path with a drive exp3 = r'c:\temp\subdir\subsubdir' exp3_array = exp3.split(_BACKSLASH) test3_with_fn = deepcopy(exp3_array) test3_with_fn.append(self.fn) test3 = _BACKSLASH.join(test3_with_fn) with mock.patch('platform.system') as mocked_platform: mocked_platform.return_value = 'Windows' mocked_fu = FileUtil() actual = mocked_fu.qualified_path(dirPath=exp3_array, filename=self.fn, dir_path_is_array=True) self.assertEqual(test3, actual, "Test 3 fail")
def test_write_excel(self): pu = PandasUtil() fu = FileUtil() df = self.my_test_df() fn = self.fu.qualified_path(self.path, self.spreadsheet_name) yaml_dict = {'outputFile': fn, 'worksheet': self.worksheet_name} fu.dump_yaml(Test_ApplicationUtil.excel_qual_path, yaml_dict) app = MyApplication(Test_ApplicationUtil.excel_qual_path) app.write_excel(df=df, output_file_yaml_entry='outputFile', worksheet=self.worksheet_name) actual = pu.read_df_from_excel(excelFileName=fn, excelWorksheet=self.worksheet_name) assert_frame_equal(df, actual)
class BotEngine: def __init__(self,driver): self.driver = driver start= datetime.now() logfileName=start.strftime("%Y-%m-%d-%H-%M-%S")+'.log' logging.basicConfig(filename=logfileName,level=logging.INFO , format='%(asctime)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S') recentSignals={'forexsignalzz':0, 'amirFX_signal':0, 'FOR3X_SIGNAL':0, 'Eagl777':0 , 'WallstreetFXsignals':0, 'wolfofforexplus':0, 'light_forex':0, 'FXMZ51':0, 'signallforex123':0, 'professoroff':0 #'WSSignals':0 #,'blue_forex_signals':0 } #recentSignals={ 'blue_forex_signals':0} signalVendors={'a': 1} utils = Utils() fileUtil = FileUtil() #{'Forex signals': 'GforexSignalsIr'} def setListOfVendors(self): self.signalVendors.update({'amirFX_signal':[ GforexSignalsIr(self.driver),'TAKE PROFIT']}) self.signalVendors['FOR3X_SIGNAL'] = [FOR3X_SIGNAL(self.driver),'sl tp'] self.signalVendors['signalTest']= [Eagl777(self.driver),'sl tp'] self.signalVendors['Eagl777']= [Eagl777(self.driver),'sl tp'] self.signalVendors['WallstreetFXsignals']= [WallstreetFXsignals(self.driver),'Trade Alert!'] self.signalVendors['wolfofforexplus']= [wolfofforexplus(self.driver),'stop loss take profit'] self.signalVendors['forexsignalzz']=[forexsignalzz(self.driver),'new signal'] self.signalVendors['light_forex']=[light_forex(self.driver),'sl tp'] self.signalVendors['FXMZ51'] = [FXMZ51(self.driver),'@ s/ t/'] self.signalVendors['professoroff'] = [professoroff(self.driver),'tp sl'] self.signalVendors['signallforex123'] = [signallforex123(self.driver),'tp sl'] #self.signalVendors['blue_forex_signals']=[blue_forex_signals(self.driver),'at.'] #self.signalVendors['WSSignals']=[WSSignals(self.driver),'sl tp'] #self.signalVendors['AmirFx VIP signal'] = [GforexSignalsIr(self.driver),'TAKE PROFIT'] def getNewMessage(self): coutner=1; while(coutner >0): try: sleep(1) for key in self.recentSignals: try: newMessages=self.find_last_update_time(key) #return last two messages webElement-time print('before getting time') logging.info('%s new update is %s last update is %s', key,newMessages[0], self.recentSignals[key]) if newMessages == None or newMessages[0] == self.recentSignals[key] : print('repeated signal for '+key+' provider') logging.info('%s repeated signal',key) continue else: print('%s preparing new signal started in signalFinder!',key) logging.info('%s get new signal',key) provider=self.signalVendors[key][0] self.recentSignals[key] = newMessages[0] sleep(2) signalTxtArr=self.get_message(key,self.signalVendors[key][1]) if signalTxtArr != [] : for sigTxt in signalTxtArr : # when more than one valid message founded logging.info('%s signal text is : %s',key,sigTxt ) signalObjs= provider.createSignalDto(sigTxt,key) if(signalObjs[0].enterPrice !=0): for signal in signalObjs.values(): # when more than one signal exists in a message if(signal !=0): signal.vol = 0.01 self.fileUtil.writeOnFile("s",signal) sleep(10) else: logging.error('%s why here!!',key) print('why here!!????') self.recentSignals[key]=0 except IndexError: # INNER TRY print('in INNER index error signalFinder: %s',key) logging.error('%s in INNER except signalFinder: %s',key,sys.exc_info()[0]) self.recentSignals[key]=0 print(sys.exc_info()[0]) continue except : print('in INNER expect error signalFinder: %s',key) print(sys.exc_info()[0]) continue except : # outer try print('in OUTER except signalFinder: ') self.recentSignals[key]=0 print(sys.exc_info()[0]) logging.error('%s in outer except signalFinder: %s',key,sys.exc_info()[0]) continue def find_last_update_time(self, chName): print('start finding last update time') c1=5 while c1>0: try: elem= self.driver.find_element_by_xpath("//input[contains(@class,'im_dialogs_search_field')]") sleep(2) elem.clear() elem.send_keys(chName) sleep(5) break; except : sleep(2) c1-=1 c2=5 while c2>0: try: self.driver.find_elements_by_xpath("//div[@class='im_dialogs_col']//li[contains(@class,'im_dialog_wrap')]/a")[0].click() sleep(2) break; except : sleep(2) c2-=1 c3=5 while c3>0: try: firstLastMessageTime = self.driver.find_elements_by_xpath("//div[@class='im_history_messages_peer' and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap') and not(contains(@class,'ng-hide'))]//span[@class='im_message_date_text nocopy']")[-1].get_attribute('data-content') if firstLastMessageTime == '8:07:48 AM' : print('aaaaaa') sleep(2) break; except: sleep(2) c3-=1 try: secondLastMessageTime = self.driver.find_elements_by_xpath("//div[@class = 'im_history_messages_peer' and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap') and not(contains(@class,'ng-hide'))]//span[@class='im_message_date_text nocopy']")[-2].get_attribute('data-content') if firstLastMessageTime == '8:07:48 AM' : print('aaaaaa') except : secondLastMessageTime="" print('no second message') # providerCH=self.driver.find_elements_by_xpath("//span/ancestor::a[@class='im_dialog']")[0] # sleep(2) # last_time=providerCH.find_element_by_xpath("//div[@class='im_dialog_date']").text #self.driver.find_elements_by_xpath("//span/ancestor::a[@class='im_dialog']//div[@class='im_dialog_date']")[0].text sleep(2) print('end of finding last update time') return [firstLastMessageTime ,secondLastMessageTime] def get_message(self, chName, identityStr): print('getting signal from '+chName+' started') logging.info('%s getting signal message started',chName) try: result1=self.driver.find_elements_by_xpath("//div[@class='im_history_messages_peer' and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap')]//div[@class='im_message_text']")[-1].text time1= self.driver.find_elements_by_xpath("//div[@class='im_history_messages_peer' and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap')]//span[contains(@class,'im_message_date_text')]")[-1].get_attribute('data-content') results =[[result1,time1]] sleep(2) try: result2=self.driver.find_elements_by_xpath("//div[@class='im_history_messages_peer' and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap')]//div[@class='im_message_text']")[-2].text time2= self.driver.find_elements_by_xpath("//div[@class='im_history_messages_peer' and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap')]//span[contains(@class,'im_message_date_text')]")[-2].get_attribute('data-content') results.append([result2,time2]) except : print(sys.exc_info()[0]) print("not second message") try: result3 = self.driver.find_elements_by_xpath("//div[@class = 'im_history_messages_peer' and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap') and not(@style='display: none;')]//div[contains(@class,'im_message_media')]//div[@class='im_message_photo_caption' and not(@style='display: none;')]")[-1].text time3 = self.driver.find_elements_by_xpath("//div[@class ='im_history_messages_peer' and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap') and not(@style='display: none;')]//div[contains(@class,'im_message_media')]//div[@class='im_message_photo_caption' and not(@style='display: none;')]//ancestor::div[contains(@class,'im_content_message_wrap')]//span[contains(@class,'im_message_date_text')]")[-1].get_attribute('data-content') result4 = self.driver.find_elements_by_xpath("//div[@class = 'im_history_messages_peer' and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap') and not(@style='display: none;')]//div[contains(@class,'im_message_media')]//div[@class='im_message_photo_caption' and not(@style='display: none;')]")[-2].text time4 = self.driver.find_elements_by_xpath("//div[@class ='im_history_messages_peer' and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap') and not(@style='display: none;')]//div[contains(@class,'im_message_media')]//div[@class='im_message_photo_caption' and not(@style='display: none;')]//ancestor::div[contains(@class,'im_content_message_wrap')]//span[contains(@class,'im_message_date_text')]")[-2].get_attribute('data-content') results.append([result3,time3]) results.append([result4,time4]) except: print(sys.exc_info()[0]) print("not message in picture") signalArr = [] for re in results : if( (re[0] != '')) : if( self.utils.find_all(re[0].lower(),identityStr.lower()) ==True): if(self.utils.checkTime(re[1])): print('getting signal from '+chName+' finished succesfully') logging.info('%s getting signal message successfully ended',chName) #return re[0] signalArr.append(re[0]) print('getting signal from '+chName+' finished!') #return None return signalArr except: print('getting signal from '+chName+' finished failed') return 'failed'
def log(self, msg): futil = FileUtil() futil.writeToFile("log.txt",msg,True,True)
class ApplicationUtil: df = None _d = {} _tuple = None pu = PandasUtil() fu = FileUtil() def __init__(self, yaml_file:str): self.logger = self.init_logger() d = YamlUtil(yaml_file) self._tuple = d.asnamedtuple self._d = d self.logger.debug(f'Read in yaml file {yaml_file} with fields: {self._d.fields}') def init_logger(self): self.logger = logging.getLogger(__name__) self.logger.setLevel(logging.DEBUG) # create console handler and set level to debug ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # create formatter formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') # add fromatter to ch ch.setFormatter(formatter) # add ch to logger self.logger.addHandler(ch) return self.logger def yaml_entry(self, yaml_entry:str) -> str: """ Read the dictionary and return the value of the given key. Give a warning if the yaml_entry is missing and return a blank. :param yaml_entry: :return: """ try: return self._d.asdict[yaml_entry] except KeyError: self.logger.warning(f'Unable to find yaml key: {yaml_entry}. Returning blank value.') return '' def load_df_from_excel(self, input_file_yaml_entry:str, worksheet:str='Sheet1'): input_file = self._d.asdict[input_file_yaml_entry] self.logger.debug(f'Reading {worksheet} file: {input_file}') if self.fu.file_exists(input_file): df = self.pu.read_df_from_excel(excelFileName=input_file, excelWorksheet=worksheet, header=0) self.pu.get_rowCount_colCount(df) return df else: self.logger.warning(f'Unable to find {worksheet} file: {input_file_yaml_entry}. Returning empty dataframe.') return self.pu.empty_df() def write_excel(self, df:pd.DataFrame, output_file_yaml_entry:str, worksheet:str) -> None: """ Write the given dataframe to the file indicated by the dictionary entry (that was read in using the yaml file). :param df: DataFrame to write :param output_file_yaml_entry: :param worksheet: :return: """ output_file = self.yaml_entry(output_file_yaml_entry) self.logger.debug(f'Writing {worksheet} file: {output_file}') self.pu.write_df_to_excel(df=df, excelFileName=output_file, excelWorksheet=worksheet)
# -*- coding:utf-8 -*- ''' Created on Jan 29, 2019 @author: Jackie ''' from FileUtil import FileUtil from NlpTookit.NlpTookit import NlpTookit import jieba import jieba.posseg as pseg dir ="data/sports" fu = FileUtil() nt = NlpTookit() wordcounter={}#统计词频的词典 poscounter={}#统计词性的词典 lengthCounter ={}#统计词长、句长分布字典 #step one: get all files' absolute paths filelist = fu.getFiles(dir) #step two: read every file for filepath in filelist: print(filepath) lines = fu.readlines(filepath, "UTF-8") for line in lines: if(len(line.strip())==0): continue #step three:split sentences # print(line.strip()) sentences = nt.toSentenceList(line.strip()) for sentence in sentences:
class Test_ApplicationUtil(unittest.TestCase): fu = FileUtil() yaml_file = 'test.yaml' path = r'c:\temp' if platform.system() == 'Windows' else r'/tmp' qual_path = fu.qualified_path(path, yaml_file) excel_yaml_file = 'excel_' + yaml_file excel_qual_path = fu.qualified_path(path, excel_yaml_file) spreadsheet_name = 'test.xls' worksheet_name = 'Sheet1' yaml_dict = { 'inputFile': qual_path, 'maxLines': 1000, 'vendorDict': { 'SAN': 'Account number', 'Contact_fn': 'Contact first name' } } #,'Address': 'Address 1','Phone': 'Work phone','Name': 'Vendor name','Contact_Ln': 'Contact last name','Addr_2': 'Address 2','Ext': 'Mobile','email': 'E-Mail 1','City': 'City','St': 'State','Zip': 'Zip','Fax': 'Fax'}} @classmethod def setUpClass(cls) -> None: fu = FileUtil() fu.dump_yaml(Test_ApplicationUtil.qual_path, Test_ApplicationUtil.yaml_dict) @classmethod def tearDownClass(cls) -> None: fu = FileUtil() path = r'c:\temp' if platform.system() == 'Windows' else r'/tmp' fu.delete_file(fu.qualified_path(path, cls.yaml_file)) fu.delete_file(fu.qualified_path(path, cls.excel_qual_path)) fu.delete_file(fu.qualified_path(path, cls.spreadsheet_name)) def setUp(self) -> None: self.app = MyApplication(self.qual_path) # Return a tiny test dataframe def my_test_df(self): # Example dataframe from https://www.geeksforgeeks.org/python-pandas-dataframe-dtypes/ df = pd.DataFrame({ 'Weight': [45, 88, 56, 15, 71], 'Name': ['Sam', 'Andrea', 'Alex', 'Robin', 'Kia'], 'Sex': ['male', 'female', 'male', 'female', 'male'], 'Age': [14, 25, 55, 8, 21] }) # Create and set the index index_ = [0, 1, 2, 3, 4] df.index = index_ return df def test_logger(self): self.app.logger.debug('log message from test_logger') @logit() def test_missing_yaml(self): qualified_path = self.fu.qualified_path(dirPath=self.path, filename='noSuchFile.yaml') app = MyApplication(qualified_path) self.assertDictEqual(app._d.asdict, {}) @logit() def test_yaml_entry(self): # Test 1 for key, value in self.yaml_dict.items(): actual = self.app.yaml_entry(key) logging.debug( f'comparing key / value of {key} / {value} against {actual}') self.assertEqual(value, actual) # Test 2 expected_log_message = 'Unable to find yaml key' with self.assertLogs(ApplicationUtil.__name__, level='DEBUG') as cm: actual = self.app.yaml_entry('No such key!!') self.assertTrue( next((True for line in cm.output if expected_log_message in line), False)) self.assertEqual(actual, '') @logit() def test_load_df_from_excel(self): pu = PandasUtil() fu = FileUtil() df = self.my_test_df() fn = self.fu.qualified_path(self.path, self.spreadsheet_name) pu.write_df_to_excel(df=df, excelFileName=fn, excelWorksheet=self.worksheet_name, write_index=False) yaml_dict = {'inputFile': fn, 'worksheet': self.worksheet_name} fu.dump_yaml(Test_ApplicationUtil.excel_qual_path, yaml_dict) app = MyApplication(Test_ApplicationUtil.excel_qual_path) actual = app.load_df_from_excel(input_file_yaml_entry='inputFile', worksheet=self.worksheet_name) assert_frame_equal(df, actual) @logit() def test_write_excel(self): pu = PandasUtil() fu = FileUtil() df = self.my_test_df() fn = self.fu.qualified_path(self.path, self.spreadsheet_name) yaml_dict = {'outputFile': fn, 'worksheet': self.worksheet_name} fu.dump_yaml(Test_ApplicationUtil.excel_qual_path, yaml_dict) app = MyApplication(Test_ApplicationUtil.excel_qual_path) app.write_excel(df=df, output_file_yaml_entry='outputFile', worksheet=self.worksheet_name) actual = pu.read_df_from_excel(excelFileName=fn, excelWorksheet=self.worksheet_name) assert_frame_equal(df, actual)
def hello_world(): f=FileUtil() return f.readHtml()
# coding=utf-8 ''' Created on 2017年12月18日 @author: Administrator ''' from FileUtil import FileUtil if __name__ == '__main__': path = unicode("F:\部门对接\编辑所需文件20170930", "utf-8") fileutils = FileUtil() dic = fileutils.readFile(path) for index in dic: print index #print dic;
def setUpClass(cls) -> None: fu = FileUtil() fu.dump_yaml(Test_ApplicationUtil.qual_path, Test_ApplicationUtil.yaml_dict)
class BotEngine: def __init__(self, driver): self.driver = driver recentSignals = { 'forexsignalzz': 0, 'amirFX_signal': 0, 'FOR3X_SIGNAL': 0, 'AmirFx VIP signal': 0, 'Eagl777': 0, 'WallstreetFXsignals': 0, 'wolfofforexplus': 0 } signalVendors = {'a': 1} utils = Utils() fileUtil = FileUtil() #{'Forex signals': 'GforexSignalsIr'} def setListOfVendors(self): self.signalVendors.update( {'amirFX_signal': [GforexSignalsIr(self.driver), 'TAKE PROFIT']}) self.signalVendors['FOR3X_SIGNAL'] = [FOR3X_SIGNAL(self.driver), 'SL'] self.signalVendors['AmirFx VIP signal'] = [ GforexSignalsIr(self.driver), 'TAKE PROFIT' ] self.signalVendors['signalTest'] = [Eagl777(self.driver), 'sl'] self.signalVendors['Eagl777'] = [Eagl777(self.driver), 'sl'] self.signalVendors['WallstreetFXsignals'] = [ WallstreetFXsignals(self.driver), 'Trade Alert!' ] self.signalVendors['wolfofforexplus'] = [ wolfofforexplus(self.driver), 'stop loss' ] self.signalVendors['forexsignalzz'] = [ forexsignalzz(self.driver), 'new signal' ] def getNewMessage(self): coutner = 1 while (coutner > 0): try: sleep(1) for key in self.recentSignals: try: newMessages = self.find_last_update_time( key) #return last two messages webElement-time print('before getting time') if newMessages == None or newMessages[ 0] == self.recentSignals[key]: print('repeated signal for ' + key + ' provider') continue else: print( 'preparing new signal started in signalFinder!' ) provider = self.signalVendors[key][0] self.recentSignals[key] = newMessages[0] sleep(2) signalText = self.get_message( key, self.signalVendors[key][1]) if signalText != None: signalObjs = provider.createSignalDto( signalText, key) if (signalObjs[0].enterPrice != 0): for signal in signalObjs.values(): if (signal != 0): signal.vol = 0.01 self.fileUtil.writeOnFile( "s", signal) sleep(10) else: print('why here!!????') self.recentSignals[key] = 0 except: # INNER TRY print('in INNER except signalFinder: ') self.recentSignals[key] = 0 print(sys.exc_info()[0]) continue except: # outer try print('in OUTER except signalFinder: ') self.recentSignals[key] = 0 print(sys.exc_info()[0]) continue def find_last_update_time(self, chName): print('start finding last update time') c1 = 5 while c1 > 0: try: elem = self.driver.find_element_by_xpath( "//input[contains(@class,'im_dialogs_search_field')]") sleep(2) elem.clear() elem.send_keys(chName) break sleep(1) except: sleep(2) c1 -= 1 c2 = 5 while c2 > 0: try: self.driver.find_elements_by_xpath( "//div[@class='im_dialogs_col']//li[contains(@class,'im_dialog_wrap')]/a" )[0].click() sleep(2) break except: sleep(2) c2 -= 1 c3 = 5 while c3 > 0: try: firstLastMessageTime = self.driver.find_elements_by_xpath( "//div[contains(@class,'im_history_messages_peer') and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap')]//span[@class='im_message_date_text nocopy']" )[-1].get_attribute('data-content') sleep(2) break except: sleep(2) c3 -= 1 try: secondLastMessageTime = self.driver.find_elements_by_xpath( "//div[contains(@class,'im_history_messages_peer') and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap')]//span[@class='im_message_date_text nocopy']" )[-2].get_attribute('data-content') except: secondLastMessageTime = "" print('no second message') # providerCH=self.driver.find_elements_by_xpath("//span/ancestor::a[@class='im_dialog']")[0] # sleep(2) # last_time=providerCH.find_element_by_xpath("//div[@class='im_dialog_date']").text #self.driver.find_elements_by_xpath("//span/ancestor::a[@class='im_dialog']//div[@class='im_dialog_date']")[0].text sleep(2) print('end of finding last update time') return [firstLastMessageTime, secondLastMessageTime] def get_message(self, chName, identityStr): print('getting signal from ' + chName + ' started') try: result1 = self.driver.find_elements_by_xpath( "//div[@class='im_history_messages_peer' and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap')]//div[@class='im_message_text']" )[-1].text time1 = self.driver.find_elements_by_xpath( "//div[@class='im_history_messages_peer']//div[contains(@class,'im_history_message_wrap')]//div[@class='im_message_text']//ancestor::div//span[contains(@class,'im_message_date_text')]" )[-1].get_attribute('data-content') results = [[result1, time1]] sleep(2) try: result2 = self.driver.find_elements_by_xpath( "//div[@class='im_history_messages_peer' and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap')]//div[@class='im_message_text']" )[-2].text time2 = self.driver.find_elements_by_xpath( "//div[@class='im_history_messages_peer']//div[contains(@class,'im_history_message_wrap')]//div[@class='im_message_text']//ancestor::div//span[contains(@class,'im_message_date_text')]" )[-2].get_attribute('data-content') results.append([result2, time2]) except: print(sys.exc_info()[0]) print("not second message") try: result3 = self.driver.find_elements_by_xpath( "//div[contains(@class,'im_history_messages_peer') and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap') and not(@style='display: none;')]//div[contains(@class,'im_message_media')]//div[@class='im_message_photo_caption' and not(@style='display: none;')]" )[-1].text time3 = self.driver.find_elements_by_xpath( "//div[contains(@class,'im_history_messages_peer') and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap') and not(@style='display: none;')]//div[contains(@class,'im_message_media')]//div[@class='im_message_photo_caption' and not(@style='display: none;')]//ancestor::div//span[contains(@class,'im_message_date_text')]" )[-1].get_attribute('data-content') result4 = self.driver.find_elements_by_xpath( "//div[contains(@class,'im_history_messages_peer') and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap') and not(@style='display: none;')]//div[contains(@class,'im_message_media')]//div[@class='im_message_photo_caption' and not(@style='display: none;')]" )[-2].text time4 = self.driver.find_elements_by_xpath( "//div[contains(@class,'im_history_messages_peer') and not(contains(@class,'ng-hide'))]//div[contains(@class,'im_history_message_wrap') and not(@style='display: none;')]//div[contains(@class,'im_message_media')]//div[@class='im_message_photo_caption' and not(@style='display: none;')]//ancestor::div//span[contains(@class,'im_message_date_text')]" )[-2].get_attribute('data-content') results.append([result3, time3]) results.append([result3, time4]) except: print(sys.exc_info()[0]) print("not message in picture") myText = "" for re in results: if ((re[0] != '')): if (str.find(re[0], identityStr) != -1): if (self.utils.checkTime(re[1])): print('getting signal from ' + chName + ' finished succesfully') return re[0] print('getting signal from ' + chName + ' finished : no signal message!') return None except: print('getting signal from ' + chName + ' finished failed') return 'failed'
class BotEngine: def __init__(self, driver): self.driver = driver recentSignals = {'amirFX_signal': 0} signalVendors = {'a': 1} utils = Utils() fileUtil = FileUtil() #{'Forex signals': 'GforexSignalsIr'} def setListOfVendors(self): self.signalVendors.update( {'amirFX_signal': GforexSignalsIr(self.driver)}) def getNewMessage(self): coutner = 1 while (coutner > 0): try: sleep(5) for key in self.recentSignals: newLastTime = self.find_last_update_time(key) if newLastTime[1] == self.recentSignals[ key] or newLastTime == None: print('repeated signal for ' + key + ' provider') continue else: print('preparing new signal started in signalFinder!') provider = self.signalVendors[key] self.recentSignals[key] = newLastTime[1] newLastTime[0].click() # self.driver.find_elements_by_xpath("//span[text()='{0}']/ancestor::a[@class='im_dialog']" # .format(self.signalVendors[key]))[0].click() sleep(1) signalText = provider.get_message( key, '3:50' ) #commented for test self.utils.extractTime(newLastTime[1]) if signalText != None: signalObj = provider.createSignalDto( signalText, '3:50', key) #commented for test newLastTime[1] if (signalObj.enterPrice != 0): self.fileUtil.writeOnFile("s", signalObj) else: self.recentSignals[key] = 0 except: continue def find_last_update_time(self, chName): sleep(1) whichgroup = 1 elem = self.driver.find_element_by_xpath( "//input[contains(@class,'im_dialogs_search_field')]") elem.clear() elem.send_keys(chName) sleep(2) providerCH = self.driver.find_elements_by_xpath( "//span/ancestor::a[@class='im_dialog']")[0] sleep(2) last_time = providerCH.find_element_by_xpath( "//div[@class='im_dialog_date']" ).text #self.driver.find_elements_by_xpath("//span/ancestor::a[@class='im_dialog']//div[@class='im_dialog_date']")[0].text #if len(last_time) == 3 : # return None # commented for test return [providerCH, last_time]
def tearDownClass(cls) -> None: fu = FileUtil() path = r'c:\temp' if platform.system() == 'Windows' else r'/tmp' fu.delete_file(fu.qualified_path(path, cls.yaml_file)) fu.delete_file(fu.qualified_path(path, cls.excel_qual_path)) fu.delete_file(fu.qualified_path(path, cls.spreadsheet_name))
def tearDownClass(cls) -> None: fu = FileUtil() path = r'c:\temp' if platform.system() == 'Windows' else r'/tmp' fu.delete_file(fu.qualified_path(path, cls.yaml)) fu.delete_file(fu.qualified_path(path, cls.fn)) fu.delete_file(fu.qualified_path(path, cls.text_fn))
class BotEngine: def __init__(self,driver): self.driver = driver recentSignals={'amirFX_signal':0,'FOR3X_SIGNAL':0,'AmirFx VIP signal':0} signalVendors={'a': 1} utils = Utils() fileUtil = FileUtil() #{'Forex signals': 'GforexSignalsIr'} def setListOfVendors(self): self.signalVendors.update({'amirFX_signal': GforexSignalsIr(self.driver)}) self.signalVendors['FOR3X_SIGNAL'] = FOR3X_SIGNAL(self.driver) self.signalVendors['AmirFx VIP signal'] = GforexSignalsIr(self.driver) def getNewMessage(self): coutner=1; while(coutner >0): try: sleep(5) for key in self.recentSignals: newMessages=self.find_last_update_time(key) #return last two messages webElement-time if newMessages == None or newMessages[0] == self.recentSignals[key] : print('repeated signal for '+key+' provider') continue else: print('preparing new signal started in signalFinder!') provider=self.signalVendors[key] self.recentSignals[key] = newMessages[0] sleep(2) signalText=provider.get_message(key) if signalText != None : signalObj= provider.createSignalDto(signalText,key) signalObj.vol = 0.01 if(signalObj.enterPrice !=0): self.fileUtil.writeOnFile("s",signalObj) else: print('why here!!????') self.recentSignals[key]=0 except : print('in except signalFinder: ') print(sys.exc_info()[0]) continue def find_last_update_time(self, chName): elem= self.driver.find_element_by_xpath("//input[contains(@class,'im_dialogs_search_field')]") elem.clear() elem.send_keys(chName) sleep(4) self.driver.find_elements_by_xpath("//div[@class='im_dialogs_col']//li[contains(@class,'im_dialog_wrap')]/a")[0].click() sleep(2) firstLastMessageTime = self.driver.find_elements_by_xpath("//div[@class='im_history_messages_peer']//div[@class='im_history_message_wrap']//span[@class='im_message_date_text nocopy']")[-1].get_attribute('data-content') sleep(2) try: secondLastMessageTime = self.driver.find_elements_by_xpath("//div[@class='im_history_messages_peer']//div[@class='im_history_message_wrap']//span[@class='im_message_date_text nocopy']")[-2].get_attribute('data-content') except : secondLastMessageTime="" print('no second message') sleep(2) # providerCH=self.driver.find_elements_by_xpath("//span/ancestor::a[@class='im_dialog']")[0] # sleep(2) # last_time=providerCH.find_element_by_xpath("//div[@class='im_dialog_date']").text #self.driver.find_elements_by_xpath("//span/ancestor::a[@class='im_dialog']//div[@class='im_dialog_date']")[0].text # sleep(2) return [firstLastMessageTime ,secondLastMessageTime]
class BotEngine: def __init__(self,driver): self.driver = driver recentSignals={'forexsignalzz':0,'amirFX_signal':0,'FOR3X_SIGNAL':0,'AmirFx VIP signal':0,'Eagl777':0 , 'WallstreetFXsignals':0, 'wolfofforexplus':0} signalVendors={'a': 1} utils = Utils() fileUtil = FileUtil() #{'Forex signals': 'GforexSignalsIr'} def setListOfVendors(self): self.signalVendors.update({'amirFX_signal': GforexSignalsIr(self.driver)}) self.signalVendors['FOR3X_SIGNAL'] = FOR3X_SIGNAL(self.driver) self.signalVendors['AmirFx VIP signal'] = GforexSignalsIr(self.driver) self.signalVendors['signalTest']= Eagl777(self.driver) self.signalVendors['Eagl777']= Eagl777(self.driver) self.signalVendors['WallstreetFXsignals']= WallstreetFXsignals(self.driver) self.signalVendors['wolfofforexplus']= wolfofforexplus(self.driver) self.signalVendors['forexsignalzz']=forexsignalzz(self.driver) def getNewMessage(self): coutner=1; while(coutner >0): try: sleep(1) for key in self.recentSignals: try: newMessages=self.find_last_update_time(key) #return last two messages webElement-time print('before getting time') if newMessages == None or newMessages[0] == self.recentSignals[key] : print('repeated signal for '+key+' provider') continue else: print('preparing new signal started in signalFinder!') provider=self.signalVendors[key] self.recentSignals[key] = newMessages[0] sleep(2) signalText=provider.get_message(key) if signalText != None : signalObjs= provider.createSignalDto(signalText,key) if(signalObjs[0].enterPrice !=0): for signal in signalObjs.values(): if(signal !=0): signal.vol = 0.01 self.fileUtil.writeOnFile("s",signal) sleep(10) else: print('why here!!????') self.recentSignals[key]=0 except: # INNER TRY print('in INNER except signalFinder: ') self.recentSignals[key]=0 print(sys.exc_info()[0]) continue except : # outer try print('in OUTER except signalFinder: ') self.recentSignals[key]=0 print(sys.exc_info()[0]) continue def find_last_update_time(self, chName): print('start finding last update time') c1=5 while c1>0: try: elem= self.driver.find_element_by_xpath("//input[contains(@class,'im_dialogs_search_field')]") sleep(2) elem.clear() elem.send_keys(chName) sleep(1) except : sleep(2) c1+=1 c2=5 while c2>0: try: self.driver.find_elements_by_xpath("//div[@class='im_dialogs_col']//li[contains(@class,'im_dialog_wrap')]/a")[0].click() sleep(2) except : sleep(2) c2+=1 c3=5 while c3>0: try: firstLastMessageTime = self.driver.find_elements_by_xpath("//div[contains(@class,'im_history_messages_peer')]//div[contains(@class,'im_history_message_wrap')]//span[@class='im_message_date_text nocopy']")[-1].get_attribute('data-content') sleep(2) except: sleep(2) c3+=1 try: secondLastMessageTime = self.driver.find_elements_by_xpath("//div[contains(@class,'im_history_messages_peer')]//div[contains(@class,'im_history_message_wrap')]//span[@class='im_message_date_text nocopy']")[-2].get_attribute('data-content') except : secondLastMessageTime="" print('no second message') # providerCH=self.driver.find_elements_by_xpath("//span/ancestor::a[@class='im_dialog']")[0] # sleep(2) # last_time=providerCH.find_element_by_xpath("//div[@class='im_dialog_date']").text #self.driver.find_elements_by_xpath("//span/ancestor::a[@class='im_dialog']//div[@class='im_dialog_date']")[0].text sleep(2) print('end of finding last update time') return [firstLastMessageTime ,secondLastMessageTime]
def test_executing_directory(self, mock_obj): mock_obj.return_value = self.mock_file fu = FileUtil() path, _ = fu.split_qualified_path(self.mock_file) self.assertEqual(path, self.eu.executing_directory())