enmapboxapplications: recursion error

Issue #204 invalid
Benjamin Jakimow created an issue

Loading of SynthmixApp from enmapboxapplications fails because of loading recursion.

Test Cases

import unittest
from unittest import TestCase
from enmapbox.gui.utils import *
APP = initQgisApplication()

class BugTests(TestCase):


    def test_loadsynthmix(self):

        exception = None
        try:
            from enmapboxapplications.synthmixapp.core import SynthmixApp
        except Exception as ex:
            exception = ex
        self.assertTrue(exception == None, msg='import raised:\n{}'.format(exception))

    def test_enmapboxcoreapps(self):

        from enmapbox import EnMAPBox, EnMAPBoxApplication

        enmapBox = EnMAPBox(None)
        self.assertIsInstance(enmapBox, EnMAPBox)

        from reclassifyapp import enmapboxApplicationFactory as factory1
        apps = factory1(enmapBox)
        self.assertIsInstance(apps, list)
        for app in apps:
            self.assertIsInstance(app, EnMAPBoxApplication)

        from enmapbox.coreapps.reclassifyapp import enmapboxApplicationFactory as factory2
        apps = factory2(enmapBox) #this fails
        self.assertIsInstance(apps, list)
        self.assertTrue(len(apps) > 0)
        for app in apps:
            self.assertIsInstance(app, EnMAPBoxApplication)


if __name__ == "__main__":

    unittest.main()

Errors:

Error
Traceback (most recent call last):
  File "C:\PROGRA~1\QGIS3~1.0\apps\Python37\lib\unittest\case.py", line 59, in testPartExecutor
    yield
  File "C:\PROGRA~1\QGIS3~1.0\apps\Python37\lib\unittest\case.py", line 615, in run
    testMethod()
  File "C:\Users\geo_beja\Repositories\QGIS_Plugins\enmap-box\snippets\bugs.py", line 11, in test_loadsynthmix
    from enmapboxapplications.synthmixapp.core import SynthmixApp
  File "C:\Program Files\QGIS 3.0\apps\qgis\python\qgis\utils.py", line 672, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
  File "C:\Users\geo_beja\Repositories\QGIS_Plugins\enmap-box\enmapbox\coreapps\enmapboxapplications\__init__.py", line 7, in <module>
    from enmapboxapplications.synthmixapp.core import SynthmixApp
  File "C:\Program Files\QGIS 3.0\apps\qgis\python\qgis\utils.py", line 672, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
  File "C:\Users\geo_beja\Repositories\QGIS_Plugins\enmap-box\enmapbox\coreapps\enmapboxapplications\synthmixapp\core.py", line 11, in <module>
    from enmapboxapplications.synthmixapp.script import synthmixRegressionEnsemble
  File "C:\Program Files\QGIS 3.0\apps\qgis\python\qgis\utils.py", line 672, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
  File "C:\Users\geo_beja\Repositories\QGIS_Plugins\enmap-box\enmapbox\coreapps\enmapboxapplications\synthmixapp\script.py", line 2, in <module>
    from sklearn.ensemble import RandomForestRegressor
  File "C:\Program Files\QGIS 3.0\apps\qgis\python\qgis\utils.py", line 672, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
  File "C:\PROGRA~1\QGIS3~1.0\apps\Python37\lib\site-packages\sklearn\ensemble\__init__.py", line 7, in <module>
    from .forest import RandomForestClassifier
  File "C:\Program Files\QGIS 3.0\apps\qgis\python\qgis\utils.py", line 672, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
  File "C:\PROGRA~1\QGIS3~1.0\apps\Python37\lib\site-packages\sklearn\ensemble\forest.py", line 57, in <module>
    from ..metrics import r2_score
  File "C:\Program Files\QGIS 3.0\apps\qgis\python\qgis\utils.py", line 672, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
  File "C:\PROGRA~1\QGIS3~1.0\apps\Python37\lib\site-packages\sklearn\metrics\__init__.py", line 7, in <module>
    from .ranking import auc
  File "C:\Program Files\QGIS 3.0\apps\qgis\python\qgis\utils.py", line 672, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
  File "C:\PROGRA~1\QGIS3~1.0\apps\Python37\lib\site-packages\sklearn\metrics\ranking.py", line 36, in <module>
    from ..preprocessing import label_binarize
  File "C:\Program Files\QGIS 3.0\apps\qgis\python\qgis\utils.py", line 672, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
  File "C:\PROGRA~1\QGIS3~1.0\apps\Python37\lib\site-packages\sklearn\preprocessing\__init__.py", line 6, in <module>
    from ._function_transformer import FunctionTransformer
  File "C:\Program Files\QGIS 3.0\apps\qgis\python\qgis\utils.py", line 672, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
  File "C:\PROGRA~1\QGIS3~1.0\apps\Python37\lib\site-packages\sklearn\preprocessing\_function_transformer.py", line 5, in <module>
    from ..utils.testing import assert_allclose_dense_sparse
  File "C:\Program Files\QGIS 3.0\apps\qgis\python\qgis\utils.py", line 672, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
  File "C:\PROGRA~1\QGIS3~1.0\apps\Python37\lib\site-packages\sklearn\utils\testing.py", line 758, in <module>
    import pytest
  File "C:\Program Files\QGIS 3.0\apps\qgis\python\qgis\utils.py", line 672, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
  File "C:\PROGRA~1\QGIS3~1.0\apps\Python37\lib\site-packages\pytest.py", line 7, in <module>
    from _pytest.assertion import register_assert_rewrite
  File "C:\Program Files\QGIS 3.0\apps\qgis\python\qgis\utils.py", line 672, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
  File "C:\PROGRA~1\QGIS3~1.0\apps\Python37\lib\site-packages\_pytest\assertion\__init__.py", line 12, in <module>
    from _pytest.assertion import rewrite
  File "C:\Program Files\QGIS 3.0\apps\qgis\python\qgis\utils.py", line 672, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
  File "C:\PROGRA~1\QGIS3~1.0\apps\Python37\lib\site-packages\_pytest\assertion\rewrite.py", line 19, in <module>
    import py
  File "C:\Program Files\QGIS 3.0\apps\qgis\python\qgis\utils.py", line 674, in _import
    if mod and '__file__' in mod.__dict__:
  File "C:\PROGRA~1\QGIS3~1.0\apps\Python37\lib\site-packages\py\_vendored_packages\apipkg.py", line 168, in __dict__
    self.__makeattr(name)
  File "C:\PROGRA~1\QGIS3~1.0\apps\Python37\lib\site-packages\py\_vendored_packages\apipkg.py", line 148, in __makeattr

....

RecursionError: maximum recursion depth exceeded while calling a Python object

Comments (4)

  1. Andreas Janz

    BugTest is running without errors:

    Testing started at 12:47 ...
    C:\OSGeo4W64\bin\python3.exe "C:\Program Files\JetBrains\PyCharm 2018.2.4\helpers\pycharm\_jb_unittest_runner.py" --path C:/source/arcoop/x.py
    Launching unittests with arguments python -m unittest C:/source/arcoop/x.py in C:\source\arcoop
    
    C:\OSGeo4W64\apps\qgis\python\qgis\utils.py:674: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
      mod = _builtin_import(name, globals, locals, fromlist, level)
    DEGUB: init resources
    C:\OSGEO4~1\apps\Python37\lib\site-packages\PyQt5\uic\objcreator.py:152: DeprecationWarning: 'U' mode is deprecated
      plugin = open(filename, 'rU')
    None-existing resource file(s) in: C:\Users\janzandr\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\enmapboxplugin\enmapbox\gui\speclib\spectralprofileeditorconfigwidget.ui
        <include location="../../../../../QGIS/images/images.qrc"/>
    None-existing resource file(s) in: C:\Users\janzandr\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\enmapboxplugin\enmapbox\gui\ui\textdockwidget.ui
        <include location="../../../../../QGIS/images/images.qrc"/>
        <include location="../../../../../QGIS/images/images.qrc"/>
    None-existing resource file(s) in: C:\Users\janzandr\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\enmapboxplugin\enmapbox\gui\ui\enmapbox_gui.ui
    C:\OSGeo4W64\apps\qgis\python\qgis\utils.py:674: DeprecationWarning:
    
    Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
    
    C:\OSGEO4~1\apps\Python37\lib\site-packages\yaml\constructor.py:126: DeprecationWarning:
    
    Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
    
    C:\OSGEO4~1\apps\Python37\lib\site-packages\PyQt5\uic\objcreator.py:152: DeprecationWarning:
    
    'U' mode is deprecated
    
    C:\OSGEO4~1\apps\Python37\lib\site-packages\osgeo\gdal.py:113: DeprecationWarning:
    
    gdal.py was placed in a namespace, it is now available as osgeo.gdal
    
    Application state:
    QGIS_PREFIX_PATH env var:       C:\OSGEO4~1\apps\qgis
    Prefix:     C:\OSGEO4~1\apps\qgis
    Plugin Path:        C:\OSGEO4~1\apps\qgis/plugins
    Package Data Path:  C:\OSGEO4~1\apps\qgis/.
    Active Theme Name:  
    Active Theme Path:  C:\OSGEO4~1\apps\qgis/./resources/themes\\icons/
    Default Theme Path: :/images/themes/default/
    SVG Search Paths:   C:\OSGEO4~1\apps\qgis/./svg/
            C:/Users/janzandr/AppData/Roaming/python3\profiles\default/svg/
    User DB Path:   C:\OSGEO4~1\apps\qgis/./resources/qgis.db
    Auth DB Path:   C:/Users/janzandr/AppData/Roaming/python3\profiles\default/qgis-auth.db
    
    EnMAP-Box(0): initializes an own QGIS Processing framework
    EnMAP-Box(0): Provider added enmapbox
    EnMAP-Box(0): QGIS Processing framework initialized
    Load EnMAPBoxApplication(s) from "enmapboxapplications"
    C:\OSGEO4~1\apps\Python37\lib\importlib\_bootstrap.py:219: ImportWarning:
    
    can't resolve package from __spec__ or __package__, falling back on __name__ and __path__
    
    C:\OSGEO4~1\apps\Python37\lib\importlib\_bootstrap.py:219: ImportWarning:
    
    can't resolve package from __spec__ or __package__, falling back on __name__ and __path__
    
    C:\OSGEO4~1\apps\Python37\lib\site-packages\PyQt5\uic\objcreator.py:152: DeprecationWarning:
    
    'U' mode is deprecated
    
    Load EnMAPBoxApplication(s) from "hubtimeseriesviewerapp"
    Load EnMAPBoxApplication(s) from "metadataeditorapp"
    Load EnMAPBoxApplication(s) from "reclassifyapp"
    Load EnMAPBoxApplication(s) from "vrtbuilderapp"
    Load EnMAPBoxApplication(s) from "enpt_app"
    Load EnMAPBoxApplication(s) from "hzg_apps"
    Load EnMAPBoxApplication(s) from "lmuvegetationapps"
    
    
    Ran 2 tests in 1.615s
    
    OK
    
    Process finished with exit code 0
    
  2. Log in to comment