diff options
author | Ask Solem <ask@celeryproject.org> | 2012-11-27 15:48:42 +0000 |
---|---|---|
committer | Ask Solem <ask@celeryproject.org> | 2012-11-27 15:48:42 +0000 |
commit | f68f8ac8c0808c6c33f3c4cbab7c7932e1ccd48d (patch) | |
tree | a4ec01bc6f13bb11ece248c5384103c76f3bc22b /extra | |
parent | 325fcc0522571096b424080c232f0d87a1e5865e (diff) | |
parent | 6b77885cf0e26b0f08a38db08835e8e43cd3ae91 (diff) | |
download | kombu-f68f8ac8c0808c6c33f3c4cbab7c7932e1ccd48d.tar.gz |
Merge branch 'master' into 3.0
Conflicts:
kombu/abstract.py
kombu/clocks.py
kombu/messaging.py
kombu/pidbox.py
kombu/pools.py
kombu/tests/mocks.py
kombu/tests/test_common.py
kombu/tests/test_messaging.py
kombu/tests/test_serialization.py
kombu/tests/test_utils.py
kombu/tests/transport/test_redis.py
kombu/tests/utilities/test_encoding.py
kombu/transport/pika.py
kombu/transport/zmq.py
kombu/transport/zookeeper.py
kombu/utils/__init__.py
kombu/utils/encoding.py
kombu/utils/finalize.py
pavement.py
requirements/default.txt
Diffstat (limited to 'extra')
-rwxr-xr-x | extra/release/bump_version.py | 3 | ||||
-rwxr-xr-x | extra/release/doc4allmods | 3 | ||||
-rwxr-xr-x | extra/release/flakeplus.py | 126 |
3 files changed, 129 insertions, 3 deletions
diff --git a/extra/release/bump_version.py b/extra/release/bump_version.py index d7b9c6fd..abda578e 100755 --- a/extra/release/bump_version.py +++ b/extra/release/bump_version.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - from __future__ import absolute_import import errno @@ -22,7 +21,7 @@ def cmd(*args): def no_enoent(): try: yield - except OSError as exc: + except OSError, exc: if exc.errno != errno.ENOENT: raise diff --git a/extra/release/doc4allmods b/extra/release/doc4allmods index 4651dcd4..f95fee2f 100755 --- a/extra/release/doc4allmods +++ b/extra/release/doc4allmods @@ -2,7 +2,8 @@ PACKAGE="$1" SKIP_PACKAGES="$PACKAGE tests management urls" -SKIP_FILES="kombu.utils.eventio.rst +SKIP_FILES="kombu.entity.rst + kombu.messaging.rst kombu.transport.django.migrations.rst kombu.transport.django.migrations.0001_initial.rst kombu.transport.django.management.rst diff --git a/extra/release/flakeplus.py b/extra/release/flakeplus.py new file mode 100755 index 00000000..6fe1f1fc --- /dev/null +++ b/extra/release/flakeplus.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python +from __future__ import absolute_import +from __future__ import with_statement + +import os +import re +import sys + +from collections import defaultdict +from unipath import Path + +RE_COMMENT = r'^\s*\#' +RE_NOQA = r'.+?\#\s+noqa+' +RE_MULTILINE_COMMENT_O = r'^\s*(?:\'\'\'|""").+?(?:\'\'\'|""")' +RE_MULTILINE_COMMENT_S = r'^\s*(?:\'\'\'|""")' +RE_MULTILINE_COMMENT_E = r'(?:^|.+?)(?:\'\'\'|""")' +RE_WITH = r'(?:^|\s+)with\s+' +RE_WITH_IMPORT = r'''from\s+ __future__\s+ import\s+ with_statement''' +RE_PRINT = r'''(?:^|\s+)print\((?:"|')(?:\W+?)?[A-Z0-9:]{2,}''' +RE_ABS_IMPORT = r'''from\s+ __future__\s+ import\s+ absolute_import''' + +acc = defaultdict(lambda: {"abs": False, "print": False}) + + +def compile(regex): + return re.compile(regex, re.VERBOSE) + + +class FlakePP(object): + re_comment = compile(RE_COMMENT) + re_ml_comment_o = compile(RE_MULTILINE_COMMENT_O) + re_ml_comment_s = compile(RE_MULTILINE_COMMENT_S) + re_ml_comment_e = compile(RE_MULTILINE_COMMENT_E) + re_abs_import = compile(RE_ABS_IMPORT) + re_print = compile(RE_PRINT) + re_with_import = compile(RE_WITH_IMPORT) + re_with = compile(RE_WITH) + re_noqa = compile(RE_NOQA) + map = {"abs": True, "print": False, + "with": False, "with-used": False} + + def __init__(self, verbose=False): + self.verbose = verbose + self.steps = (("abs", self.re_abs_import), + ("with", self.re_with_import), + ("with-used", self.re_with), + ("print", self.re_print)) + + def analyze_fh(self, fh): + steps = self.steps + filename = fh.name + acc = dict(self.map) + index = 0 + errors = [0] + + def error(fmt, **kwargs): + errors[0] += 1 + self.announce(fmt, **dict(kwargs, filename=filename)) + + for index, line in enumerate(self.strip_comments(fh)): + for key, pattern in steps: + if pattern.match(line): + acc[key] = True + if index: + if not acc["abs"]: + error("%(filename)s: missing abs import") + if acc["with-used"] and not acc["with"]: + error("%(filename)s: missing with import") + if acc["print"]: + error("%(filename)s: left over print statement") + + return filename, errors[0], acc + + def analyze_file(self, filename): + with open(filename) as fh: + return self.analyze_fh(fh) + + def analyze_tree(self, dir): + for dirpath, _, filenames in os.walk(dir): + for path in (Path(dirpath, f) for f in filenames): + if path.endswith(".py"): + yield self.analyze_file(path) + + def analyze(self, *paths): + for path in map(Path, paths): + if path.isdir(): + for res in self.analyze_tree(path): + yield res + else: + yield self.analyze_file(path) + + def strip_comments(self, fh): + re_comment = self.re_comment + re_ml_comment_o = self.re_ml_comment_o + re_ml_comment_s = self.re_ml_comment_s + re_ml_comment_e = self.re_ml_comment_e + re_noqa = self.re_noqa + in_ml = False + + for line in fh.readlines(): + if in_ml: + if re_ml_comment_e.match(line): + in_ml = False + else: + if re_noqa.match(line) or re_ml_comment_o.match(line): + pass + elif re_ml_comment_s.match(line): + in_ml = True + elif re_comment.match(line): + pass + else: + yield line + + def announce(self, fmt, **kwargs): + sys.stderr.write((fmt + "\n") % kwargs) + + +def main(argv=sys.argv, exitcode=0): + for _, errors, _ in FlakePP(verbose=True).analyze(*argv[1:]): + if errors: + exitcode = 1 + return exitcode + + +if __name__ == "__main__": + sys.exit(main()) |