diff options
author | Ionel Cristian Maries <contact@ionelmc.ro> | 2015-02-14 18:13:20 +0200 |
---|---|---|
committer | Ionel Cristian Maries <contact@ionelmc.ro> | 2015-02-14 18:13:20 +0200 |
commit | 6d8412476a296b3a3691af1ffabcb672d9a4920f (patch) | |
tree | e358c7e886ff4d67d0efc6263f0472655efddfff /pylint/config.py | |
parent | 0369bd6a914af3ad92ce53eac3786bf8de785f7f (diff) | |
download | pylint-6d8412476a296b3a3691af1ffabcb672d9a4920f.tar.gz |
Move all package files to a pylint package.
Diffstat (limited to 'pylint/config.py')
-rw-r--r-- | pylint/config.py | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/pylint/config.py b/pylint/config.py new file mode 100644 index 0000000..ebfe578 --- /dev/null +++ b/pylint/config.py @@ -0,0 +1,157 @@ +# Copyright (c) 2003-2013 LOGILAB S.A. (Paris, FRANCE). +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +"""utilities for Pylint configuration : + +* pylintrc +* pylint.d (PYLINTHOME) +""" +from __future__ import with_statement +from __future__ import print_function + +import pickle +import os +import sys +from os.path import exists, isfile, join, expanduser, abspath, dirname + +# pylint home is used to save old runs results ################################ + +USER_HOME = expanduser('~') +if 'PYLINTHOME' in os.environ: + PYLINT_HOME = os.environ['PYLINTHOME'] + if USER_HOME == '~': + USER_HOME = dirname(PYLINT_HOME) +elif USER_HOME == '~': + PYLINT_HOME = ".pylint.d" +else: + PYLINT_HOME = join(USER_HOME, '.pylint.d') + +def get_pdata_path(base_name, recurs): + """return the path of the file which should contain old search data for the + given base_name with the given options values + """ + base_name = base_name.replace(os.sep, '_') + return join(PYLINT_HOME, "%s%s%s"%(base_name, recurs, '.stats')) + +def load_results(base): + """try to unpickle and return data from file if it exists and is not + corrupted + + return an empty dictionary if it doesn't exists + """ + data_file = get_pdata_path(base, 1) + try: + with open(data_file, _PICK_LOAD) as stream: + return pickle.load(stream) + except Exception: # pylint: disable=broad-except + return {} + +if sys.version_info < (3, 0): + _PICK_DUMP, _PICK_LOAD = 'w', 'r' +else: + _PICK_DUMP, _PICK_LOAD = 'wb', 'rb' + +def save_results(results, base): + """pickle results""" + if not exists(PYLINT_HOME): + try: + os.mkdir(PYLINT_HOME) + except OSError: + print('Unable to create directory %s' % PYLINT_HOME, file=sys.stderr) + data_file = get_pdata_path(base, 1) + try: + with open(data_file, _PICK_DUMP) as stream: + pickle.dump(results, stream) + except (IOError, OSError) as ex: + print('Unable to create file %s: %s' % (data_file, ex), file=sys.stderr) + +# location of the configuration file ########################################## + + +def find_pylintrc(): + """search the pylint rc file and return its path if it find it, else None + """ + # is there a pylint rc file in the current directory ? + if exists('pylintrc'): + return abspath('pylintrc') + if isfile('__init__.py'): + curdir = abspath(os.getcwd()) + while isfile(join(curdir, '__init__.py')): + curdir = abspath(join(curdir, '..')) + if isfile(join(curdir, 'pylintrc')): + return join(curdir, 'pylintrc') + if 'PYLINTRC' in os.environ and exists(os.environ['PYLINTRC']): + pylintrc = os.environ['PYLINTRC'] + else: + user_home = expanduser('~') + if user_home == '~' or user_home == '/root': + pylintrc = ".pylintrc" + else: + pylintrc = join(user_home, '.pylintrc') + if not isfile(pylintrc): + pylintrc = join(user_home, '.config', 'pylintrc') + if not isfile(pylintrc): + if isfile('/etc/pylintrc'): + pylintrc = '/etc/pylintrc' + else: + pylintrc = None + return pylintrc + +PYLINTRC = find_pylintrc() + +ENV_HELP = ''' +The following environment variables are used: + * PYLINTHOME + Path to the directory where the persistent for the run will be stored. If +not found, it defaults to ~/.pylint.d/ or .pylint.d (in the current working +directory). + * PYLINTRC + Path to the configuration file. See the documentation for the method used +to search for configuration file. +''' % globals() + +# evaluation messages ######################################################### + +def get_note_message(note): + """return a message according to note + note is a float < 10 (10 is the highest note) + """ + assert note <= 10, "Note is %.2f. Either you cheated, or pylint's \ +broken!" % note + if note < 0: + msg = 'You have to do something quick !' + elif note < 1: + msg = 'Hey! This is really dreadful. Or maybe pylint is buggy?' + elif note < 2: + msg = "Come on! You can't be proud of this code" + elif note < 3: + msg = 'Hum... Needs work.' + elif note < 4: + msg = 'Wouldn\'t you be a bit lazy?' + elif note < 5: + msg = 'A little more work would make it acceptable.' + elif note < 6: + msg = 'Just the bare minimum. Give it a bit more polish. ' + elif note < 7: + msg = 'This is okay-ish, but I\'m sure you can do better.' + elif note < 8: + msg = 'If you commit now, people should not be making nasty \ +comments about you on c.l.py' + elif note < 9: + msg = 'That\'s pretty good. Good work mate.' + elif note < 10: + msg = 'So close to being perfect...' + else: + msg = 'Wow ! Now this deserves our uttermost respect.\nPlease send \ +your code to python-projects@logilab.org' + return msg |