class Rule(): cls = None def __init__(self): self.server = DBServer('everhomes_rule', 'tasks') def _find(self, pattern=None, **conditions): return self.server.query(pattern=pattern, **conditions) def _find_all(self): return self.server.find_all() @staticmethod @log def validate(key, condition): server = DBServer(key, 'tasks') # should add datetime support? ret = server.query(pattern=condition) server.close() if ret is None or len(ret) <= 0: return False return True # send alarm @staticmethod def send_alarm(data): server = DBServer('everhomes_alarm', 'tasks') server.insert(data) server.close() @classmethod def find(cls, pattern=None, **conditions): return cls.instance()._find(pattern=pattern, **conditions) @classmethod def find_all(cls): return cls.instance()._find_all() @classmethod def instance(cls): if cls.cls is None: cls.cls = cls() return cls.cls
class RuleManager(): def __init__(self): """ db client DBServer('collection','table') """ self.db = DBServer('everhomes_rule', 'tasks') def register(self, rule, **condition): """ :param rule: unique name :param condition: :return: """ if self.db.find_one(**{'_name': rule}): logger.error("The rule name is exist.", "Rule name=", rule) raise ValueError("Duplicate key error") self.db.insert(condition) def deregister(self, rule): """ :param rule: rule name :return: """ self.db.delete(pattern={'_name': rule}) def list_rules(self): return self.db.find_all() def query(self, **condition): return self.db.query(**condition) def close(self): self.db.close() def __del__(self): self.db.close()