Commit Graph

32 Commits (7465e5b283117814d4a379825d77abd8559af9b9)

Author SHA1 Message Date
David Wilson bdc2f291ca Some importers don't implement all the optional interfaces. 8 years ago
David Wilson ff903b1bcd Rearrange docs, split connection methods into submodules. 8 years ago
David Wilson 81dd265c20 Catch BaseException to cope with KeyboardInterrupt and suchlike.
Django's module autoreloader calls sys.exit(), we want to catch that.
8 years ago
David Wilson 30991a6b42 Cure flake8 error. 8 years ago
David Wilson d2829259a5 Python 3 compatible first stage. 8 years ago
David Wilson e4efcd9455 Don't do bool(source) as some modules are 0 bytes. 8 years ago
David Wilson 301972bc57 Restructure module importer to cope with Ansible. 8 years ago
David Wilson 5ccf90702e Use sys.executable for LocalStream.python_path by default
But still use just 'python' for SshStream.
8 years ago
David Wilson d4478ca25c Don't use minimize_source() on third party code.
It breaks at least indentation.
8 years ago
David Wilson 9d6d342af1 Add CallError to the permitted classes list. 8 years ago
David Wilson 3de06ca559 "Ansible compatible" module loader.
Since all Ansible modules ever written are using worst practice Python,
the module loader must be rewritten to cope with their horrors.

Ansible is woeful software:

* AnsibleModule argument declarations appear within the main() function,
  so they can't be introspected prior to execution.

* No if __name__ == '__main__' guard means they can't be introspected
  without triggering execution.

* By default the main() function attempts to read from stdin, hanging
  our IO thread.

* So much unspeakable crap.

This rewrites the module loader to avoid actually running a module if it
can possibly be avoided. The downside is that the new loader must be
aware of far more details of the Python module mechanism. For example
with the new importer, namespace packages are broken at the very least.

On the plus side, now the module loader will be able to cope with
Django.
8 years ago
David Wilson ec21caa098 IOLOG re. 8 years ago
David Wilson ba3a0b6c48 Fix line numbers. 8 years ago
David Wilson fea12a6030 Many updates: graceful shutdown, docs, threading
* Start splitting docs up into internals.rst / api.rst
* Docs for lots more of econtext.core.
* Get rid of _update_stream() and has_output(), replace with individual
  functions called as state changes.
* Add Broker.on_thread() and remove Stream._lock: simply call
  on_thread() to ensure buffer management is linearized.
* Rename read_side/write_side to receive_side/transmit_side like event
  handler names.
* Clean up some more repr / debug logs.
* Move handle cleanup to Context.on_shutdown where it belongs.
* Make wake() a noop when called from broker thread.
* Replace graceful_count crap with Side.graceful attribute, add
  Broker.keep_alive() to check whether any registered readers want to
  be kept alive for graceful shutdown() or any child contexts with a
  connected stream exist.
* Make master.Broker timeout slightly longer than slave broker.
* Add generic on_thread() to allow running code on the IO thread.
8 years ago
David Wilson f88b0a11e9 Python 2.4 fixes. 8 years ago
David Wilson 1f27872eda Many docs updates. 8 years ago
David Wilson 95902d94b0 Python 2.5 fix: Logger.getChild() does not exist there. 8 years ago
David Wilson da4e457247 More docs, move call/call_with_deadline to econtext.master. 8 years ago
David Wilson 62520b1bcb Write history section. 8 years ago
David Wilson ce27058bdf Initial intro doc. 8 years ago
David Wilson cc18ab5e28 Tidy up event names and docstrings. 8 years ago
David Wilson d6d13ee506 Rationalize _fixup_package(), fix _setup_master() name. 8 years ago
David Wilson 0e58a48611 Fix method naming everywhere. 8 years ago
David Wilson 70c2032bb2 Another hackish graceful shutdown method. 8 years ago
David Wilson 9a8fc5e167 Another attempt at graceful shutdown. 8 years ago
David Wilson 4bf9d35e74 Better LocalStream bootstrap failure message. 8 years ago
David Wilson 8216edd755 Quieter logging of ImportError. 8 years ago
David Wilson d9e9d94f30 GetLocal(python_path=...) 8 years ago
David Wilson 7683ee060e Split out GetPreamble. 8 years ago
David Wilson 8fdedff8e7 Do docstring and comment removal before compression. 8 years ago
David Wilson bca3a65157 Use set_cloexec() everywhere. 8 years ago
David Wilson 274f7f91a3 Oops, forgot to check in master.py. 8 years ago