On 30-03-2016 11:14, Paulo Ricardo Paz Vital wrote:
>Few comments and questions...
>
>On Mar 29 05:02PM, Lucio Correia wrote:
>>* There is no POST method: a notification is
>>added through add_notification() method.
>>* Notifications are always stored in Wok object store under
>>'notification' type, even if added by a plugin.
>>* Every time Wok is started, all notifications are erased,
>>since this is a UI feature, intended to be showed to the
>>user asynchronously, independent of which tab is opened.
>>
>>Signed-off-by: Lucio Correia <luciojhc(a)linux.vnet.ibm.com>
>>---
>> docs/API/notifications.md | 34 ++++++++++++++++++++++++
>> src/wok/control/notifications.py | 37 ++++++++++++++++++++++++++
>> src/wok/i18n.py | 3 +++
>> src/wok/model/notifications.py | 56 ++++++++++++++++++++++++++++++++++++++++
>> src/wok/objectstore.py | 39 ++++++++++++++++++++++++++++
>> src/wok/server.py | 4 +++
>> 6 files changed, 173 insertions(+)
>> create mode 100644 docs/API/notifications.md
>> create mode 100644 src/wok/control/notifications.py
>> create mode 100644 src/wok/model/notifications.py
>>
>>Changes in V2:
>> - added timestamp
>> - code as required parameter in add_notification
>> - added DELETE api for notification
>>
>>This patch depends on WokMessage V3 patch
>>
>>diff --git a/docs/API/notifications.md b/docs/API/notifications.md
>
>Why a new file here? Is it not part of the Kimchi API?
The API dir have separated files per API.
>
>>new file mode 100644
>>index 0000000..851352f
>>--- /dev/null
>>+++ b/docs/API/notifications.md
>>@@ -0,0 +1,34 @@
>>+## REST API Specification for Notifications
>>+
>>+### Collection: Notifications
>>+
>>+**URI:** /notifications
>>+
>>+**Methods:**
>>+
>>+* **GET**: Retrieve a summarized list of current Notifications
>>+
>>+#### Examples
>>+GET /notifications
>>+[{Notification1}, {Notification2}, ...]
>>+
>>+### Resource: Notification
>>+
>>+**URI:** /notifications/*:id*
>>+
>>+A task represents an asynchronous operation that is being performed by the
>>+server.
>>+
>>+**Methods:**
>>+
>>+* **GET**: Retrieve the full description of the Notification
>>+ * code: message ID
>>+ * message: message text already translated
>>+
>>+#### Examples
>>+GET /notifications/KCHLIBVIRT0001W
>>+{
>>+ id: "KCHLIBVIRT0001W",
>>+ message: "KCHLIBVIRT0001W: Lack of storage space in guest vm-1",
>>+ timestamp: first time notification was emitted
>>+}
>>diff --git a/src/wok/control/notifications.py b/src/wok/control/notifications.py
>>new file mode 100644
>>index 0000000..37d45f2
>>--- /dev/null
>>+++ b/src/wok/control/notifications.py
>>@@ -0,0 +1,37 @@
>>+#
>>+# Project Wok
>>+#
>>+# Copyright IBM Corp, 2016
>>+#
>>+# This library is free software; you can redistribute it and/or
>>+# modify it under the terms of the GNU Lesser General Public
>>+# License as published by the Free Software Foundation; either
>>+# version 2.1 of the License, or (at your option) any later version.
>>+#
>>+# This library is distributed in the hope that it will be useful,
>>+# but WITHOUT ANY WARRANTY; without even the implied warranty of
>>+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
>>+# Lesser General Public License for more details.
>>+#
>>+# You should have received a copy of the GNU Lesser General Public
>>+# License along with this library; if not, write to the Free Software
>>+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>>+
>>+from wok.control.base import Collection, Resource
>>+from wok.control.utils import UrlSubNode
>>+
>>+
>>+@UrlSubNode('notifications', True)
>>+class Notifications(Collection):
>>+ def __init__(self, model):
>>+ super(Notifications, self).__init__(model)
>>+ self.resource = Notification
>>+
>>+
>>+class Notification(Resource):
>>+ def __init__(self, model, id):
>>+ super(Notification, self).__init__(model, id)
>>+
>>+ @property
>>+ def data(self):
>>+ return self.info
>>diff --git a/src/wok/i18n.py b/src/wok/i18n.py
>>index e6087f4..5a2876f 100644
>>--- a/src/wok/i18n.py
>>+++ b/src/wok/i18n.py
>>@@ -45,6 +45,9 @@ messages = {
>> "WOKLOG0001E": _("Invalid filter parameter. Filter
parameters allowed: %(filters)s"),
>> "WOKLOG0002E": _("Creation of log file failed:
%(err)s"),
>>
>>+ "WOKNOT0001E": _("Unable to find notification %(id)s"),
>>+ "WOKNOT0002E": _("Unable to delete notification %(id)s:
%(message)s"),
>>+
>> "WOKOBJST0001E": _("Unable to find %(item)s in
datastore"),
>>
>> "WOKUTILS0001E": _("Unable to reach %(url)s. Make sure it is
accessible and try again."),
>>diff --git a/src/wok/model/notifications.py b/src/wok/model/notifications.py
>>new file mode 100644
>>index 0000000..77184db
>>--- /dev/null
>>+++ b/src/wok/model/notifications.py
>>@@ -0,0 +1,56 @@
>>+#
>>+# Project Wok
>>+#
>>+# Copyright IBM Corp, 2016
>>+#
>>+# This library is free software; you can redistribute it and/or
>>+# modify it under the terms of the GNU Lesser General Public
>>+# License as published by the Free Software Foundation; either
>>+# version 2.1 of the License, or (at your option) any later version.
>>+#
>>+# This library is distributed in the hope that it will be useful,
>>+# but WITHOUT ANY WARRANTY; without even the implied warranty of
>>+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
>>+# Lesser General Public License for more details.
>>+#
>>+# You should have received a copy of the GNU Lesser General Public
>>+# License along with this library; if not, write to the Free Software
>>+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>>+
>>+from wok.exception import NotFoundError, OperationFailed
>>+from wok.message import WokMessage
>>+
>>+
>>+class NotificationsModel(object):
>>+ def __init__(self, **kargs):
>>+ self.objstore = kargs['objstore']
>>+
>>+ def get_list(self):
>>+ with self.objstore as session:
>>+ return session.get_list('notification')
>>+
>>+
>>+class NotificationModel(object):
>>+ def __init__(self, **kargs):
>>+ self.objstore = kargs['objstore']
>>+
>>+ def lookup(self, id):
>>+ with self.objstore as session:
>>+ notification = session.get('notification', str(id))
>>+
>>+ # use WokMessage to translate the notification
>>+ if notification:
>>+ timestamp = notification['timestamp']
>>+ plugin = notification.pop('_plugin_name', None)
>>+ message = WokMessage(id, notification, plugin).get_text()
>>+ return {"code": id, "message": message,
"timestamp": timestamp}
>>+
>>+ raise NotFoundError("WOKNOT0001E", {'id': str(id)})
>>+
>>+ def delete(self, id):
>>+ try:
>>+ with self.objstore as session:
>>+ session.delete('notification', str(id))
>>+ except Exception as e:
>>+ raise OperationFailed("WOKNOT0002E", {'id':
str(id),
>>+ 'msg': e.msg()})
>>diff --git a/src/wok/objectstore.py b/src/wok/objectstore.py
>>index 59354f3..dbc3ee3 100644
>>--- a/src/wok/objectstore.py
>>+++ b/src/wok/objectstore.py
>>@@ -23,6 +23,8 @@ import sqlite3
>> import threading
>> import traceback
>>
>>+from datetime import datetime
>>+
>> try:
>> from collections import OrderedDict
>> except ImportError:
>>@@ -144,3 +146,40 @@ class ObjectStore(object):
>> # exception again
>> wok_log.error(traceback.format_exc())
>> return False
>>+
>>+
>>+def add_notification(code, args={}, plugin_name=None):
>>+ if not code:
>>+ wok_log.error("Unable to add notification: invalide code
'%(code)s'" %
>
>s/invalide/invalid
OK will fix.
--
Lucio Correia
Software Engineer
IBM LTC Brazil
_______________________________________________
Kimchi-devel mailing list
Kimchi-devel(a)ovirt.org
http://lists.ovirt.org/mailman/listinfo/kimchi-devel