Hello community,
here is the log from the commit of package python-envisage for openSUSE:Factory
checked in at 2019-05-15 12:34:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-envisage (Old)
and /work/SRC/openSUSE:Factory/.python-envisage.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-envisage"
Wed May 15 12:34:17 2019 rev:4 rq:702923 version:4.7.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-envisage/python-envisage.changes
2018-12-31 09:47:19.254170698 +0100
+++
/work/SRC/openSUSE:Factory/.python-envisage.new.5148/python-envisage.changes
2019-05-15 12:34:18.588548448 +0200
@@ -1,0 +2,6 @@
+Tue May 14 17:34:03 UTC 2019 - Gary Smith <[email protected]>
+
+- Update to version 4.7.2
+ * no changelog
+
+-------------------------------------------------------------------
Old:
----
envisage-4.7.0.tar.gz
New:
----
envisage-4.7.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-envisage.spec ++++++
--- /var/tmp/diff_new_pack.ecL7dU/_old 2019-05-15 12:34:19.160546801 +0200
+++ /var/tmp/diff_new_pack.ecL7dU/_new 2019-05-15 12:34:19.168546778 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-envisage
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -12,7 +12,7 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
@@ -21,7 +21,7 @@
%define X_display ":98"
%bcond_with test
Name: python-envisage
-Version: 4.7.0
+Version: 4.7.2
Release: 0
Summary: Extensible application framework for Python
# Source code is under BSD but images are under different licenses
++++++ envisage-4.7.0.tar.gz -> envisage-4.7.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/envisage-4.7.0/CHANGES.txt
new/envisage-4.7.2/CHANGES.txt
--- old/envisage-4.7.0/CHANGES.txt 1970-01-01 01:00:00.000000000 +0100
+++ new/envisage-4.7.2/CHANGES.txt 2019-05-03 11:49:52.000000000 +0200
@@ -0,0 +1,164 @@
+====================
+ Envisage CHANGELOG
+====================
+
+Version 4.7.2
+=============
+
+Released: 03 May 2019
+
+Fixes
+-----
+
+* Fix some broken imports and name errors in the ``envisage.developer``
+ package. (#130)
+* Add missing test data to support running tests on Python 3.7. (#136)
+* Fix reversed interpretation of the
+ ``TasksApplication.always_use_default_layout`` when creating task windows.
+ (#144)
+* In the ``InternalIPKernel`` plugin, restore original standard streams
+ (``stdout``, ``stdin``, ``stderr``) at plugin stop time. (#146)
+* In the ``InternalIPKernel`` plugin, fix ``ResourceWarnings`` from
+ unclosed pipes attached to qt consoles. (#147)
+
+
+Version 4.7.1
+=============
+
+Released : 31 January 2019
+
+Changes
+-------
+
+* Replace use of deprecated ``HasTraits.set`` method (#118)
+
+Fixes
+-----
+
+* Fix IPython GUI kernel issue when used with ipykernel 4.7.0 (#123)
+* Fix infinite recursion issue when harvesting extension methods (#121)
+
+
+Version 4.7.0
+=============
+
+Changes
+-------
+
+* Update CI setup and include ``ipykernel`` in devenv (#105, #111, #114)
+* Use ``--gui`` rather than ``--matplotlib`` when starting IPython kernel
(#101)
+* Downgrade level of a logging message (#95)
+
+Fixes
+-----
+
+* Fix old-style relative import (#109)
+* Fix attractors example (#103)
+* Stop the IOPubThread as part of IPython kernel shutdown (#100)
+* Fix Sphinx conf to be able to build docs again (#91)
+* Fix deprecated IPython import (#92)
+* Fix task layout serialization under Python 3 (#90)
+
+
+Version 4.6.0
+=============
+
+This is an incremental release, mainly consisting of bug fixes. The most
+significant change is the support for IPython >= 4 in the IPython plugin.
+
+Thanks to @corranwebster, @dpinte, @itziakos, @jonathanrocher, @kamalx,
+@rahulporuri, @robmcmullen, @sjagoe
+
+Enhancements
+------------
+
+* IPython kernel plugin now supports IPython >= 4 (#82)
+* Remove usage of deprecated IPython QtConsole API (#80)
+* Defer selection of toolkit and avoid creating GUI applications as
side-effects as
+ much as possible (#77, #76)
+
+Fixes
+-----
+
+* Fixes for tests under Python 3.5 (#86)
+* Work around for issue with Traits in Python 3 (#78)
+* Replace uses of ‘file’ and ‘execfile’ (#75)
+* Fix MOTD_Using_Eggs example (#66)
+* Fix broken and outdated links in documentation (#72)
+* Fix link to docs from README (#70)
+* Fix degenerate case where window is created with no layout (#44)
+
+
+Version 4.5.1
+=============
+
+Enhancements
+------------
+
+* Add tox for testing package install (#67)
+
+Fixes
+-----
+
+* Include missing test files in the package data (#67)
+* Include missing test cases for Python 3.4 (#67)
+
+
+Version 4.5.0
+=============
+
+New features
+------------
+
+* IPythonKernelPlugin for Tasks: run an IPython kernel within the
+ envisage app and expose it as a service (#54).
+* Envisage now supports Python 3.4 (#61).
+
+Enhancements
+------------
+
+* Allow loading plugins from an egg basket even when some eggs are
+ invalid (#40, #46).
+* Add a simple ``GUIApplication`` to bootstrap basic plugin-driven
+ applications (#34).
+* Split the IPython kernel and IPython menu action into two separate
+ plugins for flexibility (#57).
+
+Fixes
+-----
+
+* Use new Traits interfaces and adaptation implementation (#37).
+* Envisage now configures the logger with a ``NullHandler`` to avoid
+ spurios unconfigured logger warnings (#45).
+* Envisage no longer swallows exceptions in plugin startup (#50).
+* Various fixes to continuous integration configuration (#47, #60).
+
+
+Version 4.4.0
+=============
+
+The major component of this feature is to work with the new
+``traits.adaptation`` mechanism in place of the deprecated
+``traits.protocols``, maintaining compatibility with ``traits`` version
+4.4.0.
+
+This release also adds a new method to retrieve a service that is
+required by the application and provides documentation and test updates.
+
+
+New features
+------------
+
+* Added a simple GUIApplication class (673c8f6)
+* Added a method to get a required service (94dfdea)
+
+Enhancements
+------------
+
+* Updated to use the new traits.adaptation functionality (34fa5e6)
+
+Fixes
+-----
+
+* Updated links to point to github instead of svn codebase (87cdb87)
+* Fixed test cases and added to Travis-CI (6c11d9f)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/envisage-4.7.0/LICENSE.txt
new/envisage-4.7.2/LICENSE.txt
--- old/envisage-4.7.0/LICENSE.txt 1970-01-01 01:00:00.000000000 +0100
+++ new/envisage-4.7.2/LICENSE.txt 2018-09-10 16:20:43.000000000 +0200
@@ -0,0 +1,28 @@
+This software is OSI Certified Open Source Software.
+OSI Certified is a certification mark of the Open Source Initiative.
+
+Copyright (c) 2006, Enthought, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of Enthought, Inc. nor the names of its contributors may
+ be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/envisage-4.7.0/MANIFEST.in
new/envisage-4.7.2/MANIFEST.in
--- old/envisage-4.7.0/MANIFEST.in 2018-08-10 20:08:30.000000000 +0200
+++ new/envisage-4.7.2/MANIFEST.in 2019-05-03 10:28:58.000000000 +0200
@@ -1,3 +1,9 @@
+include CHANGES.txt
+include LICENSE.txt
+include MANIFEST.in
+include README.rst
+include image_LICENSE.txt
+include image_LICENSE_CP.txt
recursive-include envisage/tests/plugins *.py
recursive-include envisage/tests/eggs *.egg
recursive-include envisage/tests/bad_eggs *.egg
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/envisage-4.7.0/PKG-INFO new/envisage-4.7.2/PKG-INFO
--- old/envisage-4.7.0/PKG-INFO 2018-08-15 21:19:05.000000000 +0200
+++ new/envisage-4.7.2/PKG-INFO 2019-05-03 12:38:04.000000000 +0200
@@ -1,13 +1,14 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
Name: envisage
-Version: 4.7.0
+Version: 4.7.2
Summary: extensible application framework
Home-page: http://docs.enthought.com/envisage
-Author: ETS Developers
-Author-email: [email protected]
+Author: Martin Chilvers, et. al.
+Author-email: [email protected]
+Maintainer: ETS Developers
+Maintainer-email: [email protected]
License: BSD
Download-URL: https://github.com/enthought/envisage
-Description-Content-Type: UNKNOWN
Description: ==========================================
envisage: extensible application framework
==========================================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/envisage-4.7.0/envisage/_version.py
new/envisage-4.7.2/envisage/_version.py
--- old/envisage-4.7.0/envisage/_version.py 2018-08-15 21:19:04.000000000
+0200
+++ new/envisage-4.7.2/envisage/_version.py 2019-05-03 12:38:03.000000000
+0200
@@ -1,6 +1,6 @@
# This file was automatically generated from the `setup.py` script.
-version = '4.7.0'
-full_version = '4.7.0'
+version = '4.7.2'
+full_version = '4.7.2'
git_revision = 'Unknown'
is_released = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/envisage-4.7.0/envisage/developer/charm/charm.py
new/envisage-4.7.2/envisage/developer/charm/charm.py
--- old/envisage-4.7.0/envisage/developer/charm/charm.py 2018-08-10
20:08:30.000000000 +0200
+++ new/envisage-4.7.2/envisage/developer/charm/charm.py 2019-05-03
11:49:52.000000000 +0200
@@ -2,7 +2,7 @@
# Enthought library imports.
-from envisage.developer.api import CodeBrowser, Module
+from envisage.developer.code_browser.api import CodeBrowser, Module
from traits.api import Event, HasTraits, Instance, Str
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/envisage-4.7.0/envisage/developer/ui/view/plugin_browser.py
new/envisage-4.7.2/envisage/developer/ui/view/plugin_browser.py
--- old/envisage-4.7.0/envisage/developer/ui/view/plugin_browser.py
2018-08-10 20:08:30.000000000 +0200
+++ new/envisage-4.7.2/envisage/developer/ui/view/plugin_browser.py
2019-05-03 11:49:52.000000000 +0200
@@ -2,13 +2,13 @@
# Enthought library imports.
-from envisage.api import ExtensionPoint, IPlugin
+from envisage.api import ExtensionPoint, IApplication, IExtensionPoint, IPlugin
from traits.api import Delegate, HasTraits, Instance, List, Property
from traits.api import Code, Str
from traitsui.api import Item, TableEditor, View, VGroup
from traitsui.table_column import ObjectColumn # fixme: non-api!
-class ExtensionPointModel(Hastraits):
+class ExtensionPointModel(HasTraits):
""" A model for browsing an extension point. """
# The plugin that offered the extension point.
@@ -21,7 +21,7 @@
-class ExtensionModel(Hastraits):
+class ExtensionModel(HasTraits):
""" A model for browsing a contribution to an extension point. """
# The plugin that made the contribution.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/envisage-4.7.0/envisage/extension_point_binding.py
new/envisage-4.7.2/envisage/extension_point_binding.py
--- old/envisage-4.7.0/envisage/extension_point_binding.py 2018-08-10
20:08:30.000000000 +0200
+++ new/envisage-4.7.2/envisage/extension_point_binding.py 2019-05-03
10:28:58.000000000 +0200
@@ -141,7 +141,7 @@
value = self.extension_registry.get_extensions(self.extension_point_id)
traits = {self.trait_name : value}
- self.obj.set(trait_change_notify=notify, **traits)
+ self.obj.trait_set(trait_change_notify=notify, **traits)
return
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/envisage-4.7.0/envisage/plugin.py
new/envisage-4.7.2/envisage/plugin.py
--- old/envisage-4.7.0/envisage/plugin.py 2018-08-10 20:08:30.000000000
+0200
+++ new/envisage-4.7.2/envisage/plugin.py 2019-05-03 10:28:58.000000000
+0200
@@ -365,9 +365,13 @@
""" Harvest all method-based contributions. """
extensions = []
- for name, value in inspect.getmembers(self):
+ # Using inspect.getmembers(self) here will cause an infinite recursion,
+ # so use an internal HasTraits method for inspecting the MRO of the
+ # instance's type to find all methods instead.
+ for name in self._each_trait_method(self):
+ value = getattr(self, name)
if self._is_extension_method(value, extension_point_id):
- result = getattr(self, name)()
+ result = value()
if not isinstance(result, list):
result = [result]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/envisage-4.7.0/envisage/plugins/ipython_kernel/internal_ipkernel.py
new/envisage-4.7.2/envisage/plugins/ipython_kernel/internal_ipkernel.py
--- old/envisage-4.7.0/envisage/plugins/ipython_kernel/internal_ipkernel.py
2018-08-10 20:08:30.000000000 +0200
+++ new/envisage-4.7.2/envisage/plugins/ipython_kernel/internal_ipkernel.py
2019-05-03 11:49:52.000000000 +0200
@@ -3,11 +3,18 @@
https://github.com/ipython/ipython/blob/2.x/examples/Embedding/internal_ipkernel.py
"""
+from distutils.version import StrictVersion as Version
+import sys
+
+import ipykernel
from ipykernel.connect import connect_qtconsole
from ipykernel.kernelapp import IPKernelApp
+from tornado import ioloop
from traits.api import Any, HasStrictTraits, Instance, List
+NEEDS_IOLOOP_PATCH = Version(ipykernel.__version__) >= Version('4.7.0')
+
def gui_kernel(gui_backend):
""" Launch and return an IPython kernel GUI with support.
@@ -49,6 +56,12 @@
#: This is a list of tuples (name, value).
initial_namespace = List()
+ #: sys.stdout value at time kernel was started
+ _original_stdout = Any()
+
+ #: sys.stderr value at time kernel was started
+ _original_stderr = Any()
+
def init_ipkernel(self, gui_backend):
""" Initialize the IPython kernel.
@@ -58,9 +71,23 @@
The GUI mode used to initialize the GUI mode. For options, see
the `ipython --gui` help pages.
"""
+ # The IPython kernel modifies sys.stdout and sys.stderr when started,
+ # and doesn't currently provide a way to restore them. So we restore
+ # them ourselves at shutdown.
+ self._original_stdout = sys.stdout
+ self._original_stderr = sys.stderr
+
# Start IPython kernel with GUI event loop support
self.ipkernel = gui_kernel(gui_backend)
+ # Since ipykernel 4.7, the io_loop attribute of the kernel is not
+ # initialized anymore
+ # Reference: https://github.com/enthought/envisage/issues/107
+ # Workaround: Retrieve the kernel on the IPykernelApp and set the
+ # io_loop without starting it!
+ if NEEDS_IOLOOP_PATCH and not hasattr(self.ipkernel.kernel, 'io_loop'):
+ self.ipkernel.kernel.io_loop = ioloop.IOLoop.instance()
+
# This application will also act on the shell user namespace
self.namespace = self.ipkernel.shell.user_ns
self.namespace.update(dict(self.initial_namespace))
@@ -76,6 +103,8 @@
""" Kill all existing consoles. """
for c in self.consoles:
c.kill()
+ c.stdout.close()
+ c.stderr.close()
self.consoles = []
def shutdown(self):
@@ -87,5 +116,20 @@
self.cleanup_consoles()
self.ipkernel.shell.exit_now = True
self.ipkernel.cleanup_connection_file()
+
+ # The stdout and stderr streams created by the kernel use the
+ # IOPubThread, so we need to close them and restore the originals
+ # before we shut down the thread. Without this, we get obscure
+ # errors of the form "TypeError: heap argument must be a list".
+ kernel_stdout = sys.stdout
+ if kernel_stdout is not self._original_stdout:
+ sys.stdout = self._original_stdout
+ kernel_stdout.close()
+
+ kernel_stderr = sys.stderr
+ if kernel_stderr is not self._original_stderr:
+ sys.stderr = self._original_stderr
+ kernel_stderr.close()
+
self.ipkernel.iopub_thread.stop()
self.ipkernel = None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/envisage-4.7.0/envisage/plugins/ipython_kernel/tests/test_internal_ipkernel.py
new/envisage-4.7.2/envisage/plugins/ipython_kernel/tests/test_internal_ipkernel.py
---
old/envisage-4.7.0/envisage/plugins/ipython_kernel/tests/test_internal_ipkernel.py
2018-08-10 20:08:30.000000000 +0200
+++
new/envisage-4.7.2/envisage/plugins/ipython_kernel/tests/test_internal_ipkernel.py
2019-05-03 11:49:52.000000000 +0200
@@ -1,4 +1,5 @@
import gc
+import sys
import unittest
try:
@@ -47,6 +48,27 @@
self.assertEqual(kernel.namespace['x'], 42.1)
kernel.shutdown()
+ def test_shutdown_restores_output_streams(self):
+ original_stdout = sys.stdout
+ original_stderr = sys.stderr
+
+ kernel = InternalIPKernel(initial_namespace=[('x', 42.1)])
+ kernel.init_ipkernel(gui_backend=None)
+ kernel.shutdown()
+
+ self.assertIs(sys.stdout, original_stdout)
+ self.assertIs(sys.stderr, original_stderr)
+
+ def test_shutdown_closes_console_pipes(self):
+ kernel = InternalIPKernel(initial_namespace=[('x', 42.1)])
+ kernel.init_ipkernel(gui_backend=None)
+ console = kernel.new_qt_console()
+ self.assertFalse(console.stdout.closed)
+ self.assertFalse(console.stderr.closed)
+ kernel.shutdown()
+ self.assertTrue(console.stdout.closed)
+ self.assertTrue(console.stderr.closed)
+
def test_io_pub_thread_stopped(self):
kernel = InternalIPKernel()
kernel.init_ipkernel(gui_backend=None)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/envisage-4.7.0/envisage/plugins/remote_editor/editor_plugins/emacs/enshell.el
new/envisage-4.7.2/envisage/plugins/remote_editor/editor_plugins/emacs/enshell.el
---
old/envisage-4.7.0/envisage/plugins/remote_editor/editor_plugins/emacs/enshell.el
1970-01-01 01:00:00.000000000 +0100
+++
new/envisage-4.7.2/envisage/plugins/remote_editor/editor_plugins/emacs/enshell.el
2019-05-03 11:29:27.000000000 +0200
@@ -0,0 +1 @@
+(pymacs-load "enthought.plugins.remote_editor.communication.client")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/envisage-4.7.0/envisage/plugins/remote_editor/editor_plugins/emacs/enshell_plugin.py
new/envisage-4.7.2/envisage/plugins/remote_editor/editor_plugins/emacs/enshell_plugin.py
---
old/envisage-4.7.0/envisage/plugins/remote_editor/editor_plugins/emacs/enshell_plugin.py
1970-01-01 01:00:00.000000000 +0100
+++
new/envisage-4.7.2/envisage/plugins/remote_editor/editor_plugins/emacs/enshell_plugin.py
2019-05-03 11:29:27.000000000 +0200
@@ -0,0 +1,33 @@
+"""
+"""
+
+# System library imports
+from Pymacs import lisp
+
+# ETS imports
+from envisage.plugins.remote_editor.plugins.editor_plugin import \
+ EditorPlugin
+
+
+client = EditorPlugin()
+client.register()
+
+def run_text():
+ start = lisp.point()
+ end = lisp.mark(True)
+ if start > end:
+ start, end = end, start
+ text = lisp.buffer_substring(start, end)
+ if len(text):
+ client.run_text(text)
+ else:
+ # TODO Complain in message bar
+ pass
+
+def run_file():
+ path = lisp.buffer_file_name()
+ if path is None:
+ # TODO Complain in message bar
+ pass
+ else:
+ client.run_file(path)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/envisage-4.7.0/envisage/plugins/remote_editor/editor_plugins/readme.txt
new/envisage-4.7.2/envisage/plugins/remote_editor/editor_plugins/readme.txt
--- old/envisage-4.7.0/envisage/plugins/remote_editor/editor_plugins/readme.txt
1970-01-01 01:00:00.000000000 +0100
+++ new/envisage-4.7.2/envisage/plugins/remote_editor/editor_plugins/readme.txt
2019-05-03 11:29:27.000000000 +0200
@@ -0,0 +1,4 @@
+The root of this directory contains abstract base classes for plugins.
+
+The subdirectories contain implementations of one or more of these plugins for
+some specific tool which is external to this project.
Binary files
old/envisage-4.7.0/envisage/tests/bad_eggs/acme.bad-0.1a1-py3.7.egg and
new/envisage-4.7.2/envisage/tests/bad_eggs/acme.bad-0.1a1-py3.7.egg differ
Binary files old/envisage-4.7.0/envisage/tests/eggs/acme.bar-0.1a1-py3.7.egg
and new/envisage-4.7.2/envisage/tests/eggs/acme.bar-0.1a1-py3.7.egg differ
Binary files old/envisage-4.7.0/envisage/tests/eggs/acme.baz-0.1a1-py3.7.egg
and new/envisage-4.7.2/envisage/tests/eggs/acme.baz-0.1a1-py3.7.egg differ
Binary files old/envisage-4.7.0/envisage/tests/eggs/acme.foo-0.1a1-py3.7.egg
and new/envisage-4.7.2/envisage/tests/eggs/acme.foo-0.1a1-py3.7.egg differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/envisage-4.7.0/envisage/tests/plugin_test_case.py
new/envisage-4.7.2/envisage/tests/plugin_test_case.py
--- old/envisage-4.7.0/envisage/tests/plugin_test_case.py 2018-08-10
20:08:30.000000000 +0200
+++ new/envisage-4.7.2/envisage/tests/plugin_test_case.py 2019-05-03
10:28:58.000000000 +0200
@@ -449,6 +449,16 @@
return
+ def test_no_recursion(self):
+ """ Regression test for #119. """
+
+ class PluginA(Plugin):
+ id = 'A'
+ x = ExtensionPoint(List, id='bob')
+
+ application = Application(plugins=[PluginA()])
+ application.get_extensions('bob')
+
# Entry point for stand-alone testing.
if __name__ == '__main__':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/envisage-4.7.0/envisage/ui/single_project/DESIGN.txt
new/envisage-4.7.2/envisage/ui/single_project/DESIGN.txt
--- old/envisage-4.7.0/envisage/ui/single_project/DESIGN.txt 1970-01-01
01:00:00.000000000 +0100
+++ new/envisage-4.7.2/envisage/ui/single_project/DESIGN.txt 2018-09-10
16:20:43.000000000 +0200
@@ -0,0 +1,47 @@
+These are some design notes for the E3 version of the single_project plugin,
+including a rough background adapated from the README of the E2 single_project
+plugin, and plans for implementing various aspects of the new plugin.
+*Note: This is very much a WIP and will probably be updated/modified heavily
+in a short period of time.
+
+
+BACKGROUND:
+-----------
+This plugin is designed to work with a single project at a time and build
+up 'state' within that project until the user explicitly saves the project.
+
+The plugin contributes two services to an Envisage application -- one for the
+model and one for the UI. Additionally, the plugin contributes a 'Project'
+perspective, 'Project' view, and a number of actions to the UI so that the
+user can create, open, save, save as, and close projects. Finally, it should
+be noted that the plugin manages an indicator applied to the application
+window(s) titlebar as a representation that the current project has unsaved
+modifications.
+
+The current project is visualized by a TreeEditor by default, but the user can
+contribute additional Views. By contributing your own Project factory, the
+user can define your own custom projects.
+
+
+E2 single_projects vs. E3 single_projects:
+-----------------------------------------
+As described by Martin Chilvers:
+ "domain-objects" are at the highest level of abstraction in your design and
+hence are the objects that are understood by the user (e.g. Book, Person, Log,
+LogSuite, Well etc).
+
+The original single_project plugin used resources and resource types to adapt
+domain-objects to add certain behaviours to them that various Envisage plugins
+expected. However, this approach restricted the addition of new behaviours to
+resource types, as well as added a lot of cruft to the process of registering
+new resources/resource types.
+
+The E3 single_project plugin uses Traits Adapters and takes advantage of the
new
+ITreeNode interface. The new TreeEditor has been extended to support handling
+unknown domain-objects by adapting them to the ITreeNode interface. An
+ITreeNodeAdapter needs to be defined for any object that you want to be
+displayed in the TreeEditor, such as your Project class and it's sub-nodes.
+The Adapter exposes certain key ITreeNode interface methods, such as
+get_children, when_children_changed, get_lable, etc... This eliminates the
+extra cruft that was necessary in the E2 single_project plugin, such as the
+node monitor, node resource type, etc...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/envisage-4.7.0/envisage/ui/single_project/README.txt
new/envisage-4.7.2/envisage/ui/single_project/README.txt
--- old/envisage-4.7.0/envisage/ui/single_project/README.txt 1970-01-01
01:00:00.000000000 +0100
+++ new/envisage-4.7.2/envisage/ui/single_project/README.txt 2018-09-10
16:20:43.000000000 +0200
@@ -0,0 +1,128 @@
+Last updated: 2006.02.05
+
+
+BACKGROUND:
+-----------
+This plugin is designed to work with a single project at a time and build
+up 'state' within that project until the user explicitly saves the project.
+
+The plugin contributes two services to an Envisage application -- one for the
+model and one for the UI. Additionally, the plugin contributes a 'Project'
+perspective, 'Project' view, and a number of actions to the UI so that the
+user can create, open, save, save as, and close projects. Finally, it should
+be noted that the plugin manages an indicator applied to the application
+window(s) titlebar as a representation that the current project has unsaved
+modifications.
+
+The current project is visualized using a ResourceTree control and thus
+supports all the visualization and interaction customization of resources.
+This also makes makes it easy to build a hierarchy of nodes within the tree
+by implementing the apptools.naming.Context interface.
+
+Finally, this plugin contributes a single extension point which provides the
+capability to define your own custom projects.
+
+
+PRE-REQUISITES:
+---------------
+This plugin requires the use of the envisage framework and the
+following plugins:
+ - envisage.core
+ - envisage.resource
+ - envisage.workbench
+ - envisage.plugins.python_shell
+
+
+HOW TO USE:
+-----------
+This plugin provides a base class for projects but, as of now, that class
+has no capability to contain any data. So for this plugin to be useful within
+an Envisage application you have to complete the following:
+
+- Contribute a project_plugin_definition.FactoryDefinition to the Envisage
+ application. This definition should point to a class derived from
+ project_factory.ProjectFactory which will be used to create new projects
+ as well as handle opening of persisted projects. To do that, your
+ ProjectFactory should override the 'create' and 'open' methods as
+ appropriate to return an instance of a class derived from project.Project.
+ Note that multiple plugins can contribute FactoryDefinitions but only the
+ first contributed definition with the highest priority will be used.
+
+- You will need to derive a class from project.Project which will be used to
+ contain your project's data. This class should:
+ - override the trait_view trait to provide the UI content that will be
+ shown by the plugin (within a wizard dialog) to allow a user to
+ initialize a newly created project.
+ - override the _contains_resource() method so that the plugin can close
+ editors for resources in your project when your project closes.
+ - set the 'dirty' trait to True anytime modifications are made to your
+ project data
+ - optionally override the Project.start() and Project.stop() methods
+ to handle any work needing to be done when a project becomes the
+ current project or is no longer the current project. For example,
+ the base Project uses the stop() method to close any editors associated
+ with resources contained in the project.
+ - optionally override the _load_hook() and _save() methods if you wish
+ to use the base class's infrastructure for loading and saving projects
+ but have additional work that needs to be accomplished during those
+ events. Note that the plugin's UI service calls the save() method and
+ the ProjectFactory calls the load() method.
+ - optionally override the 'load()' and 'save()' methods if you want to
+ completely replace the base class's infrastructure for loading and
+ saving projects. Note that the plugin's UI service calls the save()
+ method and the ProjectFactory calls the load() method.
+
+- You will likely want to register resource types -- and associated classes
+ such as node types, monitors, and resource references -- for the resources
+ that can be contained within your project. This will allow you to take
+ maximum advantage of the infrastructure of the Project view's ResourceTree
+ control. If you do this, you should note that this plugin registers a
+ ProjectResourceType, pointing to a ProjectNodeType, that is used to
+ visualize the root project node. You don't need to derive from these unless
+ you want to customize the resource definition of the project node.
+
+- Another option for implementing the visualization of project contents would
+ be to derive from ProjectView and override the _create_project_control()
+ and _update_project_control() methods to replace the ResourceTree control
+ with some other UI control. If you do the later, you will likely need to
+ create your own project plugin definition but you should be able to reuse
+ almost all of the infrastructure classes contained in this plugin.
+
+- If the resources within your project can be edited in Editors, you should
+ derive Editor classes from ProjectEditor so that the project plugin
+ framework can close these editors when the project closes.
+
+
+KNOWN ISSUES:
+-------------
+- Due to the current capabilities of the workbench plugin, this plugin can't
+ do the ideal closing hook whereby, if the current project is modified, the
+ user gets prompted to save it, close it, or cancel the closing of the window.
+ The best we can do is follow the prompt to close the workbench window with a
+ dialog querying the user whether they want to save the current project or
+ not. There is an Enthought Trac ticket to add the necessary capability to
+ the workbench plugin and this plugin will be 'fixed' shortly thereafter.
+
+- The Project class doesn't support any sort of versioning framework in its
+ saving and loading. This will cause problems as the content and
+ capabilities of projects evolve throughout the software development cycle
+ of an application that uses this plugin.
+
+
+TO-DO:
+------
+- It would be nice if the Project class was modified such that it could
+ actually be used without needing to be derived from. One possibility for
+ this would be to make it a full-fledged folder type Context in and of
+ itself including support for binding and unbinding. If this was done, it
+ should be easy enough to re-use resource types, node types, etc. defined
+ for other Envisage plugins within projects.
+
+- It might be nice if editors that were open when a project was saved were
+ restored when the project was re-loaded. One mechanism to do this would
+ be to modify the Project._editors trait to contain ResourceReferences rather
+ than Resources as the keys. Then when pickling, we would simple dump the
+ editor references and persist just these keys. Upon loading, iterate through
+ the keys/resource references and open an editor for each. One question about
+ this mechanism is that currently we don't track order or position of editors
+ so that info wouldn't be recovered.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/envisage-4.7.0/envisage/ui/single_project/TODO.txt
new/envisage-4.7.2/envisage/ui/single_project/TODO.txt
--- old/envisage-4.7.0/envisage/ui/single_project/TODO.txt 1970-01-01
01:00:00.000000000 +0100
+++ new/envisage-4.7.2/envisage/ui/single_project/TODO.txt 2018-09-10
16:20:43.000000000 +0200
@@ -0,0 +1,9 @@
+To-Do List:
+
+ * Update README and other documentation/examples.
+ * Implement a way to publish the ITreeNodeAdapters so that they don't have to
+ be in the same file as the class which they adapt.
+ * Improve the way we are binding dynamic objects and how they are being
+ retrieved.
+ * Improve the handling of children in the adapters to remove redudancy.
+ * Lots of cleanup left.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/envisage-4.7.0/envisage/ui/single_project/view/project_view.py
new/envisage-4.7.2/envisage/ui/single_project/view/project_view.py
--- old/envisage-4.7.0/envisage/ui/single_project/view/project_view.py
2018-08-10 20:08:30.000000000 +0200
+++ new/envisage-4.7.2/envisage/ui/single_project/view/project_view.py
2019-05-03 11:49:52.000000000 +0200
@@ -12,7 +12,6 @@
# Standard library imports.
import logging
-from string import rfind
# Enthought library imports
from apptools.naming.api import Binding
@@ -262,7 +261,7 @@
# on the new suffix, if any.
name = self.name
if old is not None and len(old) > 0:
- index = rfind(name, " " + old)
+ index = (" " + old).rfind(name)
if index > -1:
name = name[0:index]
if new is not None and len(new) > 0:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/envisage-4.7.0/envisage/ui/tasks/tasks_application.py
new/envisage-4.7.2/envisage/ui/tasks/tasks_application.py
--- old/envisage-4.7.0/envisage/ui/tasks/tasks_application.py 2018-08-10
20:08:30.000000000 +0200
+++ new/envisage-4.7.2/envisage/ui/tasks/tasks_application.py 2019-05-03
11:49:52.000000000 +0200
@@ -301,8 +301,10 @@
# Create a TaskWindow for each TaskWindowLayout.
for window_layout in window_layouts:
- window = self.create_window(window_layout,
- restore=self.always_use_default_layout)
+ if self.always_use_default_layout:
+ window = self.create_window(window_layout, restore=False)
+ else:
+ window = self.create_window(window_layout, restore=True)
window.open()
def _get_task_factory(self, id):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/envisage-4.7.0/envisage.egg-info/PKG-INFO
new/envisage-4.7.2/envisage.egg-info/PKG-INFO
--- old/envisage-4.7.0/envisage.egg-info/PKG-INFO 2018-08-15
21:19:04.000000000 +0200
+++ new/envisage-4.7.2/envisage.egg-info/PKG-INFO 2019-05-03
12:38:03.000000000 +0200
@@ -1,13 +1,14 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
Name: envisage
-Version: 4.7.0
+Version: 4.7.2
Summary: extensible application framework
Home-page: http://docs.enthought.com/envisage
-Author: ETS Developers
-Author-email: [email protected]
+Author: Martin Chilvers, et. al.
+Author-email: [email protected]
+Maintainer: ETS Developers
+Maintainer-email: [email protected]
License: BSD
Download-URL: https://github.com/enthought/envisage
-Description-Content-Type: UNKNOWN
Description: ==========================================
envisage: extensible application framework
==========================================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/envisage-4.7.0/envisage.egg-info/SOURCES.txt
new/envisage-4.7.2/envisage.egg-info/SOURCES.txt
--- old/envisage-4.7.0/envisage.egg-info/SOURCES.txt 2018-08-15
21:19:04.000000000 +0200
+++ new/envisage-4.7.2/envisage.egg-info/SOURCES.txt 2019-05-03
12:38:04.000000000 +0200
@@ -1,5 +1,9 @@
+CHANGES.txt
+LICENSE.txt
MANIFEST.in
README.rst
+image_LICENSE.txt
+image_LICENSE_CP.txt
setup.py
envisage/__init__.py
envisage/_compat.py
@@ -148,6 +152,7 @@
envisage/plugins/remote_editor/communication/tests/test_communication.py
envisage/plugins/remote_editor/editor_plugins/__init__.py
envisage/plugins/remote_editor/editor_plugins/editor_plugin.py
+envisage/plugins/remote_editor/editor_plugins/readme.txt
envisage/plugins/remote_editor/editor_plugins/editra/__init__.py
envisage/plugins/remote_editor/editor_plugins/editra/editra_plugin.py
envisage/plugins/remote_editor/editor_plugins/editra/start_editra.py
@@ -160,6 +165,9 @@
envisage/plugins/remote_editor/editor_plugins/editra/images/python_runsel_24x24.png
envisage/plugins/remote_editor/editor_plugins/editra/images/python_runsel_32x32.png
envisage/plugins/remote_editor/editor_plugins/editra/images/python_runsel_48x48.png
+envisage/plugins/remote_editor/editor_plugins/emacs/__init__.py
+envisage/plugins/remote_editor/editor_plugins/emacs/enshell.el
+envisage/plugins/remote_editor/editor_plugins/emacs/enshell_plugin.py
envisage/plugins/tasks/__init__.py
envisage/plugins/tasks/python_shell_plugin.py
envisage/plugins/text_editor/__init__.py
@@ -222,24 +230,28 @@
envisage/tests/bad_eggs/acme.bad-0.1a1-py3.4.egg
envisage/tests/bad_eggs/acme.bad-0.1a1-py3.5.egg
envisage/tests/bad_eggs/acme.bad-0.1a1-py3.6.egg
+envisage/tests/bad_eggs/acme.bad-0.1a1-py3.7.egg
envisage/tests/eggs/acme.bar-0.1a1-py2.6.egg
envisage/tests/eggs/acme.bar-0.1a1-py2.7.egg
envisage/tests/eggs/acme.bar-0.1a1-py3.3.egg
envisage/tests/eggs/acme.bar-0.1a1-py3.4.egg
envisage/tests/eggs/acme.bar-0.1a1-py3.5.egg
envisage/tests/eggs/acme.bar-0.1a1-py3.6.egg
+envisage/tests/eggs/acme.bar-0.1a1-py3.7.egg
envisage/tests/eggs/acme.baz-0.1a1-py2.6.egg
envisage/tests/eggs/acme.baz-0.1a1-py2.7.egg
envisage/tests/eggs/acme.baz-0.1a1-py3.3.egg
envisage/tests/eggs/acme.baz-0.1a1-py3.4.egg
envisage/tests/eggs/acme.baz-0.1a1-py3.5.egg
envisage/tests/eggs/acme.baz-0.1a1-py3.6.egg
+envisage/tests/eggs/acme.baz-0.1a1-py3.7.egg
envisage/tests/eggs/acme.foo-0.1a1-py2.6.egg
envisage/tests/eggs/acme.foo-0.1a1-py2.7.egg
envisage/tests/eggs/acme.foo-0.1a1-py3.3.egg
envisage/tests/eggs/acme.foo-0.1a1-py3.4.egg
envisage/tests/eggs/acme.foo-0.1a1-py3.5.egg
envisage/tests/eggs/acme.foo-0.1a1-py3.6.egg
+envisage/tests/eggs/acme.foo-0.1a1-py3.7.egg
envisage/tests/plugins/banana/__init__.py
envisage/tests/plugins/banana/banana_plugin.py
envisage/tests/plugins/banana/plugins.py
@@ -265,6 +277,9 @@
envisage/ui/action/tests/__init__.py
envisage/ui/action/tests/action_manager_builder_test_case.py
envisage/ui/action/tests/dummy_action_manager_builder.py
+envisage/ui/single_project/DESIGN.txt
+envisage/ui/single_project/README.txt
+envisage/ui/single_project/TODO.txt
envisage/ui/single_project/__init__.py
envisage/ui/single_project/api.py
envisage/ui/single_project/default_path_preference_page.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/envisage-4.7.0/image_LICENSE.txt
new/envisage-4.7.2/image_LICENSE.txt
--- old/envisage-4.7.0/image_LICENSE.txt 1970-01-01 01:00:00.000000000
+0100
+++ new/envisage-4.7.2/image_LICENSE.txt 2018-09-10 16:20:43.000000000
+0200
@@ -0,0 +1,39 @@
+The icons are mostly derived work from other icons. As such they are
+licensed accordingly to the original license:
+
+Project License File
+----------------------------------------------------------------------------
+CP (Crystal Project) LGPL image_LICENSE_CP.txt
+GV (Gael Varoquaux) BSD-like LICENSE.txt
+PSF Python Software Fo. see 1)
+CCL Creative Commons see 2)
+
+Unless stated in this file, icons are the work of Enthought, and are
+released under a 3 clause BSD license.
+
+1) The Python logo is a trademark of the Python Software Foundation.
+ Please refer to: http://www.python.org/psf/trademarks/
+
+2) Creative Commons Attribution ShareAlike license versions
+ 3.0, 2.5, 2.0, and 1.0
+
+
+Files and orginal authors:
+----------------------------------------------------------------------------
+envisage/ui/workbench/images:
+ about.png | PSF
+ application.ico | GV
+
+envisage/ui/workbench/action/images:
+ exit.png | CP
+ preferences.png | CP
+
+examples/workbench/AcmeLab/acme/acmelab/images:
+ about.png | Public domain
+ acmelab.ico | GV
+ splash.jpg | CCL
+
+examples/workbench/AcmeLabUsingEggs/src/acme.acmelab/acme/acmelab/images:
+ about.png | Public domain
+ acmelab.ico | GV
+ splash.jpg | CCL
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/envisage-4.7.0/image_LICENSE_CP.txt
new/envisage-4.7.2/image_LICENSE_CP.txt
--- old/envisage-4.7.0/image_LICENSE_CP.txt 1970-01-01 01:00:00.000000000
+0100
+++ new/envisage-4.7.2/image_LICENSE_CP.txt 2018-09-10 16:20:43.000000000
+0200
@@ -0,0 +1,351 @@
+License
+
+The Crystal Project are released under LGPL.
+
+GNU General Public License.
+
+ 0. This License Agreement applies to any software library or other program
+ which contains a notice placed by the copyright holder or other
+ authorized party saying it may be distributed under the terms of this
+ Lesser General Public License (also called "this License"). Each
+ licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+ prepared so as to be conveniently linked with application programs
+ (which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work which
+ has been distributed under these terms. A "work based on the Library"
+ means either the Library or any derivative work under copyright law:
+ that is to say, a work containing the Library or a portion of it,
+ either verbatim or with modifications and/or translated
+ straightforwardly into another language. (Hereinafter, translation is
+ included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+ making modifications to it. For a library, complete source code means
+ all the source code for all modules it contains, plus any associated
+ interface definition files, plus the scripts used to control
+ compilation and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+ covered by this License; they are outside its scope. The act of running a
+ program using the Library is not restricted, and output from such a
+ program is covered only if its contents constitute a work based on the
+ Library (independent of the use of the Library in a tool for writing
+ it). Whether that is true depends on what the Library does and what the
+ program that uses the Library does.
+
+
+ 1. You may copy and distribute verbatim copies of the Library's complete
+ source code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an appropriate
+ copyright notice and disclaimer of warranty; keep intact all the notices
+ that refer to this License and to the absence of any warranty; and
+ distribute a copy of this License along with the Library.
+
+ You may charge a fee for the physical act of transferring a copy, and
+ you may at your option offer warranty protection in exchange for a fee.
+
+
+ 2. You may modify your copy or copies of the Library or any portion of it,
+ thus forming a work based on the Library, and copy and distribute such
+ modifications or work under the terms of Section 1 above, provided that
+ you also meet all of these conditions:
+
+ a. The modified work must itself be a software library.
+
+ b. You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c. You must cause the whole of the work to be licensed at no charge
+ to all third parties under the terms of this License.
+
+ d. If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
the
+ facility, other than as an argument passed when the facility is
+ invoked, then you must make a good faith effort to ensure that, in
+ the event an application does not supply such function or table,
+ the facility still operates, and performs whatever part of its
+ purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has a
+ purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must be
+ optional: if the application does not supply it, the square root
+ function must still compute square roots.)
+
+ These requirements apply to the modified work as a whole. If
+ identifiable sections of that work are not derived from the Library, and
+ can be reasonably considered independent and separate works in
+ themselves, then this License, and its terms, do not apply to those
+ sections when you distribute them as separate works. But when you
+ distribute the same sections as part of a whole which is a work based on
+ the Library, the distribution of the whole must be on the terms of this
+ License, whose permissions for other licensees extend to the entire
+ whole, and thus to each and every part regardless of who wrote it.
+
+ Thus, it is not the intent of this section to claim rights or contest
+ your rights to work written entirely by you; rather, the intent is to
+ exercise the right to control the distribution of derivative or
+ collective works based on the Library.
+
+ In addition, mere aggregation of another work not based on the Library
+ with the Library (or with a work based on the Library) on a volume of a
+ storage or distribution medium does not bring the other work under the
+ scope of this License.
+
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+ License instead of this License to a given copy of the Library. To do
+ this, you must alter all the notices that refer to this License, so that
+ they refer to the ordinary GNU General Public License, version 2,
+ instead of to this License. (If a newer version than version 2 of the
+ ordinary GNU General Public License has appeared, then you can specify
+ that version instead if you wish.) Do not make any other change in these
+ notices.
+
+ Once this change is made in a given copy, it is irreversible for that
+ copy, so the ordinary GNU General Public License applies to all
+ subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of the
+ Library into a program that is not a library.
+
+
+ 4. You may copy and distribute the Library (or a portion or derivative of
+ it, under Section 2) in object code or executable form under the terms
+ of Sections 1 and 2 above provided that you accompany it with the
+ complete corresponding machine-readable source code, which must be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy from a
+ designated place, then offering equivalent access to copy the source code
+ from the same place satisfies the requirement to distribute the source
+ code, even though third parties are not compelled to copy the source
along
+ with the object code.
+
+
+ 5. A program that contains no derivative of any portion of the Library, but
+ is designed to work with the Library by being compiled or linked with
+ it, is called a "work that uses the Library". Such a work, in isolation,
+ is not a derivative work of the Library, and therefore falls outside the
+ scope of this License.
+
+ However, linking a "work that uses the Library" with the Library creates
+ an executable that is a derivative of the Library (because it contains
+ portions of the Library), rather than a "work that uses the
+ library". The executable is therefore covered by this License. Section 6
+ states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+ that is part of the Library, the object code for the work may be a
+ derivative work of the Library even though the source code is
+ not. Whether this is true is especially significant if the work can be
+ linked without the Library, or if the work is itself a library. The
+ threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data structure
+ layouts and accessors, and small macros and small inline functions (ten
+ lines or less in length), then the use of the object file is
+ unrestricted, regardless of whether it is legally a derivative
+ work. (Executables containing this object code plus portions of the
+ Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+ distribute the object code for the work under the terms of Section 6. Any
+ executables containing that work also fall under Section 6, whether or
not
+ they are linked directly with the Library itself.
+
+
+ 6. As an exception to the Sections above, you may also combine or link a
+ "work that uses the Library" with the Library to produce a work
+ containing portions of the Library, and distribute that work under terms
+ of your choice, provided that the terms permit modification of the work
+ for the customer's own use and reverse engineering for debugging such
+ modifications.
+
+ You must give prominent notice with each copy of the work that the
+ Library is used in it and that the Library and its use are covered by
+ this License. You must supply a copy of this License. If the work during
+ execution displays copyright notices, you must include the copyright
+ notice for the Library among them, as well as a reference directing the
+ user to the copy of this License. Also, you must do one of these things:
+
+ a. Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
uses
+ the Library", as object code and/or source code, so that the user
+ can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood that
+ the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.) .
+
+ b. Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c. Accompany the work with a written offer, valid for at least three
+ years, to give the same user the materials specified in Subsection
+ 6a, above, for a charge no more than the cost of performing this
+ distribution.
+
+ d. If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e. Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the Library"
+ must include any data and utility programs needed for reproducing the
+ executable from it. However, as a special exception, the materials to be
+ distributed need not include anything that is normally distributed (in
+ either source or binary form) with the major components (compiler,
+ kernel, and so on) of the operating system on which the executable runs,
+ unless that component itself accompanies the executable.
+
+ It may happen that this requirement contradicts the license restrictions
+ of other proprietary libraries that do not normally accompany the
+ operating system. Such a contradiction means you cannot use both them
+ and the Library together in an executable that you distribute.
+
+
+ 7. You may place library facilities that are a work based on the Library
+ side-by-side in a single library together with other library facilities
+ not covered by this License, and distribute such a combined library,
+ provided that the separate distribution of the work based on the Library
+ and of the other library facilities is otherwise permitted, and provided
+ that you do these two things:
+
+ a. Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities. This
+ must be distributed under the terms of the Sections above.
+
+ b. Give prominent notice with the combined library of the fact that
+ part of it is a work based on the Library, and explaining where to
+ find the accompanying uncombined form of the same work.
+
+
+ 8. You may not copy, modify, sublicense, link with, or distribute the
+ Library except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, link with, or distribute the
+ Library is void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights, from you
+ under this License will not have their licenses terminated so long as
+ such parties remain in full compliance.
+
+
+ 9. You are not required to accept this License, since you have not signed
+ it. However, nothing else grants you permission to modify or distribute
+ the Library or its derivative works. These actions are prohibited by law
+ if you do not accept this License. Therefore, by modifying or
+ distributing the Library (or any work based on the Library), you
+ indicate your acceptance of this License to do so, and all its terms and
+ conditions for copying, distributing or modifying the Library or works
+ based on it.
+
+
+ 10. Each time you redistribute the Library (or any work based on the
+ Library), the recipient automatically receives a license from the
+ original licensor to copy, distribute, link with or modify the Library
+ subject to these terms and conditions. You may not impose any further
+ restrictions on the recipients' exercise of the rights granted
+ herein. You are not responsible for enforcing compliance by third
+ parties with this License.
+
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+ infringement or for any other reason (not limited to patent issues),
+ conditions are imposed on you (whether by court order, agreement or
+ otherwise) that contradict the conditions of this License, they do not
+ excuse you from the conditions of this License. If you cannot distribute
+ so as to satisfy simultaneously your obligations under this License and
+ any other pertinent obligations, then as a consequence you may not
+ distribute the Library at all. For example, if a patent license would
+ not permit royalty-free redistribution of the Library by all those who
+ receive copies directly or indirectly through you, then the only way you
+ could satisfy both it and this License would be to refrain entirely from
+ distribution of the Library.
+
+ If any portion of this section is held invalid or unenforceable under
+ any particular circumstance, the balance of the section is intended to
+ apply, and the section as a whole is intended to apply in other
+ circumstances.
+
+ It is not the purpose of this section to induce you to infringe any
+ patents or other property right claims or to contest validity of any
+ such claims; this section has the sole purpose of protecting the
+ integrity of the free software distribution system which is implemented
+ by public license practices. Many people have made generous
+ contributions to the wide range of software distributed through that
+ system in reliance on consistent application of that system; it is up to
+ the author/donor to decide if he or she is willing to distribute
+ software through any other system and a licensee cannot impose that
+ choice.
+
+ This section is intended to make thoroughly clear what is believed to be
+ a consequence of the rest of this License.
+
+
+ 12. If the distribution and/or use of the Library is restricted in certain
+ countries either by patents or by copyrighted interfaces, the original
+ copyright holder who places the Library under this License may add an
+ explicit geographical distribution limitation excluding those countries,
+ so that distribution is permitted only in or among countries not thus
+ excluded. In such case, this License incorporates the limitation as if
+ written in the body of this License.
+
+
+ 13. The Free Software Foundation may publish revised and/or new versions of
+ the Lesser General Public License from time to time. Such new versions
+ will be similar in spirit to the present version, but may differ in
+ detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the Library
+ specifies a version number of this License which applies to it and "any
+ later version", you have the option of following the terms and conditions
+ either of that version or of any later version published by the Free
+ Software Foundation. If the Library does not specify a license version
+ number, you may choose any version ever published by the Free Software
+ Foundation.
+
+
+ 14. If you wish to incorporate parts of the Library into other free programs
+ whose distribution conditions are incompatible with these, write to the
+ author to ask for permission. For software which is copyrighted by the
+ Free Software Foundation, write to the Free Software Foundation; we
+ sometimes make exceptions for this. Our decision will be guided by the
+ two goals of preserving the free status of all derivatives of our free
+ software and of promoting the sharing and reuse of software generally.
+
+ No Warranty
+
+ 15. Because the library is licensed free of charge, there is no warranty for
+ the library, to the extent permitted by applicable law. Except when
+ otherwise stated in writing the copyright holders and/or other parties
+ provide the library "as is" without warranty of any kind, either
expressed
+ or implied, including, but not limited to, the implied warranties of
+ merchantability and fitness for a particular purpose. The entire risk as
+ to the quality and performance of the library is with you. Should the
+ library prove defective, you assume the cost of all necessary servicing,
+ repair or correction.
+
+ 16. In no event unless required by applicable law or agreed to in writing
+ will any copyright holder, or any other party who may modify and/or
+ redistribute the library as permitted above, be liable to you for
+ damages, including any general, special, incidental or consequential
+ damages arising out of the use or inability to use the library
+ (including but not limited to loss of data or data being rendered
+ inaccurate or losses sustained by you or third parties or a failure of
+ the library to operate with any other software), even if such holder or
+ other party has been advised of the possibility of such damages.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/envisage-4.7.0/setup.py new/envisage-4.7.2/setup.py
--- old/envisage-4.7.0/setup.py 2018-08-13 18:36:23.000000000 +0200
+++ new/envisage-4.7.2/setup.py 2019-05-03 12:06:44.000000000 +0200
@@ -8,9 +8,9 @@
MAJOR = 4
MINOR = 7
-MICRO = 0
+MICRO = 2
-IS_RELEASED = True
+IS_RELEASED = True
VERSION = '%d.%d.%d' % (MAJOR, MINOR, MICRO)
@@ -153,12 +153,21 @@
install_requires = __requires__,
license = "BSD",
packages = find_packages(),
- package_data = {'': ['images/*', '*.ini',],
- 'envisage.tests': ['bad_eggs/*.egg',
- 'eggs/*.egg',
- 'plugins/pear/*.py',
- 'plugins/banana/*.py',
- 'plugins/orange/*.py']},
+ package_data = {
+ '': ['images/*', '*.ini'],
+ 'envisage.tests': [
+ 'bad_eggs/*.egg',
+ 'eggs/*.egg',
+ 'plugins/pear/*.py',
+ 'plugins/banana/*.py',
+ 'plugins/orange/*.py',
+ ],
+ 'envisage.ui.single_project': [
+ '*.txt',
+ ],
+ 'envisage.plugins.remote_editor.editor_plugins': ["*.txt"],
+ 'envisage.plugins.remote_editor.editor_plugins.emacs': ["*.el"],
+ },
platforms = ["Windows", "Linux", "Mac OS-X", "Unix", "Solaris"],
zip_safe = False,
)