-
-
Notifications
You must be signed in to change notification settings - Fork 474
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
Add hello_world.py example (#207). Update to Cython 0.24.1 (#110). Test with Python 3.4.5 (#121) on Ubuntu 14.04 by running the hello_world.py example. No other examples were run, so there still may be bugs. Expose new funcs in the cefpython module: CreateBrowser, ExceptHook, GetAppPath. Add --fast flag to compile.py for faster build time of the cefpython module. Don't use it for building official binary distrib.
- Loading branch information
Showing
15 changed files
with
382 additions
and
130 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
.idea/ | ||
build/ | ||
*.log |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
# Hello world example doesn't depend on any third party GUI framework. | ||
|
||
from cefpython3 import cefpython as cef | ||
import sys | ||
|
||
|
||
def main(): | ||
"""Main entry point.""" | ||
sys.excepthook = cef.ExceptHook | ||
cef.Initialize() | ||
browser = cef.CreateBrowserSync(url="https://www.google.com/") | ||
browser.SetClientHandler(ClientHandler()) | ||
cef.MessageLoop() | ||
cef.Shutdown() | ||
|
||
|
||
class ClientHandler: | ||
"""Client handler.""" | ||
def OnBeforeClose(self, browser): | ||
if not browser.IsPopup(): | ||
cef.QuitMessageLoop() | ||
|
||
|
||
if __name__ == '__main__': | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
# This file was generated by setup.py | ||
DEF UNAME_SYSNAME = "Linux" | ||
DEF PY_MAJOR_VERSION = 2 | ||
DEF PY_MAJOR_VERSION = 3 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
# 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 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 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()). | ||
errorMsg = "\n".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("[pygtk_.py]: 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+"\n") | ||
QuitMessageLoop() | ||
Shutdown() | ||
# noinspection PyProtectedMember | ||
os._exit(1) | ||
|
Oops, something went wrong.