diff --git a/python/install_py_bindings.sh b/python/install_py_bindings.sh deleted file mode 100755 index f9074f7a3..000000000 --- a/python/install_py_bindings.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -set -ex - -export DCC_RS_TARGET=release - -cargo build -p deltachat_ffi --${DCC_RS_TARGET} -rm -rf build/ src/deltachat/*.so -DCC_RS_DEV=`pwd`/.. pip install -e . diff --git a/python/install_python_bindings.py b/python/install_python_bindings.py new file mode 100755 index 000000000..8effe5c4b --- /dev/null +++ b/python/install_python_bindings.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python + +""" + setup a python binding development in-place install with cargo debug symbols. +""" + +import os +import subprocess + +if __name__ == "__main__": + os.environ["DCC_RS_TARGET"] = target = "release" + + toml = os.path.join(os.getcwd(), "..", "Cargo.toml") + assert os.path.exists(toml) + with open(toml) as f: + s = orig = f.read() + s += "\n" + s += "[profile.release]\n" + s += "debug = true\n" + with open(toml, "w") as f: + f.write(s) + print("temporarily modifying Cargo.toml to provide release build with debug symbols ") + try: + subprocess.check_call([ + "cargo", "build", "-p", "deltachat_ffi", "--" + target + ]) + finally: + with open(toml, "w") as f: + f.write(orig) + print("\nreseted Cargo.toml to previous original state") + + subprocess.check_call("rm -rf build/ src/deltachat/*.so" , shell=True) + + subprocess.check_call([ + "pip", "install", "-e", "." + ]) diff --git a/python/src/deltachat/_build.py b/python/src/deltachat/_build.py index 651d8edde..cc01ecb07 100644 --- a/python/src/deltachat/_build.py +++ b/python/src/deltachat/_build.py @@ -25,6 +25,7 @@ def ffibuilder(): else: raise NotImplementedError("Compilation not supported yet on Windows, can you help?") objs = [os.path.join(projdir, 'target', target, 'libdeltachat.a')] + assert os.path.exists(objs[0]), objs incs = [os.path.join(projdir, 'deltachat-ffi')] else: libs = ['deltachat'] diff --git a/python/src/deltachat/account.py b/python/src/deltachat/account.py index c6ca2d438..c98303181 100644 --- a/python/src/deltachat/account.py +++ b/python/src/deltachat/account.py @@ -36,14 +36,17 @@ class Account(object): lib.dc_context_new(lib.py_dc_callback, ffi.NULL, ffi.NULL), _destroy_dc_context, ) - self._threads = IOThreads(self._dc_context) + if eventlogging: + self._evlogger = EventLogger(self._dc_context, logid) + deltachat.set_context_callback(self._dc_context, self._process_event) + self._threads = IOThreads(self._dc_context, self._evlogger._log_event) + else: + self._threads = IOThreads(self._dc_context) + if hasattr(db_path, "encode"): db_path = db_path.encode("utf8") if not lib.dc_open(self._dc_context, db_path, ffi.NULL): raise ValueError("Could not dc_open: {}".format(db_path)) - if eventlogging: - self._evlogger = EventLogger(self._dc_context, logid) - deltachat.set_context_callback(self._dc_context, self._process_event) self._configkeys = self.get_config("sys.config_keys").split() self._imex_completed = threading.Event() @@ -340,7 +343,7 @@ class Account(object): def shutdown(self, wait=True): """ stop threads and close and remove underlying dc_context and callbacks. """ - if hasattr(self, "_dc_context"): + if hasattr(self, "_dc_context") and hasattr(self, "_threads"): self.stop_threads(wait=False) # to interrupt idle and tell python threads to stop lib.dc_close(self._dc_context) self.stop_threads(wait=wait) # to wait for threads @@ -362,10 +365,11 @@ class Account(object): class IOThreads: - def __init__(self, dc_context): + def __init__(self, dc_context, log_event=lambda *args: None): self._dc_context = dc_context self._thread_quitflag = False self._name2thread = {} + self._log_event = log_event def is_started(self): return len(self._name2thread) > 0 @@ -391,17 +395,19 @@ class IOThreads: thread.join() def imap_thread_run(self): + self._log_event("py-bindings-info", 0, "IMAP THREAD START") while not self._thread_quitflag: lib.dc_perform_imap_jobs(self._dc_context) lib.dc_perform_imap_fetch(self._dc_context) lib.dc_perform_imap_idle(self._dc_context) - print("IMAP_THREAD finished") + self._log_event("py-bindings-info", 0, "IMAP THREAD FINISHED") def smtp_thread_run(self): + self._log_event("py-bindings-info", 0, "SMTP THREAD START") while not self._thread_quitflag: lib.dc_perform_smtp_jobs(self._dc_context) lib.dc_perform_smtp_idle(self._dc_context) - print("SMTP_THREAD finished") + self._log_event("py-bindings-info", 0, "SMTP THREAD FINISHED") class EventLogger: diff --git a/python/tests/test_lowlevel.py b/python/tests/test_lowlevel.py index 7bb7e77cf..a21efdd3c 100644 --- a/python/tests/test_lowlevel.py +++ b/python/tests/test_lowlevel.py @@ -31,7 +31,7 @@ def test_dc_close_events(): if info_string in data2: return else: - print("skipping info event", data2) + print("skipping event", *ev) find("disconnecting INBOX-watch") find("disconnecting sentbox-thread") diff --git a/src/dc_job.rs b/src/dc_job.rs index f93eb673f..2cd3f0bd1 100644 --- a/src/dc_job.rs +++ b/src/dc_job.rs @@ -80,12 +80,10 @@ unsafe fn dc_job_perform(context: &Context, thread: libc::c_int, probe_network: params_probe }; - info!(context, 0, "dc_job_perform before query"); let jobs: Result, _> = context.sql.query_map( query, params, |row| { - info!(context, 0, "START jobs query_maps"); let job = dc_job_t { job_id: row.get(0)?, action: row.get(1)?, @@ -102,22 +100,17 @@ unsafe fn dc_job_perform(context: &Context, thread: libc::c_int, probe_network: let packed_c = to_cstring(packed); dc_param_set_packed(job.param, packed_c); free(packed_c as *mut _); - info!(context, 0, "DONE jobs query_maps row"); Ok(job) }, |jobs| { - info!(context, 0, "collecting jobs"); let res = jobs .collect::, _>>() .map_err(Into::into); - info!(context, 0, "collecting jobs done"); res }, ); match jobs { - Ok(ref res) => { - info!(context, 0, "query done, {:?}", res.len()); - } + Ok(ref res) => {} Err(ref err) => { info!(context, 0, "query failed: {:?}", err); }