You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			158 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			158 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Python
		
	
# 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
 |