diff --git a/.pylintrc b/.pylintrc
new file mode 100644
index 0000000000000000000000000000000000000000..745d1ac71101a3ab82e888da711a5e810d5f3782
--- /dev/null
+++ b/.pylintrc
@@ -0,0 +1,83 @@
+[MASTER]
+profile=no
+ignore=CVS
+persistent=no
+load-plugins=
+
+[MESSAGES CONTROL]
+
+[REPORTS]
+output-format=colorized
+include-ids=no
+files-output=no
+reports=no
+evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
+comment=no
+
+[BASIC]
+required-attributes=
+bad-functions=map,filter,apply,input
+module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
+const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$
+class-rgx=[A-Z_][a-zA-Z0-9]+$
+function-rgx=[a-z_][a-z0-9_]{2,30}$
+method-rgx=[a-z_][a-z0-9_]{2,30}$
+attr-rgx=[a-z_][a-z0-9_]{2,30}$
+argument-rgx=[a-z_][a-z0-9_]{2,30}$
+# Regular expression which should only match correct variable names
+# Note: s/2/1/ to allow two char var names.
+variable-rgx=[a-z_][a-z0-9_]{1,30}$
+inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
+good-names=i,j,k,ex,f,fn,a,b,Run,_
+bad-names=foo,bar,baz,toto,tutu,tata
+no-docstring-rgx=__.*__
+
+[FORMAT]
+max-line-length=80
+max-module-lines=5000
+indent-string=' '
+
+[MISCELLANEOUS]
+notes=FIXME,XXX,TODO
+
+[SIMILARITIES]
+min-similarity-lines=4
+ignore-comments=yes
+ignore-docstrings=yes
+
+[TYPECHECK]
+ignore-mixin-members=yes
+ignored-classes=SQLObject
+zope=no
+generated-members=REQUEST,acl_users,aq_parent
+
+[VARIABLES]
+init-import=no
+dummy-variables-rgx=_|dummy
+additional-builtins=
+
+[CLASSES]
+ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by
+defining-attr-methods=__init__,__new__,setUp
+valid-classmethod-first-arg=cls
+
+[DESIGN]
+max-args=5
+ignored-argument-names=_.*
+max-locals=15
+max-returns=6
+max-branchs=12
+max-statements=50
+max-parents=7
+max-attributes=7
+min-public-methods=2
+max-public-methods=20
+
+[IMPORTS]
+deprecated-modules=regsub,string,TERMIOS,Bastion,rexec
+import-graph=
+ext-import-graph=
+int-import-graph=
+
+[EXCEPTIONS]
+overgeneral-exceptions=Exception
diff --git a/chkcrontab b/chkcrontab
index d39953de25a6a62ea847586dd86ae59d974519b5..9020dfb510f9a67ddf51c0da574eb530e8fff76e 100755
--- a/chkcrontab
+++ b/chkcrontab
@@ -24,18 +24,18 @@ Basic usage:
__author__ = 'lyda@google.com (Kevin Lyda)'
-import os
import sys
import chkcrontab_lib as check
def main(argv):
+ """main program."""
if len(argv) != 2:
print 'ERROR: No crontab file was specified.'
sys.exit(1)
log = check.LogCounter()
print 'Checking correctness of %s' % argv[1]
- return check.CheckCrontab(argv[1], log)
+ return check.check_crontab(argv[1], log)
if __name__ == '__main__':
main(sys.argv)
diff --git a/chkcrontab_lib.py b/chkcrontab_lib.py
old mode 100755
new mode 100644
index 88e6f6b3cabf930793ea4cd0631a893db2cd58d2..34b9eb0a2a060b4542336d7a569419ad0c5ca991
--- a/chkcrontab_lib.py
+++ b/chkcrontab_lib.py
@@ -994,7 +994,7 @@ class LogCounter(object):
return self._error_count
-def CheckCrontab(crontab_file, log):
+def check_crontab(crontab_file, log):
"""Check a crontab file.
Checks crontab_file for a variety of errors or potential errors. This only
@@ -1039,15 +1039,3 @@ def CheckCrontab(crontab_file, log):
# Summarize the log messages if there were any.
return log.Summary()
-
-
-def main():
- log = LogCounter()
- if len(sys.argv) != 2:
- log.Error('Must provide a crontab file to check.')
- print('Checking correctness of %s' % sys.argv[1])
- return CheckCrontab(sys.argv[1], log)
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/setup.py b/setup.py
index 10d6439a250414daaf2fa8d52306ad8415657f52..6e5cacf969819f356e1ef53aeb406dcd0b738c52 100755
--- a/setup.py
+++ b/setup.py
@@ -35,7 +35,7 @@ BASE_DIR = os.path.dirname(globals().get('__file__', os.getcwd()))
class TestCmd(Command):
description = 'Runs all available tests.'
- user_options = [ ]
+ user_options = []
def initialize_options(self):
pass
@@ -54,7 +54,7 @@ class TestCmd(Command):
class CleanCmd(Command):
description = 'Remove all generated files.'
- user_options = [ ]
+ user_options = []
def initialize_options(self):
pass
@@ -68,7 +68,7 @@ class CleanCmd(Command):
dirs2del = [ './build', './dist' ]
dirs2ign = [ './.git' ]
# End config.
- doomed = [ ]
+ doomed = set()
# Change to base dir.
os.chdir(BASE_DIR)
for root, dirs, files in os.walk('.'):
@@ -76,18 +76,18 @@ class CleanCmd(Command):
if root in dirs2ign:
continue
if root in dirs2del:
- doomed.append(root)
+ doomed.add(root)
# Handle files.
for f in files:
accused = os.path.join(root, f)
for suffix in suffixes2del:
if f.endswith(suffix):
- doomed.append(accused)
+ doomed.add(accused)
break
if accused not in doomed:
for d2del in dirs2del:
if accused.startswith(d2del):
- doomed.append(accused)
+ doomed.add(accused)
break
# Handle dirs.
for d in dirs:
@@ -99,7 +99,7 @@ class CleanCmd(Command):
if d in dirs:
for d2del in dirs2del:
if accused.startswith(d2del):
- doomed.append(accused)
+ doomed.add(accused)
break
# Probably not required, but just to be safe.
for accused in doomed:
@@ -107,8 +107,7 @@ class CleanCmd(Command):
if accused.startswith(d2ign):
doomed.remove(accused)
break
- doomed.sort(reverse=True)
- for accused in doomed:
+ for accused in sorted(doomed, reverse=True):
log.info('removing "%s"', os.path.normpath(accused))
if not self.dry_run:
try:
@@ -131,13 +130,13 @@ class InstallCmd(install):
def finalize_options(self):
install.finalize_options(self)
- if self.manprefix is None :
+ if self.manprefix is None:
self.manprefix = os.path.join(self.install_scripts,
'..', 'share', 'man')
def run(self):
install.run(self)
- manpages=['doc/chkcrontab.1']
+ manpages = ['doc/chkcrontab.1']
if self.manprefix:
for manpage in manpages:
section = manpage.split('/')[-1].split('.')[-1]
@@ -153,31 +152,36 @@ class InstallCmd(install):
os.path.join(manpage_dir, manpage_file),
dry_run=self.dry_run)
+# Only override install if not being run by setuptools.
+cmdclass = {'test': TestCmd,
+ 'dist_clean': CleanCmd,
+ }
+if 'setuptools' not in dir():
+ cmdclass['install'] = InstallCmd
+
setup(
- cmdclass={'test': TestCmd,
- 'dist_clean': CleanCmd,
- 'install': InstallCmd,
- },
- name='chkcrontab',
- version='1.2',
- url='http://code.google.com/p/chkcrontab',
- author='Kevin Lyda',
- author_email='lyda@google.com',
- description='A tool to detect crontab errors',
- long_description=open('README.rst').read(),
- py_modules=['chkcrontab_lib'],
- scripts=['chkcrontab'],
- keywords='check lint crontab',
- # See http://pypi.python.org/pypi?%3Aaction=list_classifiers
- license = 'Apache Software License',
- platforms = ['POSIX'],
- classifiers=['Development Status :: 5 - Production/Stable',
- 'Environment :: Console',
- 'License :: OSI Approved :: Apache Software License',
- 'Operating System :: POSIX',
- 'Programming Language :: Python :: 2.5',
- 'Programming Language :: Python :: 2.6',
- 'Programming Language :: Python :: 2.7',
- 'Topic :: Utilities',
- ],
+ cmdclass=cmdclass,
+ name='chkcrontab',
+ version='1.2',
+ url='http://code.google.com/p/chkcrontab',
+ author='Kevin Lyda',
+ author_email='lyda@google.com',
+ description='A tool to detect crontab errors',
+ long_description=open('README.rst').read(),
+ py_modules=['chkcrontab_lib'],
+ scripts=['chkcrontab'],
+ keywords='check lint crontab',
+ # See http://pypi.python.org/pypi?%3Aaction=list_classifiers
+ license = 'Apache Software License',
+ platforms = ['POSIX'],
+ classifiers=['Development Status :: 5 - Production/Stable',
+ 'Environment :: Console',
+ 'License :: OSI Approved :: Apache Software License',
+ 'Operating System :: POSIX',
+ 'Programming Language :: Python :: 2.5',
+ 'Programming Language :: Python :: 2.6',
+ 'Programming Language :: Python :: 2.7',
+ 'Programming Language :: Python :: 3',
+ 'Topic :: Utilities',
+ ],
)
diff --git a/tests/test_check.py b/tests/test_check.py
index c84a009d52f3b72efea3cf1146c1dc009e79518c..3bf95e54317381f65c1af6426b4a787e292232d9 100755
--- a/tests/test_check.py
+++ b/tests/test_check.py
@@ -311,7 +311,7 @@ class CheckCrontabUnitTest(unittest.TestCase):
log = check.LogCounter()
crontab_file = os.path.join(BASE_PATH, crontab)
(exp_warn, exp_fail, exp_rc) = self.GetExpWFRs(crontab_file)
- self.assertEquals(check.CheckCrontab(crontab_file, log), exp_rc,
+ self.assertEquals(check.check_crontab(crontab_file, log), exp_rc,
'Failed to return %d for crontab errors.' % exp_rc)
self.assertEquals(log.warn_count, exp_warn,
'Found %d warns not %d.' % (log.warn_count, exp_warn))