Configure pylint and update the code
This will allow us to run automatic checks for future commits. Change-Id: Idbf08a44df0a940de51fb418d99f90da19fa6dc3
This commit is contained in:
parent
c4808b303a
commit
5ecd401a0a
@ -15,18 +15,14 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from anvil import action
|
from anvil import action
|
||||||
from anvil import colorizer
|
|
||||||
from anvil import log
|
|
||||||
from anvil.actions import start
|
from anvil.actions import start
|
||||||
from anvil.actions import stop
|
from anvil.actions import stop
|
||||||
|
|
||||||
from anvil.action import PhaseFunctors
|
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
class RestartAction(action.Action):
|
class RestartAction(action.Action):
|
||||||
|
|
||||||
def __init__(self, name, distro, root_dir, cli_opts):
|
def __init__(self, name, distro, root_dir, cli_opts):
|
||||||
|
super(RestartAction, self).__init__(name, distro, root_dir, cli_opts)
|
||||||
self.start = start.StartAction(name, distro, root_dir, cli_opts.copy())
|
self.start = start.StartAction(name, distro, root_dir, cli_opts.copy())
|
||||||
self.stop = stop.StopAction(name, distro, root_dir, cli_opts.copy())
|
self.stop = stop.StopAction(name, distro, root_dir, cli_opts.copy())
|
||||||
|
|
||||||
|
@ -14,18 +14,12 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from anvil import colorizer
|
|
||||||
from anvil import components as comp
|
from anvil import components as comp
|
||||||
from anvil import downloader as down
|
|
||||||
from anvil import exceptions as excp
|
from anvil import exceptions as excp
|
||||||
from anvil import log as logging
|
from anvil import log as logging
|
||||||
from anvil import shell as sh
|
from anvil import shell as sh
|
||||||
from anvil import utils
|
from anvil import utils
|
||||||
|
|
||||||
from anvil.packaging import yum
|
|
||||||
|
|
||||||
from tempfile import NamedTemporaryFile
|
|
||||||
|
|
||||||
import binascii
|
import binascii
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
@ -21,7 +21,7 @@ import functools
|
|||||||
|
|
||||||
|
|
||||||
# http://wiki.python.org/moin/PythonDecoratorLibrary#Memoize
|
# http://wiki.python.org/moin/PythonDecoratorLibrary#Memoize
|
||||||
class memoized(object):
|
class memoized(object): # pylint: disable=C0103
|
||||||
'''Decorator. Caches a function's return value each time it is called.
|
'''Decorator. Caches a function's return value each time it is called.
|
||||||
If called later with the same arguments, the cached value is returned
|
If called later with the same arguments, the cached value is returned
|
||||||
(not reevaluated).
|
(not reevaluated).
|
||||||
|
@ -32,7 +32,8 @@ from anvil import shell as sh
|
|||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
Component = collections.namedtuple("Component", 'entry_point,options,siblings')
|
Component = collections.namedtuple( # pylint: disable=C0103
|
||||||
|
"Component", 'entry_point,options,siblings')
|
||||||
|
|
||||||
|
|
||||||
class Distro(object):
|
class Distro(object):
|
||||||
|
@ -83,11 +83,11 @@ class HorizonInstaller(horizon.HorizonInstaller):
|
|||||||
# Directives in the configuration files are case-insensitive,
|
# Directives in the configuration files are case-insensitive,
|
||||||
# but arguments to directives are often case sensitive...
|
# but arguments to directives are often case sensitive...
|
||||||
# NOTE(harlowja): we aren't handling multi-line fixups...
|
# NOTE(harlowja): we aren't handling multi-line fixups...
|
||||||
if re.match("^\s*User\s+(.*)$", line, re.I):
|
if re.match(r"^\s*User\s+(.*)$", line, re.I):
|
||||||
line = "User %s" % (user)
|
line = "User %s" % (user)
|
||||||
if re.match("^\s*Group\s+(.*)$", line, re.I):
|
if re.match(r"^\s*Group\s+(.*)$", line, re.I):
|
||||||
line = "Group %s" % (group)
|
line = "Group %s" % (group)
|
||||||
if re.match("^\s*Listen\s+(.*)$", line, re.I):
|
if re.match(r"^\s*Listen\s+(.*)$", line, re.I):
|
||||||
line = "Listen 0.0.0.0:80"
|
line = "Listen 0.0.0.0:80"
|
||||||
new_lines.append(line)
|
new_lines.append(line)
|
||||||
with sh.Rooted(True):
|
with sh.Rooted(True):
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
# pylint: disable=C0103
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ class GitChangeLog(object):
|
|||||||
if len(ret) == 1:
|
if len(ret) == 1:
|
||||||
ret = ret[0]
|
ret = ret[0]
|
||||||
else:
|
else:
|
||||||
ret = filter(lambda x: x.strip() != '', ret)
|
ret = [x for x in ret if x.strip() != '']
|
||||||
ret = "\n".join(ret)
|
ret = "\n".join(ret)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@ -14,8 +14,6 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from distutils import version as vr
|
|
||||||
|
|
||||||
import copy
|
import copy
|
||||||
import pkg_resources
|
import pkg_resources
|
||||||
import xmlrpclib
|
import xmlrpclib
|
||||||
|
@ -21,7 +21,6 @@ from anvil import shell as sh
|
|||||||
|
|
||||||
from anvil.packaging.helpers import pip_helper
|
from anvil.packaging.helpers import pip_helper
|
||||||
|
|
||||||
import pkg_resources
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ class YumPackager(pack.Packager):
|
|||||||
non_same_versions_packages[p.name].append(p)
|
non_same_versions_packages[p.name].append(p)
|
||||||
|
|
||||||
satisfying_packages = []
|
satisfying_packages = []
|
||||||
for (name, packages) in non_same_versions_packages.items():
|
for (_, packages) in non_same_versions_packages.items():
|
||||||
if len(packages) == 1:
|
if len(packages) == 1:
|
||||||
satisfying_packages.extend(packages)
|
satisfying_packages.extend(packages)
|
||||||
else:
|
else:
|
||||||
|
@ -38,8 +38,8 @@ SHELL_QUOTE_REPLACERS = {
|
|||||||
"\"": "\\\"",
|
"\"": "\\\"",
|
||||||
"(": "\\(",
|
"(": "\\(",
|
||||||
")": "\\)",
|
")": "\\)",
|
||||||
"$": '\$',
|
"$": "\\$",
|
||||||
'`': '\`',
|
"`": "\\`",
|
||||||
}
|
}
|
||||||
|
|
||||||
# Locally stash these so that they can not be changed
|
# Locally stash these so that they can not be changed
|
||||||
|
@ -51,7 +51,7 @@ from anvil import version
|
|||||||
|
|
||||||
from anvil.pprint import center_text
|
from anvil.pprint import center_text
|
||||||
|
|
||||||
MONTY_PYTHON_TEXT_RE = re.compile("([a-z0-9A-Z\?!.,'\"]+)")
|
MONTY_PYTHON_TEXT_RE = re.compile(r"([a-z0-9A-Z\?!.,'\"]+)")
|
||||||
|
|
||||||
# Thx cowsay
|
# Thx cowsay
|
||||||
# See: http://www.nog.net/~tony/warez/cowsay.shtml
|
# See: http://www.nog.net/~tony/warez/cowsay.shtml
|
||||||
|
269
pylintrc
269
pylintrc
@ -1,42 +1,271 @@
|
|||||||
# The format of this file isn't really documented; just use --generate-rcfile
|
[MASTER]
|
||||||
|
|
||||||
[Master]
|
# Specify a configuration file.
|
||||||
|
#rcfile=
|
||||||
|
|
||||||
[Messages Control]
|
# Python code to execute, usually for sys.path manipulation such as
|
||||||
|
# pygtk.require().
|
||||||
|
#init-hook=
|
||||||
|
|
||||||
|
# Profiled execution.
|
||||||
|
profile=no
|
||||||
|
|
||||||
|
# Add <file or directory> to the black list. It should be a base name, not a
|
||||||
|
# path. You may set this option multiple times.
|
||||||
|
|
||||||
|
# ignore=
|
||||||
|
|
||||||
|
# Pickle collected data for later comparisons.
|
||||||
|
persistent=yes
|
||||||
|
|
||||||
|
# List of plugins (as comma separated values of python modules names) to load,
|
||||||
|
# usually to register additional checkers.
|
||||||
|
load-plugins=
|
||||||
|
|
||||||
|
|
||||||
|
[MESSAGES CONTROL]
|
||||||
|
|
||||||
|
# Enable the message, report, category or checker with the given id(s). You can
|
||||||
|
# either give multiple identifier separated by comma (,) or put this option
|
||||||
|
# multiple time.
|
||||||
|
#enable=
|
||||||
|
# Disable the message, report, category or checker with the given id(s). You
|
||||||
|
# can either give multiple identifier separated by comma (,) or put this option
|
||||||
|
# multiple time.
|
||||||
# http://pylint-messages.wikidot.com/all-codes
|
# http://pylint-messages.wikidot.com/all-codes
|
||||||
# NOTE(justinsb): We might want to have a 2nd strict pylintrc in future
|
|
||||||
|
# I0011: Locally disabling %s
|
||||||
|
# I0012: Locally enabling %s
|
||||||
|
# I0013: Ignoring entire file
|
||||||
# C0111: Don't require docstrings on every method
|
# C0111: Don't require docstrings on every method
|
||||||
|
# E0213: We want different names for 'self', e. g. 'inner_self'
|
||||||
|
# E0611: No name in module -- test cover that
|
||||||
|
# E1101: Mocks make pylint type deduction crazy
|
||||||
|
# E1103: When some types could not be inferred, we ignore pylint
|
||||||
|
# F0401: Unable to import smth -- test cover that
|
||||||
|
# R0201: Method could be a function
|
||||||
|
# TODO(aababilov): remove similar lines
|
||||||
|
# R0801: Similar lines in %s files
|
||||||
# R0912: Too many branches (huh)
|
# R0912: Too many branches (huh)
|
||||||
# R0914: Too many local variables is odd.
|
# R0914: Too many local variables is odd.
|
||||||
|
# R0922: Abstract class is only referenced %s times
|
||||||
|
# W0141: Used builtin function %r
|
||||||
# W0142: *args and **kwargs are fine.
|
# W0142: *args and **kwargs are fine.
|
||||||
|
# W0212: Access to a protected member %s of a client class
|
||||||
|
# W0223: Don't want to override all the abstract methods
|
||||||
|
# W0232: Our models have no __init__ methods, but this is OK
|
||||||
|
# W0401: Wildcard imports are fine
|
||||||
# W0511: TODOs in code comments are fine.
|
# W0511: TODOs in code comments are fine.
|
||||||
|
# W0603: Using the global statement
|
||||||
# W0613: Unused argument '??' should be ok (they are useful sometimes to know intention of variable)
|
# W0613: Unused argument '??' should be ok (they are useful sometimes to know intention of variable)
|
||||||
# W0622: Redefining id is fine.
|
# W0622: Redefining id is fine.
|
||||||
disable=C0111,W0142,W0622,C0301,R0902,R0201,R0914,W0613,R0912,R0801
|
# W0702: No exception type(s) specified
|
||||||
|
# W0703: Catching "Exception" is fine if you need it
|
||||||
|
disable=I0011,I0012,I0013,C0111,E0213,E0611,E1101,E1103,F0401,R0201,R0801,R0912,R0914,R0922,W0141,W0142,W0212,W0223,W0232,W0401,W0511,W0603,W0613,W0622,W0702,W0703
|
||||||
|
|
||||||
[Basic]
|
[REPORTS]
|
||||||
|
|
||||||
# Variable names can be 1 to 31 characters long, with lowercase and underscores
|
# Set the output format. Available formats are text, parseable, colorized, msvs
|
||||||
variable-rgx=[a-z_][a-z0-9_]{0,30}$
|
# (visual studio) and html
|
||||||
|
output-format=parseable
|
||||||
|
|
||||||
# Argument names can be 2 to 31 characters long, with lowercase and underscores
|
# Include message's id in output
|
||||||
argument-rgx=[a-z_][a-z0-9_]{1,30}$
|
include-ids=yes
|
||||||
|
|
||||||
# Method names should be at least 3 characters long
|
# Put messages in a separate file for each module / package specified on the
|
||||||
# and be lowercased with underscores
|
# command line instead of printing them on stdout. Reports (if any) will be
|
||||||
method-rgx=([a-z_][a-z0-9_]{2,50}|setUp|tearDown)$
|
# written in a file name "pylint_global.[txt|html]".
|
||||||
|
files-output=no
|
||||||
|
|
||||||
# Don't require docstrings on tests.
|
# Tells whether to display a full report or only the messages
|
||||||
no-docstring-rgx=((__.*__)|([tT]est.*)|setUp|tearDown)$
|
reports=no
|
||||||
|
|
||||||
[Design]
|
# Python expression which should return a note less than 10 (10 is the highest
|
||||||
|
# note). You have access to the variables errors warning, statement which
|
||||||
|
# respectively contain the number of errors / warnings messages and the total
|
||||||
|
# number of statements analyzed. This is used by the global evaluation report
|
||||||
|
# (R0004).
|
||||||
|
evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
|
||||||
|
|
||||||
max-public-methods=100
|
# Add a comment according to your evaluation note. This is used by the global
|
||||||
min-public-methods=0
|
# evaluation report (R0004).
|
||||||
max-args=6
|
comment=no
|
||||||
|
|
||||||
[Variables]
|
|
||||||
|
[VARIABLES]
|
||||||
|
|
||||||
|
# Tells whether we should check for unused import in __init__ files.
|
||||||
|
init-import=no
|
||||||
|
|
||||||
|
# A regular expression matching names used for dummy variables (i.e. not used).
|
||||||
|
dummy-variables-rgx=.*_|dummy|error
|
||||||
|
|
||||||
# List of additional names supposed to be defined in builtins. Remember that
|
# List of additional names supposed to be defined in builtins. Remember that
|
||||||
# you should avoid to define new builtins when possible.
|
# you should avoid to define new builtins when possible.
|
||||||
|
additional-builtins=_
|
||||||
|
|
||||||
|
|
||||||
|
[FORMAT]
|
||||||
|
|
||||||
|
# Maximum number of characters on a single line.
|
||||||
|
# make it 80 some day
|
||||||
|
max-line-length=150
|
||||||
|
|
||||||
|
# Maximum number of lines in a module
|
||||||
|
# TODO(aababilov): make it 1024
|
||||||
|
max-module-lines=2000
|
||||||
|
|
||||||
|
# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
|
||||||
|
# tab).
|
||||||
|
indent-string=' '
|
||||||
|
|
||||||
|
|
||||||
|
[SIMILARITIES]
|
||||||
|
|
||||||
|
# Minimum lines number of a similarity.
|
||||||
|
min-similarity-lines=5
|
||||||
|
|
||||||
|
# Ignore comments when computing similarities.
|
||||||
|
ignore-comments=yes
|
||||||
|
|
||||||
|
# Ignore docstrings when computing similarities.
|
||||||
|
ignore-docstrings=yes
|
||||||
|
|
||||||
|
|
||||||
|
[TYPECHECK]
|
||||||
|
|
||||||
|
# Tells whether missing members accessed in mixin class should be ignored. A
|
||||||
|
# mixin class is detected if its name ends with "mixin" (case insensitive).
|
||||||
|
ignore-mixin-members=yes
|
||||||
|
|
||||||
|
# List of classes names for which member attributes should not be checked
|
||||||
|
# (useful for classes with attributes dynamically set).
|
||||||
|
ignored-classes=UUID
|
||||||
|
|
||||||
|
# When zope mode is activated, add a predefined set of Zope acquired attributes
|
||||||
|
# to generated-members.
|
||||||
|
zope=no
|
||||||
|
|
||||||
|
# List of members which are set dynamically and missed by pylint inference
|
||||||
|
# system, and so shouldn't trigger E0201 when accessed.
|
||||||
|
generated-members=AndReturn
|
||||||
|
|
||||||
|
|
||||||
|
[MISCELLANEOUS]
|
||||||
|
|
||||||
|
# List of note tags to take in consideration, separated by a comma.
|
||||||
|
notes=FIXME,XXX,TODO
|
||||||
|
|
||||||
|
|
||||||
|
[BASIC]
|
||||||
|
|
||||||
|
# Required attributes for module, separated by a comma
|
||||||
|
required-attributes=
|
||||||
|
|
||||||
|
# List of builtins function names that should not be used, separated by a comma
|
||||||
|
bad-functions=map,filter,apply,input
|
||||||
|
|
||||||
|
# Regular expression which should only match correct module names
|
||||||
|
module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
|
||||||
|
|
||||||
|
# Regular expression which should only match correct module level names
|
||||||
|
# NOTE(aababilov): allow contants have names like variables
|
||||||
|
const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__)|[a-z_][a-z0-9_]{0,30})$
|
||||||
|
|
||||||
|
# Regular expression which should only match correct class names
|
||||||
|
class-rgx=[A-Z_][a-zA-Z0-9]+$
|
||||||
|
|
||||||
|
# Regular expression which should only match correct function names
|
||||||
|
function-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||||
|
|
||||||
|
# Regular expression which should only match correct method names
|
||||||
|
method-rgx=[a-z_][a-z0-9_]{2,30}|setUp|tearDown$
|
||||||
|
|
||||||
|
# Regular expression which should only match correct instance attribute names
|
||||||
|
attr-rgx=[a-z_][a-z0-9_]{0,30}$
|
||||||
|
|
||||||
|
# Regular expression which should only match correct argument names
|
||||||
|
# allow short names like `fn'
|
||||||
|
argument-rgx=[a-z_][a-z0-9_]{1,30}$
|
||||||
|
|
||||||
|
# Regular expression which should only match correct variable names
|
||||||
|
# variable-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||||
|
variable-rgx=[a-z_][a-z0-9_]{0,30}$
|
||||||
|
|
||||||
|
# Regular expression which should only match correct list comprehension /
|
||||||
|
# generator expression variable names
|
||||||
|
inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
|
||||||
|
|
||||||
|
# Good variable names which should always be accepted, separated by a comma
|
||||||
|
good-names=i,j,k,ex,Run,_
|
||||||
|
|
||||||
|
# Bad variable names which should always be refused, separated by a comma
|
||||||
|
bad-names=foo,bar,baz,toto,tutu,tata
|
||||||
|
|
||||||
|
# Regular expression which should only match functions or classes name which do
|
||||||
|
# not require a docstring
|
||||||
|
no-docstring-rgx=__.*__
|
||||||
|
|
||||||
|
|
||||||
|
[CLASSES]
|
||||||
|
|
||||||
|
# List of interface methods to ignore, separated by a comma. This is used for
|
||||||
|
# instance to not check methods defines in Zope's Interface base class.
|
||||||
|
ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by
|
||||||
|
|
||||||
|
# List of method names used to declare (i.e. assign) instance attributes.
|
||||||
|
defining-attr-methods=__init__,__new__,setUp
|
||||||
|
|
||||||
|
|
||||||
|
[IMPORTS]
|
||||||
|
|
||||||
|
# Deprecated modules which should not be used, separated by a comma
|
||||||
|
deprecated-modules=regsub,string,TERMIOS,Bastion,rexec
|
||||||
|
|
||||||
|
# Create a graph of every (i.e. internal and external) dependencies in the
|
||||||
|
# given file (report RP0402 must not be disabled)
|
||||||
|
import-graph=
|
||||||
|
|
||||||
|
# Create a graph of external dependencies in the given file (report RP0402 must
|
||||||
|
# not be disabled)
|
||||||
|
ext-import-graph=
|
||||||
|
|
||||||
|
# Create a graph of internal dependencies in the given file (report RP0402 must
|
||||||
|
# not be disabled)
|
||||||
|
int-import-graph=
|
||||||
|
|
||||||
|
|
||||||
|
[DESIGN]
|
||||||
|
|
||||||
|
# Maximum number of arguments for function / method
|
||||||
|
# TODO(aababilov): make it 10
|
||||||
|
max-args=13
|
||||||
|
|
||||||
|
# Argument names that match this expression will be ignored. Default to name
|
||||||
|
# with leading underscore
|
||||||
|
ignored-argument-names=_.*
|
||||||
|
|
||||||
|
# Maximum number of locals for function / method body
|
||||||
|
max-locals=15
|
||||||
|
|
||||||
|
# Maximum number of return / yield for function / method body
|
||||||
|
max-returns=6
|
||||||
|
|
||||||
|
# Maximum number of branch for function / method body
|
||||||
|
max-branchs=12
|
||||||
|
|
||||||
|
# Maximum number of statements in function / method body
|
||||||
|
# TODO(aababilov): make it 50
|
||||||
|
max-statements=60
|
||||||
|
|
||||||
|
# Maximum number of parents for a class (see R0901).
|
||||||
|
max-parents=7
|
||||||
|
|
||||||
|
# Maximum number of attributes for a class (see R0902).
|
||||||
|
max-attributes=12
|
||||||
|
|
||||||
|
# Minimum number of public methods for a class (see R0903).
|
||||||
|
min-public-methods=0
|
||||||
|
|
||||||
|
# Maximum number of public methods for a class (see R0904).
|
||||||
|
max-public-methods=80
|
||||||
|
10
setup.cfg
Normal file
10
setup.cfg
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[nosetests]
|
||||||
|
verbosity=2
|
||||||
|
|
||||||
|
[build_sphinx]
|
||||||
|
source-dir = docs/source
|
||||||
|
build-dir = docs/build
|
||||||
|
all_files = 1
|
||||||
|
|
||||||
|
[upload_sphinx]
|
||||||
|
upload-dir = docs/build/html
|
@ -9,7 +9,7 @@ trap 'git stash pop -q' EXIT
|
|||||||
STATUS=0
|
STATUS=0
|
||||||
FILES="$(git diff --cached --name-only --diff-filter=AM | grep -E '\.py$')"
|
FILES="$(git diff --cached --name-only --diff-filter=AM | grep -E '\.py$')"
|
||||||
if [ -n "$FILES" ]; then
|
if [ -n "$FILES" ]; then
|
||||||
pep8 -r $FILES || STATUS=1
|
pylint $FILES || STATUS=1
|
||||||
if grep -nEH --color '(import pdb|pdb.set_trace)' $FILES; then
|
if grep -nEH --color '(import pdb|pdb.set_trace)' $FILES; then
|
||||||
echo "Please remove pdb"
|
echo "Please remove pdb"
|
||||||
STATUS=1
|
STATUS=1
|
||||||
|
Loading…
Reference in New Issue
Block a user