forked from goodboy/tractor
				
			| Now supports use from any `trio` task, any sync thread started with
`trio.to_thread.run_sync()` AND also via `breakpoint()` builtin API!
The only bit missing now is support for `asyncio` tasks when in infected
mode.. Bo
`greenback` setup/API adjustments:
- move `._rpc.maybe_import_gb()` to -> `devx._debug` and factor out the cached
  import checking into a sync func whilst placing the async `.ensure_portal()`
  bootstrapping into a new async `maybe_init_greenback()`.
- use the new init-er func inside `open_root_actor()` with the output
  predicating whether we override the `breakpoint()` hook.
core `devx._debug` implementation deatz:
- make `mk_mpdb()` only return the `pdp.Pdb` subtype instance since
  the sigint unshielding func is now accessible from the `Lock`
  singleton from anywhere.
- add non-main thread support (at least for `trio.to_thread` use cases)
  to our `Lock` with a new `.is_trio_thread()` predicate that delegates
  directly to `trio`'s internal version.
- do `Lock.is_trio_thread()` checks inside any methods which require
  special provisions when invoked from a non-main `trio` thread:
  - `.[un]shield_sigint()` methods since `signal.signal` usage is only
    allowed from cpython's main thread.
  - `.release()` since `trio.StrictFIFOLock` can only be called from
    a `trio` task.
- rework `.pause_from_sync()` itself to directly call `._set_trace()`
  and don't bother with `greenback._await()` when we're already calling
  it from a `.to_thread.run_sync()` thread, oh and try to use the
  thread/task name when setting `Lock.local_task_in_debug`.
- make it an RTE for now if you try to use `.pause_from_sync()` from any
  infected-`asyncio` task, but support is (hopefully) coming soon!
For testing we add a new `test_debugger.py::test_pause_from_sync()`
which includes a ctrl-c parametrization around the
`examples/debugging/sync_bp.py` script which includes all currently
supported/working usages:
- `tractor.pause_from_sync()`.
- via `breakpoint()` overload.
- from a `trio.to_thread.run_sync()` spawn. | ||
|---|---|---|
| .. | ||
| __init__.py | ||
| conftest.py | ||
| test_2way.py | ||
| test_advanced_faults.py | ||
| test_advanced_streaming.py | ||
| test_cancellation.py | ||
| test_child_manages_service_nursery.py | ||
| test_clustering.py | ||
| test_context_stream_semantics.py | ||
| test_debugger.py | ||
| test_discovery.py | ||
| test_docs_examples.py | ||
| test_infected_asyncio.py | ||
| test_inter_peer_cancellation.py | ||
| test_legacy_one_way_streaming.py | ||
| test_local.py | ||
| test_multi_program.py | ||
| test_pubsub.py | ||
| test_resource_cache.py | ||
| test_rpc.py | ||
| test_runtime.py | ||
| test_spawning.py | ||
| test_task_broadcasting.py | ||
| test_trioisms.py | ||