def InsertMyStock(dboper, stockData, mytime): sql = "insert into mystocks(code, cashin, cashout, initnetvalue, netvalue, iorate, turnover, qrratio, initprice, price, pricerate, initchangeratio, changeratio, amountp, amountn, inittime, codealias, mtype, concept)\ values('%s', %0.2f, %0.2f, %0.2f, %0.2f, %0.2f, %0.2f, %0.2f, %0.2f, %0.2f, %0.4f, %0.2f, %0.2f, %0.2f, %0.2f, %s, '%s', %d, '%s')" \ %(stockData['code'], stockData['cashin'], stockData['cashout'], stockData['initnetvalue'], stockData['netvalue'], \ stockData['iorate'], stockData['turnover'], stockData['qrratio'], stockData['initprice'], stockData['price'], stockData['pricerate'], stockData['initchangeratio'], stockData['changeratio'], stockData['amountp'], stockData['amountn'], mytime, stockData['codealias'], stockData['mtype'], stockData['conceptstring']) LoggerFactory.debug("InsertMyStock", sql) dboper.sqlExecute(sql)
def InsertHisData(dboper, stockdata): mytime = "str_to_date('%s'," % time.strftime('%Y-%m-%d') + "'%Y-%m-%d')" sql = "insert into hisstocks(code, cashin, cashout, netvalue, iorate, turnover, qrratio, price, changeratio, amountp, amountn, mtime) values('%s', %0.2f, %0.2f, %0.2f, %0.2f, %0.2f, %0.2f, %0.2f, %0.2f, %0.2f, %0.2f, %s )" \ %(stockdata['code'], stockdata['cashin'], stockdata['cashout'], stockdata['netvalue'], stockdata['iorate'], stockdata['turnover'], stockdata['qrratio'], stockdata['price'], stockdata['changeratio'], stockdata['amountp'],stockdata['amountn'], mytime) LoggerFactory.debug("InsertHisData", sql) dboper.sqlExecute(sql)
def copyToFolder(filename, fromfolder, tofolder): try: if not os.path.isdir(tofolder): os.mkdir(tofolder) except OSError: LoggerFactory.getLogger().error("Could not create folder " + tofolder) return try: shutil.copy(os.path.join(fromfolder, filename), os.path.join(tofolder, filename)) except: LoggerFactory.getLogger().error("Could not copy " + filename + " from " + fromfolder + " to " + tofolder)
def InsertHisData(code, dboper): realtimeData = StockDataByTX.CollectRealTimeData(code) if realtimeData is not None: LoggerFactory.info("InsertHisData", "正在处理: %s" % realtimeData['code']) DBDataHandle.InsertHisData(dboper, realtimeData) else: LoggerFactory.error("InsertHisData", "股票: %s 的相关信息获取失败..." % code)
def CreateConnection(self): try: conn = pymysql.connect(host=self.__hostname, user=self.__username, passwd=self.__password, db=self.__db, port=self.__port) return conn except Exception, e: LoggerFactory.error("CreateConnection", "Failed to create DB connection with exception error: " + str(e)) # self.logger.error( "Failed to create DB connection with exception error: " + str(e) ) return None
def DonwloadAllStockBasic(FilePath): if os.path.isfile(FilePath): os.remove(FilePath) LoggerFactory.info( "DonwloadAllStockBasic", "Will remove the old file and refresh stock list...........") # logger.info("Will remove the old file and refresh stock list...........") try: LoggerFactory.info("DonwloadAllStockBasic", "Starting new stock list download....") # logger.info("Starting new stock list download....") df = ts.get_stock_basics() df.to_csv(FilePath, encoding='utf-8') LoggerFactory.info("DonwloadAllStockBasic", "New stock list has been created successfully!") except Exception, e: LoggerFactory.error( "DonwloadAllStockBasic", "Creating new stock list failed by tushare, please check!!! ") exit
def HandleRTStock(dboper, stocktype, circulated=1800000): rtstockslist = [] codelist_sql = "" sql = "select code from rtstocks" mytime = "str_to_date('%s'," % time.strftime( '%Y-%m-%d %H:%M:%S') + "'%Y-%m-%d %H:%i:%s')" rtstocks = dboper.queryData(sql) if len(rtstocks) == 0: InitTable.InitRTStocks(circulated, dboper) if len(rtstocks) > 0: for code in rtstocks: rtstockslist.append(code[0]) codelist_sql = GetMarketSql(stocktype) results = dboper.queryData(codelist_sql) if results is not None and len(results) > 0: LoggerFactory.info("HandleRTStock", "Starting to update rtstocks....") begintime = datetime.datetime.now() for code in results: if checkExist(code[0][2:8], rtstockslist): LoggerFactory.debug( "HandleRTStock", "The stock %s already exists in the rtstocks, will perform update information" % code[0]) threading.Thread(target=UpdateRT, args=(dboper, code[0], mytime)).start() time.sleep(0.07) else: LoggerFactory.debug( "HandleRTStock", "The stock %s DOES NOT exist in the rtstocks, will insert stock information!" % code[0]) threading.Thread(target=InsertRT, args=(dboper, code[0], mytime)).start() time.sleep(0.1) endtime = datetime.datetime.now() LoggerFactory.info( "HandleRTStock", "rtstocks has been updated. Spent time: %s" % str( (endtime - begintime).seconds))
def poolvalidate(self): if self.pool is not None: return True else: LoggerFactory.error( "poolvalidate", "Connection Pool is Null object, please check connection Pool creation!" ) # self.logger.error("Connection Pool is Null object, please check connection Pool creation!") return False
def GetStockData(dataUrl): r = urllib2.Request(dataUrl) try: data = urllib2.urlopen(r, data=None, timeout=2) except Exception, e: LoggerFactory.error("GetStockData", "GetDataFromUrl error.... URL: %s" % dataUrl) # logger.error("GetDataFromUrl error.... URL: %s"%dataUrl) return None
def InsertJJStock(dboper, code, mytime): realtimeData = StockDataByTX.CollectRealTimeData(code) if realtimeData is not None: # logger.info("Insert the stock %s to jjstocks" % realtimeData['code']) # DBDataHandle.InsertRTData(dboper, realtimeData, logger, mytime) DBDataHandle.InsertJJStock(dboper, realtimeData, mytime) else: LoggerFactory.error( "InsertJJStock", "Fetching the stock information failed. code: %s ..." % code)
def CreateConnectionPool(self): try: pool = PooledDB.PooledDB(pymysql,mincached=self.__mincached, maxconnections=self.__maxconn, maxcached=self.__maxcached, user=self.__username, passwd=self.__password, host=self.__hostname, port=self.__port, db=self.__db,charset=self.__charset) return pool except Exception, e: LoggerFactory.error("CreateConnectionPool", "Failed to create connection pool with exception: " + str(e)) # self.logger.error("Failed to create connection pool with exception: " + str(e) ) return None
def DailyHisData(dboper): # logger = LoggerFactory.getLogger("DailyHisData") codelist = DBDataHandle.GetStockCode(dboper) if codelist is not None and len(codelist) > 1: for code in codelist: threading.Thread(target=InsertHisData, args=(code[0], dboper)).start() time.sleep(0.1) else: LoggerFactory.error("DailyHisData", "股票代码信息获取失败.....")
def InsertJJTemp(dboper, code, mytime): realtimeData = StockDataByTX.CollectRealTimeData(code) if realtimeData is not None: realtimeData['codealias'] = code LoggerFactory.info( "InsertJJTemp", "Insert the stock %s to JJTemp" % realtimeData['code']) DBDataHandle.InsertJJTemp(dboper, realtimeData, mytime) else: LoggerFactory.error( "InsertJJTemp", "Fetching the stock information failed. code: %s ..." % code)
def upload(localSyncFolderConfig, cloudSyncFolderConfig): cloudConfig = CloudConfig() try: pyCloud = PyCloud(cloudConfig.username, cloudConfig.password) pyCloud.createfolderifnotexists(path=cloudSyncFolderConfig.folder) pyCloud.createfolderifnotexists(path=cloudSyncFolderConfig.tmpfolder) for filename in os.listdir(localSyncFolderConfig.folder): LoggerFactory.getLogger().info("filename=" + filename + "," + "from=" + localSyncFolderConfig.folder) LoggerFactory.getLogger().info("-> upload to=" + cloudSyncFolderConfig.folder); pyCloud.uploadfile(files=[os.path.join(localSyncFolderConfig.folder, filename)], path=cloudSyncFolderConfig.tmpfolder, progresshash='0') LoggerFactory.getLogger().info("-> move to=" + localSyncFolderConfig.backupfolder); Utils.moveToFolder(filename, localSyncFolderConfig.folder, localSyncFolderConfig.backupfolder) LoggerFactory.getLogger().info("-> rename from=" + cloudSyncFolderConfig.tmpfolder + "," + "to=" + cloudSyncFolderConfig.folder); pyCloud.renamefile(path=cloudSyncFolderConfig.tmpfolder + '/' + filename, topath=cloudSyncFolderConfig.folder + '/', filename=filename); except: LoggerFactory.getLogger().error(sys.exc_info())
def InitStockDB(file): # logger = LoggerFactory.getLogger("InitStockDB") # loggerBasicData = LoggerFactory.getLogger("GetStockBasicData") stocklist = StockDataByTX.GetAllStockCode(file) mytime = "str_to_date('%s'," % time.strftime('%Y-%m-%d') + "'%Y-%m-%d')" dboper = DBOperation.DBOperation() counter = 0 for stock in stocklist: code = stock['code'] stockBasicData = StockDataByTX.GetStockBasicData(code) if stockBasicData is not None: LoggerFactory.info("InitStockDB", "正在处理: %s" % stockBasicData['name']) if stockBasicData['mount'] == 0: status = 0 else: status = 1 sql = "insert into stocks(code, codealias, name, industry, circulated, totalstock, status, peg, lyr, mtime, area) values('%s', '%s', '%s', '%s', %0.2f, %0.2f, %d, %0.2f, %0.2f, %s, '%s' )" \ % (stockBasicData['code'], stockBasicData['codealias'], stockBasicData['name'], stock['industry'], stockBasicData['circulated_stock'], \ stockBasicData['total_stock'], status, stockBasicData['peg'], stockBasicData['lyr'], mytime, stock['area']) dboper.sqlExecute(sql) counter = counter + 1 LoggerFactory.info( "InitStockDB", "Stock DB initialization has completed! There're %s Stocks created into the Database!" % str(counter))
def queryOneData(self, sql): conn = self.pool.connection() if conn is not None: cursor = conn.cursor() cursor.execute(sql) results = cursor.fetchone() cursor.close() conn.close() return results else: LoggerFactory.error("queryOneData", "Cannot get DB connection!") return None
def GetMarketSql(stocktype): sql = "" if stocktype == "sh": LoggerFactory.info("GetMarketSql", "Updating stock information in SH marketing.....") sql = "select codealias from stocks where codealias like '%s' and status=1 and circulated<= %0.2f" % ( "sh%", circulated) if stocktype == "sz": LoggerFactory.info("GetMarketSql", "Updating stock information in SZ marketing.....") sql = "select codealias from stocks where codealias like '%s' and status=1 and circulated<= %0.2f" % ( "sz%", circulated) return sql
def HandleJJTemp(dboper, stocktype): codelist_sql = GetMarketSql(stocktype) results = dboper.queryData(codelist_sql) if results is not None and len(results) > 0: mytime = "str_to_date('%s'," % time.strftime( '%Y-%m-%d %H:%M:%S') + "'%Y-%m-%d %H:%i:%s')" for code in results: LoggerFactory.debug("HandleJJTemp", "Updating the stock: %s" % code[0]) threading.Thread(target=UpdateJJTemp, args=(dboper, code[0], mytime)).start() time.sleep(0.07) LoggerFactory.info("HandleJJTemp", "Updating the table JJTemp has completed....") else: LoggerFactory.info( "HandleJJTemp", "There is no stock need to be updated in the pool... ")
def HandleJJStock(dboper, stocktype, circulated=1800000): # mytime = "str_to_date('%s'," % time.strftime('%Y-%m-%d %H:%M:%S') + "'%Y-%m-%d %H:%i:%s')" mytime = "str_to_date('%s'," % time.strftime('%Y-%m-%d') + "'%Y-%m-%d')" codelist_sql = GetMarketSql(stocktype) results = dboper.queryData(codelist_sql) if results is not None and len(results) > 0: for code in results: threading.Thread(target=InsertJJStock, args=(dboper, code[0], mytime)).start() time.sleep(0.1) else: LoggerFactory.error("HandleJJStock", "There is no stock list retrieved...")
class ButtonHandler(): def __init__(self, root): self.__root = root self.__frame = LoggerTestUI(root) self.__frame.getFileButton().configure(command=self.eventFile) self.__frame.getConsoleButton().configure(command=self.eventConsole) self.__frame.getExitButton().configure(command=self.eventExit) self.__factory = LoggerFactory() def eventFile(self): logger = self.__factory.getLogger(1) logger.log(self.__frame.getTxtText()) self.__frame.setResultValue('The message was written to file') def eventConsole(self): logger = self.__factory.getLogger(2) logger.log(self.__frame.getTxtText()) self.__frame.setResultValue('The message was written to console') def eventExit(self): self.__frame.destroy() self.__root.destroy()
def CollectRealTimeData(code): # logger = LoggerFactory("CollectRealTimeData") stockBasicData = GetStockBasicData(code) stockCashData = GetStockCashData(code) stockBriefData = GetStockBriefData(code) realtimeData = {} if stockBasicData is not None: if stockCashData is not None: if stockBriefData is not None: rate = 0 if float(stockCashData['main_out_cash']) > 0: rate = round((float(stockCashData['main_in_cash']) / float(stockCashData['main_out_cash'])), 2) realtimeData['code'] = code[2:8] realtimeData['price'] = stockBriefData['price'] realtimeData['cashin'] = stockCashData['main_in_cash'] realtimeData['cashout'] = stockCashData['main_out_cash'] realtimeData['netvalue'] = stockCashData['netvalue'] realtimeData['changeratio'] = stockBriefData['changeratio'] realtimeData['turnover'] = stockBasicData['turnover_rate'] realtimeData['qrratio'] = stockBasicData['qrratio'] realtimeData['iorate'] = float(rate) realtimeData['amountp'] = stockBriefData['amountp'] realtimeData['amountn'] = stockBriefData['amountn'] realtimeData['time'] = "str_to_date('%s'," % time.strftime( '%Y-%m-%d') + "'%Y-%m-%d')" return realtimeData else: LoggerFactory.debug("CollectRealTimeData", "stockBriefData is null") # logger.debug("stockBriefData is null") return None else: LoggerFactory.debug("CollectRealTimeData", "stockCashData is null") # logger.debug("stockCashData is null") return None else: LoggerFactory.debug("CollectRealTimeData", "stockBasicData is null") # logger.debug("stockBasicData is null") return None
def InitJJTemp(dboper, stocktype, circulated): # sql_clear = "delete from jjtemp" # results = dboper.sqlExecute(sql_clear) results = True if results: mytime = "str_to_date('%s'," % time.strftime( '%Y-%m-%d %H:%M:%S') + "'%Y-%m-%d %H:%i:%s')" codelist_sql = GetMarketSql(stocktype) results = dboper.queryData(codelist_sql) if results is not None and len(results) > 0: for code in results: LoggerFactory.debug( "InitJJTemp", "The stock %s DOES NOT exist in the rtstocks, will insert stock information!" % code[0]) threading.Thread(target=InsertJJTemp, args=(dboper, code[0], mytime)).start() time.sleep(0.07) LoggerFactory.info( "InitJJTemp", "The tble JJTemp has completed initialization...") else: LoggerFactory.error("InitJJTemp", "There is no stock list retrieved...") else: LoggerFactory.info("InitJJTemp", "Init JJTemp table failed!!")
def InitRTStocks(circulated, dboper): sql = "select codealias from stocks where status=1 and circulated<= %0.2f" % circulated mytime = "str_to_date('%s'," % time.strftime( '%Y-%m-%d %H:%M:%S') + "'%Y-%m-%d %H:%i:%s')" codelist = dboper.queryData(sql) if codelist is not None and len(codelist) > 0: clear_sql = "delete from rtstocks" # clearjj_sql = "delete from rtjjstocks" LoggerFactory.info("InitRTStocks", "Refresh old data in the rtstocks tables.....") dboper.sqlExecute(clear_sql) # dboper.sqlExecute( clearjj_sql ) LoggerFactory.info( "InitRTStocks", "Initialing rtstocks tables... There're %s stocks need to be handled" % len(codelist)) for code in codelist: threading.Thread(target=InsertRT, args=(dboper, code[0], mytime)).start() time.sleep(0.1) # LoggerFactory.info( "InitRTStocks", "The rtstocks tables initialization have been completed!") else: LoggerFactory.error("InitRTStocks", "Failed to get Stocks list.....")
if opt == '-h': print(progname + ' -c <category -o <origin> -f <configfile>') sys.exit() elif opt in ("-c", "--category"): category = arg elif opt in ("-o", "--origin"): origin = arg elif opt in ("-f", "--config"): configfile = arg ConfigUtils.init(configfile) localSyncFolderConfig = SyncFolderConfig('local', category, 'out') cloudSyncFolderConfig = SyncFolderConfig('cloud', category, origin) logger = LoggerFactory.createLogger( "upload", os.path.join(localSyncFolderConfig.subfolder, "upload.log")) if __name__ == "__main__": path = localSyncFolderConfig.folder event_handler = EventHandler() observer = Observer() observer.schedule(event_handler, path, recursive=True) observer.start() UploadFolder.upload(localSyncFolderConfig, cloudSyncFolderConfig) try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join()
import os import platform import re import sys import time from compiler.ast import flatten from multiprocessing.pool import ThreadPool, cpu_count import pandas as pd import trollius as asyncio from trollius.coroutines import From import LoggerFactory as Log import johnson_cons as ct log = Log.getLogger('commonTipss') # log.setLevel(Log.DEBUG) try: from urllib.request import urlopen, Request except ImportError: from urllib2 import urlopen, Request import requests # def get_os_system(): # os_sys = get_sys_system() # os_platform = get_sys_platform() # if os_sys.find('Darwin') == 0: # log.info("Mac:%s" % os_platform) # return 'mac'
import LoggerFactory if __name__ == '__main__': logger_factory = LoggerFactory.LoggerFactory() logger_factory.get_log("Hello Python", "Database")
def UpdateMyStock(dboper): # codelist = [] realtimeData = {} sql = "select codealias from mystocks" mytime = "str_to_date('%s'," % time.strftime('%Y-%m-%d %H:%M:%S') + "'%Y-%m-%d %H:%i:%s')" results = dboper.queryData(sql) if results is not None and len(results) > 0: LoggerFactory.info("UpdateMyStock", "Starting to update stocks in the pool...") # logger.info("Starting to update stocks in the pool...") for code in results: stockBasicData = StockDataByTX.GetStockBasicData(code[0]) stockCashData = StockDataByTX.GetStockCashData(code[0]) stockBriefData = StockDataByTX.GetStockBriefData(code[0]) if stockBasicData is not None: if stockCashData is not None: if stockBriefData is not None: if float(stockCashData['main_out_cash']) > 0: rate = round((float(stockCashData['main_in_cash']) / float(stockCashData['main_out_cash'])), 2) else: rate = round((float(stockCashData['main_in_cash']) / 1), 2) realtimeData['code'] = code[0][2:8] realtimeData['price'] = stockBriefData['price'] realtimeData['cashin'] = stockCashData['main_in_cash'] realtimeData['cashout'] = stockCashData['main_out_cash'] realtimeData['netvalue'] = stockCashData['netvalue'] realtimeData['iorate'] = float(rate) realtimeData['qrratio'] = stockBasicData['qrratio'] realtimeData['turnover'] = stockBasicData['turnover_rate'] realtimeData['changeratio'] = stockBriefData['changeratio'] realtimeData['amountp'] = stockBriefData['amountp'] realtimeData['amountn'] = stockBriefData['amountn'] LoggerFactory.info("UpdateMyStock", "Starting to update stock: %s" %stockBasicData['name']) DBDataHandle.UpdateMyStock(dboper, realtimeData, mytime) else: LoggerFactory.error("UpdateMyStock", "Data collection stockBriefData is Null. code: %s"%code[0]) else: LoggerFactory.error("UpdateMyStock", "Data collection stockCashData is Null. code: %s"%code[0]) else: LoggerFactory.error("UpdateMyStock", "Data collection stockBasicData is Null. code: %s"%code[0]) else: LoggerFactory.info("UpdateMyStock", "There is no Stocks in the pool yet....Waiting for auto select!")
if __name__=="__main__": dboper = DBOperation.DBOperation() # UpdateMyStock(dboper) # exit while True: mytime = int(time.strftime("%H%M%S")) if( 92000 <= mytime <= 113030 ) or ( 130000 <= mytime <= 150030 ): # threading.Thread(target=UpdateMyStock, args=(dboper)).start() # time.sleep(0.5) UpdateMyStock(dboper) elif( mytime < 90000 or mytime > 150100): LoggerFactory.info("UpdateMyStock", "Out of trade time now...exit!") break else: LoggerFactory.info("UpdateMyStock", "It's not in trade time yet, waiting for market to open!!") time.sleep(30)
def GetJJBasicData(dboper): mytimequery = "str_to_date('%s'," % time.strftime( '%Y-%m-%d') + "'%Y-%m-%d')" # mytimequery = "str_to_date('2018-03-30', '%Y-%m-%d')" # sql_jjData = "select a.code, a.codealias, a.name, a.industry, b.initprice, b.price, c.cashin, c.cashout, c.netvalue, c.turnover, c.changeratio, c.amountp, c.amountn \ # from stocks a, jjtemp b, jjstocks c where a.code = b.code and b.code = c.code and b.mtime >=%s \ # and c.mtime >=%s and b.price > b.initprice and b.initprice >0 " % (mytimequery, mytimequery) sql_jjData = "select a.code, a.codealias, a.name, a.industry, b.cashin, b.cashout, b.netvalue, b.turnover, b.changeratio, b.amountp, b.amountn \ from stocks a, jjstocks b where a.code = b.code and b.mtime >=%s" % ( mytimequery) sql_mystock = "select code from mystocks where mtype=0" LoggerFactory.debug("sql_jjData", sql_jjData) LoggerFactory.debug("sql_mystock", sql_mystock) jjDataCol = dboper.queryData(sql_jjData) myStockDataCol = dboper.queryData(sql_mystock) stockDataList = [] codelist = [] if myStockDataCol is not None: for data in myStockDataCol: codelist.append(data[0]) if jjDataCol is not None and len(jjDataCol) > 0: for jjdata in jjDataCol: if checkExist(jjdata[0], codelist): LoggerFactory.debug( "SelectJJStock_rule1", "%s This stock already exists in the table mystocks..." % data[0]) else: stockData = {} stockData['code'] = jjdata[0] stockData['codealias'] = jjdata[1] stockData['name'] = jjdata[2] stockData['industry'] = jjdata[3] stockData['cashin'] = jjdata[4] stockData['cashout'] = jjdata[5] stockData['netvalue'] = jjdata[6] stockData['turnover'] = jjdata[7] stockData['changeratio'] = jjdata[8] stockData['amountp'] = jjdata[9] stockData['amountn'] = jjdata[10] conceptstring = GetStockConcept(dboper, stockData['code']) if conceptstring is not None: stockData['conceptstring'] = conceptstring else: stockData['conceptstring'] = "None" stockDataList.append(stockData) return stockDataList else: LoggerFactory.error("SelectJJStock_rule1", "There is no data selected from rtstocks") return None
conn.close() return True except Exception, e: conn.rollback() LoggerFactory.error( "sqlExecute", "SQL statement execution failed!" + "\n" + "Error message: " + str(e) + "\n" + sql) return False else: LoggerFactory.error("sqlExecute", "Cannot get DB connection!") return False def queryData(self, sql): conn = self.pool.connection() if conn is not None: LoggerFactory.debug("queryData", sql) # self.logger.debug( sql ) cursor = conn.cursor() cursor.execute(sql)
def download(localSyncFolderConfig, cloudSyncFolderConfig, backup): cloudConfig = CloudConfig() try: pyCloud = PyCloud(cloudConfig.username, cloudConfig.password) folderinfo = pyCloud.createfolderifnotexists( path=cloudSyncFolderConfig.folder) listFolderinfo = pyCloud.listfolder(path=cloudSyncFolderConfig.folder) metadata = listFolderinfo["metadata"] contents = metadata["contents"] backupfolder = os.path.join(localSyncFolderConfig.backupfolder, Utils.timestamp()) for file in contents: if (not file["isfolder"]): filename = file["name"] LoggerFactory.getLogger().info("filename=" + filename + "," + "from=" + cloudSyncFolderConfig.folder) filelink = pyCloud.getfilelink( path=cloudSyncFolderConfig.folder + "/" + filename) downloadlink = 'https://' + filelink["hosts"][0] + filelink[ "path"] LoggerFactory.getLogger().info("-> download to=" + localSyncFolderConfig.tmpfolder) urllib.request.urlretrieve( downloadlink, os.path.join(localSyncFolderConfig.tmpfolder, filename)) if backup: LoggerFactory.getLogger().info( "-> backup from=" + localSyncFolderConfig.tmpfolder + "," + "to=" + backupfolder) Utils.copyToFolder(filename, localSyncFolderConfig.tmpfolder, backupfolder) LoggerFactory.getLogger().info( "-> rename from=" + localSyncFolderConfig.tmpfolder + "," + "to=" + localSyncFolderConfig.folder) os.rename( os.path.join(localSyncFolderConfig.tmpfolder, filename), os.path.join(localSyncFolderConfig.folder, filename)) LoggerFactory.getLogger().info("-> delete from=" + cloudSyncFolderConfig.folder) pyCloud.deletefile(path=cloudSyncFolderConfig.folder + "/" + filename) except: LoggerFactory.getLogger().error(sys.exc_info())