Search code examples
pythonpylintsniffer

Pylint with sniffer not using updated source files


I am using Pylint and Nose along with sniffer to lint and test my python application on every save. This is sniffer in case you are unaware https://pypi.python.org/pypi/sniffer

Here is the runnable responsible for running nosetests and pylint from scent.py file for sniffer

from sniffer.api import * # import the really small API
from pylint import lint
from subprocess import call
import os
import nose

@runnable
def zimmer_tests(*args):
    command = "nosetests some_module/test --nologcapture --with-coverage --cover-config-file=zimmer_coverage_config"

    lint.Run(['some_module/app'], exit=False)
    return call(command, shell=True) == 0

Here, first lint.Run() runs pylint on my app. Then nosetest is executed on the app using call()

The Problem is that after I save the file nosetests run on updated version of the file however Pylint uses the same old version. I have to restart sniffer every time for pylint to get new version of files.

I assume this is not a problem of sniffer's configuration since nosetests is able to get the new version of file every time. Still I am not sure.

My pylintrc file is almost the same we get from generate command pylint --generate-rcfile > .pylintrc with some minor application specific tweaks.


Solution

  • As pointed by @KlausD. in comments, the lint.Run() was using files from cache as it was being called from a still running process. Calling pylint from command line worked as expected.

    Here is the modified code

    @runnable
    def zimmer_tests(*args):
        command_nose = "nosetests some_module/test --nologcapture --with-coverage --cover-config-file=zimmer_coverage_config"
        command_lint = "pylint some_module"
        call(command_lint, shell=True)
        return call(command_nose, shell=True) == 0