misc/cwdesklets/rqlsensor/__init__.py
changeset 11057 0b59724cb3f2
parent 11052 058bb3dc685f
child 11058 23eb30449fe5
--- a/misc/cwdesklets/rqlsensor/__init__.py	Mon Jan 04 18:40:30 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,118 +0,0 @@
-# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
-# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
-#
-# This file is part of CubicWeb.
-#
-# CubicWeb 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.
-#
-# CubicWeb 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 CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
-import webbrowser
-reload(webbrowser)
-
-from sensor.Sensor import Sensor
-from utils import datatypes, i18n
-
-from cubicweb.dbapi import connect
-
-_ = str
-
-class RQLSensor(Sensor):
-
-    def __init__(self, *args):
-        global _; _ = i18n.Translator("rql-desklet")
-        Sensor.__init__(self)
-        # define configuration
-        self._set_config_type("appid", datatypes.TYPE_STRING, "")
-        self._set_config_type("user", datatypes.TYPE_STRING, "")
-        self._set_config_type("passwd", datatypes.TYPE_SECRET_STRING, "")
-        self._set_config_type("rql", datatypes.TYPE_STRING, "")
-        self._set_config_type("url", datatypes.TYPE_STRING, "")
-        self._set_config_type("delay", datatypes.TYPE_STRING, "600")
-        # default timer
-        self._add_timer(20, self.__update)
-
-    def get_configurator(self):
-        configurator = self._new_configurator()
-        configurator.set_name(_("RQL"))
-        configurator.add_title(_("CubicWeb source settings"))
-        configurator.add_entry(_("ID",), "appid", _("The application id of this source"))
-        configurator.add_entry(_("User",), "user", _("The user to connect to this source"))
-        configurator.add_entry(_("Password",), "passwd", _("The user's password to connect to this source"))
-        configurator.add_entry(_("URL",), "url", _("The url of the web interface for this source"))
-        configurator.add_entry(_("RQL",), "rql", _("The rql query"))
-        configurator.add_entry(_("Update interval",), "delay", _("Delay in seconds between updates"))
-        return configurator
-
-
-    def call_action(self, action, path, args=[]):
-        index = path[-1]
-        output = self._new_output()
-        if action=="enter-line":
-            # change background
-            output.set('resultbg[%s]' % index, 'yellow')
-        elif action=="leave-line":
-            # change background
-            output.set('resultbg[%s]' % index, 'black')
-        elif action=="click-line":
-            # open url
-            output.set('resultbg[%s]' % index, 'black')
-            webbrowser.open(self._urls[index])
-        self._send_output(output)
-
-    def __get_connection(self):
-        try:
-            return self._v_cnx
-        except AttributeError:
-            appid, user, passwd = self._get_config("appid"), self._get_config("user"), self._get_config("passwd")
-            cnx = connect(database=appid, login=user, password=passwd)
-            self._v_cnx = cnx
-            return cnx
-
-    def __run_query(self, output):
-        base = self._get_config('url')
-        rql = self._get_config('rql')
-        cnx = self.__get_connection()
-        cursor = cnx.cursor()
-        try:
-            rset = cursor.execute(rql)
-        except Exception:
-            del self._v_cnx
-            raise
-        self._urls = []
-        output.set('layout', 'vertical, 14')
-        output.set('length', rset.rowcount)
-        i = 0
-        for line in rset:
-            output.set('result[%s]' % i, ', '.join([str(v) for v in line[1:]]))
-            output.set('resultbg[%s]' % i, 'black')
-            try:
-                self._urls.append(base % 'Any X WHERE X eid %s' % line[0])
-            except Exception:
-                self._urls.append('')
-            i += 1
-
-    def __update(self):
-        output = self._new_output()
-        try:
-            self.__run_query(output)
-        except Exception as ex:
-            import traceback
-            traceback.print_exc()
-            output.set('layout', 'vertical, 10')
-            output.set('length', 1)
-            output.set('result[0]', str(ex))
-        self._send_output(output)
-        self._add_timer(int(self._get_config('delay'))*1000, self.__update)
-
-
-def new_sensor(args):
-    return RQLSensor(*args)