cmdb/cmdb-api/lib/const.py

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"]