# -*- coding: utf-8 -*- import os try: import ast iter_child_nodes = ast.iter_child_nodes except ImportError: # Python 2.5 import _ast as ast if 'decorator_list' not in ast.ClassDef._fields: # Patch the missing attribute 'decorator_list' ast.ClassDef.decorator_list = () ast.FunctionDef.decorator_list = property(lambda s: s.decorators) def iter_child_nodes(node): """ Yield all direct child nodes of *node*, that is, all fields that are nodes and all items of fields that are lists of nodes. """ if not node._fields: return for name in node._fields: field = getattr(node, name, None) if isinstance(field, ast.AST): yield field elif isinstance(field, list): for item in field: if isinstance(item, ast.AST): yield item class OrderedSet(list): """List without duplicates.""" __slots__ = () def add(self, value): if value not in self: self.append(value) def is_flag(val): """Guess if the value could be an on/off toggle""" val = str(val) return val.upper() in ('1', '0', 'F', 'T', 'TRUE', 'FALSE', 'ON', 'OFF') def is_windows(): """Determine if the system is Windows.""" return os.name == 'nt' def is_using_stdin(paths): """Determine if we're running checks on stdin.""" return '-' in paths def warn_when_using_jobs(options): return (options.verbose and options.jobs and options.jobs.isdigit() and int(options.jobs) > 1) def force_disable_jobs(styleguide): return is_windows() or is_using_stdin(styleguide.paths) def flag_on(val): """Return true if flag is on""" return str(val).upper() in ('1', 'T', 'TRUE', 'ON')