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.
		
		
		
		
		
			
		
			
				
	
	
		
			29 lines
		
	
	
		
			920 B
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			29 lines
		
	
	
		
			920 B
		
	
	
	
		
			Python
		
	
def indent(func):
 | 
						|
    """
 | 
						|
    Decorator for allowing to use method as normal method or with
 | 
						|
    context manager for auto-indenting code blocks.
 | 
						|
    """
 | 
						|
    def wrapper(self, line, *args, optimize=True, **kwds):
 | 
						|
        last_line = self._indent_last_line
 | 
						|
        line = func(self, line, *args, **kwds)
 | 
						|
        # When two blocks have the same condition (such as value has to be dict),
 | 
						|
        # do the check only once and keep it under one block.
 | 
						|
        if optimize and last_line == line:
 | 
						|
            self._code.pop()
 | 
						|
        self._indent_last_line = line
 | 
						|
        return Indent(self, line)
 | 
						|
    return wrapper
 | 
						|
 | 
						|
 | 
						|
class Indent:
 | 
						|
    def __init__(self, instance, line):
 | 
						|
        self.instance = instance
 | 
						|
        self.line = line
 | 
						|
 | 
						|
    def __enter__(self):
 | 
						|
        self.instance._indent += 1
 | 
						|
 | 
						|
    def __exit__(self, type_, value, traceback):
 | 
						|
        self.instance._indent -= 1
 | 
						|
        self.instance._indent_last_line = self.line
 |