개정판 8fd51d32
- CommonAppDataFolder 대신 LocalAppDataFolder를 사용하도록 수정
Change-Id: I351db544411c6f6f6583d5ed88532bd36e0f4111
DTI_PID/DTI_PID/App.py | ||
---|---|---|
33 | 33 |
COMPANY = 'DOFTECH' |
34 | 34 |
NAME = 'Digital P&ID' |
35 | 35 |
THREAD_MAX_WORKER = os.cpu_count() |
36 |
COMMON_APP_DATA_FOLDER = os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID') |
|
37 |
LOCAL_APP_DATA_FOLDER = os.path.join(os.getenv('USERPROFILE'), 'Digital PID') |
|
38 | ||
36 | 39 | |
37 | 40 |
def __init__(self, args): |
38 | 41 |
import locale |
... | ... | |
173 | 176 |
@history 18.04.23 Jeongwoo Change method to execute ProjectDialog(dlg.exec_()→dlg.showDialog()) |
174 | 177 |
''' |
175 | 178 |
if __name__ == '__main__': |
176 |
import cv2
|
|
179 |
import shutil
|
|
177 | 180 |
from License import QLicenseDialog |
178 | 181 |
from ProjectDialog import Ui_Dialog |
179 | 182 |
from MainWindow import MainWindow |
180 | 183 |
from ExceptionHandler import QExceptionHandler |
181 | 184 | |
185 |
'''copy all files in COMMON_APP_DATA FOLDER to LOCAL_APP_DATA_FOLDER''' |
|
186 |
try: |
|
187 |
if not os.path.exists(App.LOCAL_APP_DATA_FOLDER): |
|
188 |
shutil.copytree(App.COMMON_APP_DATA_FOLDER, App.LOCAL_APP_DATA_FOLDER) |
|
189 |
except Exception as ex: |
|
190 |
message = f'error occurred({ex}) in {sys.exc_info()[-1].tb_frame.f_code.co_filename}:' \ |
|
191 |
f'{sys.exc_info()[-1].tb_lineno}' |
|
192 |
print(message) |
|
193 | ||
194 |
'''up to here''' |
|
195 | ||
182 | 196 |
app_doc_data = AppDocData.instance() |
183 | 197 |
configs = app_doc_data.getAppConfigs('app', 'update_url') |
184 | 198 |
DTI_PID/DTI_PID/AppDocData.py | ||
---|---|---|
310 | 310 |
@history 2018.06.29 Jeongwoo Change method to get template db path |
311 | 311 |
''' |
312 | 312 |
def getTemplateDbPath(self): |
313 |
path = os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID')
|
|
313 |
path = os.path.join(os.getenv('USERPROFILE'), 'Digital PID')
|
|
314 | 314 |
templateDbPath = os.path.join(path, 'Template.db') |
315 | 315 |
return templateDbPath |
316 | 316 | |
317 | 317 |
def get_template_symbol_library_path(self): |
318 | 318 |
"""return template symbol library path""" |
319 | 319 | |
320 |
path = os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID')
|
|
320 |
path = os.path.join(os.getenv('USERPROFILE'), 'Digital PID')
|
|
321 | 321 |
return os.path.join(path, 'SymbolLibrary.syl') |
322 | 322 | |
323 | 323 |
def getAppDbPath(self): |
... | ... | |
327 | 327 |
@date 2018.10.01 |
328 | 328 |
""" |
329 | 329 | |
330 |
path = os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID')
|
|
330 |
path = os.path.join(os.getenv('USERPROFILE'), 'Digital PID')
|
|
331 | 331 |
app_database = os.path.join(path, 'App.db') |
332 | 332 |
return app_database |
333 | 333 | |
... | ... | |
706 | 706 | |
707 | 707 |
def buildAppDatabase(self): |
708 | 708 |
"""build application database""" |
709 |
path = os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID')
|
|
709 |
path = os.path.join(os.getenv('USERPROFILE'), 'Digital PID')
|
|
710 | 710 |
appDatabaseFilePath = os.path.join(path, 'App.db') |
711 | 711 | |
712 | 712 |
# Creates or opens a file called mydb with a SQLite3 DB |
... | ... | |
763 | 763 |
def loadAppStyle(self): |
764 | 764 |
style = 'Fusion' |
765 | 765 | |
766 |
path = os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID')
|
|
766 |
path = os.path.join(os.getenv('USERPROFILE'), 'Digital PID')
|
|
767 | 767 |
if not os.path.exists(path): os.makedirs(path) |
768 | 768 | |
769 | 769 |
self.buildAppDatabase() |
... | ... | |
801 | 801 |
try: |
802 | 802 |
self.buildAppDatabase() |
803 | 803 | |
804 |
path = os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID')
|
|
804 |
path = os.path.join(os.getenv('USERPROFILE'), 'Digital PID')
|
|
805 | 805 |
appDatabaseFilePath = os.path.join(path, 'App.db') |
806 | 806 | |
807 | 807 |
# Creates or opens a file called mydb with a SQLite3 DB |
... | ... | |
887 | 887 |
@history humkyung 2018.04.19 return Project.db in Program Data folder instead of PROJECT_DB_PATH variable |
888 | 888 |
''' |
889 | 889 |
def getPrjDatabasePath(self): |
890 |
path = os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID')
|
|
890 |
path = os.path.join(os.getenv('USERPROFILE'), 'Digital PID')
|
|
891 | 891 |
if not os.path.exists(path): os.makedirs(path) |
892 | 892 | |
893 | 893 |
prjDatabaseFilePath = os.path.join(path, 'Project.db') |
... | ... | |
925 | 925 |
@author euisung |
926 | 926 |
@date 2019.04.02 |
927 | 927 |
''' |
928 |
return os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID', 'Explode.svg')
|
|
928 |
return os.path.join(os.getenv('USERPROFILE'), 'Digital PID', 'Explode.svg')
|
|
929 | 929 | |
930 | 930 |
def updateTitleBlockProperties(self, titleBlockProps): |
931 | 931 |
''' |
... | ... | |
4459 | 4459 |
def get_ext_apps(self): |
4460 | 4460 |
"""get external application information from App.db""" |
4461 | 4461 | |
4462 |
path = os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID')
|
|
4462 |
path = os.path.join(os.getenv('USERPROFILE'), 'Digital PID')
|
|
4463 | 4463 |
app_database_path = os.path.join(path, 'App.db') |
4464 | 4464 |
with sqlite3.connect(app_database_path) as conn: |
4465 | 4465 |
try: |
... | ... | |
4483 | 4483 |
def set_ext_apps(self, model:QStandardItemModel) -> None: |
4484 | 4484 |
""" save ext apps to database """ |
4485 | 4485 | |
4486 |
path = os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID')
|
|
4486 |
path = os.path.join(os.getenv('USERPROFILE'), 'Digital PID')
|
|
4487 | 4487 |
app_database_path = os.path.join(path, 'App.db') |
4488 | 4488 |
with sqlite3.connect(app_database_path) as conn: |
4489 | 4489 |
try: |
DTI_PID/DTI_PID/ConfigurationDialog.py | ||
---|---|---|
46 | 46 | |
47 | 47 |
docData = AppDocData.instance() |
48 | 48 |
self.ui.comboBoxOCRData.addItem('eng') |
49 |
tessdata_path = os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID', 'Tesseract-OCR', 'tessdata')
|
|
49 |
tessdata_path = os.path.join(os.getenv('USERPROFILE'), 'Digital PID', 'Tesseract-OCR', 'tessdata')
|
|
50 | 50 |
if os.path.isfile(os.path.join(tessdata_path, docData.getCurrentProject().name + '.traineddata')): |
51 | 51 |
self.ui.comboBoxOCRData.addItem(docData.getCurrentProject().name) |
52 | 52 |
DTI_PID/DTI_PID/ExceptionHandler.py | ||
---|---|---|
22 | 22 |
def __init__(self): |
23 | 23 |
super(QExceptionHandler, self).__init__() |
24 | 24 | |
25 |
self.log_path = os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID', 'id2.log')
|
|
25 |
self.log_path = os.path.join(os.getenv('USERPROFILE'), 'Digital PID', 'id2.log')
|
|
26 | 26 |
self.logger = logging.getLogger(__name__) |
27 | 27 |
logging.basicConfig(filename=self.log_path, filemode='a', level=logging.CRITICAL) |
28 | 28 |
DTI_PID/DTI_PID/OcrResultDialog.py | ||
---|---|---|
102 | 102 |
self.ui.pushButtonMakeTrainingImage.clicked.connect(self.pushButtonMakeTrainingImageClicked) |
103 | 103 | |
104 | 104 |
self.ui.comboBoxOCRData.addItem('eng') |
105 |
tessdata_path = os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID', 'Tesseract-OCR', 'tessdata')
|
|
105 |
tessdata_path = os.path.join(os.getenv('USERPROFILE'), 'Digital PID', 'Tesseract-OCR', 'tessdata')
|
|
106 | 106 |
if os.path.isfile(os.path.join(tessdata_path, app_doc_data.getCurrentProject().name + '.traineddata')): |
107 | 107 |
self.ui.comboBoxOCRData.addItem(app_doc_data.getCurrentProject().name) |
108 | 108 |
DTI_PID/DTI_PID/TrainingImageListDialog.py | ||
---|---|---|
19 | 19 |
import numpy as np |
20 | 20 |
import pyqtgraph as pg |
21 | 21 | |
22 |
dataPath = os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID')
|
|
22 |
dataPath = os.path.join(os.getenv('USERPROFILE'), 'Digital PID')
|
|
23 | 23 |
tesseractPath = os.path.join(dataPath, 'Tesseract-OCR', 'tessdata') |
24 | 24 |
pytesseract.pytesseract.tesseract_cmd = os.path.join(dataPath, 'Tesseract-OCR', 'tesseract.exe') |
25 | 25 |
tesseract_cmd = os.path.join(dataPath, 'Tesseract-OCR', 'tesseract.exe') |
... | ... | |
108 | 108 |
# Install the custom output stream |
109 | 109 |
# sys.stdout = EmittingStream(textWritten=self.normalOutputWritten) |
110 | 110 | |
111 |
os.environ['TESSDATA_PREFIX'] = os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID', 'Tesseract-OCR',
|
|
111 |
os.environ['TESSDATA_PREFIX'] = os.path.join(os.getenv('USERPROFILE'), 'Digital PID', 'Tesseract-OCR',
|
|
112 | 112 |
'tessdata') |
113 | 113 | |
114 | 114 |
appDocData = AppDocData.instance() |
DTI_PID/DTI_PID/tesseract_ocr_module.py | ||
---|---|---|
33 | 33 |
humkyung 2018.08.13 set tesseract executable path to relative of this file path |
34 | 34 |
euisung set tesseract executable path to ProgramData |
35 | 35 |
''' |
36 |
pytesseract.pytesseract.tesseract_cmd = os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID', 'Tesseract-OCR',
|
|
36 |
pytesseract.pytesseract.tesseract_cmd = os.path.join(os.getenv('USERPROFILE'), 'Digital PID', 'Tesseract-OCR',
|
|
37 | 37 |
'tesseract.exe') |
38 | 38 | |
39 |
tesseract_path = os.path.join(os.getenv('ALLUSERSPROFILE'), 'Digital PID', 'Tesseract-OCR')
|
|
39 |
tesseract_path = os.path.join(os.getenv('USERPROFILE'), 'Digital PID', 'Tesseract-OCR')
|
|
40 | 40 |
DEFAULT_CONF = """ |
41 | 41 |
--psm {} -c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-~.,/z !@#$%&*(){}[]<>:;+=?\\" |
42 | 42 |
""" |
build.bat | ||
---|---|---|
12 | 12 |
%VIRTUALENV_36X64% %WORKSPACE%\.venv |
13 | 13 |
IF %ERRORLEVEL% NEQ 0 goto :ERROR |
14 | 14 | |
15 |
%WORKSPACE%\.venv\scripts\activate.bat & pip install -r .\DTI_PID\DTI_PID\requirements.txt & pyinstaller --uac-admin App.spec --onedir -p PyQt5 -w --log-level=DEBUG --hidden-import=tkinter,pyqtgraph,getmac,pkg_resources.py2_warn -y & deactivate
|
|
15 |
%WORKSPACE%\.venv\scripts\activate.bat & pip install -r .\DTI_PID\DTI_PID\requirements.txt & pyinstaller App.spec --onedir -p PyQt5 -w --log-level=DEBUG --hidden-import=tkinter,pyqtgraph,getmac,pkg_resources.py2_warn -y & deactivate |
|
16 | 16 |
IF %ERRORLEVEL% NEQ 0 goto :ERROR |
17 | 17 | |
18 | 18 |
:EOF |
내보내기 Unified diff