def baseLine(factory, device, measurePoint, year, month, day, hashname, day_point=96): date = datetime.datetime(year, month, day) start = date - datetime.timedelta(days=8) end = date + datetime.timedelta(days=2) print(start) print(date) data, device_index = Tool.getP_totalBySQL( factory, device, measurePoint, [start.strftime("%Y-%m-%d"), end.strftime("%Y-%m-%d")]) # data, device_index = Tool.getP_totalBySQL(factory, device, measurePoint) baseValue, trueValue = baseline(data, device_index, year, month, day, day_point) resultDict = {'baseValue': list(baseValue), 'trueValue': list(trueValue)} try: resultJson = json.dumps(resultDict, ensure_ascii=False) except Exception as e: e.with_traceback() sql = "insert into baseline (hashstr,json)values ('%s','%s')" % ( hashname, resultJson) Tool.excuteSQL(sql) return hashname
def correlationFunc(factory, device, measurePoint, timeRange, hashname): if device == "-1": P_total, device_index = Tool.getP_totalBySQL(-1, device, measurePoint, timeRange) else: P_total, device_index = Tool.getP_totalBySQL(factory, device, measurePoint, timeRange) corr_device = correlation(P_total, device_index, 3, 96) addSelfDeviceCorrIndex = corr_device.index.tolist() addSelfDeviceCorrIndex.append(device) corrData = P_total.loc[:, addSelfDeviceCorrIndex] corrDataDict = { 'timestamp': corrData.index.strftime("%Y-%m-%d %H:%M:%S").values.tolist(), } for i in addSelfDeviceCorrIndex: corrDataDict[i] = corrData.loc[:, i].values.tolist() corrDataJson = json.dumps(corrDataDict, ensure_ascii=False) # keys:带有设备的文件名 values:相似度 a, b = corr_device.keys(), corr_device.values resultDict = {} for i, j in zip(a, b): resultDict[i] = j resultJson = json.dumps(resultDict, ensure_ascii=False) sql = ''' insert into sjtudb.correlation values('%s','%s','%s') ''' % ( hashname, resultJson, corrDataJson) Tool.excuteSQL(sql) return hashname
def accept(self): ui = self.createToolUi ui.hide() setStatus("hidden") mode = getGUIMode() if mode == "AddingToolFromIcon": self.tool = Tool(self.selectedObject) p = self.setToolProperties() self.tool.getObject().Label = ui.nameEdit.text() self.tool.setProperties(p, self.tool.getObject()) setGUIMode("None") return True elif mode == "EditingToolFromIcon": self.tool = self.selectedObject.Proxy self.tool.Label = ui.nameEdit.text() p = self.setToolProperties() self.tool.setProperties(p, self.selectedObject) setGUIMode("None") return True elif mode == "AddingToolFromGUI": p = self.setToolProperties() setGUIProperties(ui.nameEdit.text(), p) return True elif mode == "EditingToolFromGUI": p = self.setToolProperties() setGUIProperties(ui.nameEdit.text(), p) return True else: print "unexpected mode (" + mode + ")" return False
def get_zhuanlan_comment(headers, number, fp=None): tool = Tool() writer = csv.writer(fp) url_web = 'https://zhuanlan.zhihu.com/api/posts/{}/comments?limit=10&offset=' #专栏评论 base_url = url_web.format(number) + '{}' url_number = 'https://zhuanlan.zhihu.com/p/' + number #专栏文章url request = requests.get(url_number, headers=headers) soup = BeautifulSoup(request.text, 'lxml') title = soup.select('head > title') commentCount = soup.select( '#react-root > div > div > div.Layout-main.av-card.av-paddingBottom.av-bodyFont.Layout-titleImage--normal > div.PostComment > div.BlockTitle.av-marginLeft.av-borderColor.PostComment-blockTitle > span.BlockTitle-title' ) commentCount = commentCount[0].get_text().split()[0] if commentCount == '还没有评论': return all_comment_num = int(commentCount) if all_comment_num % 10 != 0: count = 1 + all_comment_num // 10 else: count = all_comment_num // 10 for i in range(count): url_contents = base_url.format(i * 10) wb_data = requests.get(url_contents, headers=headers) js = json.loads(wb_data.content) for each in js: con = tool.replace(each['content']) writer.writerow([title[0].get_text(), con]) print(title[0].get_text(), con) time.sleep(random.uniform(2, 4)) # get_zhuanlan_comment(headers,'28047189')
def clusterFunc(factory, device, measurePoint, timeRange, hashname): P_total, device_index = Tool.getP_totalBySQL(factory, device, measurePoint, timeRange) kmeans_hour, labels_hour, kmeans_day, labels_day = cluster( P_total, device_index, 96) hourList = kmeans_hour.tolist() dayList = kmeans_day.tolist() # print(dayList) hourX = len(hourList[0]) dayX = len(dayList[0]) resultDict = { 'hourX': list(range(0, hourX)), 'dayX': list(range(0, dayX)), 'hourList': hourList, 'dayList': dayList } try: resultJson = json.dumps(resultDict, ensure_ascii=False) except Exception as e: e.with_traceback() sql = "insert into clusterresult (hashstr,json)values ('%s', '%s')" % ( hashname, resultJson) Tool.excuteSQL(sql) return hashname
def __init__(self, baseUrl, seeLz, floorTag): self.baseUrl = baseUrl self.user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' self.headers = {'User-Agent' : self.user_agent, 'Content-Type':'text/html; charset=UTF-8', 'Vary':'Accept-Encoding'} self.seeLz = '?see_lz=' + str(seeLz) self.tool = Tool() self.floor = 1 self.defaultTitle = u"百度贴吧" self.floorTag = floorTag
def load_default(self): self.Clear() try: cad.OpenXmlFile(wx.GetApp().cam_dir + "/default.tooltable", self) except: # no default file found, add 2 tools cad.AddUndoably( Tool(diameter=3.0, type=TOOL_TYPE_SLOTCUTTER, tool_number=1), self, None) cad.AddUndoably( Tool(diameter=6.0, type=TOOL_TYPE_SLOTCUTTER, tool_number=2), self, None) return
def get_contents(headers, number, fp): tool = Tool() writer = csv.writer(fp) url_web = 'https://www.zhihu.com/api/v4/questions/{}/answers?include=data%5B*%5D.is_normal%2Cadmin_closed_comment%2Creward_info%2Cis_collapsed%2Cannotation_action%2Cannotation_detail%2Ccollapse_reason%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Ccreated_time%2Cupdated_time%2Creview_info%2Cquestion%2Cexcerpt%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%2Cupvoted_followees%3Bdata%5B*%5D.mark_infos%5B*%5D.url%3Bdata%5B*%5D.author.follower_count%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&limit=20&sort_by=default&offset=' base_url = url_web.format(number) + '{}' url_number = 'https://www.zhihu.com/question/' + str(number) wb = requests.get(url_number, headers=headers) sp = BeautifulSoup(wb.text, 'lxml') num_sel = sp.select( '#QuestionAnswers-answers > div > div > div.List-header > h4 > span') follower = sp.select( '#root > div > main > div > div > div.QuestionHeader > div.QuestionHeader-content > div.QuestionHeader-side > div > div > div > button > div.NumberBoard-value' ) title = sp.select( '#root > div > main > div > div > div.QuestionHeader > div.QuestionHeader-content > div.QuestionHeader-main > h1' ) browsed = sp.select( '#root > div > main > div > div > div.QuestionHeader > div.QuestionHeader-content > div.QuestionHeader-side > div > div > div > div.NumberBoard-item > div.NumberBoard-value' ) if num_sel == []: return all_answer_num = int(num_sel[0].get_text().split()[0]) if all_answer_num % 20 != 0: count = 1 + all_answer_num // 20 else: count = all_answer_num // 20 for i in range(count): url_contents = base_url.format(i * 20) wb_data = requests.get(url_contents, headers=headers) js = json.loads(wb_data.content) for each in js['data']: con = tool.replace(each['content']) timestamp = each['created_time'] # 转换成localtime time_local = time.localtime(timestamp) # 转换成新的时间格式 dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local) times = time_local.tm_mon + time_local.tm_mday / 100 if (times < 6.18 or times > 8.28): pass else: writer.writerow([ title[0].get_text(), follower[0].get_text(), browsed[0].get_text(), dt, con ]) print(title[0].get_text(), follower[0].get_text(), browsed[0].get_text(), dt, con) time.sleep(random.uniform(2, 4))
def getClearSysMsgSql(start, end): dbIndex = None if start == end: dbIndex = start dbs = getDbs(dbIndex) sqls = '' for d in dbs: companyId = str(d[1]) index = str(d[3]) dbName = "curato" + index if not Tool.dbExist(dbName): continue tblName = dbName + '.' + companyId + '_message' sql = ''' DELETE FROM %s WHERE sender = 0 ; ''' sql = sql % tblName sqls += sql return sqls
def getExtraSql(start, end): dbIndex = None if start == end: dbIndex = start dbs = getDbs(dbIndex) sqls = '' for d in dbs: companyId = str(d[1]) index = str(d[3]) dbName = "curato" + index if not Tool.dbExist(dbName): continue tblName = dbName + '.' + companyId + '_report_read_info' sql = ''' ALTER TABLE %s MODIFY COLUMN `id` int(11) NOT NULL AUTO_INCREMENT FIRST ; ''' sql = sql % tblName sqls += sql return sqls
def oldMain(factory, line, device, measurePoint='三相总有功功率'): # print(factory) # print(line) # print(device) # # dataDir = "data/"+factory+"/" # # measurePoint = '' # 所分析数据项 # # device = '低压总出' # 所要预测设备(全建筑总出) # # if os.path.exists('data\\tmp\\P_total.csv'): # # P_total = pd.read_csv('data\\tmp\\P_total.csv', index_col=0) # # else: # P_total = readData(dataDir, (measurePoint)) # P_total.to_csv('data/tmp/P_total.csv') # P_total.index = pd.to_datetime(P_total.index) # # 补全device名并得到device_index # for i in range(P_total.shape[1]): # if device in P_total.columns[i]: # device = P_total.columns[i] # device_index = i # if device_index == -1: # raise NameError('Check the device!') # 不需要时间参数 # 功能一:基于自适应时滞pearson相关系数找最相关设备 P_total, device_index = Tool.getP_total(factory, line, device, measurePoint) print("—————————————————一、时空相关性分析(图1)—————————————————————") corr_device = correlation(P_total, device_index, 3) print('corr_device:', corr_device) # 功能二:进行负荷预测模型的训练与测试 # 需要返回什么数据/模型可自行修改函数 print("—————————————————二、用户负荷建模与预测(图2)—————————————————————") a, b = train_forecast(P_total, corr_device, device_index) return a.tolist(), b.tolist()
def olapRotate(user=None, device=None, timeRange=None, metric=None, groups: list = None, agg=None, hashname=None): data = olapSlice(user, device, timeRange, metric, groups, agg, 1) data = data.T resultJson = getRe(data) sql = "insert into olapresult (hashname,json)values ('%s','%s')" % ( hashname, resultJson) Tool.excuteSQL(sql) return hashname
def getNewSql(start, end): dbIndex = None if start == end: dbIndex = start dbs = getDbs(dbIndex) sqls = '' for d in dbs: companyId = str(d[1]) index = str(d[3]) dbName = "curato" + index if not Tool.dbExist(dbName): continue tblName = dbName + '.' + companyId + '_schedule' # sql = ''' # INSERT INTO t_level (company_id,level_name,sort,is_deleted) values # ('%s','总经理级别','1','0'), # ('%s','副总经理级别','2','0'), # ('%s','总监级别','3','0'), # ('%s','经理级别','4','0'), # ('%s','主管级别','5','0'), # ('%s','员工级别','6','0'); # ''' % ((companyId,)*6) sql = ''' ALTER TABLE %s ADD COLUMN `week_day` varchar(255) NULL COMMENT '工作日,周一到周日,数字表示' AFTER `rest`; ''' % tblName sqls += sql return sqls
def predictRealData(factory, device, measurePoint, year, month, day): P_total, device_index = Tool.getP_totalBySQL(factory, device, measurePoint) P_total = P_total[year + '-' + month + '-' + day] day_point = 480 # 一天为480个数据点 P_forecast = P_total.iloc[:, device_index] y_total = P_forecast[day_point * 7:].reset_index(drop=True) return np.array(y_total)[-7 * day_point:].tolist()
def olapDrill(user=None, device=None, timeRange=None, metric=None, timeMode=0, zoneMode=0, hashname=None): totalData, deviceList, metricList = Tool.olapData(timeRange) dataDrill = Drill(totalData, deviceList, metricList, user, device, timeRange, metric, timeMode, zoneMode) print("drill") resultJson = getRe(dataDrill) sql = "insert into olapresult (hashname,json)values ('%s','%s')" % ( hashname, resultJson) Tool.excuteSQL(sql) # dataDrill.to_csv(os.path.join(os.path.dirname(os.path.abspath(__file__)), hashname+".csv")) return hashname
def predictFunc(factory, device, measurePoint, timeRange, hashname): resultFileName = hashname[0:15] # insertSQL = '''insert into sjtudb.algorithmresult values('%s','%s',null)''' % (parameterHash, resultFileName) # Tool.excuteSQL(insertSQL) P_total, device_index = Tool.getP_totalBySQL(factory, device, measurePoint, timeRange) corr_device = correlation(P_total, device_index, 3, 96) a, b = train_forecast(P_total, corr_device, device_index, 96) lastResult = {'y_true': a, 'y_pred': b} jsonStr = json.dumps(lastResult) insertSQL = '''insert into sjtudb.algorithmresult values('%s','%s','%s')''' % ( hashname, resultFileName, jsonStr) # print(insertSQL) Tool.excuteSQL(insertSQL) return hashname
def __init__(self, host, comms, key, user, ): self.logger = MyLogger().getLogger(); self.logger.info('AutoD initial beginning~~~') self.tool = Tool() self.host = host self.comms = comms if not key: self.child = run('ssh {0}@{1}'.format(user, host)) else: self.child = run('ssh -i {0} {1}@{2}'.format(key, user, host))
def getClearSql(start, end): dbIndex = None if start == end: dbIndex = start dbs = getDbs(dbIndex) sqls = '' for d in dbs: companyId = str(d[1]) index = str(d[3]) dbName = "curato" + index if not Tool.dbExist(dbName): continue tblName = dbName + '.' + companyId + '_apply_config' sql = ''' DELETE FROM %s; INSERT INTO %s (type,company,apply_name,process_type,status,create_time) VALUES (1,1, '请假申请',1, 1,NOW()), (2,1, '加班申请',1, 1,NOW()), (3,1, '外勤申请',1, 1,NOW()), (4,1, '补签申请',1, 1,NOW()), (5,1, '通用申请',1, 1,NOW()); ''' sql = sql % (tblName, tblName) # 申请,排班,考勤,公告,日报 # apply, apply_info; schedule, default_schedule; attendance, attendance_record; notice; report; prefix = dbName + '.' + companyId + '_' to_be_clear = [ 'apply', 'apply_info', 'schedule', 'default_schedule', 'attendance', 'attendance_record', 'notice', 'report' ] clears = [] for i in to_be_clear: clears.append(prefix + i) clears = tuple(clears) sql += ''' DELETE FROM %s; DELETE FROM %s; DELETE FROM %s; DELETE FROM %s; DELETE FROM %s; DELETE FROM %s; DELETE FROM %s; DELETE FROM %s; ''' % clears sqls += sql return sqls
class AutoD: def __init__(self, host, comms, key, user, ): self.logger = MyLogger().getLogger(); self.logger.info('AutoD initial beginning~~~') self.tool = Tool() self.host = host self.comms = comms if not key: self.child = run('ssh {0}@{1}'.format(user, host)) else: self.child = run('ssh -i {0} {1}@{2}'.format(key, user, host)) def destroyed(self): self.logger.info('Destoryed the ssh login ~~~ ') self.child.close(force=True) def exec_command(self): self.logger.info('AutoD.exec_command ') self.tool.jdk_exist() print('command is {}'.format(self.comms))
def load_default(self): self.ClearChildren() try: f = open(HeeksCNC.heekscnc_path + "/default_tools.txt") except: # no default file found, add 2 tools self.Add( Tool(diameter=3.0, type=TOOL_TYPE_SLOTCUTTER, tool_number=1)) self.Add( Tool(diameter=6.0, type=TOOL_TYPE_SLOTCUTTER, tool_number=2)) return import cPickle from Object import next_object_index while True: try: tool = cPickle.load(f) except: break # end of file tool.index = next_object_index next_object_index = next_object_index + 1 self.Add(tool) f.close()
def olapSlice(user=None, device=None, timeRange=None, metric=None, groups: list = None, agg=None, rotate=None, parameterHash=None): totalData, deviceList, metricList = Tool.olapData(timeRange) dataSlice = pd.DataFrame() if timeRange == None and metric == None and groups == None: # 1.选定[用户+设备]切片 dataSlice = Slice(totalData, deviceList, metricList, user, device) elif timeRange != None and metric == None and groups == None: # 2.选定[用户+设备+时间段]切块 dataSlice = Slice(totalData, deviceList, metricList, user, device, timeRange) elif timeRange != None and metric != None and groups == None: # 3.选定[用户+设备+时间段+属性]切块 dataSlice = Slice(totalData, deviceList, metricList, user, device, timeRange, metric) elif timeRange != None and metric != None and groups != None: dataSlice = Slice(totalData, deviceList, metricList, user, device, timeRange, metric, groups, agg) print("slice") if rotate == None: resultJson = getRe(dataSlice) sql = "insert into olapresult (hashname,json)values ('%s','%s')" % ( parameterHash, resultJson) Tool.excuteSQL(sql) return parameterHash # dataSlice.to_csv(os.path.join(os.path.dirname(os.path.abspath(__file__)), parameterHash + '.csv')) return dataSlice
def tool_dispatcher(tool): tid, ip = setup_log_vars() lggr = setup_local_logger(tid, ip) TOL = Tool() data = getattr(TOL, tool.lower())(request) if hasattr(current_user, 'id'): data['handle'] = current_user.id data['current_user'] = current_user o = urlparse.urlparse(request.url) data['host_url'] = urlparse.urlunparse( (URL_SCHEME, o.netloc, '', '', '', '')) t = time.time() data['today'] = time.strftime("%A %b %d, %Y ", time.gmtime(t)) if 'redirect' in data: return data else: return render_template(data['template'], data=data)
def __init__(self, labyrinth): """ initializing Game Manager """ self.labyrinth = labyrinth # player & guard positioning position_p = self.labyrinth.get_player_position() position_g = self.labyrinth.get_guard_position() self.MacGyver = Player(position_p[0], position_p[1]) self.guard = Guard(position_g[0], position_g[1]) # tools random positioning from an empty spaces list empty_spaces = self.labyrinth.get_empty_spaces() self.tools = [] self.symbols = ['E', 'N', 'T'] self.names = ['éther', 'aiguille', 'tube'] for idx, symbol in enumerate(self.symbols): tmp_pos = random.choice(empty_spaces) temp_tool = Tool(tmp_pos[0], tmp_pos[1], symbol, self.names[idx]) self.tools.append(temp_tool) empty_spaces.remove(tmp_pos) for tool in self.tools: self.labyrinth.write_symbol((tool.x, tool.y), tool.symbol)
def get_tools_list(self, TOOL_FILE_PATH): tool_list = [] cur_tool_obj = None with open(TOOL_FILE_PATH, "r", errors='ignore', encoding='utf-8') as reader: for line in reader: line = line.strip() if (line == ""): continue tool_pattern = re.compile(TOOL) tool_id_pattern = re.compile(TOOL_ID) tool_name_pattern = re.compile(TOOL_NAME) tool_description_pattern = re.compile(TOOL_DESCR) tool_url_pattern = re.compile(TOOL_URL) tool_supp_smells_pattern = re.compile(TOOL_SUPP_SMELL) tool_supp_langs_pattern = re.compile(TOOL_SUPP_LANGS) tool_end_pattern = re.compile(TOOL_END) if (re.search(tool_pattern, line) != None): cur_tool_obj = Tool() elif (re.search(tool_end_pattern, line) != None): tool_list.append(cur_tool_obj) elif (re.search(tool_id_pattern, line) != None): cur_tool_obj.id = re.split(TOOL_ID, line)[1].strip() elif (re.search(tool_name_pattern, line) != None): cur_tool_obj.name = re.split(TOOL_NAME, line)[1].strip() elif (re.search(tool_description_pattern, line) != None): cur_tool_obj.description = re.split(TOOL_DESCR, line)[1].strip() elif (re.search(tool_url_pattern, line) != None): cur_tool_obj.url = re.split(TOOL_URL, line)[1].strip() elif (re.search(tool_supp_smells_pattern, line) != None): cur_tool_obj.supported_smells.append( re.split(TOOL_SUPP_SMELL, line)[1].strip()) elif (re.search(tool_supp_langs_pattern, line) != None): cur_tool_obj.supported_langs = re.split( TOOL_SUPP_LANGS, line)[1].strip() return tool_list
def apply(self): ui = self.createTTUi if self.dirty == True: if self.selectedObject == None: obj = FreeCAD.ActiveDocument.addObject( 'App::DocumentObjectGroupPython', "ToolTable") ViewToolTable(obj.ViewObject) obj.addProperty("App::PropertyString", "ObjectType") obj.ObjectType = "ToolTable" obj.setEditorMode("ObjectType", ("ReadOnly", )) self.selectedObject = obj FreeCADGui.Selection.clearSelection() FreeCADGui.Selection.addSelection(obj) for tool in self.selectedObject.Group: FreeCAD.ActiveDocument.removeObject(tool.Name) for line in self.toolList: tool = Tool(self.selectedObject) tool.getObject().Label = line['label'] tool.setProperties(line['properties'], tool.getObject()) self.selectedObject.Label = ui.nameLE.text() self.dirty = False FreeCAD.ActiveDocument.recompute()
resultSum = [] resultSD = [] result = [] time = [] bestR = [] bestD = 10**(20) dict = [] constk = 10 for idx in range(5): result = [] k = (idx + 1) * constk # percent = 0.1 + 0.1*idx ep = [] #get the time tools = Tool(data) start = datetime.datetime.now().timestamp() a, b, c = tools.Generic_Algorithm(k, t, percent) end = datetime.datetime.now().timestamp() time.append(end - start) for i in range(10): np.random.shuffle(data) tools = Tool(data) a, b, c, e = tools.Generic_Algorithm_Epoch(k, t, percent, epoch) ep.append(e) if b < bestD: bestR = np.copy(a) bestD = b dict = copy.deepcopy(c)
def __init__(self, labyrinth): self.labyrinth = labyrinth # Player positioning position_p = self.labyrinth.get_player_position() self.MacGyver = Player(position_p[0], position_p[1]) # GUI elements initializing pygame.init() self.screen = pygame.display.set_mode((800, 600)) self.background_image = pygame.image.load(r"img/background.png") self.ether_image = pygame.image.load(r"img/ether.png") self.guard_image = pygame.image.load(r"img/guard.png") self.macgyver_image = pygame.image.load(r"img/macgyver.png") self.needle_image = pygame.image.load(r"img/needle.png") self.tube_image = pygame.image.load(r"img/tube.png") self.wall_image = pygame.image.load(r"img/wall.png") self.win_image = pygame.image.load(r"img/win.png") self.lost_image = pygame.image.load(r"img/lost.png") self.title_image = pygame.image.load(r"img/title.png") self.etherC_image = pygame.image.load(r"img/etherC.png") self.needleC_image = pygame.image.load(r"img/needleC.png") self.tubeC_image = pygame.image.load(r"img/tubeC.png") self.clock = pygame.time.Clock() self.character_sprites_list = pygame.sprite.Group() self.tools_sprites_list = pygame.sprite.Group() self.wall_sprites_list = pygame.sprite.Group() self.macgyver_sprite = ImageSprite(self.macgyver_image) self.guard_sprite = ImageSprite(self.guard_image) self.tools_list = (ImageSprite(self.ether_image), ImageSprite(self.needle_image), ImageSprite(self.tube_image)) self.character_sprites_list.add([self.macgyver_sprite, self.guard_sprite]) self.tools_sprites_list.add(self.tools_list) # To be used when printing tool's names & icons in lateral self.start_tools_y = 200 self.start_icons_y = 200 pygame.display.set_caption("Le labyrinthe de MacGyver") # Tools random positioning from an empty spaces list empty_spaces = self.labyrinth.get_empty_spaces() self.tools = [] self.symbols = ['E', 'N', 'T'] self.names = ['Ether', 'Aiguille', 'Tube'] self.images = [self.etherC_image, self.needleC_image, self.tubeC_image] for idx, symbol in enumerate(self.symbols): tmp_pos = random.choice(empty_spaces) temp_tool = Tool(tmp_pos[0], tmp_pos[1], symbol, self.names[idx], self.images[idx]) self.tools.append(temp_tool) empty_spaces.remove(tmp_pos) for tool in self.tools: self.labyrinth.write_symbol((tool.x, tool.y), tool.symbol)
class ToolGui(): def __init__(self): self.createToolUi = FreeCADGui.PySideUic.loadUi( os.path.dirname(__file__) + "/resources/ui/tool.ui") self.straightToolPic = QtGui.QPixmap( os.path.dirname(__file__) + "/resources/png/straightBitPic.png") self.taperedToolPic = QtGui.QPixmap( os.path.dirname(__file__) + "/resources/png/taperedBitPic.png") self.conicalToolPic = QtGui.QPixmap( os.path.dirname(__file__) + "/resources/png/conicalBitPic.png") self.ballToolPic = QtGui.QPixmap( os.path.dirname(__file__) + "/resources/png/ballBitPic.png") self.taperedBallToolPic = QtGui.QPixmap( os.path.dirname(__file__) + "/resources/png/taperedBallBitPic.png") self.toolTypes = [ "StraightTool", "TaperedTool", "ConicalTool", "BallTool", "TaperedBallTool" ] ui = self.createToolUi iv = VAL.MyIntValidator() ui.logoL.setPixmap( QtGui.QPixmap( os.path.dirname(__file__) + "/resources/ui/logo side by side.png")) ui.numberEdit.setValidator(iv) ui.toolTypeCB.currentIndexChanged.connect(self.validateAllFields) ui.numberEdit.textChanged.connect(self.validateAllFields) ui.nameEdit.textChanged.connect(self.validateAllFields) ui.feedRateEdit.textChanged.connect(self.validateAllFields) ui.plungeRateEdit.textChanged.connect(self.validateAllFields) ui.spindleSpeedEdit.textChanged.connect(self.validateAllFields) ui.stepOverEdit.textChanged.connect(self.validateAllFields) ui.depthOfCutEdit.textChanged.connect(self.validateAllFields) ui.straightDiameterEdit.textChanged.connect(self.validateAllFields) ui.straightCutLengthEdit.textChanged.connect(self.validateAllFields) ui.straightToolLengthEdit.textChanged.connect(self.validateAllFields) ui.straightShaftDiameterEdit.textChanged.connect( self.validateAllFields) ui.taperedTopDiameterEdit.textChanged.connect(self.validateAllFields) ui.taperedBottomDiameterEdit.textChanged.connect( self.validateAllFields) ui.taperedCutLengthEdit.textChanged.connect(self.validateAllFields) ui.taperedToolLengthEdit.textChanged.connect(self.validateAllFields) ui.taperedShaftDiameterEdit.textChanged.connect(self.validateAllFields) ui.conicalTopDiameterEdit.textChanged.connect(self.validateAllFields) ui.conicalCutAngleEdit.textChanged.connect(self.validateAllFields) ui.conicalToolLengthEdit.textChanged.connect(self.validateAllFields) ui.conicalShaftDiameterEdit.textChanged.connect(self.validateAllFields) ui.ballDiameterEdit.textChanged.connect(self.validateAllFields) ui.ballToolLengthEdit.textChanged.connect(self.validateAllFields) ui.ballShaftDiameterEdit.textChanged.connect(self.validateAllFields) ui.taperedBallTopDiameterEdit.textChanged.connect( self.validateAllFields) ui.taperedBallDiameterEdit.textChanged.connect(self.validateAllFields) ui.taperedBallCutLengthEdit.textChanged.connect(self.validateAllFields) ui.taperedBallToolLengthEdit.textChanged.connect( self.validateAllFields) ui.taperedBallShaftDiameterEdit.textChanged.connect( self.validateAllFields) ui.buttonBox.accepted.connect(self.accept) ui.buttonBox.rejected.connect(self.reject) ui.toolTypeCB.currentIndexChanged.connect(self.changeToolTypeWidget) self.selectedObject = None self.currentToolNumber = -1 self.originalToolName = "" def reset(self): ui = self.createToolUi ui.stackedWidget.setCurrentIndex(0) ui.nameEdit.clear() ui.numberEdit.clear() ui.makeEdit.clear() ui.modelEdit.clear() ui.toolTypeCB.setCurrentIndex(0) ui.materialEdit.clear() ui.feedRateEdit.clear() ui.plungeRateEdit.clear() ui.spindleSpeedEdit.clear() ui.stepOverEdit.clear() ui.depthOfCutEdit.clear() ui.straightDiameterEdit.clear() ui.straightCutLengthEdit.clear() ui.straightToolLengthEdit.clear() ui.straightShaftDiameterEdit.clear() ui.taperedTopDiameterEdit.clear() ui.taperedBottomDiameterEdit.clear() ui.taperedCutLengthEdit.clear() ui.taperedToolLengthEdit.clear() ui.taperedShaftDiameterEdit.clear() ui.conicalTopDiameterEdit.clear() ui.conicalCutAngleEdit.clear() ui.conicalToolLengthEdit.clear() ui.conicalShaftDiameterEdit.clear() ui.ballDiameterEdit.clear() ui.ballToolLengthEdit.clear() ui.ballShaftDiameterEdit.clear() ui.taperedBallTopDiameterEdit.clear() ui.taperedBallDiameterEdit.clear() ui.taperedBallCutLengthEdit.clear() ui.taperedBallToolLengthEdit.clear() ui.taperedBallShaftDiameterEdit.clear() def GetResources(self): return { 'Pixmap': os.path.dirname(__file__) + "/resources/svg/tool.svg", # the name of a svg file available in the resources 'MenuText': "New Tool", 'ToolTip': "Sets up a new tool that can be added to a tool table" } def validateAllFields(self): ui = self.createToolUi valid = True toolType = ui.toolTypeCB.currentText() if toolType == 'None Selected...': VAL.setLabel(ui.toolTypeLabel, 'INVALID') valid = False else: VAL.setLabel(ui.toolTypeLabel, 'VALID') if ui.numberEdit.text() == "": VAL.setLabel(ui.numberLabel, 'INVALID') valid = False else: VAL.setLabel(ui.numberLabel, 'VALID') for tool in self.parent.Group: if tool.Number == self.currentToolNumber: continue if str(tool.Number) == ui.numberEdit.text(): VAL.setLabel(ui.numberLabel, 'INVALID') valid = False break VAL.setLabel(ui.nameLabel, 'VALID') if ui.nameEdit.text() == "": valid = False VAL.setLabel(ui.nameLabel, 'INVALID') mode = getGUIMode() sameName = FreeCAD.ActiveDocument.getObjectsByLabel(ui.nameEdit.text()) if (len(sameName) > 0): if len(sameName) > 1: valid = False VAL.setLabel(ui.nameLabel, 'INVALID') elif mode != 'EditingToolFromIcon' and mode != 'EditingToolFromGUI': valid = False VAL.setLabel(ui.nameLabel, 'INVALID') else: if ui.nameEdit.text() == self.originalToolName: VAL.setLabel(ui.nameLabel, 'VALID') else: VAL.setLabel(ui.nameLabel, 'INVALID') valid = False valid = VAL.validate(ui.feedRateEdit, ui.feedRateL, False, valid, VAL.VELOCITY) valid = VAL.validate(ui.plungeRateEdit, ui.plungeRateL, False, valid, VAL.VELOCITY) valid = VAL.validate(ui.spindleSpeedEdit, ui.spindleSpeedLabel, False, valid, VAL.ANGULAR_VELOCITY) valid = VAL.validate(ui.stepOverEdit, ui.stepOverL, False, valid, VAL.LENGTH) valid = VAL.validate(ui.depthOfCutEdit, ui.docL, False, valid, VAL.LENGTH) if toolType == "Straight": valid = VAL.validate(ui.straightDiameterEdit, ui.straightDiameterL, True, valid, VAL.LENGTH) valid = VAL.validate(ui.straightCutLengthEdit, ui.straightCutLenL, True, valid, VAL.LENGTH) valid = VAL.validate(ui.straightToolLengthEdit, ui.straightToolLenL, True, valid, VAL.LENGTH) valid = VAL.validate(ui.straightShaftDiameterEdit, ui.staightShaftDiameterL, True, valid, VAL.LENGTH) elif toolType == "Tapered": valid = VAL.validate(ui.taperedTopDiameterEdit, ui.taperedTopDiameterL, True, valid, VAL.LENGTH) valid = VAL.validate(ui.taperedBottomDiameterEdit, ui.taperedBottomDiameterL, True, valid, VAL.LENGTH) valid = VAL.validate(ui.taperedCutLengthEdit, ui.taperedCutLengthL, True, valid, VAL.LENGTH) valid = VAL.validate(ui.taperedToolLengthEdit, ui.taperedToolLengthL, True, valid, VAL.LENGTH) valid = VAL.validate(ui.taperedShaftDiameterEdit, ui.taperedShaftDiameterL, True, valid, VAL.LENGTH) elif toolType == "Conical": valid = VAL.validate(ui.conicalTopDiameterEdit, ui.conicalTopDiameterL, True, valid, VAL.LENGTH) valid = VAL.validate(ui.conicalCutAngleEdit, ui.conicalCutAngleL, True, valid, VAL.ANGLE) valid = VAL.validate(ui.conicalToolLengthEdit, ui.conicalToolLengthL, True, valid, VAL.LENGTH) valid = VAL.validate(ui.conicalShaftDiameterEdit, ui.conicalShaftDiameterL, True, valid, VAL.LENGTH) elif toolType == "Ball": valid = VAL.validate(ui.ballDiameterEdit, ui.ballDiameterL, True, valid, VAL.LENGTH) valid = VAL.validate(ui.ballToolLengthEdit, ui.ballToolLengthL, True, valid, VAL.LENGTH) valid = VAL.validate(ui.ballShaftDiameterEdit, ui.ballShaftDiameterL, True, valid, VAL.LENGTH) elif toolType == "TaperedBall": valid = VAL.validate(ui.taperedBallTopDiameterEdit, ui.taperedBallTopDiameterL, True, valid, VAL.LENGTH) valid = VAL.validate(ui.taperedBallDiameterEdit, ui.taperedBallBallDiameterL, True, valid, VAL.LENGTH) valid = VAL.validate(ui.taperedBallCutLengthEdit, ui.taperedBallCutLengthL, True, valid, VAL.LENGTH) valid = VAL.validate(ui.taperedBallToolLengthEdit, ui.taperedBallToolLengthL, True, valid, VAL.LENGTH) valid = VAL.validate(ui.taperedBallShaftDiameterEdit, ui.taperedBallShaftDiameterL, True, valid, VAL.LENGTH) ui.buttonBox.buttons()[0].setEnabled(valid) return valid def changeToolTypeWidget(self): i = self.createToolUi.toolTypeCB.currentIndex() self.createToolUi.stackedWidget.setCurrentIndex(i) if i == 1: self.createToolUi.imageLabel.setPixmap(self.straightToolPic) elif i == 2: self.createToolUi.imageLabel.setPixmap(self.taperedToolPic) elif i == 3: self.createToolUi.imageLabel.setPixmap(self.conicalToolPic) elif i == 4: self.createToolUi.imageLabel.setPixmap(self.ballToolPic) elif i == 5: self.createToolUi.imageLabel.setPixmap(self.taperedBallToolPic) else: self.createToolUi.imageLabel.setPixmap(None) def setUnits(self): ui = self.createToolUi if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt( "UserSchema") in [0, 1, 4, 6]: self.units = 'mm' ui.unitsLabel.setText("Default units are mm, mm/min, and rpm") else: ui.unitsLabel.setText("Default units are in, in/min, and rpm") self.units = 'in' def getToolProperties(self, obj): ui = self.createToolUi ui.stackedWidget.setCurrentIndex( self.toolTypes.index(obj.ObjectType) + 1) ui.nameEdit.setText(obj.Label) ui.numberEdit.setText(str(obj.Number)) if hasattr(obj, 'Make'): ui.makeEdit.setText(obj.Make) if hasattr(obj, 'Model'): ui.modelEdit.setText(obj.Model) ui.toolTypeCB.setCurrentIndex(self.toolTypes.index(obj.ObjectType) + 1) if hasattr(obj, 'StockMaterial'): ui.materialEdit.setText(obj.StockMaterial) if hasattr(obj, 'FeedRate'): ui.feedRateEdit.setText(obj.FeedRate.UserString) if hasattr(obj, 'PlungeRate'): ui.plungeRateEdit.setText(obj.PlungeRate.UserString) if hasattr(obj, 'SpindleSpeed'): ui.spindleSpeedEdit.setText(obj.SpindleSpeed) if hasattr(obj, 'StepOver'): ui.stepOverEdit.setText(obj.StepOver.UserString) if hasattr(obj, 'DepthOfCut'): ui.depthOfCutEdit.setText(obj.DepthOfCut.UserString) toolType = ui.toolTypeCB.currentText() if toolType == "Straight": ui.straightDiameterEdit.setText(obj.Diameter.UserString) ui.straightCutLengthEdit.setText(obj.CutLength.UserString) ui.straightToolLengthEdit.setText(obj.ToolLength.UserString) ui.straightShaftDiameterEdit.setText(obj.ShaftDiameter.UserString) elif toolType == "Tapered": ui.taperedTopDiameterEdit.setText(obj.TopDiameter.UserString) ui.taperedBottomDiameterEdit.setText(obj.BottomDiameter.UserString) ui.taperedCutLengthEdit.setText(obj.CutLength.UserString) ui.taperedToolLengthEdit.setText(obj.ToolLength.UserString) ui.taperedShaftDiameterEdit.setText(obj.ShaftDiameter.UserString) elif toolType == "Conical": ui.conicalTopDiameterEdit.setText(obj.TopDiameter.UserString) ui.conicalCutAngleEdit.setText(obj.CutAngle.UserString) ui.conicalToolLengthEdit.setText(obj.ToolLength.UserString) ui.conicalShaftDiameterEdit.setText(obj.ShaftDiameter.UserString) elif toolType == "Ball": ui.ballDiameterEdit.setText(obj.BallDiameter.UserString) ui.ballToolLengthEdit.setText(obj.ToolLength.UserString) ui.ballShaftDiameterEdit.setText(obj.ShaftDiameter.UserString) elif toolType == "TaperedBall": ui.taperedBallTopDiameterEdit.setText(obj.TopDiameter.UserString) ui.taperedBallDiameterEdit.setText(obj.BallDiameter.UserString) ui.taperedBallCutLengthEdit.setText(obj.CutLength.UserString) ui.taperedBallToolLengthEdit.setText(obj.ToolLength.UserString) ui.taperedBallShaftDiameterEdit.setText( obj.ShaftDiameter.UserString) def getToolPropertiesFromGUI(self, props): ui = self.createToolUi ui.nameEdit.setText(props['label']) for prop in props['properties']: if prop[1] == 'ToolType': toolType = prop[2] for prop in props['properties']: if prop[1] == 'Number': ui.numberEdit.setText(str(prop[2])) elif prop[1] == 'Make': ui.makeEdit.setText(prop[2]) elif prop[1] == 'Model': ui.modelEdit.setText(prop[2]) elif prop[1] == 'ToolType': index = 0 while index < ui.toolTypeCB.count(): if prop[2] == ui.toolTypeCB.itemText(index): ui.toolTypeCB.setCurrentIndex(index) break index = index + 1 elif prop[1] == 'StockMaterial': ui.materialEdit.setText(prop[2]) elif prop[1] == 'FeedRate': ui.feedRateEdit.setText( VAL.fromSystemValue('velocity', prop[2])) elif prop[1] == 'PlungeRate': ui.plungeRateEdit.setText( VAL.fromSystemValue('velocity', prop[2])) elif prop[1] == 'SpindleSpeed': ui.spindleSpeedEdit.setText(prop[2]) elif prop[1] == 'StepOver': ui.stepOverEdit.setText(VAL.fromSystemValue('length', prop[2])) elif prop[1] == 'DepthOfCut': ui.depthOfCutEdit.setText( VAL.fromSystemValue('length', prop[2])) elif toolType == "Straight": if prop[1] == 'Diameter': ui.straightDiameterEdit.setText( VAL.fromSystemValue('length', prop[2])) elif prop[1] == 'CutLength': ui.straightCutLengthEdit.setText( VAL.fromSystemValue('length', prop[2])) elif prop[1] == 'ToolLength': ui.straightToolLengthEdit.setText( VAL.fromSystemValue('length', prop[2])) elif prop[1] == 'ShaftDiameter': ui.straightShaftDiameterEdit.setText( VAL.fromSystemValue('length', prop[2])) elif toolType == "Tapered": if prop[1] == "TopDiameter": ui.taperedTopDiameterEdit.setText( VAL.fromSystemValue('length', prop[2])) elif prop[1] == "BottomDiameter": ui.taperedBottomDiameterEdit.setText( VAL.fromSystemValue('length', prop[2])) elif prop[1] == "CutLength": ui.taperedCutLengthEdit.setText( VAL.fromSystemValue('length', prop[2])) elif prop[1] == "ToolLength": ui.taperedToolLengthEdit.setText( VAL.fromSystemValue('length', prop[2])) elif prop[1] == "ShaftDiameter": ui.taperedShaftDiameterEdit.setText( VAL.fromSystemValue('length', prop[2])) elif toolType == "Conical": if prop[1] == "TopDiameter": ui.conicalTopDiameterEdit.setText( VAL.fromSystemValue('length', prop[2])) elif prop[1] == 'CutAngle': ui.conicalCutAngleEdit.setText( VAL.fromSystemValue('angle', prop[2])) elif prop[1] == 'ToolLength': ui.conicalToolLengthEdit.setText( VAL.fromSystemValue('length', prop[2])) elif prop[1] == 'ShaftDiameter': ui.conicalShaftDiameterEdit.setText( VAL.fromSystemValue('length', prop[2])) elif toolType == "Ball": if prop[1] == "BallDiameter": ui.ballDiameterEdit.setText( VAL.fromSystemValue('length', prop[2])) elif prop[1] == "ToolLength": ui.ballToolLengthEdit.setText( VAL.fromSystemValue('length', prop[2])) elif prop[1] == "ShaftDiameter": ui.ballShaftDiameterEdit.setText( VAL.fromSystemValue('length', prop[2])) elif toolType == "TaperedBall": if prop[1] == "TopDiameter": ui.taperedBallTopDiameterEdit.setText( VAL.fromSystemValue('length', prop[2])) elif prop[1] == "BallDiameter": ui.taperedBallDiameterEdit.setText( VAL.fromSystemValue('length', prop[2])) elif prop[1] == "CutLength": ui.taperedBallCutLengthEdit.setText( VAL.fromSystemValue('length', prop[2])) elif prop[1] == "ToolLength": ui.taperedBallToolLengthEdit.setText( VAL.fromSystemValue('length', prop[2])) elif prop[1] == "ShaftDiameter": ui.taperedBallShaftDiameterEdit.setText( VAL.fromSystemValue('length', prop[2])) def setToolProperties(self): ui = self.createToolUi if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt( "UserSchema") in [0, 1, 4, 6]: units = 1 else: units = 25.4 S = "App::PropertyString" I = "App::PropertyInteger" L = "App::PropertyLength" A = "App::PropertyAngle" V = "App::PropertySpeed" Q = "App::PropertyQuantity" tooltype = ui.toolTypeCB.currentText() #obj.Label = ui.nameEdit.text() p = [ [S, "ObjectType", tooltype + "Tool"], #[S, "Name", ui.nameEdit.text()], [I, "Number", eval(ui.numberEdit.text())], [S, "ToolType", tooltype] ] if ui.makeEdit.text() != "": p.append([S, "Make", ui.makeEdit.text()]) if ui.modelEdit.text() != "": p.append([S, "Model", ui.modelEdit.text()]) if ui.materialEdit.text() != "": p.append([S, "StockMaterial", ui.materialEdit.text()]) if ui.feedRateEdit.text() != "": p.append([ V, "FeedRate", VAL.toSystemValue(ui.feedRateEdit, 'velocity') ]) if ui.plungeRateEdit.text() != "": p.append([ V, "PlungeRate", VAL.toSystemValue(ui.plungeRateEdit, 'velocity') ]) if ui.spindleSpeedEdit.text() != "": p.append([ S, "SpindleSpeed", VAL.toSystemValue(ui.spindleSpeedEdit, 'angularVelocity') ]) if ui.stepOverEdit.text() != "": p.append( [L, "StepOver", VAL.toSystemValue(ui.stepOverEdit, 'length')]) if ui.depthOfCutEdit.text() != "": p.append([ L, "DepthOfCut", VAL.toSystemValue(ui.depthOfCutEdit, 'length') ]) if tooltype == "Straight": p.append([ L, "Diameter", VAL.toSystemValue(ui.straightDiameterEdit, 'length') ]) p.append([ L, "CutLength", VAL.toSystemValue(ui.straightCutLengthEdit, 'length') ]) p.append([ L, "ToolLength", VAL.toSystemValue(ui.straightToolLengthEdit, 'length') ]) p.append([ L, "ShaftDiameter", VAL.toSystemValue(ui.straightShaftDiameterEdit, 'length') ]) elif tooltype == "Tapered": p.append([ L, "TopDiameter", VAL.toSystemValue(ui.taperedTopDiameterEdit, 'length') ]) p.append([ L, "BottomDiameter", VAL.toSystemValue(ui.taperedBottomDiameterEdit, 'length') ]) p.append([ L, "CutLength", VAL.toSystemValue(ui.taperedCutLengthEdit, 'length') ]) p.append([ L, "ToolLength", VAL.toSystemValue(ui.taperedToolLengthEdit, 'length') ]) p.append([ L, "ShaftDiameter", VAL.toSystemValue(ui.taperedShaftDiameterEdit, 'length') ]) elif tooltype == "Conical": p.append([ L, "TopDiameter", VAL.toSystemValue(ui.conicalTopDiameterEdit, 'length') ]) p.append([ A, "CutAngle", VAL.toSystemValue(ui.conicalCutAngleEdit, 'angle') ]) p.append([ L, "ToolLength", VAL.toSystemValue(ui.conicalToolLengthEdit, 'length') ]) p.append([ L, "ShaftDiameter", VAL.toSystemValue(ui.conicalShaftDiameterEdit, 'length') ]) elif tooltype == "Ball": p.append([ L, "BallDiameter", VAL.toSystemValue(ui.ballDiameterEdit, 'length') ]) p.append([ L, "ToolLength", VAL.toSystemValue(ui.ballToolLengthEdit, 'length') ]) p.append([ L, "ShaftDiameter", VAL.toSystemValue(ui.ballShaftDiameterEdit, 'length') ]) elif tooltype == "TaperedBall": p.append([ L, "TopDiameter", VAL.toSystemValue(ui.taperedBallTopDiameterEdit, 'length') ]) p.append([ L, "BallDiameter", VAL.toSystemValue(ui.taperedBallDiameterEdit, 'length') ]) p.append([ L, "CutLength", VAL.toSystemValue(ui.taperedBallCutLengthEdit, 'length') ]) p.append([ L, "ToolLength", VAL.toSystemValue(ui.taperedBallToolLengthEdit, 'length') ]) p.append([ L, "ShaftDiameter", VAL.toSystemValue(ui.taperedBallShaftDiameterEdit, 'length') ]) return p def setSelectedObject(self, obj): self.selectedObject = obj def setMode(self): if self.selectedObject == None: mode = getGUIMode() elif self.selectedObject.ObjectType in self.toolTypes: mode = "EditingToolFromIcon" elif self.selectedObject.ObjectType == "ToolTable": if getGUIMode() == 'None': mode = "AddingToolFromIcon" else: mode = getGUIMode() setGUIMode(mode) return mode def Activated(self): self.setUnits() mode = self.setMode() if mode == "AddingToolFromIcon": self.currentToolNumber = -1 self.originalToolName = "" self.reset() self.parent = self.selectedObject self.validateAllFields() elif mode == "EditingToolFromIcon": self.currentToolNumber = self.selectedObject.Number self.originalToolName = self.selectedObject.Label self.parent = self.selectedObject.getParentGroup() self.getToolProperties(self.selectedObject) self.validateAllFields() elif mode == "AddingToolFromGUI": self.currentToolNumber = -1 self.originalToolName = "" self.parent = self.selectedObject self.reset() self.validateAllFields() elif mode == "EditingToolFromGUI": self.parent = self.selectedObject self.getToolPropertiesFromGUI(getGUIProperties()) self.currentToolNumber = eval(self.createToolUi.numberEdit.text()) self.originalToolName = self.createToolUi.nameEdit.text() self.validateAllFields() else: print "unexpected mode (" + mode + ")" return False self.createToolUi.show() setStatus("showing") return True def accept(self): ui = self.createToolUi ui.hide() setStatus("hidden") mode = getGUIMode() if mode == "AddingToolFromIcon": self.tool = Tool(self.selectedObject) p = self.setToolProperties() self.tool.getObject().Label = ui.nameEdit.text() self.tool.setProperties(p, self.tool.getObject()) setGUIMode("None") return True elif mode == "EditingToolFromIcon": self.tool = self.selectedObject.Proxy self.tool.Label = ui.nameEdit.text() p = self.setToolProperties() self.tool.setProperties(p, self.selectedObject) setGUIMode("None") return True elif mode == "AddingToolFromGUI": p = self.setToolProperties() setGUIProperties(ui.nameEdit.text(), p) return True elif mode == "EditingToolFromGUI": p = self.setToolProperties() setGUIProperties(ui.nameEdit.text(), p) return True else: print "unexpected mode (" + mode + ")" return False def reject(self): self.createToolUi.hide() setStatus("hidden") setGUIMode("None") return False def IsActive(self): mode = getGUIMode() if mode in ["EditingToolFromGUI", "AddingToolFromGUI"]: return True mw = FreeCADGui.getMainWindow() tree = mw.findChildren(QtGui.QTreeWidget)[0] if len(tree.selectedItems()) != 1: return False item = tree.selectedItems()[0] obj = FreeCAD.ActiveDocument.getObjectsByLabel(item.text(0))[0] if obj.ObjectType in [ "ToolTable", "StraightTool", "TaperedTool", "ConicalTool", "BallTool", "TaperedBallTool" ]: self.selectedObject = obj return True return False
def op_update_dump(start=None, end=None): print 'Generating update ..' update_dump_start = time.time() db = connection cursor = db.cursor() # cursor.execute("select * from t_database where dbname < 3 ") cursor.execute("use curato_base") dbIndex = None if start == end: dbIndex = start if dbIndex: s = "select * from t_database where dbname = '" + dbIndex + "' " elif start and end: s = "select * from t_database where dbname >= %s and dbname <= %s " % ( start, end) else: all = raw_input('Dump all ? (y/N) ') if all != 'y': sys.exit() s = "select * from t_database" cursor.execute(s) data = cursor.fetchall() # log_file = dir + 'update.log' # h = open(log_file, 'w') sqls = "" for d in data: t1 = time.time() sn = str(d[1]) # companyId dbName = "curato" + d[3] # db index if not Tool.dbExist(dbName): continue s = "" create_sql = getCreateSql(dbName, sn) print 'create_sql..' + dbName + '-' + sn modify_sql = getModifySql(dbName, sn) print 'modify_sql..' + dbName + '-' + sn s += create_sql s += modify_sql sqls += s t2 = time.time() t = t2 - t1 print "Generating %s Cost Time %s" % (dbName + '-' + sn, t) # h.write("Generating %s Cost Time %s" % (dbName + '-' + sn, t)) f = update_file fo = open(f, "w") fo.write(sqls) fo.close() update_dump_end = time.time() print "Generating Cost Time %s" % (update_dump_end - update_dump_start) print 'Generating update done. file: %s' % update_file return 1
def getAuthSql(start, end): dbIndex = None if start == end: dbIndex = start data = getDbs(dbIndex) db = connection cursor = db.cursor() sqlss = '' # per row for company for d in data: companyId = str(d[1]) dbIndex = str(d[3]) dbName = "curato" + dbIndex if not Tool.dbExist(dbName): continue sqls = "use %s;" % dbName tblName = companyId + "_staff_role_auth" createTbl = ''' drop table if EXISTS `%s`; CREATE TABLE `%s` ( `id` int(5) UNSIGNED NOT NULL AUTO_INCREMENT , `role_id` int(5) NULL , `auth` text NULL , PRIMARY KEY (`id`) ) ; ''' createTbl = createTbl % (tblName, tblName) sqls += createTbl oldTbl = companyId + "_user_role_auth" if Tool.tblExist(dbName, oldTbl): authSql = "select * from %s " % oldTbl cursor.execute("use %s" % dbName) cursor.execute(authSql) res = cursor.fetchall() insertSql = "insert into %s (role_id, auth) values " % tblName insertCount = 0 for a in res: authStr = a[4] roleId = a[1] authStr = authStr.strip(',') auth = convertAuth(authStr) if len(auth) > 0: auth = ','.join(str(n) for n in auth) else: auth = '' insertCount += 1 insertSql += " ('%s', '%s')," % (roleId, auth) if insertCount: insertSql = insertSql.rstrip(',') insertSql += ';' else: insertSql = '' sqls += insertSql sqlss += sqls return sqlss
if __name__ == "__main__": ''' dataDir = 'data\\常州天和印染有限公司\\' name = '三相总有功功率' #所分析数据项 if os.path.exists('data\\tmp\\P_total.csv'): P_total = pd.read_csv('data\\tmp\\P_total.csv',index_col=0) else: P_total = readData(dataDir, name) P_total.to_csv('data\\tmp\\P_total.csv') ''' device = '100009' # 所要预测设备(全建筑总出) day_point = 96 # tianhe:480,new:96 (将原函数中的480改为day_point,20改为day_point//24) # P_total = pd.read_csv('Ptotal_new.csv', index_col=0) P_total, device_index = Tool.getP_totalBySQL("11", "11", "100009", "BV") print(device_index) # P_total.index = pd.to_datetime(P_total.index) # P_total = P_total.sort_index() # # # 删去全零列设备 # del_list = [] # for i in range(P_total.shape[1]): # if max(P_total.iloc[:, i]) - min(P_total.iloc[:, i]) == 0: # del_list.append(i) # P_total.drop(P_total.columns[del_list], axis=1, inplace=True) # # # 补全device名并得到device_index # for i in range(P_total.shape[1]): # if device in P_total.columns[i]: # device = P_total.columns[i]
def getModifySql(dbName, sn): sn = str(sn) # attendance tblName = sn + "_attendance" sql = "" alter = " alter table `" + tblName + "` " addCols = [ ('rule_id', "ADD COLUMN `rule_id` int NULL COMMENT '考勤规则id' AFTER `user_id`"), ('apply_id', "ADD COLUMN `apply_id` varchar(200) DEFAULT NULL COMMENT '对考勤有影响的申请id集合' AFTER `cross_day`" ), ('rule_work_time', "ADD COLUMN `rule_work_time` smallint(6) NULL COMMENT '自由班工作时间' AFTER `apply_id`" ), ('record_limit_time', "ADD COLUMN `record_limit_time` time NULL COMMENT '自由班最晚打卡时间' AFTER `rule_work_time`" ), ('s_record_time', "ADD COLUMN `s_record_time` smallint(6) NULL COMMENT '上班前有效打卡时间' AFTER `record_limit_time`" ), ('late_least_time', "ADD COLUMN `late_least_time` smallint(6) NULL COMMENT '迟到起算时间' AFTER `s_record_time`" ), ('late_max_time', "ADD COLUMN `late_max_time` smallint(6) NULL COMMENT '迟到上限时间(超过即旷工)' AFTER `late_least_time`" ), ('leave_least_time', "ADD COLUMN `leave_least_time` smallint(6) NULL COMMENT '早退起算时间' AFTER `late_max_time`" ), ('leave_max_time', "ADD COLUMN `leave_max_time` smallint(6) NULL COMMENT '早退上限时间(超过即旷工)' AFTER `leave_least_time`" ), ('ot_least_time', "ADD COLUMN `ot_least_time` smallint(6) NULL COMMENT '加班起算时间' AFTER `leave_max_time`" ), ('attendance_apply', "ADD COLUMN `attendance_apply` varchar(255) DEFAULT '1,2,3,4' COMMENT '关联申请' AFTER `ot_least_time`" ), ('record_way', "ADD COLUMN `record_way` varchar(255) DEFAULT '1,2,3' COMMENT '允许打卡方式' AFTER `attendance_apply`" ), ('rule_type', "ADD COLUMN `rule_type` tinyint(4) DEFAULT 1 COMMENT '班制类型。1固定2多班3自由' AFTER `record_way`" ), ] for tup in addCols: if not Tool.colExist(dbName, tblName, tup[0]): sql += alter + tup[1] + "; " modify = ''' %s MODIFY COLUMN `schedule_id` int(11) NULL COMMENT '班次id' AFTER `rule_id`; %s MODIFY COLUMN `type` int(11) NULL DEFAULT 0 COMMENT '考勤类型(加班、出差)' AFTER `attendance_status`; %s MODIFY COLUMN `work_time` smallint(6) NULL COMMENT '应上班的分钟数' AFTER `update_time`; %s MODIFY COLUMN `cross_day` tinyint(1) NULL DEFAULT 0 COMMENT '是否跨天' AFTER `overtime_type`; ''' sql += (modify % ((alter, ) * 4)) # schedule tblName = sn + "_schedule" alter = " alter table `" + tblName + "` " addCols = [ ('rest', "ADD COLUMN `rest` tinyint(1) NULL DEFAULT 1 COMMENT '是否有休息时间,1是0否' AFTER `cross_day`" ), ] for tup in addCols: if not Tool.colExist(dbName, tblName, tup[0]): sql += alter + tup[1] + '; ' modify = ''' %s MODIFY COLUMN `department_id` int(11) NULL COMMENT '部门id' AFTER `id`; %s MODIFY COLUMN `schedule_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '班次名称' AFTER `department_id`; %s MODIFY COLUMN `s_rest_time` time NULL COMMENT '午休开始时间' AFTER `e_time`; %s MODIFY COLUMN `e_rest_time` time NULL COMMENT '午休结束时间' AFTER `s_rest_time`; %s MODIFY COLUMN `creator` int(11) NULL COMMENT '创建者id' AFTER `e_rest_time`; %s MODIFY COLUMN `create_time` datetime NULL COMMENT '创建时间' AFTER `creator`; %s MODIFY COLUMN `work_time` smallint(6) NULL DEFAULT 0 COMMENT '上班时间(分钟数)' AFTER `deleted`; %s MODIFY COLUMN `cross_day` tinyint(1) NULL DEFAULT 0 COMMENT '是否跨天' AFTER `work_time`; ''' sql += (modify % ((alter, ) * 8)) # attendance_record tblName = sn + "_attendance_record" if (not Tool.colExist(dbName, tblName, 'record_type')): s = " ALTER TABLE `%s` ADD COLUMN `record_type` tinyint(1) NULL DEFAULT 1 COMMENT '打卡方式。1人脸2二维码3外勤签到4补签' AFTER `time`;" sql += (s % tblName) # report tblName = sn + "_report" alter = " alter table " + tblName + " " addCols = [ ('report_type', "ADD COLUMN `report_type` tinyint(4) NULL COMMENT '汇报类型。1日报2周报' AFTER `type`" ), ('work_plan', "ADD COLUMN `work_plan` varchar(5000) NULL COMMENT '下周工作计划' AFTER `content`" ), ('files', "ADD COLUMN `files` varchar(255) NULL COMMENT '图片' AFTER `work_plan`" ), ('report_end_date', "ADD COLUMN `report_end_date` date NULL COMMENT '汇报结束日期' AFTER `report_date`" ), ] for tup in addCols: if not Tool.colExist(dbName, tblName, tup[0]): sql += alter + tup[1] + "; " # user tblName = sn + "_user" alter = " alter table " + tblName + " " addCols = [ ('report_to', "ADD COLUMN `report_to` int(11) NULL DEFAULT 1 COMMENT '汇报对象' AFTER `range` ;" ), ] for tup in addCols: if not Tool.colExist(dbName, tblName, tup[0]): sql += alter + tup[1] + '; ' # apply_config tblName = sn + "_apply_config" alter = " alter table `" + tblName + "` " addCols = [ ('intel_approver', "ADD COLUMN `intel_approver` varchar(255) NULL COMMENT '智能申请审批职位id' AFTER `approver`" ), ('company', "ADD COLUMN `company` tinyint(1) NULL DEFAULT 0 COMMENT '是否全公司适用' AFTER `department_id`" ), ('hand_sign', "ADD COLUMN `hand_sign` tinyint(1) NULL DEFAULT 1 COMMENT '是否启用手签' AFTER `approver`" ), ('process_type', "ADD COLUMN `process_type` tinyint(1) NULL DEFAULT 1 COMMENT '审批流程类别。1员工2智能(职位)' AFTER `hand_sign`" ), ] for tup in addCols: if not Tool.colExist(dbName, tblName, tup[0]): sql += alter + tup[1] + '; ' dropCols = [ ('apply_enname', "drop column `apply_enname`"), ('url', "drop column `url`"), ] for tup in dropCols: if Tool.colExist(dbName, tblName, tup[0]): sql += alter + tup[1] + ';' modify = ''' %s MODIFY COLUMN `department_id` varchar(100) NULL DEFAULT NULL COMMENT '可使用此申请的部门id' AFTER `type`; %s MODIFY COLUMN `approver` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '申请审批人id' AFTER `apply_name`; ''' sql += modify % ((alter, ) * 2) # apply tblName = sn + "_apply" alter = " alter table `" + tblName + "` " addCols = [ ('carbon_copy', "ADD COLUMN `carbon_copy` varchar(1000) NULL COMMENT '抄送人员id' AFTER `approver`" ), ('files', "ADD COLUMN `files` varchar(255) NULL COMMENT '附带文件(图片)' AFTER `content`" ), ('day_count', "ADD COLUMN `day_count` int NULL DEFAULT NULL COMMENT '天数' AFTER `files`" ), ('hour_count', "ADD COLUMN `hour_count` int NULL DEFAULT NULL COMMENT '小时数' AFTER `day_count`" ), ('process_type', "ADD COLUMN `process_type` tinyint(1) NULL DEFAULT 1 COMMENT '审批流程列表。1员工审批2智能审批(职位)' AFTER `approver`" ), ('hand_sign', "ADD COLUMN `hand_sign` tinyint(1) NULL COMMENT '是否开启手签1是0否' AFTER `gps_location`" ), ('overtime_type', "ADD COLUMN `overtime_type` tinyint(1) NULL DEFAULT 0 COMMENT '加班类型,是否法定假日' AFTER `e_time`" ), ] for tup in addCols: if not Tool.colExist(dbName, tblName, tup[0]): sql += alter + tup[1] + '; ' modify = ''' %s MODIFY COLUMN `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '内容' AFTER `title`; ''' sql += modify % alter # apply_info tblName = sn + "_apply_info" alter = " alter table `" + tblName + "` " addCols = [ ('role_id', "ADD COLUMN `role_id` int NULL COMMENT '职位id。智能审批流程时用' AFTER `accepter`" ), ('remind_time', "ADD COLUMN `remind_time` datetime NULL COMMENT '上一次催办时间' AFTER `read`" ), ] for tup in addCols: if not Tool.colExist(dbName, tblName, tup[0]): sql += alter + tup[1] + '; ' modify = ''' %s MODIFY COLUMN `accepter` int(11) NULL COMMENT '申请接收人id(审批人及自己)' AFTER `apply_id`; ''' sql += modify % alter # notice tblName = sn + "_notice" alter = " alter table `" + tblName + "` " addCols = [ ('send_all', "ADD COLUMN `send_all` tinyint(4) NULL COMMENT '是否全公司发送:0,否;1,是;' AFTER `status`" ), ('department_id', "ADD COLUMN `department_id` varchar(1000) NULL COMMENT '公司接收部门ID集合,以|区分' AFTER `send_all`" ), ('user_id', "ADD COLUMN `user_id` varchar(1000) NULL COMMENT '公司接收用户ID集合,以|区分' AFTER `department_id`" ), ('attachments', "ADD COLUMN `attachments` varchar(255) NULL COMMENT '公告的附件或图片集合,以;;区分' AFTER `user_id`" ), ] for tup in addCols: if not Tool.colExist(dbName, tblName, tup[0]): sql += alter + tup[1] + '; ' modify = ''' %s MODIFY COLUMN `content` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '公告内容' AFTER `title`; %s MODIFY COLUMN `e_date` date NULL COMMENT '失效时间' AFTER `s_date`; ''' sql += modify % ((alter, ) * 2) # display tblName = sn + "_display" s = " ALTER TABLE `%s` MODIFY COLUMN `sort` integer(5) NOT NULL COMMENT '排序' AFTER `add_time`;" sql += (s % tblName) return sql