Adopt orm interface in events/api.py module
This commit is contained in:
parent
912a011ca5
commit
2d0bd054d6
@ -18,19 +18,21 @@ __all__ = ['add_dep', 'add_react']
|
|||||||
import networkx as nx
|
import networkx as nx
|
||||||
|
|
||||||
from solar.core.log import log
|
from solar.core.log import log
|
||||||
from solar.interfaces.db import get_db
|
from solar.interfaces import orm
|
||||||
from solar.events.controls import Dep, React, StateChange
|
from solar.events.controls import Dep, React, StateChange
|
||||||
|
|
||||||
|
|
||||||
db = get_db()
|
|
||||||
|
|
||||||
|
|
||||||
def create_event(event_dict):
|
def create_event(event_dict):
|
||||||
etype = event_dict.pop('etype')
|
etype = event_dict['etype']
|
||||||
|
kwargs = {'child': event_dict['child'],
|
||||||
|
'parent': event_dict['parent'],
|
||||||
|
'child_action': event_dict['child_action'],
|
||||||
|
'parent_action': event_dict['parent_action'],
|
||||||
|
'state': event_dict['state']}
|
||||||
if etype == React.etype:
|
if etype == React.etype:
|
||||||
return React(**event_dict)
|
return React(**kwargs)
|
||||||
elif etype == Dep.etype:
|
elif etype == Dep.etype:
|
||||||
return Dep(**event_dict)
|
return Dep(**kwargs)
|
||||||
else:
|
else:
|
||||||
raise Exception('No support for type %s', etype)
|
raise Exception('No support for type %s', etype)
|
||||||
|
|
||||||
@ -42,10 +44,8 @@ def add_event(ev):
|
|||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
rst.append(ev)
|
rst.append(ev)
|
||||||
db.create(
|
event_db = orm.DBEvent(**ev.to_dict())
|
||||||
ev.parent_node,
|
event_db.save()
|
||||||
[i.to_dict() for i in rst],
|
|
||||||
collection=db.COLLECTIONS.events)
|
|
||||||
|
|
||||||
|
|
||||||
def add_dep(parent, dep, actions, state='success'):
|
def add_dep(parent, dep, actions, state='success'):
|
||||||
@ -64,31 +64,28 @@ def add_react(parent, dep, actions, state='success'):
|
|||||||
log.debug('Added event: %s', r)
|
log.debug('Added event: %s', r)
|
||||||
|
|
||||||
|
|
||||||
|
def add_events(resource, lst):
|
||||||
|
for ev in lst:
|
||||||
|
event_db = orm.DBEvent(**ev.to_dict())
|
||||||
|
event_db.save()
|
||||||
|
|
||||||
|
|
||||||
def set_events(resource, lst):
|
def set_events(resource, lst):
|
||||||
db.create(
|
orm.DBEvent.delete_list(resource)
|
||||||
resource,
|
add_events(resource, lst)
|
||||||
[i.to_dict() for i in lst],
|
|
||||||
collection=db.COLLECTIONS.events)
|
|
||||||
|
|
||||||
|
|
||||||
def remove_event(ev):
|
def remove_event(ev):
|
||||||
rst = all_events(ev.parent_node)
|
event_db = orm.DBEvent(**ev.to_dict())
|
||||||
set_events(ev.parent_node, [it for it in rst if not it == ev])
|
event_db.delete()
|
||||||
|
|
||||||
|
|
||||||
def add_events(resource, lst):
|
|
||||||
rst = all_events(resource)
|
|
||||||
rst.extend(lst)
|
|
||||||
set_events(resource, rst)
|
|
||||||
|
|
||||||
|
|
||||||
def all_events(resource):
|
def all_events(resource):
|
||||||
events = db.get(resource, collection=db.COLLECTIONS.events,
|
events = orm.DBEvent.load_list(resource)
|
||||||
return_empty=True)
|
|
||||||
|
|
||||||
if not events:
|
if not events:
|
||||||
return []
|
return []
|
||||||
return [create_event(i) for i in events.properties]
|
return [create_event(i.to_dict()) for i in events]
|
||||||
|
|
||||||
|
|
||||||
def bft_events_graph(start):
|
def bft_events_graph(start):
|
||||||
|
@ -36,38 +36,41 @@ class Event(object):
|
|||||||
|
|
||||||
etype = None
|
etype = None
|
||||||
|
|
||||||
def __init__(self, parent_node, parent_action,
|
def __init__(self, parent, parent_action,
|
||||||
state='', depend_node='', depend_action=''):
|
state='', child='', child_action=''):
|
||||||
self.parent_node = parent_node
|
self.parent = parent
|
||||||
self.parent_action = parent_action
|
self.parent_action = parent_action
|
||||||
self.state = state
|
self.state = state
|
||||||
self.depend_node = depend_node
|
self.child = child
|
||||||
self.depend_action = depend_action
|
self.child_action = child_action
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def parent(self):
|
def parent_node(self):
|
||||||
return '{}.{}'.format(self.parent_node, self.parent_action)
|
return '{}.{}'.format(self.parent, self.parent_action)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def dependent(self):
|
def child_node(self):
|
||||||
return '{}.{}'.format(self.depend_node, self.depend_action)
|
return '{}.{}'.format(self.child, self.child_action)
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self):
|
||||||
rst = {'etype': self.etype}
|
return {'etype': self.etype,
|
||||||
rst.update(self.__dict__)
|
'child': self.child,
|
||||||
return rst
|
'parent': self.parent,
|
||||||
|
'parent_action': self.parent_action,
|
||||||
|
'child_action': self.child_action,
|
||||||
|
'state': self.state}
|
||||||
|
|
||||||
def __eq__(self, inst):
|
def __eq__(self, inst):
|
||||||
if inst.__class__ != self.__class__:
|
if inst.__class__ != self.__class__:
|
||||||
return False
|
return False
|
||||||
return all((
|
return all((
|
||||||
self.parent == inst.parent,
|
self.parent_node == inst.parent_node,
|
||||||
self.state == inst.state,
|
self.state == inst.state,
|
||||||
self.dependent == inst.dependent))
|
self.child_node == inst.child_node))
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return '{}: {} -> {} -> {}'.format(
|
return '{}: {} -> {} -> {}'.format(
|
||||||
self.etype, self.parent, self.state, self.dependent)
|
self.etype, self.parent_node, self.state, self.child_node)
|
||||||
|
|
||||||
def __hash__(self):
|
def __hash__(self):
|
||||||
return hash(repr(self))
|
return hash(repr(self))
|
||||||
@ -78,10 +81,10 @@ class Dependency(Event):
|
|||||||
etype = 'depends_on'
|
etype = 'depends_on'
|
||||||
|
|
||||||
def insert(self, changed_resources, changes_graph):
|
def insert(self, changed_resources, changes_graph):
|
||||||
if (self.parent in changes_graph and
|
if (self.parent_node in changes_graph and
|
||||||
self.dependent in changes_graph):
|
self.child_node in changes_graph):
|
||||||
changes_graph.add_edge(
|
changes_graph.add_edge(
|
||||||
self.parent, self.dependent, state=self.state)
|
self.parent_node, self.child_node, state=self.state)
|
||||||
|
|
||||||
Dep = Dependency
|
Dep = Dependency
|
||||||
|
|
||||||
@ -91,15 +94,15 @@ class React(Event):
|
|||||||
|
|
||||||
def insert(self, changed_resources, changes_graph):
|
def insert(self, changed_resources, changes_graph):
|
||||||
|
|
||||||
if self.parent in changes_graph:
|
if self.parent_node in changes_graph:
|
||||||
if self.dependent not in changes_graph:
|
if self.child_node not in changes_graph:
|
||||||
changes_graph.add_node(
|
changes_graph.add_node(
|
||||||
self.dependent, status='PENDING',
|
self.child_node, status='PENDING',
|
||||||
errmsg=None, type='solar_resource',
|
errmsg=None, type='solar_resource',
|
||||||
args=[self.depend_node, self.depend_action])
|
args=[self.child, self.child_action])
|
||||||
|
|
||||||
changes_graph.add_edge(self.parent, self.dependent, state=self.state)
|
changes_graph.add_edge(self.parent_node, self.child_node, state=self.state)
|
||||||
changed_resources.append(self.depend_node)
|
changed_resources.append(self.child)
|
||||||
|
|
||||||
|
|
||||||
class StateChange(Event):
|
class StateChange(Event):
|
||||||
@ -109,6 +112,6 @@ class StateChange(Event):
|
|||||||
def insert(self, changed_resources, changes_graph):
|
def insert(self, changed_resources, changes_graph):
|
||||||
changed_resources.append(self.parent)
|
changed_resources.append(self.parent)
|
||||||
changes_graph.add_node(
|
changes_graph.add_node(
|
||||||
self.parent, status='PENDING',
|
self.parent_node, status='PENDING',
|
||||||
errmsg=None, type='solar_resource',
|
errmsg=None, type='solar_resource',
|
||||||
args=[self.parent_node, self.parent_action])
|
args=[self.parent, self.parent_action])
|
||||||
|
@ -152,6 +152,11 @@ class RedisGraphDB(BaseGraphDB):
|
|||||||
except TypeError:
|
except TypeError:
|
||||||
raise KeyError
|
raise KeyError
|
||||||
|
|
||||||
|
def delete(self, name, collection=BaseGraphDB.DEFAULT_COLLECTION):
|
||||||
|
keys = self._r.keys(self._make_collection_key(collection, name))
|
||||||
|
if keys:
|
||||||
|
self._r.delete(*keys)
|
||||||
|
|
||||||
def get_or_create(self,
|
def get_or_create(self,
|
||||||
name,
|
name,
|
||||||
properties={},
|
properties={},
|
||||||
|
@ -382,6 +382,12 @@ class DBObject(object):
|
|||||||
collection=self._collection
|
collection=self._collection
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def delete(self):
|
||||||
|
db.delete(
|
||||||
|
self._db_key,
|
||||||
|
collection=self._collection
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class DBResourceInput(DBObject):
|
class DBResourceInput(DBObject):
|
||||||
__metaclass__ = DBObjectMeta
|
__metaclass__ = DBObjectMeta
|
||||||
@ -526,7 +532,7 @@ class DBEvent(DBObject):
|
|||||||
id = db_field(is_primary=True)
|
id = db_field(is_primary=True)
|
||||||
parent = db_field(schema='str!')
|
parent = db_field(schema='str!')
|
||||||
parent_action = db_field(schema='str!')
|
parent_action = db_field(schema='str!')
|
||||||
evtype = db_field('str!')
|
etype = db_field('str!')
|
||||||
state = db_field('str')
|
state = db_field('str')
|
||||||
child = db_field('str')
|
child = db_field('str')
|
||||||
child_action = db_field('str')
|
child_action = db_field('str')
|
||||||
@ -536,10 +542,17 @@ class DBEvent(DBObject):
|
|||||||
rs = db.all(collection=cls._collection.name + ':' + parent)
|
rs = db.all(collection=cls._collection.name + ':' + parent)
|
||||||
return [cls(**r.properties) for r in rs]
|
return [cls(**r.properties) for r in rs]
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def delete_list(cls, parent):
|
||||||
|
db.delete('*', collection=cls._collection.name + ':' + parent)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _db_key(self):
|
def _db_key(self):
|
||||||
if not self._primary_field.value:
|
if not self._primary_field.value:
|
||||||
setattr(self, self._primary_field.name, '{}:{}'.format(self.parent, unicode(uuid.uuid4())))
|
setattr(self, self._primary_field.name,
|
||||||
|
'{}:{}:{}:{}:{}'.format(
|
||||||
|
self.parent, self.parent_action,
|
||||||
|
self.state, self.child, self.child_action))
|
||||||
self._update_fields_values()
|
self._update_fields_values()
|
||||||
return DBObject._db_key.fget(self)
|
return DBObject._db_key.fget(self)
|
||||||
|
|
||||||
|
@ -39,7 +39,6 @@ def test_set_events(events_example):
|
|||||||
partial = events_example[:2]
|
partial = events_example[:2]
|
||||||
evapi.add_events('e1', events_example[:2])
|
evapi.add_events('e1', events_example[:2])
|
||||||
evapi.set_events('e1', events_example[2:])
|
evapi.set_events('e1', events_example[2:])
|
||||||
|
|
||||||
assert evapi.all_events('e1') == events_example[2:]
|
assert evapi.all_events('e1') == events_example[2:]
|
||||||
|
|
||||||
|
|
||||||
|
@ -432,7 +432,7 @@ class TestEventORM(BaseResourceTest):
|
|||||||
state='success',
|
state='success',
|
||||||
child_action='run',
|
child_action='run',
|
||||||
child='n2',
|
child='n2',
|
||||||
evtype='dependency')
|
etype='dependency')
|
||||||
ev.save()
|
ev.save()
|
||||||
|
|
||||||
rst = orm.DBEvent.load_list('n1')
|
rst = orm.DBEvent.load_list('n1')
|
||||||
@ -446,7 +446,7 @@ class TestEventORM(BaseResourceTest):
|
|||||||
state='success',
|
state='success',
|
||||||
child_action='run',
|
child_action='run',
|
||||||
child='n2',
|
child='n2',
|
||||||
evtype='dependency')
|
etype='dependency')
|
||||||
ev.save()
|
ev.save()
|
||||||
ev1 = orm.DBEvent(
|
ev1 = orm.DBEvent(
|
||||||
parent='n1',
|
parent='n1',
|
||||||
@ -454,6 +454,6 @@ class TestEventORM(BaseResourceTest):
|
|||||||
state='success',
|
state='success',
|
||||||
child_action='run',
|
child_action='run',
|
||||||
child='n3',
|
child='n3',
|
||||||
evtype='dependency')
|
etype='dependency')
|
||||||
ev1.save()
|
ev1.save()
|
||||||
self.assertEqual(len(orm.DBEvent.load_list('n1')), 2)
|
self.assertEqual(len(orm.DBEvent.load_list('n1')), 2)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user