mirror of
				https://github.com/veops/cmdb.git
				synced 2025-10-31 11:09:21 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- coding:utf-8 -*- 
 | |
| 
 | |
| 
 | |
| import datetime
 | |
| 
 | |
| from models.attribute import TextChoice
 | |
| from models.attribute import FloatChoice
 | |
| from models.attribute import IntegerChoice
 | |
| from models.attribute import CIAttributeCache
 | |
| from models.ci_value import CIValueText
 | |
| from models.ci_value import CIValueInteger
 | |
| from models.ci_value import CIValueFloat
 | |
| from models.ci_value import CIValueDateTime
 | |
| from models.ci_value import CIIndexValueDateTime
 | |
| from models.ci_value import CIIndexValueFloat
 | |
| from models.ci_value import CIIndexValueInteger
 | |
| from models.ci_value import CIIndexValueText
 | |
| 
 | |
| 
 | |
| def string2int(x):
 | |
|     return int(float(x))
 | |
| 
 | |
| 
 | |
| def str2datetime(x):
 | |
|     try:
 | |
|         v = datetime.datetime.strptime(x, "%Y-%m-%d")
 | |
|         return v
 | |
|     except ValueError:
 | |
|         pass
 | |
|     try:
 | |
|         v = datetime.datetime.strptime(x, "%Y-%m-%d %H:%M:%S")
 | |
|         return v
 | |
|     except ValueError:
 | |
|         pass
 | |
|     raise ValueError
 | |
| 
 | |
| 
 | |
| type_map = {
 | |
|     'converter': {
 | |
|         'int': string2int,
 | |
|         'float': float,
 | |
|         'text': unicode,
 | |
|         'datetime': str2datetime,
 | |
|     },
 | |
|     'choice': {
 | |
|         'int': IntegerChoice,
 | |
|         'float': FloatChoice,
 | |
|         'text': TextChoice,
 | |
|     },
 | |
|     'table': {
 | |
|         'int': CIValueInteger,
 | |
|         'text': CIValueText,
 | |
|         'datetime': CIValueDateTime,
 | |
|         'float': CIValueFloat,
 | |
|         'index_int': CIIndexValueInteger,
 | |
|         'index_text': CIIndexValueText,
 | |
|         'index_datetime': CIIndexValueDateTime,
 | |
|         'index_float': CIIndexValueFloat,
 | |
|     },
 | |
|     'table_name': {
 | |
|         'int': 'integers',
 | |
|         'text': 'texts',
 | |
|         'datetime': 'datetime',
 | |
|         'float': 'floats',
 | |
|         'index_int': 'index_integers',
 | |
|         'index_text': 'index_texts',
 | |
|         'index_datetime': 'index_datetime',
 | |
|         'index_float': 'index_floats',
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| class TableMap():
 | |
|     def __init__(self, attr_name=None):
 | |
|         self.attr_name = attr_name
 | |
| 
 | |
|     @property
 | |
|     def table(self):
 | |
|         if self.attr_name is not None:
 | |
|             attr = CIAttributeCache.get(self.attr_name)
 | |
|             if attr.is_index:
 | |
|                 i = "index_{0}".format(attr.value_type)
 | |
|             else:
 | |
|                 i = attr.value_type
 | |
|             return type_map["table"].get(i)
 | |
| 
 | |
|     @property
 | |
|     def table_name(self):
 | |
|         if self.attr_name is not None:
 | |
|             attr = CIAttributeCache.get(self.attr_name)
 | |
|             if attr.is_index:
 | |
|                 i = "index_{0}".format(attr.value_type)
 | |
|             else:
 | |
|                 i = attr.value_type
 | |
|             return type_map["table_name"].get(i)
 | |
| 
 | |
| 
 | |
| CITYPE_RELATION_TYPES = ["connect", "deploy", "install", "contain"]
 | |
| CI_RELATION_TYPES = ["connect", "deploy", "install", "contain"] |