mirror of
https://github.com/veops/cmdb.git
synced 2025-08-08 14:50:56 +08:00
v1 vsersion
This commit is contained in:
87
models/attribute.py
Normal file
87
models/attribute.py
Normal file
@@ -0,0 +1,87 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
from extensions import db, cache
|
||||
|
||||
|
||||
class CIAttribute(db.Model):
|
||||
__tablename__ = "ci_attributes"
|
||||
|
||||
attr_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||||
attr_name = db.Column(db.String(32), nullable=False, unique=True)
|
||||
attr_alias = db.Column(db.String(32), nullable=False, unique=True)
|
||||
value_type = db.Column(
|
||||
db.String(8),
|
||||
db.Enum("int", "float", "text", "datetime", name='value_type'),
|
||||
default="text",
|
||||
nullable=False)
|
||||
is_choice = db.Column(db.Boolean, default=False)
|
||||
is_multivalue = db.Column(db.Boolean, default=False)
|
||||
is_uniq = db.Column(db.Boolean, default=False)
|
||||
is_index = db.Column(db.Boolean, default=False)
|
||||
|
||||
|
||||
class IntegerChoice(db.Model):
|
||||
__tablename__ = 'choice_integers'
|
||||
|
||||
choice_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||||
attr_id = db.Column(db.Integer,
|
||||
db.ForeignKey('ci_attributes.attr_id'),
|
||||
nullable=False)
|
||||
attr = db.relationship("CIAttribute", backref="choice_integers")
|
||||
value = db.Column(db.Integer, nullable=False)
|
||||
|
||||
|
||||
class FloatChoice(db.Model):
|
||||
__tablename__ = 'choice_floats'
|
||||
|
||||
choice_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||||
attr_id = db.Column(db.Integer,
|
||||
db.ForeignKey('ci_attributes.attr_id'),
|
||||
nullable=False)
|
||||
attr = db.relationship("CIAttribute", backref="choice_floats")
|
||||
value = db.Column(db.Float, nullable=False)
|
||||
|
||||
|
||||
class TextChoice(db.Model):
|
||||
__tablename__ = 'choice_texts'
|
||||
|
||||
choice_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||||
attr_id = db.Column(db.Integer,
|
||||
db.ForeignKey('ci_attributes.attr_id'),
|
||||
nullable=False)
|
||||
attr = db.relationship("CIAttribute", backref="choice_texts")
|
||||
value = db.Column(db.Text, nullable=False)
|
||||
|
||||
|
||||
class CIAttributeCache(object):
|
||||
@classmethod
|
||||
def get(cls, key):
|
||||
if key is None:
|
||||
return
|
||||
attr = cache.get('Field::Name::%s' % key) or \
|
||||
cache.get('Field::ID::%s' % key) or \
|
||||
cache.get('Field::Alias::%s' % key)
|
||||
if attr is None:
|
||||
attr = db.session.query(CIAttribute).filter_by(
|
||||
attr_name=key).first() or \
|
||||
db.session.query(CIAttribute).filter(
|
||||
CIAttribute.attr_id == key).first() or \
|
||||
db.session.query(CIAttribute).filter(
|
||||
CIAttribute.attr_alias == key).first()
|
||||
db.session.close()
|
||||
if attr is not None:
|
||||
CIAttributeCache.set(attr)
|
||||
return attr
|
||||
|
||||
@classmethod
|
||||
def set(cls, attr):
|
||||
cache.set('Field::ID::%s' % attr.attr_id, attr)
|
||||
cache.set('Field::Name::%s' % attr.attr_name, attr)
|
||||
cache.set('Field::Alias::%s' % attr.attr_alias, attr)
|
||||
|
||||
@classmethod
|
||||
def clean(cls, attr):
|
||||
if cache.get('Field::ID::%s' % attr.attr_id):
|
||||
cache.delete('Field::ID::%s' % attr.attr_id)
|
||||
cache.delete('Field::Name::%s' % attr.attr_name)
|
||||
cache.delete('Field::Alias::%s' % attr.attr_alias)
|
Reference in New Issue
Block a user