FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
cefpython/src/helpers.pyx at cefpython53 · pythonthings/cefpython · GitHub
pythonthings
cefpython
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
cefpython
/
src
/
helpers.pyx
Copy path
More file actions
More file actions
Latest commit
History
History
History
93 lines (85 loc) · 3.49 KB
Breadcrumbs
cefpython
/
src
/
helpers.pyx
Copy path
File metadata and controls
93 lines (85 loc) · 3.49 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#
Copyright (c) 2016 The CEF Python authors. All rights reserved.
include
"
cefpython.pyx
"
import
os
import
platform
import
re
import
traceback
import
time
import
codecs
cpdef
str
GetModuleDirectory():
"""
Get path to the cefpython module (so/pyd).
"""
if
platform.system()
==
"
Linux
"
and
os.getenv(
"
CEFPYTHON3_PATH
"
):
#
cefpython3 package __init__.py sets CEFPYTHON3_PATH.
#
When cefpython3 is installed as debian package, this
#
env variable is the only way of getting valid path.
return
os.getenv(
"
CEFPYTHON3_PATH
"
)
if
hasattr
(sys,
"
frozen
"
):
path
=
os.path.dirname(sys.executable)
elif
"
__file__
"
in
globals
():
path
=
os.path.dirname(os.path.realpath(
__file__
))
else
:
path
=
os.getcwd()
if
platform.system()
==
"
Windows
"
:
path
=
re.sub(
r
"
[
/
\\
]
+
"
, re.escape(os.sep), path)
path
=
re.sub(
r
"
[
/
\\
]
+
$
"
,
"
"
, path)
return
os.path.abspath(path)
g_GetAppPath_dir
=
None
cpdef
str
GetAppPath(
file
=
None
):
"""
Get application path.
"""
#
On Windows after downloading file and calling Browser.GoForward(),
#
current working directory is set to %UserProfile%.
#
Calling os.path.dirname(os.path.realpath(__file__))
#
returns for eg. "C:\Users\user\Downloads". A solution
#
is to cache path on first call.
if
not
g_GetAppPath_dir:
if
hasattr
(sys,
"
frozen
"
):
adir
=
os.path.dirname(sys.executable)
else
:
adir
=
os.getcwd()
global
g_GetAppPath_dir
g_GetAppPath_dir
=
adir
#
If file is None return current directory without trailing slash.
if
file
is
None
:
file
=
"
"
#
Only when relative path.
if
not
file
.startswith(
"
/
"
)
and
not
file
.startswith(
"
\\
"
)
and
(
not
re.search(
r
"
^
[
\w
-
]
+
:
"
,
file
)):
path
=
g_GetAppPath_dir
+
os.sep
+
file
if
platform.system()
==
"
Windows
"
:
path
=
re.sub(
r
"
[
/
\\
]
+
"
, re.escape(os.sep), path)
path
=
re.sub(
r
"
[
/
\\
]
+
$
"
,
"
"
, path)
return
path
return
str
(
file
)
cpdef py_void ExceptHook(excType, excValue, traceObject):
"""
Global except hook to exit app cleanly on error.
"""
#
This hook does the following: in case of exception write it to
#
the "error.log" file, display it to the console, shutdown CEF
#
and exit application immediately by ignoring "finally" (_exit()).
print
(
"
[CEF Python] ExceptHook: catched exception, will shutdown CEF now
"
)
QuitMessageLoop()
Shutdown()
print
(
"
[CEF Python] ExceptHook: see the catched exception below:
"
)
errorMsg
=
"
"
.join(traceback.format_exception(excType, excValue,
traceObject))
errorFile
=
GetAppPath(
"
error.log
"
)
try
:
appEncoding
=
g_applicationSettings[
"
string_encoding
"
]
except
:
appEncoding
=
"
utf-8
"
if
type
(errorMsg)
==
bytes:
errorMsg
=
errorMsg.decode(
encoding
=
appEncoding,
errors
=
"
replace
"
)
try
:
with
codecs.open(errorFile,
mode
=
"
a
"
,
encoding
=
appEncoding)
as
fp:
fp.write(
"
\n
[
%s
]
%s
\n
"
%
(
time.strftime(
"
%Y
-
%m
-
%d
%H
:
%M
:
%S
"
), errorMsg))
except
:
print
(
"
[CEF Python] WARNING: failed writing to error file:
%s
"
%
(
errorFile))
#
Convert error message to ascii before printing, otherwise
#
you may get error like this:
#
| UnicodeEncodeError: 'charmap' codec can't encode characters
errorMsg
=
errorMsg.encode(
"
ascii
"
,
errors
=
"
replace
"
)
errorMsg
=
errorMsg.decode(
"
ascii
"
,
errors
=
"
replace
"
)
print
(
"
\n
"
+
errorMsg)
#
noinspection PyProtectedMember
os._exit(
1
)
Back
|
FazBrowse Home
|
New Git URL