Commit Graph

259 Commits (b4d4d8f041db64c7c21f0197c3f853bc7566c626)
 

Author SHA1 Message Date
David Wilson 9733668b50 Replace OK indicator with EC0/EC1. 8 years ago
David Wilson 82257c2c37 Fix messed up font on desktop. 8 years ago
David Wilson 961a9549bd Better method to ensure __module__ is set consistently.
PyFunction_New() and type_new() both simply lookup the __name__ of the
global scope in which a function or class is defined in order to
determine its __module__. So we can do a better job of ensuring
__module__ is set correctly by simply overriding __name__ before
defining any functions or classes.

Works identically in Python 3.
8 years ago
David Wilson 9cd9f1fec2 Update module forwarder blurb. 8 years ago
David Wilson 571cc00dc3 Import incomplete econtext.tcp implementation. 8 years ago
David Wilson fe171cd8cf Parameterize create_child() in order to support non-pipe children. 8 years ago
David Wilson ae7fcb75e4 Fix run_with_broker test. 8 years ago
David Wilson 959839cbbf Fix log message. 8 years ago
David Wilson 4de557d304 Somre more basic tests. 8 years ago
David Wilson b964cc6f18 Import preamble_size.py. 8 years ago
David Wilson 5a4fc577cd disable_site_packages() helper for ssh_test. 8 years ago
David Wilson ba85638c78 Module __file__ fixes. 8 years ago
David Wilson 2e675c47a1 Beginnings of Django integration test project/app. 8 years ago
David Wilson 3535e45245 Broken SSH unit test. 8 years ago
David Wilson 341a90e173 Allow setting ssh_path in econtext.ssh.connect(). 8 years ago
David Wilson 7465e5b283 Add missing econtext.ssh to present list. 8 years ago
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 87a4206015 Enhance utils.log_to_file(). 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 965350757f Import working (but useless) connection plugin. 8 years ago
David Wilson 2feaf570bd Reorient Sphinx layout to get subheadings in sidebar. 8 years ago
David Wilson 481ae1a933 Implement Importer.get_filename() and Importer.get_source()
Optional importer protocols required for Python to display annotated
tracebacks.
8 years ago
David Wilson 30991a6b42 Cure flake8 error. 8 years ago
David Wilson ee56032758 Last ditch attempt to log main() thread crashes. 8 years ago
David Wilson 013634a317 Python2.4 lacks any(). 8 years ago
David Wilson d2829259a5 Python 3 compatible first stage. 8 years ago
David Wilson 08e80b824d Another TODO 8 years ago
David Wilson e4efcd9455 Don't do bool(source) as some modules are 0 bytes. 8 years ago
David Wilson 9e68408597 Draft importer tests. 8 years ago
David Wilson 799cd173c6 One more test case. 8 years ago
David Wilson 301972bc57 Restructure module importer to cope with Ansible. 8 years ago
David Wilson 66f92ad44c Initial couple of tests. 8 years ago
David Wilson d573340d5f Remove old draft test. 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 a8cd86420a Rename to avoid module name conflict. 8 years ago
David Wilson fd9f5e6e60 Ansible example. 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 088d053a4e Fix Waker repr. 8 years ago
David Wilson 2225ee2923 Convert CallError received on channel into exception. 8 years ago
David Wilson e7c4736b78 Better handle unpicklable objects. 8 years ago
David Wilson 82401c7274 Catch _run_on_thread crashes. 8 years ago
David Wilson 762bf0722a Drama 8 years ago
David Wilson a26a6bd66e More docs. 8 years ago
David Wilson ec21caa098 IOLOG re. 8 years ago
David Wilson a49fe26bb8 TODO entry. 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