def sExport(self, mode, dialog): print "I: ", self.name, ": export" if (mode == self.eTABLE): format = "Csv" elif mode == self.eWWW: format = "Htm" elif mode == self.eDB: format = "Db" else: print "sExport: ERROR" '''get filename, gui dialog, save path to datastore''' if dialog: print "as", "dir_export_"+format.lower() filename = uiAccesories.getSaveFileName("Export table "+self.name+" to "+format.upper(),"dir_export_"+format.lower(), format.upper()+" Files (*."+format.lower()+")", self.name+"."+format.lower()) else: filename = utils.get_filename("export/"+format.lower()+"/"+self.name+"_"+dstore.GetItem("racesettings-app",['race_name'])+"."+format.lower()) if(filename == ""): return title = "Table '"+self.name + "'"+format.upper()+" Export" '''Write to the file''' if format == "Csv": #export times (with collumn's names) try: self.model.df.to_csv(filename, ";", mode="w", index = False, encoding = "utf8", float_format = "%g") except IOError: uiAccesories.showMessage(self.name+" Export warning", "File "+filename+"\nPermission denied!") elif format == "Htm": '''Write to HTML file''' try: html_page = ew_html.Page_table(filename, title = dstore.GetItem("racesettings-app", ['race_name']), styles= ["css/results.css",], lists = exportRows, keys = exportHeader) html_page.save() uiAccesories.showMessage(title, "Succesfully ("+filename+") : "+ time.strftime("%H:%M:%S", time.localtime()), msgtype = MSGTYPE.statusbar) except IOError: uiAccesories.showMessage(title, "NOT succesfully \n\nCannot write into the file ("+filename+")")
def ExportToHtmFiles(dfs, type): print "ExportToHtmFiles" #return info exported = {} #get filename, gui dialog racename = dstore.GetItem("racesettings-app", ['race_name']) dirname = utils.get_filename("export/www/") for i in range(0, NUMBER_OF.EXPORTS): if (tabExportColumns.IsEnabled(i, "htm") == False): continue df = pd.DataFrame() if(type == eHTM_EXPORT): df = dfs[i] #filter to checked columns columns = GetExportCollumns(df, i) if(len(df) != 0): #get winner and compute GAPs for nr in range(0, NUMBER_OF.TIMESCOLUMNS): df = AddGap(df, nr) df = df[columns] else: df = pd.DataFrame(columns=columns) css_filename = dstore.GetItem("export_www", [i, "css_filename"]) js_filename = dstore.GetItem("export_www", [i, "js_filename"]) title = dstore.GetItem("racesettings-app", ['race_name']) elif(type == eHTM_EXPORT_LOGO): df = pd.DataFrame() css_filename = u"css/logo.css" js_filename = u"" title = "Časomíra Ewitis - <i>Vy závodíte, my měříme..</i>" else: print "Error: This export is not defined!", type return #complete export #if(len(df) != 0) or (type == self.eHTM_EXPORT_LOGO): filename = utils.get_filename(dirname+"e"+str(i+1)+"_"+racename+".htm") #convert header EN => CZ tocz_dict = dstore.GetItem("export", ["names", i]) df = df.rename(columns = tocz_dict) #firsttimes nr = dstore.GetItem("export_www", [i, "firsttimes"]) if nr != 0: df = df.head(nr) #lasttimes nr = dstore.GetItem("export_www", [i, "lasttimes"]) if nr != 0: df = df.tail(nr) #transpose if dstore.GetItem("export_www", [i, "transpose"]): aux_columns = df.columns df = df.T df.insert(0,"", aux_columns) ExportToHtmFile(filename, Columns2Cz(df, i), css_filename, js_filename, title) exported["total"] = len(df) return exported
def Export(utDf, export_type = eCSV_EXPORT): # 3DFs for 3 exports exportDf = [pd.DataFrame()] * NUMBER_OF.EXPORTS if len(utDf) != 0: #update export df for i in range(0, NUMBER_OF.EXPORTS): aux_df = utDf.copy() if (tabExportColumns.IsEnabled(i) == False): continue #get export filtersort filtersort = dstore.GetItem('export_filtersort', [i]) filter = filtersort['filter'] sort1 = filtersort['sort1'].lower() sort2 = filtersort['sort2'].lower() sortorder1 = True if(filtersort['sortorder1'].lower() == "asc") else False sortorder2 = True if(filtersort['sortorder2'].lower() == "asc") else False #filter aux_df = df_utils.FilterEmptyColumns(aux_df, filter.split(" ")) #aux_df = self.joinedDf[(aux_df[column1].notnull()) & (self.joinedDf['user_id']!=0)] #last time from each user? aux_df = aux_df.sort("timeraw") if("last" in filter): aux_df = aux_df.groupby("nr", as_index = False).last() #beautify aux_df = aux_df.where(pd.notnull(aux_df), None) aux_df.set_index('id', drop=False, inplace = True) #sort if(sort2 in aux_df.columns): aux_df = aux_df.sort([sort1, sort2], ascending = [sortorder1, sortorder2]) else: aux_df = aux_df.sort(sort1, ascending = sortorder1) #add "order in category" -> "3./Kategorie XY" for oc in range(0, NUMBER_OF.EXPORTS): ordercatX = 'ordercat'+str(oc+1) orderX = 'order'+str(oc+1) #aux_df[ordercatX] = aux_df[orderX].astype(str)+"./"+aux_df.category aux_df[ordercatX] = aux_df[orderX].astype(float).map('{:,g}'.format)+"./"+aux_df.category # #get winner and compute GAPs for nr in range(0, NUMBER_OF.TIMESCOLUMNS): gapX = 'gap'+str(nr+1) lapX = 'lap'+str(nr+1) timeX = 'time'+str(nr+1) try: winnerX = aux_df.sort([lapX,timeX], ascending = [False, True]).iloc[0] if (lapX in winnerX) and (timeX in winnerX): aux_df[gapX] = aux_df.apply(lambda row: GetGap(row[timeX],row[lapX], winnerX[timeX], winnerX[lapX]), axis = 1) else: aux_df[gapX] = None except: aux_df[gapX] = None #lapsexport if (dstore.GetItem('export_filtersort', [i, "onerow"]) != 0): aux_df = ToLapsExport(aux_df) #print "PRED",i, aux_df.head(2), aux_df.dtypes ConvertToInt(aux_df) #print "PO",i, aux_df.head(2), aux_df.dtypes #add missing users with DNS status if export_type == eCSV_EXPORT_DNS: #print "==========================AddMissingUsers", i aux_df = AddMissingUsers(aux_df) #beautify once again aux_df = aux_df.where(pd.notnull(aux_df), None) aux_df.set_index('id', drop=False, inplace = True) ConvertToInt(aux_df) exportDf[i] = aux_df #export complete/ category and group results from export DFs exported = {} if (export_type == eCSV_EXPORT) or (export_type == eCSV_EXPORT_DNS): #get dirname racename = dstore.GetItem("racesettings-app", ['race_name']) dirname = utils.get_filename("export/"+timeutils.getUnderlinedDatetime()+"_"+racename+"/") try: os.makedirs(dirname) except WindowsError: pass exported = ExportToCsvFiles(exportDf, dirname) exported.update(ExportToSmsFiles(exportDf, dirname)) elif (export_type == eHTM_EXPORT) or (export_type == eHTM_EXPORT_LOGO): exported = ExportToHtmFiles(exportDf, export_type) else: print "Error: This export is not defined!" return exported
def ExportToCsvFiles(dfs, dirname): #ret = uiAccesories.showMessage("Results Export", "Choose format of results", MSGTYPE.question_dialog, "NOT finally results", "Finally results") #if ret == False: #cancel button # return #return info exported = {} #get dirname racename = dstore.GetItem("racesettings-app", ['race_name']) #dirname = utils.get_filename("export/"+timeutils.getUnderlinedDatetime()+"_"+racename+"/") #print "DN", dirname #os.makedirs(dirname) for i in range(0, NUMBER_OF.EXPORTS): if (tabExportColumns.IsEnabled(i, "csv") == False): continue #get df df = dfs[i] filtersort = dstore.GetItem('export_filtersort', [i]) #get firstline (racename, time) header = dstore.GetItem("export_header", [i]) racename = header["racename"].replace("%race%", dstore.GetItem("racesettings-app", ['race_name'])) headertext = header["headertext"].replace("%time%", timeutils.getCurrentDateTime()) firstline = [racename, headertext] #filter to checked columns columns = GetExportCollumns(df, i) #workarround #replace time with DNF for long times #df = self.DNF_workarround(df) #total export if "total" in filtersort["type"]: #print i, "TOTAL" if(len(df) != 0): #df = AddOrderToMissingUsers(df) #get winner and compute GAPs for nr in range(0, NUMBER_OF.TIMESCOLUMNS): #print df.columns #df = AddGap(df, nr) pass #print df[["nr","gap1"]] #print "================" # filename = utils.get_filename("e"+str(i+1)+"_t_"+racename) ExportToCsvFile(dirname+filename+".csv", Columns2Cz(df[columns], i), firstline) exported[filename] = len(df) #category export if "categories" in filtersort["type"]: #print i, "CATEGORIES" c_df = dfs[i] c_df = c_df.set_index("category", drop = False) category_groupby = c_df.groupby(c_df.index) for c_name, c_df in category_groupby: c_df = AddOrderToMissingUsers(c_df) if(len(c_df) != 0): #get winner and compute GAPs for nr in range(0, NUMBER_OF.TIMESCOLUMNS): c_df = AddGap(c_df, nr) category = tableCategories.model.getCategoryParName(c_name) category = category.to_dict() #get secondline (!!c_name used also for filename!!) c_name = header["categoryname"].replace("%category%", c_name) secondline = [c_name, header["description"].replace("%description%", category["description"])] #write to file filename = utils.get_filename("e"+str(i+1)+"_c_"+c_name) ExportToCsvFile(dirname+filename+".csv", Columns2Cz(c_df[columns], i), firstline, secondline) exported[filename] = len(c_df) #group export if "groups" in filtersort["type"]: #print i, "GROUPS" g_df = dfs[i] for x in range(1,11): g_label = "g"+str(x) categories = tableCategories.model.getCategoriesParGroupLabel(g_label) aux_df = g_df[g_df["category"].isin(categories["name"])] if(aux_df.empty == False): #get winner and compute GAPs for nr in range(0, NUMBER_OF.TIMESCOLUMNS): aux_df = AddGap(aux_df, nr) group = tableCGroups.model.getCGrouptParLabel(g_label) filename = utils.get_filename("e"+str(i+1)+"_"+g_label+"__"+group["name"]) ExportToCsvFile(dirname+filename+".csv", Columns2Cz(aux_df[columns], i), firstline, [group["name"], group["description"]]) exported[filename] = len(aux_df) return exported
def ExportToSmsFiles(dfs, dirname): exported = {} # #get dirname racename = dstore.GetItem("racesettings-app", ['race_name']) # dirname = utils.get_filename("export/"+timeutils.getUnderlinedDatetime()+"_"+racename+"/") # try: # os.makedirs(dirname) # except WindowsError: # pass for i in range(0, NUMBER_OF.EXPORTS): if (tabExportColumns.IsEnabled(i, "sms") == False): continue #get df df = dfs[i] if(len(df) != 0): #add sms-text as additional column mystr = dstore.GetItem("export_sms", ['text',i]) mystr = mystr.replace("%racename%", dstore.GetItem("racesettings-app", ['race_name'])) df["sms_text"] = df.apply(lambda row: replaceSmsTags(mystr, row), axis = 1) #create empty frame df_sms = pd.DataFrame(columns=["phone_nr", "prio", "sms_text"]) #phone numbers are in phonecol (o1/o2/o3/o4) for phonecol in dstore.GetItem("export_sms", ['phone_column']): if phonecol in df: #drop empty rows df_temp = df[df[phonecol] != u""] #replace # => ' df_temp = df_temp.copy() #SettingWithCopyWarning: df_temp[phonecol] = df_temp[phonecol].str.replace("#","'") #add forward sms df_forwards = pd.DataFrame() for forward in dstore.GetItem("export_sms", ['forward']): if (forward["phone_nr"] != 0): df_forward = df_temp[df_temp.nr == forward["user_nr"]].copy() df_forward[phonecol] = forward["phone_nr"] df_forwards = df_forwards.append(df_forward, ignore_index=True) #df_forwards["sms_text"] = "Fwd:" + df_forwards["sms_text"] df_temp = df_temp.append(df_forwards, ignore_index=True) #reduce to 2 columns and rename phonecol (o1/o2/o3/o4 -> phone_nr) df_temp = df_temp[[phonecol, "sms_text"]] df_temp.columns = ["phone_nr", "sms_text"] #append numbers from this collumn df_sms = df_sms.append(df_temp, ignore_index=True) # filename = utils.get_filename("e"+str(i+1)+"_sms_"+racename) ExportToCsvFile(dirname+filename+".csv", df_sms, firstline = None, secondline = None) exported[filename] = len(df_sms) return exported