1. 28 Mar, 2023 1 commit
    • Kirill Smelkov's avatar
      pylint: Fix wendelin transform to yield module with a .name · 3f83b92e
      Kirill Smelkov authored
      In 5796a17a (core_test: Add test to make sure that wendelin.core
      basically works) I added wendelin_transform to pylint so that the
      checker could recognize wendelin.core's special wendelin top-level
      module/package and handle ok
      
      	from wendelin.bigarray.array_zodb import ZBigArray
      
      this works, but e.g. for plain
      
      	import wendelin			or
      	from wendelin import bigarray
      
      pylint currenly fails with
      
      	AssertionError: explicit relative import, but no context_file?
      
      To better see what is going on let's conside the following test program
      
      	"""ZZZ"""
      
      	from wendelin.bigarray.array_zodb import ZBigArray
      	from wendelin import bigarray
      
      	def main():
      	    """main"""
      	    _ = ZBigArray
      
      and run pylint on it. Here is what it gives:
      
                wendelin_transform Module(wendelin)
                -> Module()
      
          visit_from From()
            basename: wendelin.bigarray.array_zodb
            names:    [('ZBigArray', None)]
            modnode:  Module(test)
              get_imported_module From() wendelin.bigarray.array_zodb
            importedmodnode: Module(wendelin.bigarray.array_zodb)
          ('_add_imported_module', <From() l.3 [test] at 0x7ff214b4cb90>, 'wendelin.bigarray.array_zodb.ZBigArray')
                wendelin_transform Module(wendelin)
                -> Module()
      
          visit_from From()
            basename: wendelin
            names:    [('bigarray', None)]
            modnode:  Module(test)
              get_imported_module From() wendelin
                wendelin_transform Module(wendelin)
                -> Module()
            importedmodnode: Module()
          ************* Module test
          W:  4, 0: Relative import 'wendelin', should be '' (relative-import)
          ('_add_imported_module', <From() l.4 [test] at 0x7ff214b4cf50>, '.bigarray')
          Traceback (most recent call last):
            File "./x.py", line 22, in <module>
              Run(['test.py', '--reports=n'], exit=False)
            File "/home/kirr/src/tools/py/pylint/pylint/lint.py", line 1332, in __init__
              linter.check(args)
            File "/home/kirr/src/tools/py/pylint/pylint/lint.py", line 747, in check
              self._do_check(files_or_modules)
            File "/home/kirr/src/tools/py/pylint/pylint/lint.py", line 869, in _do_check
              self.check_astroid_module(ast_node, walker, rawcheckers, tokencheckers)
            File "/home/kirr/src/tools/py/pylint/pylint/lint.py", line 946, in check_astroid_module
              walker.walk(ast_node)
            File "/home/kirr/src/tools/py/pylint/pylint/utils.py", line 874, in walk
              self.walk(child)
            File "/home/kirr/src/tools/py/pylint/pylint/utils.py", line 871, in walk
              cb(astroid)
            File "/home/kirr/src/tools/py/pylint/pylint/checkers/imports.py", line 288, in visit_from
              self._add_imported_module(node, '%s.%s' % (importedmodnode.name, name))
            File "/home/kirr/src/tools/py/pylint/pylint/checkers/imports.py", line 328, in _add_imported_module
              importedmodname = get_module_part(importedmodname)
            File "/home/kirr/src/tools/py/astroid/astroid/modutils.py", line 359, in get_module_part
              'explicit relative import, but no context_file?'
          AssertionError: explicit relative import, but no context_file?
      
      we see that the line
      
      	from wendelin.bigarray.array_zodb import ZBigArray
      
      corresponds to
      
      	('_add_imported_module', <From() l.3 [test] at 0x7ff214b4cb90>, 'wendelin.bigarray.array_zodb.ZBigArray')
      
      and the line
      
      	from wendelin import bigarray
      
      corresponds to
      
      	('_add_imported_module', <From() l.4 [test] at 0x7ff214b4cf50>, '.bigarray')
      
      notice that in the latter case there is no 'wendelin' prefix and the
      import goes as just '.bigarray' instead of 'wendelin.bigarray' which
      leads to further crash in get_module_part.
      
      -> Fix it by initializing wendelin module yielded by wendelin_transform
      with .name set. Not sure why it is working longer imports without that.
      
      Without the fix added test breaks as
      
          .../instance/slappart5/bin$ ./runUnitTest -v -v -v  testDynamicClassGeneration.TestZodbModuleComponent
          ...
          Running Unit tests of <class 'testDynamicClassGeneration.TestZodbModuleComponent'>
          ok
          testImportVersionedComponentOnly (testDynamicClassGeneration.TestZodbModuleComponent) ... ok
          testInvalidId (testDynamicClassGeneration.TestZodbModuleComponent) ... ok
          testInvalidSourceCode (testDynamicClassGeneration.TestZodbModuleComponent) ... ok
          testModuleSecurityInfo (testDynamicClassGeneration.TestZodbModuleComponent) ... ok
          testPylint (testDynamicClassGeneration.TestZodbModuleComponent) ... FAIL
          testPylintAstroidModuleGeneratedOnce (testDynamicClassGeneration.TestZodbModuleComponent) ... ok
          testPylintNamedtupleUnicodeLiteralsRegression (testDynamicClassGeneration.TestZodbModuleComponent) ... ok
          testReferenceWithReservedKeywords (testDynamicClassGeneration.TestZodbModuleComponent) ... ok
          testValidateInvalidateDelete (testDynamicClassGeneration.TestZodbModuleComponent) ... ok
          testVersionPriority (testDynamicClassGeneration.TestZodbModuleComponent) ... ok
          testVersionWithReservedKeywords (testDynamicClassGeneration.TestZodbModuleComponent) ... ok
          testWorkflowErrorMessage (testDynamicClassGeneration.TestZodbModuleComponent)
          Check that validation error messages are stored in workflow ... ok
      
          ======================================================================
          FAIL: testPylint (testDynamicClassGeneration.TestZodbModuleComponent)
          ----------------------------------------------------------------------
          Traceback (most recent call last):
            File ".../parts/erp5/Products/ERP5Type/tests/testDynamicClassGeneration.py", line 2347, in testPylint
              component.checkSourceCode()
            File ".../parts/erp5/product/ERP5Type/mixin/component.py", line 329, in checkSourceCode
              return checkPythonSourceCode(self.getTextContent(), self.getPortalType())
            File ".../parts/erp5/product/ERP5Type/Utils.py", line 540, in checkPythonSourceCode
              Run(args, reporter=TextReporter(output_file), exit=False)
            File ".../develop-eggs/pylint-1.4.4+slapospatched002-py2.7.egg/pylint/lint.py", line 1332, in __init__
              linter.check(args)
            File ".../develop-eggs/pylint-1.4.4+slapospatched002-py2.7.egg/pylint/lint.py", line 747, in check
              self._do_check(files_or_modules)
            File ".../develop-eggs/pylint-1.4.4+slapospatched002-py2.7.egg/pylint/lint.py", line 869, in _do_check
              self.check_astroid_module(ast_node, walker, rawcheckers, tokencheckers)
            File ".../develop-eggs/pylint-1.4.4+slapospatched002-py2.7.egg/pylint/lint.py", line 946, in check_astroid_module
              walker.walk(ast_node)
            File ".../develop-eggs/pylint-1.4.4+slapospatched002-py2.7.egg/pylint/utils.py", line 874, in walk
              self.walk(child)
            File ".../develop-eggs/pylint-1.4.4+slapospatched002-py2.7.egg/pylint/utils.py", line 871, in walk
              cb(astroid)
            File ".../develop-eggs/pylint-1.4.4+slapospatched002-py2.7.egg/pylint/checkers/imports.py", line 253, in visit_import
              self._add_imported_module(node, importedmodnode.name)
            File ".../develop-eggs/pylint-1.4.4+slapospatched002-py2.7.egg/pylint/checkers/imports.py", line 319, in _add_imported_module
              importedmodname = get_module_part(importedmodname)
            File ".../develop-eggs/astroid-1.3.8+slapospatched001-py2.7.egg/astroid/modutils.py", line 359, in get_module_part
              'explicit relative import, but no context_file?'
          AssertionError: explicit relative import, but no context_file?
      
          ----------------------------------------------------------------------
          Ran 13 tests in 137.609s
      
          FAILED (failures=1)
      
      /helped-and-reviewed-by @jerome
      /reviewed-on nexedi/erp5!1762
      3f83b92e
  2. 25 Mar, 2023 1 commit
  3. 24 Mar, 2023 10 commits
  4. 20 Mar, 2023 11 commits
  5. 19 Mar, 2023 3 commits
  6. 17 Mar, 2023 8 commits
  7. 16 Mar, 2023 5 commits
  8. 15 Mar, 2023 1 commit