mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	- Fixes metaprogramming to inject methods during shell class object's runtime - This enable new apis that are synced to come up with new verbs, docs etc. - Fixes printing issue - Fixes null bitfield parsing issue Signed-off-by: Rohit Yadav <bhaisaab@apache.org>
		
			
				
	
	
		
			121 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- coding: utf-8 -*-
 | |
| # Licensed to the Apache Software Foundation (ASF) under one
 | |
| # or more contributor license agreements.  See the NOTICE file
 | |
| # distributed with this work for additional information
 | |
| # regarding copyright ownership.  The ASF licenses this file
 | |
| # to you under the Apache License, Version 2.0 (the
 | |
| # "License"); you may not use this file except in compliance
 | |
| # with the License.  You may obtain a copy of the License at
 | |
| #
 | |
| #   http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing,
 | |
| # software distributed under the License is distributed on an
 | |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | |
| # KIND, either express or implied.  See the License for the
 | |
| # specific language governing permissions and limitations
 | |
| # under the License.
 | |
| 
 | |
| try:
 | |
|     from pygments import highlight
 | |
|     from pygments.console import ansiformat
 | |
|     from pygments.formatter import Formatter
 | |
|     from pygments.formatters import Terminal256Formatter
 | |
|     from pygments.lexer import bygroups, include, RegexLexer
 | |
|     from pygments.token import *
 | |
| 
 | |
|     import sys
 | |
| except ImportError, e:
 | |
|     print e
 | |
| 
 | |
| 
 | |
| MONKEY_COLORS = {
 | |
|     Token:          '',
 | |
|     Whitespace:     'reset',
 | |
|     Text:           'reset',
 | |
| 
 | |
|     Name:           'green',
 | |
|     Operator:       'teal',
 | |
|     Operator.Word:  'lightgray',
 | |
|     String:         'purple',
 | |
| 
 | |
|     Keyword:        '_red_',
 | |
|     Error:          'red',
 | |
|     Literal:        'yellow',
 | |
|     Number:         'blue',
 | |
| }
 | |
| 
 | |
| 
 | |
| def get_colorscheme():
 | |
|     return MONKEY_COLORS
 | |
| 
 | |
| 
 | |
| class MonkeyLexer(RegexLexer):
 | |
|     keywords = ['[a-z]*id', '^[a-z A-Z]*:']
 | |
|     attributes = ['[Tt]rue', '[Ff]alse']
 | |
|     params = ['[a-z]*[Nn]ame', 'type', '[Ss]tate']
 | |
| 
 | |
|     uuid_rgx = r'[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
 | |
|     date_rgx = r'[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9:]{8}-[0-9]{4}'
 | |
| 
 | |
|     def makelistre(lis):
 | |
|         return r'(' + r'|'.join(lis) + r')'
 | |
| 
 | |
|     tokens = {
 | |
|         'root': [
 | |
|             (r' ', Whitespace),
 | |
|             (date_rgx, Number),
 | |
|             (uuid_rgx, Literal),
 | |
|             (r'(?:\b\d+\b(?:-\b\d+|%)?)', Number),
 | |
|             (r'^[-=]*\n', Operator.Word),
 | |
|             (r'Error', Error),
 | |
|             (makelistre(attributes), Literal),
 | |
|             (makelistre(params) + r'( = )(.*)', bygroups(Name, Operator,
 | |
|                                                          String)),
 | |
|             (makelistre(keywords), Keyword),
 | |
|             (makelistre(params), Name),
 | |
|             (r'(^[a-zA-Z]* )(=)', bygroups(Name, Operator)),
 | |
|             (r'\S+', Text),
 | |
|         ]
 | |
|     }
 | |
| 
 | |
|     def analyse_text(text):
 | |
|         npos = text.find('\n')
 | |
|         if npos < 3:
 | |
|             return False
 | |
|         return text[0] == '[' and text[npos - 1] == ']'
 | |
| 
 | |
| 
 | |
| class MonkeyFormatter(Formatter):
 | |
|     def __init__(self, **options):
 | |
|         Formatter.__init__(self, **options)
 | |
|         self.colorscheme = get_colorscheme()
 | |
| 
 | |
|     def format(self, tokensource, outfile):
 | |
|         return Formatter.format(self, tokensource, outfile)
 | |
| 
 | |
|     def format_unencoded(self, tokensource, outfile):
 | |
|         for ttype, value in tokensource:
 | |
|             color = self.colorscheme.get(ttype)
 | |
|             while color is None:
 | |
|                 ttype = ttype[:-1]
 | |
|                 color = self.colorscheme.get(ttype)
 | |
|             if color:
 | |
|                 spl = value.split('\n')
 | |
|                 for line in spl[:-1]:
 | |
|                     if line:
 | |
|                         outfile.write(ansiformat(color, line))
 | |
|                     outfile.write('\n')
 | |
|                 if spl[-1]:
 | |
|                     outfile.write(ansiformat(color, spl[-1]))
 | |
|             else:
 | |
|                 outfile.write(value)
 | |
| 
 | |
| 
 | |
| def monkeyprint(text):
 | |
|     fmter = MonkeyFormatter()
 | |
|     lexer = MonkeyLexer()
 | |
|     lexer.encoding = 'utf-8'
 | |
|     fmter.encoding = 'utf-8'
 | |
|     highlight(text, lexer, fmter, sys.stdout)
 |