|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
import json
|
|
|
import os
|
|
|
import tempfile
|
|
|
import pathlib
|
|
|
|
|
|
from utils.ClientModels import Phrase
|
|
|
|
|
|
APPNAME = 'dcsIde'
|
|
|
|
|
|
dataDir = os.path.join(os.getenv('APPDATA'), APPNAME)
|
|
|
# dataDir = '/Users/zcw/Desktop'
|
|
|
|
|
|
if not os.path.exists(dataDir):
|
|
|
os.makedirs(dataDir)
|
|
|
|
|
|
logFile = open(os.path.join(dataDir, "dcsIde.log"), 'w')
|
|
|
|
|
|
tempDir = os.path.join(tempfile.gettempdir(), 'dcsIde')
|
|
|
|
|
|
from peewee import Proxy
|
|
|
|
|
|
# NOTE: Magic... You must explicit import these package,
|
|
|
# or PyInstaller will not found them
|
|
|
# import ConfigParser # NoQA
|
|
|
# from passlib.handlers import pbkdf2 # NoQA
|
|
|
# from pyexcel_xls import xls # NoQA
|
|
|
jsonPath = os.path.join(pathlib.Path('~').expanduser().absolute().as_posix(), 'dcslde.json')
|
|
|
|
|
|
from DcsUi.variablecoercion.model import total_structure
|
|
|
|
|
|
|
|
|
class MainWindowConfig(object):
|
|
|
projectName = None
|
|
|
header = total_structure
|
|
|
ContinueRunFalse = False
|
|
|
RunInterval = 500
|
|
|
IOMapping = None
|
|
|
DIC = {
|
|
|
1: ['新建工程', '打开工程', '保存工程'],
|
|
|
2: ['导入工程', '用例组管理', '配置'],
|
|
|
3: ['自动执行', '单步执行', '暂停/继续', '退出', '变量组管理'],
|
|
|
4: ['终止规程列表', '测试记录', '日志'],
|
|
|
5: ['账户管理']
|
|
|
}
|
|
|
|
|
|
@classmethod
|
|
|
def setIOMapping(cls, iomapping):
|
|
|
cls.IOMapping = iomapping
|
|
|
|
|
|
|
|
|
class Client(object):
|
|
|
"""
|
|
|
LOG: Project.AddLog: test.log_info_DCSLog
|
|
|
"""
|
|
|
Cwd = None
|
|
|
App = None
|
|
|
MainFrame = None
|
|
|
Project = None
|
|
|
TabMgr = None
|
|
|
ToolMgr = None
|
|
|
WinMgr = None
|
|
|
TrendMgr = None
|
|
|
|
|
|
TrendAxe = None
|
|
|
TrendAxeData = []
|
|
|
TrendAxeLine = ['A', 'B', 'C']
|
|
|
TrendAxeLineObj = []
|
|
|
TrendFigureCanvas = None
|
|
|
|
|
|
StatusBar = None
|
|
|
|
|
|
User = None
|
|
|
db = None
|
|
|
|
|
|
CurrentProcedureEditor = None
|
|
|
CurrentProcedure = None
|
|
|
ContinueRunProcedure = False
|
|
|
CurrentRun = None
|
|
|
RunInterval = None
|
|
|
IOMapping = None
|
|
|
ContinueRunFalse = False
|
|
|
|
|
|
RunDirty = False
|
|
|
|
|
|
ThemeBackgroundColor = '#A5C3DC'
|
|
|
|
|
|
PermissionKeyOrObj = None
|
|
|
|
|
|
database_proxy = Proxy()
|
|
|
|
|
|
@classmethod
|
|
|
def setIOMapping(cls, iomapping):
|
|
|
cls.IOMapping = iomapping
|
|
|
|
|
|
@classmethod
|
|
|
def setCurrentProcedureEditor(cls, editor):
|
|
|
# .SetOperationsNumberValue
|
|
|
# number: 标识
|
|
|
# real_result:实际结果
|
|
|
# result_check:是否一致
|
|
|
if not editor:
|
|
|
cls.CurrentProcedureEditor = None
|
|
|
cls.CurrentProcedure = None
|
|
|
else:
|
|
|
cls.CurrentProcedureEditor = editor
|
|
|
cls.CurrentProcedure = editor.itemData
|
|
|
|
|
|
@classmethod
|
|
|
def setCurrentRun(cls, currentRun):
|
|
|
cls.CurrentRun = currentRun
|
|
|
|
|
|
@classmethod
|
|
|
def setPermissionKeyOrObj(cls, permissionKeyOrObj):
|
|
|
cls.PermissionKeyOrObj = permissionKeyOrObj
|
|
|
|
|
|
@classmethod
|
|
|
def setUser(cls, user):
|
|
|
cls.User = user
|
|
|
return cls.User
|
|
|
|
|
|
@classmethod
|
|
|
def clear(cls):
|
|
|
cls.setUser(user=None)
|
|
|
|
|
|
@classmethod
|
|
|
def setCwd(cls, Cwd):
|
|
|
cls.Cwd = Cwd
|
|
|
|
|
|
@classmethod
|
|
|
def setApp(cls, App):
|
|
|
cls.App = App
|
|
|
|
|
|
@classmethod
|
|
|
def setFrame(cls, main_frame):
|
|
|
cls.MainFrame = main_frame
|
|
|
|
|
|
@classmethod
|
|
|
def setProject(cls, Project):
|
|
|
cls.Project = Project
|
|
|
cls.setDb(Project.DbPath)
|
|
|
|
|
|
@classmethod
|
|
|
def setDb(cls, DbPath):
|
|
|
from peewee import SqliteDatabase
|
|
|
cls.db = SqliteDatabase(DbPath)
|
|
|
cls.database_proxy.initialize(cls.db)
|
|
|
|
|
|
from .db import initDatabase
|
|
|
initDatabase(cls.db)
|
|
|
|
|
|
@classmethod
|
|
|
def setTabMgr(cls, TabMgr):
|
|
|
cls.TabMgr = TabMgr
|
|
|
|
|
|
@classmethod
|
|
|
def setToolMgr(cls, ToolMgr):
|
|
|
cls.ToolMgr = ToolMgr
|
|
|
|
|
|
@classmethod
|
|
|
def setWinMgr(cls, WinMgr):
|
|
|
cls.WinMgr = WinMgr
|
|
|
|
|
|
@classmethod
|
|
|
def setTrendMgr(cls, TrendMgr):
|
|
|
cls.TrendMgr = TrendMgr
|
|
|
|
|
|
@classmethod
|
|
|
def setStatusBar(cls, statusBar):
|
|
|
cls.StatusBar = statusBar
|
|
|
|
|
|
@classmethod
|
|
|
def getMenuBarList(cls):
|
|
|
cwd = cls.Cwd
|
|
|
try:
|
|
|
path = os.path.join(cwd, 'static', 'data', 'operation.json')
|
|
|
f = open(path, 'r')
|
|
|
menuBarData = json.loads(f.read())
|
|
|
f.close()
|
|
|
except Exception as e:
|
|
|
# print e.message
|
|
|
menuBarData = []
|
|
|
return menuBarData
|
|
|
|
|
|
|
|
|
def DataDir():
|
|
|
return dataDir
|
|
|
|
|
|
|
|
|
def TempDir():
|
|
|
return tempDir
|
|
|
|
|
|
|
|
|
def Log(*text):
|
|
|
text = " ".join([str(t) for t in text])
|
|
|
try:
|
|
|
print(text)
|
|
|
if not text.endswith("\n"):
|
|
|
text += "\n"
|
|
|
logFile.write(text)
|
|
|
logFile.flush()
|
|
|
except:
|
|
|
pass
|
|
|
|
|
|
|
|
|
def IsProject(dirPath):
|
|
|
return os.path.isfile(os.path.join(dirPath, 'project.data.yaml'))
|
|
|
|
|
|
|
|
|
def IsNewProjectPath(dirPath):
|
|
|
return False if os.listdir(dirPath) else True
|
|
|
|
|
|
|
|
|
def getVarForceColsStruct():
|
|
|
from .WorkModels import table_structure
|
|
|
return [i for i in table_structure[1:]]
|
|
|
|
|
|
|
|
|
import time, datetime
|
|
|
|
|
|
|
|
|
def calTime(date1, date2):
|
|
|
date1 = time.strptime(date1, "%Y-%m-%d %H:%M:%S")
|
|
|
date2 = time.strptime(date2, "%Y-%m-%d %H:%M:%S")
|
|
|
date1 = datetime.datetime(date1[0], date1[1], date1[2], date1[3], date1[4], date1[5])
|
|
|
date2 = datetime.datetime(date2[0], date2[1], date2[2], date2[3], date2[4], date2[5])
|
|
|
return date2 - date1
|