Skip to content

Commit

Permalink
Rename #1
Browse files Browse the repository at this point in the history
  • Loading branch information
manasdk committed Aug 7, 2014
1 parent 7b837e7 commit 2a97b66
Show file tree
Hide file tree
Showing 8 changed files with 245 additions and 102 deletions.
2 changes: 1 addition & 1 deletion st2client/st2client/models/reactor.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@


class Trigger(core.Resource):
_plural = 'Triggers'
_plural = 'Triggertypes'


class Rule(core.Resource):
Expand Down
98 changes: 58 additions & 40 deletions st2common/st2common/models/api/reactor.py
Original file line number Diff line number Diff line change
@@ -1,72 +1,90 @@
import datetime
import uuid
from wsme import types as wstypes

from st2common.models.base import BaseAPI
from st2common.models.api.stormbase import StormBaseAPI, StormFoundationAPI
from st2common.models.db.reactor import RuleDB, ActionExecutionSpecDB, TriggerDB, AHTriggerDB
from st2common.models.db.reactor import RuleDB, ActionExecutionSpecDB, TriggerTypeDB, TriggerDB
import st2common.validators.api.reactor as validator


def get_id(identifiable):
if identifiable is None:
return ''
return str(identifiable.id)


def get_ref(identifiable):
if identifiable is None:
return {}
return {'id': str(identifiable.id), 'name': identifiable.name}


def get_model_from_ref(db_api, ref):
if ref is None:
return None
model_id = ref['id'] if 'id' in ref else None
if model_id is not None:
return db_api.get_by_id(model_id)
model_name = ref['name'] if 'name' in ref else None
for model in db_api.query(name=model_name):
return model
return None


class TriggerAPI(BaseAPI):
class TriggerTypeAPI(BaseAPI):
schema = {
"type": "object"
'type': 'object',
'properties': {
'id': {
'type': 'string',
'default': None
},
'name': {
'type': 'string'
},
'description': {
'type': 'string',
'default': None
},
'payload_info': {
'type': 'array'
},
'parameters_schema': {
'type': 'object'
}
},
'required': ['name'],
'additionalProperties': False
}

@classmethod
def from_model(cls, model):
trigger = model.to_mongo()
trigger['name'] = str(trigger.pop('_id'))
trigger['id'] = str(trigger.pop('_id'))
return cls(**trigger)

@classmethod
def to_model(cls, trigger):
model = StormBaseAPI.to_model(TriggerDB, trigger)
model.payload_info = trigger.payload_info
def to_model(cls, triggertype):
model = StormBaseAPI.to_model(TriggerTypeDB, triggertype)
model.payload_info = triggertype.payload_info
model.parameters_schema = triggertype.parameters_schema
return model


class AHTriggerAPI(BaseAPI):
class TriggerAPI(BaseAPI):
schema = {
"type": "object"
'type': 'object',
'properties': {
'id': {
'type': 'string',
'default': None
},
'name': {
'type': 'string'
},
'type': {
'type': 'string'
},
'parameters': {
'type': 'object'
}
},
'required': ['type'],
'additionalProperties': False
}

@classmethod
def from_model(cls, model):
trigger = model.to_mongo()
trigger['name'] = str(trigger.pop('_id'))
if trigger.has_key('type'):
trigger['type'] = str(trigger.pop('type'))
trigger['id'] = str(trigger.pop('_id'))
if 'type' in trigger:
trigger['type'] = str(trigger.pop('type').get('name', ''))
return cls(**trigger)

@classmethod
def to_model(cls, trigger):
model = StormFoundationAPI.to_model(AHTriggerDB, trigger)
model.name = trigger.name
model.type = getattr(trigger, 'type', None)
model = StormFoundationAPI.to_model(TriggerDB, trigger)
# assign a name if none is provided.
model.name = str(uuid.uuid4()) if model.name is None or len(model.name) < 1 \
else trigger.name
model.type = {'name': getattr(trigger, 'type', None)}
model.parameters = getattr(trigger, 'parameters', None)
return model

Expand All @@ -79,7 +97,7 @@ class TriggerInstanceAPI(StormFoundationAPI):
@classmethod
def from_model(kls, model):
trigger_instance = StormFoundationAPI.from_model(kls, model)
trigger_instance.trigger = model.trigger
trigger_instance.trigger = model.trigger.get('name', '')
trigger_instance.payload = dict(model.payload)
trigger_instance.occurrence_time = model.occurrence_time
return trigger_instance
Expand Down
4 changes: 2 additions & 2 deletions st2common/st2common/models/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def set_defaults(validator, properties, instance, schema):
instance.setdefault(property, subschema["default"])

return jsonschema.validators.extend(
validator_class, {"properties" : set_defaults},
validator_class, {"properties": set_defaults},
)


Expand Down Expand Up @@ -100,4 +100,4 @@ def callfunction(*args, **kwargs):

return callfunction

return decorate
return decorate
53 changes: 28 additions & 25 deletions st2common/st2common/models/db/reactor.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,40 +3,44 @@
from st2common.models.db.stormbase import StormBaseDB, StormFoundationDB


class TriggerSourceDB(StormBaseDB):
"""Source of a trigger. Typically an external system or service that
generates events which must be adapted to a trigger using the provided
adapter.
Attribute:
url: url of the source
auth_token: token used by an adapter to authenticate with the
adapter_file_uri: uri of the adapter which will translate an event
specific to the source to a corresponding trigger.
"""
url = me.URLField()
auth_token = me.StringField()
adapter_file_uri = me.StringField()


class TriggerDB(me.Document):
class TriggerTypeDB(StormBaseDB):
"""Description of a specific kind/type of a trigger. The name is expected
uniquely identify a trigger in the namespace of all triggers provided
by a specific trigger_source.
Attribute:
trigger_source: Source that owns this trigger type.
payload_info: Meta information of the expected payload.
"""
name = me.StringField(primary_key=True)
description = me.StringField()
payload_info = me.ListField()
parameters_schema = me.DictField()

def __str__(self):
result = []
result.append('TriggerTypeDB@')
result.append(str(id(self)))
result.append('(')
result.append('id="%s", ' % self.id)
result.append('name"%s", ' % self.name)
result.append('payload_info="%s", ' % self.payload_info)
result.append('parameters_schema=%s)' % str(self.parameters_schema))
return ''.join(result)


class AHTriggerDB(me.Document):
name = me.StringField(primary_key=True)
type = me.ReferenceField(TriggerDB.__name__)
class TriggerDB(StormBaseDB):
type = me.DictField()
parameters = me.DictField()

def __str__(self):
result = []
result.append('TriggerDB@')
result.append(str(id(self)))
result.append('(')
result.append('id="%s", ' % self.id)
result.append('name"%s", ' % self.name)
result.append('type="%s", ' % self.type)
result.append('parameters=%s)' % str(self.parameters))
return ''.join(result)


class TriggerInstanceDB(StormFoundationDB):
"""An instance or occurrence of a type of Trigger.
Expand All @@ -45,7 +49,7 @@ class TriggerInstanceDB(StormFoundationDB):
payload (dict): payload specific to the occurrence.
occurrence_time (datetime): time of occurrence of the trigger.
"""
trigger = me.ReferenceField(AHTriggerDB.__name__)
trigger = me.DictField()
payload = me.DictField()
occurrence_time = me.DateTimeField()

Expand All @@ -66,7 +70,7 @@ class RuleDB(StormBaseDB):
status: enabled or disabled. If disabled occurrence of the trigger
does not lead to execution of a action and vice-versa.
"""
trigger = me.ReferenceField(AHTriggerDB)
trigger = me.DictField()
criteria = me.DictField()
action = me.EmbeddedDocumentField(ActionExecutionSpecDB)
enabled = me.BooleanField(required=True, default=True,
Expand All @@ -88,9 +92,8 @@ class RuleEnforcementDB(StormFoundationDB):


# specialized access objects
triggersource_access = MongoDBAccess(TriggerSourceDB)
triggertype_access = MongoDBAccess(TriggerTypeDB)
trigger_access = MongoDBAccess(TriggerDB)
ahtrigger_access = MongoDBAccess(AHTriggerDB)
triggerinstance_access = MongoDBAccess(TriggerInstanceDB)
rule_access = MongoDBAccess(RuleDB)
ruleenforcement_access = MongoDBAccess(RuleEnforcementDB)
17 changes: 4 additions & 13 deletions st2common/st2common/persistence/reactor.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
from st2common.persistence import Access
from st2common.models.db.reactor import triggersource_access, \
trigger_access, triggerinstance_access, rule_access, \
ruleenforcement_access, ahtrigger_access
from st2common.models.db.reactor import triggertype_access, trigger_access, triggerinstance_access,\
rule_access, ruleenforcement_access


class TriggerSource(Access):
IMPL = triggersource_access
class TriggerType(Access):
IMPL = triggertype_access

@classmethod
def _get_impl(kls):
Expand All @@ -20,14 +19,6 @@ def _get_impl(kls):
return kls.IMPL


class AHTrigger(Access):
IMPL = ahtrigger_access

@classmethod
def _get_impl(kls):
return kls.IMPL


class TriggerInstance(Access):
IMPL = triggerinstance_access

Expand Down
16 changes: 8 additions & 8 deletions st2reactorcontroller/st2reactorcontroller/controllers/root.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
from pecan import expose
from webob.exc import status_map

import st2reactorcontroller.controllers.triggers
import st2reactorcontroller.controllers.rules
from st2reactorcontroller.controllers.triggers import TriggerTypeController, TriggerController, \
TriggerInstanceController
from st2reactorcontroller.controllers.rules import RuleController, RuleEnforcementController


class RootController(object):

triggers = st2reactorcontroller.controllers.triggers.TriggerController()
triggerinstances = \
st2reactorcontroller.controllers.triggers.TriggerInstanceController()
rules = st2reactorcontroller.controllers.rules.RuleController()
ruleenforcements = \
st2reactorcontroller.controllers.rules.RuleEnforcementController()
triggertypes = TriggerTypeController()
triggers = TriggerController()
triggerinstances = TriggerInstanceController()
rules = RuleController()
ruleenforcements = RuleEnforcementController()

@expose(generic=True, template='index.html')
def index(self):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
from pecan.rest import RestController
from st2common import log as logging
from st2common.exceptions.apivalidation import ValueValidationException
from st2common.models.api.reactor import RuleAPI, RuleEnforcementAPI, AHTriggerAPI
from st2common.models.api.reactor import RuleAPI, RuleEnforcementAPI, TriggerAPI
from st2common.models.db.reactor import RuleDB
from st2common.models.base import jsexpose
from st2common.persistence.reactor import Rule, RuleEnforcement, AHTrigger, Trigger
from st2common.persistence.reactor import Rule, RuleEnforcement, TriggerType, Trigger
from wsme import types as wstypes

LOG = logging.getLogger(__name__)
Expand Down Expand Up @@ -47,7 +47,6 @@ def get_all(self, name=None):
LOG.debug('GET all /rules/ client_result=%s', rule_apis)
return rule_apis


@jsexpose(body=RuleAPI, status_code=httplib.CREATED)
def post(self, rule):
"""
Expand Down
Loading

0 comments on commit 2a97b66

Please sign in to comment.