mirror of https://github.com/veops/cmdb.git
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"] |