changeset 2145:33c8c4973743

core (plugins): added missing contants + use of new constants in PLUGIN_INFO
author Goffi <goffi@goffi.org>
date Sun, 12 Feb 2017 18:59:10 +0100
parents 1d3f73e065e1
children 1bb9bf1b4150
files src/core/constants.py src/plugins/plugin_adhoc_dbus.py src/plugins/plugin_blog_import.py src/plugins/plugin_blog_import_dokuwiki.py src/plugins/plugin_blog_import_dotclear.py src/plugins/plugin_exp_command_export.py src/plugins/plugin_exp_lang_detect.py src/plugins/plugin_exp_parrot.py src/plugins/plugin_exp_pipe.py src/plugins/plugin_misc_account.py src/plugins/plugin_misc_android.py src/plugins/plugin_misc_debug.py src/plugins/plugin_misc_extra_pep.py src/plugins/plugin_misc_file.py src/plugins/plugin_misc_groupblog.py src/plugins/plugin_misc_imap.py src/plugins/plugin_misc_ip.py src/plugins/plugin_misc_maildir.py src/plugins/plugin_misc_nat-port.py src/plugins/plugin_misc_quiz.py src/plugins/plugin_misc_radiocol.py src/plugins/plugin_misc_register_account.py src/plugins/plugin_misc_room_game.py src/plugins/plugin_misc_smtp.py src/plugins/plugin_misc_static_blog.py src/plugins/plugin_misc_tarot.py src/plugins/plugin_misc_text_commands.py src/plugins/plugin_misc_text_syntaxes.py src/plugins/plugin_misc_upload.py src/plugins/plugin_misc_watched.py src/plugins/plugin_misc_welcome.py src/plugins/plugin_misc_xmllog.py src/plugins/plugin_sec_otr.py src/plugins/plugin_syntax_wiki_dotclear.py src/plugins/plugin_tmp_directory_subscription.py src/plugins/plugin_xep_0020.py src/plugins/plugin_xep_0033.py src/plugins/plugin_xep_0045.py src/plugins/plugin_xep_0047.py src/plugins/plugin_xep_0048.py src/plugins/plugin_xep_0049.py src/plugins/plugin_xep_0050.py src/plugins/plugin_xep_0054.py src/plugins/plugin_xep_0055.py src/plugins/plugin_xep_0059.py src/plugins/plugin_xep_0060.py src/plugins/plugin_xep_0065.py src/plugins/plugin_xep_0070.py src/plugins/plugin_xep_0071.py src/plugins/plugin_xep_0077.py src/plugins/plugin_xep_0085.py src/plugins/plugin_xep_0092.py src/plugins/plugin_xep_0095.py src/plugins/plugin_xep_0096.py src/plugins/plugin_xep_0100.py src/plugins/plugin_xep_0115.py src/plugins/plugin_xep_0163.py src/plugins/plugin_xep_0166.py src/plugins/plugin_xep_0184.py src/plugins/plugin_xep_0203.py src/plugins/plugin_xep_0231.py src/plugins/plugin_xep_0234.py src/plugins/plugin_xep_0249.py src/plugins/plugin_xep_0260.py src/plugins/plugin_xep_0261.py src/plugins/plugin_xep_0277.py src/plugins/plugin_xep_0280.py src/plugins/plugin_xep_0297.py src/plugins/plugin_xep_0300.py src/plugins/plugin_xep_0313.py src/plugins/plugin_xep_0334.py src/plugins/plugin_xep_0363.py
diffstat 72 files changed, 586 insertions(+), 560 deletions(-) [+]
line wrap: on
line diff
--- a/src/core/constants.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/core/constants.py	Sun Feb 12 18:59:10 2017 +0100
@@ -176,9 +176,17 @@
     # PLUGIN_INFO keys
     # XXX: we use PI instead of PLUG_INFO which would normally be used
     #      to make the header more readable
+    PI_NAME = u'name'
     PI_IMPORT_NAME = u'import_name'
+    PI_MAIN = u'main'
+    PI_HANDLER = u'handler'
+    PI_TYPE = u'type'
+    PI_MODES = u'modes'
+    PI_PROTOCOLS = u'protocols'
     PI_DEPENDENCIES = u'dependencies'
     PI_RECOMMENDATIONS = u'recommendations'
+    PI_DESCRIPTION = u'description'
+    PI_USAGE = u'usage'
 
     # Types
     PLUG_TYPE_XEP = "XEP"
--- a/src/plugins/plugin_adhoc_dbus.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_adhoc_dbus.py	Sun Feb 12 18:59:10 2017 +0100
@@ -43,14 +43,14 @@
 FLAG_LOOP = 'LOOP'
 
 PLUGIN_INFO = {
-    "name": "Ad-Hoc Commands - D-Bus",
-    "import_name": "AD_HOC_DBUS",
-    "type": "Misc",
-    "protocols": [],
-    "dependencies": ["XEP-0050"],
-    "main": "AdHocDBus",
-    "handler": "no",
-    "description": _("""Add D-Bus management to Ad-Hoc commands""")
+    C.PI_NAME: "Ad-Hoc Commands - D-Bus",
+    C.PI_IMPORT_NAME: "AD_HOC_DBUS",
+    C.PI_TYPE: "Misc",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: ["XEP-0050"],
+    C.PI_MAIN: "AdHocDBus",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Add D-Bus management to Ad-Hoc commands""")
 }
 
 
--- a/src/plugins/plugin_blog_import.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_blog_import.py	Sun Feb 12 18:59:10 2017 +0100
@@ -35,13 +35,13 @@
 
 
 PLUGIN_INFO = {
-    "name": "blog import",
-    "import_name": "BLOG_IMPORT",
-    "type": C.PLUG_TYPE_BLOG,
-    "dependencies": ["XEP-0060", "XEP-0277", "TEXT-SYNTAXES", "UPLOAD"],
-    "main": "BlogImportPlugin",
-    "handler": "no",
-    "description": _(u"""Blog import management:
+    C.PI_NAME: "blog import",
+    C.PI_IMPORT_NAME: "BLOG_IMPORT",
+    C.PI_TYPE: C.PLUG_TYPE_BLOG,
+    C.PI_DEPENDENCIES: ["XEP-0060", "XEP-0277", "TEXT-SYNTAXES", "UPLOAD"],
+    C.PI_MAIN: "BlogImportPlugin",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _(u"""Blog import management:
 This plugin manage the different blog importers which can register to it, and handler generic importing tasks.""")
 }
 
--- a/src/plugins/plugin_blog_import_dokuwiki.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_blog_import_dokuwiki.py	Sun Feb 12 18:59:10 2017 +0100
@@ -43,13 +43,13 @@
     raise exceptions.MissingModule(u"Missing module pillow, please download/install it from https://python-pillow.github.io")
 
 PLUGIN_INFO = {
-    "name": "Dokuwiki import",
-    "import_name": "IMPORT_DOKUWIKI",
-    "type": C.PLUG_TYPE_BLOG,
-    "dependencies": ["BLOG_IMPORT"],
-    "main": "DokuwikiImport",
-    "handler": "no",
-    "description": _("""Blog importer for Dokuwiki blog engine.""")
+    C.PI_NAME: "Dokuwiki import",
+    C.PI_IMPORT_NAME: "IMPORT_DOKUWIKI",
+    C.PI_TYPE: C.PLUG_TYPE_BLOG,
+    C.PI_DEPENDENCIES: ["BLOG_IMPORT"],
+    C.PI_MAIN: "DokuwikiImport",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Blog importer for Dokuwiki blog engine.""")
 }
 
 SHORT_DESC = D_(u"import posts from Dokuwiki blog engine")
--- a/src/plugins/plugin_blog_import_dotclear.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_blog_import_dotclear.py	Sun Feb 12 18:59:10 2017 +0100
@@ -32,13 +32,13 @@
 
 
 PLUGIN_INFO = {
-    "name": "Dotclear import",
-    "import_name": "IMPORT_DOTCLEAR",
-    "type": C.PLUG_TYPE_BLOG,
-    "dependencies": ["BLOG_IMPORT"],
-    "main": "DotclearImport",
-    "handler": "no",
-    "description": _("""Blog importer for Dotclear blog engine.""")
+    C.PI_NAME: "Dotclear import",
+    C.PI_IMPORT_NAME: "IMPORT_DOTCLEAR",
+    C.PI_TYPE: C.PLUG_TYPE_BLOG,
+    C.PI_DEPENDENCIES: ["BLOG_IMPORT"],
+    C.PI_MAIN: "DotclearImport",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Blog importer for Dotclear blog engine.""")
 }
 
 SHORT_DESC = D_(u"import posts from Dotclear blog engine")
--- a/src/plugins/plugin_exp_command_export.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_exp_command_export.py	Sun Feb 12 18:59:10 2017 +0100
@@ -28,14 +28,14 @@
 from sat.tools.utils import clean_ustr
 
 PLUGIN_INFO = {
-    "name": "Command export plugin",
-    "import_name": "EXP-COMMANS-EXPORT",
-    "type": "EXP",
-    "protocols": [],
-    "dependencies": [],
-    "main": "CommandExport",
-    "handler": "no",
-    "description": _("""Implementation of command export""")
+    C.PI_NAME: "Command export plugin",
+    C.PI_IMPORT_NAME: "EXP-COMMANS-EXPORT",
+    C.PI_TYPE: "EXP",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: [],
+    C.PI_MAIN: "CommandExport",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Implementation of command export""")
 }
 
 class ExportCommandProtocol(protocol.ProcessProtocol):
--- a/src/plugins/plugin_exp_lang_detect.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_exp_lang_detect.py	Sun Feb 12 18:59:10 2017 +0100
@@ -18,6 +18,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from sat.core.i18n import _, D_
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 log = getLogger(__name__)
 from sat.core import exceptions
@@ -31,14 +32,14 @@
 
 
 PLUGIN_INFO = {
-    "name": "Language detection plugin",
-    "import_name": "EXP-LANG-DETECT",
-    "type": "EXP",
-    "protocols": [],
-    "dependencies": [],
-    "main": "LangDetect",
-    "handler": "no",
-    "description": _("""Detect and set message language when unknown""")
+    C.PI_NAME: "Language detection plugin",
+    C.PI_IMPORT_NAME: "EXP-LANG-DETECT",
+    C.PI_TYPE: "EXP",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: [],
+    C.PI_MAIN: "LangDetect",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Detect and set message language when unknown""")
 }
 
 CATEGORY = D_(u"Misc")
--- a/src/plugins/plugin_exp_parrot.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_exp_parrot.py	Sun Feb 12 18:59:10 2017 +0100
@@ -27,15 +27,15 @@
 #from sat.tools import trigger
 
 PLUGIN_INFO = {
-    "name": "Parrot Plugin",
-    "import_name": "EXP-PARROT",
-    "type": "EXP",
-    "protocols": [],
-    "dependencies": ["XEP-0045"],
-    "recommendations": [C.TEXT_CMDS],
-    "main": "Exp_Parrot",
-    "handler": "no",
-    "description": _(u"""Implementation of parrot mode (repeat messages between 2 entities)""")
+    C.PI_NAME: "Parrot Plugin",
+    C.PI_IMPORT_NAME: "EXP-PARROT",
+    C.PI_TYPE: "EXP",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: ["XEP-0045"],
+    C.PI_RECOMMENDATIONS: [C.TEXT_CMDS],
+    C.PI_MAIN: "Exp_Parrot",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _(u"""Implementation of parrot mode (repeat messages between 2 entities)""")
 }
 
 
--- a/src/plugins/plugin_exp_pipe.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_exp_pipe.py	Sun Feb 12 18:59:10 2017 +0100
@@ -30,14 +30,14 @@
 SECURITY_LIMIT=30
 
 PLUGIN_INFO = {
-    "name": "Pipe Plugin",
-    "import_name": "EXP-PIPE",
-    "type": "EXP",
-    "protocols": ["EXP-PIPE"],
-    "dependencies": ["XEP-0166"],
-    "main": "Exp_Pipe",
-    "handler": "no",
-    "description": _("""Jingle Pipe Transfer experimental plugin""")
+    C.PI_NAME: "Pipe Plugin",
+    C.PI_IMPORT_NAME: "EXP-PIPE",
+    C.PI_TYPE: "EXP",
+    C.PI_PROTOCOLS: ["EXP-PIPE"],
+    C.PI_DEPENDENCIES: ["XEP-0166"],
+    C.PI_MAIN: "Exp_Pipe",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Jingle Pipe Transfer experimental plugin""")
 }
 
 CONFIRM = D_(u"{peer} wants to send you a pipe stream, do you accept ?")
--- a/src/plugins/plugin_misc_account.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_account.py	Sun Feb 12 18:59:10 2017 +0100
@@ -37,15 +37,15 @@
 
 
 PLUGIN_INFO = {
-    "name": "Account Plugin",
-    "import_name": "MISC-ACCOUNT",
-    "type": "MISC",
-    "protocols": [],
-    "dependencies": [],
-    "recommendations": ['GROUPBLOG'],
-    "main": "MiscAccount",
-    "handler": "no",
-    "description": _(u"""SàT account creation""")
+    C.PI_NAME: "Account Plugin",
+    C.PI_IMPORT_NAME: "MISC-ACCOUNT",
+    C.PI_TYPE: "MISC",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: [],
+    C.PI_RECOMMENDATIONS: ['GROUPBLOG'],
+    C.PI_MAIN: "MiscAccount",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _(u"""SàT account creation""")
 }
 
 CONFIG_SECTION = "plugin account"
--- a/src/plugins/plugin_misc_android.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_android.py	Sun Feb 12 18:59:10 2017 +0100
@@ -27,12 +27,12 @@
 
 
 PLUGIN_INFO = {
-    "name": "Android ",
-    "import_name": "android",
-    "type": C.PLUG_TYPE_MISC,
-    "main": "AndroidPlugin",
-    "handler": "no",
-    "description": D_("""Manage Android platform specificities, like pause or notifications""")
+    C.PI_NAME: "Android ",
+    C.PI_IMPORT_NAME: "android",
+    C.PI_TYPE: C.PLUG_TYPE_MISC,
+    C.PI_MAIN: "AndroidPlugin",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: D_("""Manage Android platform specificities, like pause or notifications""")
 }
 
 if sys.platform != "android":
--- a/src/plugins/plugin_misc_debug.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_debug.py	Sun Feb 12 18:59:10 2017 +0100
@@ -24,14 +24,14 @@
 import json
 
 PLUGIN_INFO = {
-    "name": "Debug Plugin",
-    "import_name": "DEBUG",
-    "type": "Misc",
-    "protocols": [],
-    "dependencies": [],
-    "main": "Debug",
-    "handler": "no",
-    "description": _("""Set of method to make development and debugging easier""")
+    C.PI_NAME: "Debug Plugin",
+    C.PI_IMPORT_NAME: "DEBUG",
+    C.PI_TYPE: "Misc",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: [],
+    C.PI_MAIN: "Debug",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Set of method to make development and debugging easier""")
 }
 
 
--- a/src/plugins/plugin_misc_extra_pep.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_extra_pep.py	Sun Feb 12 18:59:10 2017 +0100
@@ -18,6 +18,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from sat.core.i18n import _, D_
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 log = getLogger(__name__)
 from sat.memory import params
@@ -25,15 +26,15 @@
 
 
 PLUGIN_INFO = {
-    "name": "Extra PEP",
-    "import_name": "EXTRA-PEP",
-    "type": "MISC",
-    "protocols": [],
-    "dependencies": [],
-    "recommendations": [],
-    "main": "ExtraPEP",
-    "handler": "no",
-    "description": _(u"""Display messages from extra PEP services""")
+    C.PI_NAME: "Extra PEP",
+    C.PI_IMPORT_NAME: "EXTRA-PEP",
+    C.PI_TYPE: "MISC",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: [],
+    C.PI_RECOMMENDATIONS: [],
+    C.PI_MAIN: "ExtraPEP",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _(u"""Display messages from extra PEP services""")
 }
 
 
--- a/src/plugins/plugin_misc_file.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_file.py	Sun Feb 12 18:59:10 2017 +0100
@@ -31,12 +31,12 @@
 
 
 PLUGIN_INFO = {
-    "name": "File Tansfer",
-    "import_name": "FILE",
-    "type": C.PLUG_TYPE_MISC,
-    "main": "FilePlugin",
-    "handler": "no",
-    "description": _("""File Tansfer Management:
+    C.PI_NAME: "File Tansfer",
+    C.PI_IMPORT_NAME: "FILE",
+    C.PI_TYPE: C.PLUG_TYPE_MISC,
+    C.PI_MAIN: "FilePlugin",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""File Tansfer Management:
 This plugin manage the various ways of sending a file, and choose the best one.""")
 }
 
--- a/src/plugins/plugin_misc_groupblog.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_groupblog.py	Sun Feb 12 18:59:10 2017 +0100
@@ -41,14 +41,14 @@
 
 
 PLUGIN_INFO = {
-    "name": "Group blogging through collections",
-    "import_name": "GROUPBLOG",
-    "type": "MISC",
-    "protocols": [],
-    "dependencies": ["XEP-0277"],
-    "main": "GroupBlog",
-    "handler": "yes",
-    "description": _("""Implementation of microblogging fine permissions""")
+    C.PI_NAME: "Group blogging through collections",
+    C.PI_IMPORT_NAME: "GROUPBLOG",
+    C.PI_TYPE: "MISC",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: ["XEP-0277"],
+    C.PI_MAIN: "GroupBlog",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of microblogging fine permissions""")
 }
 
 
--- a/src/plugins/plugin_misc_imap.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_imap.py	Sun Feb 12 18:59:10 2017 +0100
@@ -18,6 +18,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from sat.core.i18n import _
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 log = getLogger(__name__)
 from twisted.internet import protocol, defer
@@ -33,14 +34,14 @@
 from zope.interface import implements
 
 PLUGIN_INFO = {
-    "name": "IMAP server Plugin",
-    "import_name": "IMAP",
-    "type": "Misc",
-    "protocols": [],
-    "dependencies": ["Maildir"],
-    "main": "IMAP_server",
-    "handler": "no",
-    "description": _("""Create an Imap server that you can use to read your "normal" type messages""")
+    C.PI_NAME: "IMAP server Plugin",
+    C.PI_IMPORT_NAME: "IMAP",
+    C.PI_TYPE: "Misc",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: ["Maildir"],
+    C.PI_MAIN: "IMAP_server",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Create an Imap server that you can use to read your "normal" type messages""")
 }
 
 
--- a/src/plugins/plugin_misc_ip.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_ip.py	Sun Feb 12 18:59:10 2017 +0100
@@ -42,14 +42,14 @@
 
 
 PLUGIN_INFO = {
-    "name": "IP discovery",
-    "import_name": "IP",
-    "type": C.PLUG_TYPE_MISC,
-    "protocols": ["XEP-0279"],
-    "recommendations": ["NAT-PORT"],
-    "main": "IPPlugin",
-    "handler": "yes",
-    "description": _("""This plugin help to discover our external IP address.""")
+    C.PI_NAME: "IP discovery",
+    C.PI_IMPORT_NAME: "IP",
+    C.PI_TYPE: C.PLUG_TYPE_MISC,
+    C.PI_PROTOCOLS: ["XEP-0279"],
+    C.PI_RECOMMENDATIONS: ["NAT-PORT"],
+    C.PI_MAIN: "IPPlugin",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""This plugin help to discover our external IP address.""")
 }
 
 # TODO: GET_IP_PAGE should be configurable in sat.conf
--- a/src/plugins/plugin_misc_maildir.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_maildir.py	Sun Feb 12 18:59:10 2017 +0100
@@ -32,14 +32,14 @@
 
 
 PLUGIN_INFO = {
-    "name": "Maildir Plugin",
-    "import_name": "Maildir",
-    "type": "Misc",
-    "protocols": [],
-    "dependencies": [],
-    "main": "MaildirBox",
-    "handler": "no",
-    "description": _("""Intercept "normal" type messages, and put them in a Maildir type box""")
+    C.PI_NAME: "Maildir Plugin",
+    C.PI_IMPORT_NAME: "Maildir",
+    C.PI_TYPE: "Misc",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: [],
+    C.PI_MAIN: "MaildirBox",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Intercept "normal" type messages, and put them in a Maildir type box""")
 }
 
 MAILDIR_PATH = "Maildir"
--- a/src/plugins/plugin_misc_nat-port.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_nat-port.py	Sun Feb 12 18:59:10 2017 +0100
@@ -34,12 +34,12 @@
 
 
 PLUGIN_INFO = {
-    "name": "NAT port mapping",
-    "import_name": "NAT-PORT",
-    "type": C.PLUG_TYPE_MISC,
-    "main": "NatPort",
-    "handler": "no",
-    "description": _("""Automatic NAT port mapping using UPnP"""),
+    C.PI_NAME: "NAT port mapping",
+    C.PI_IMPORT_NAME: "NAT-PORT",
+    C.PI_TYPE: C.PLUG_TYPE_MISC,
+    C.PI_MAIN: "NatPort",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Automatic NAT port mapping using UPnP"""),
 }
 
 STARTING_PORT = 6000 # starting point to automatically find a port
--- a/src/plugins/plugin_misc_quiz.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_quiz.py	Sun Feb 12 18:59:10 2017 +0100
@@ -31,14 +31,14 @@
 QG_TAG = 'quiz'
 
 PLUGIN_INFO = {
-    "name": "Quiz game plugin",
-    "import_name": "Quiz",
-    "type": "Game",
-    "protocols": [],
-    "dependencies": ["XEP-0045", "XEP-0249", "ROOM-GAME"],
-    "main": "Quiz",
-    "handler": "yes",
-    "description": _("""Implementation of Quiz game""")
+    C.PI_NAME: "Quiz game plugin",
+    C.PI_IMPORT_NAME: "Quiz",
+    C.PI_TYPE: "Game",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: ["XEP-0045", "XEP-0249", "ROOM-GAME"],
+    C.PI_MAIN: "Quiz",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of Quiz game""")
 }
 
 
--- a/src/plugins/plugin_misc_radiocol.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_radiocol.py	Sun Feb 12 18:59:10 2017 +0100
@@ -18,6 +18,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from sat.core.i18n import _, D_
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 log = getLogger(__name__)
 from twisted.words.xish import domish
@@ -42,14 +43,14 @@
 RADIOC_TAG = 'radiocol'
 
 PLUGIN_INFO = {
-    "name": "Radio collective plugin",
-    "import_name": "Radiocol",
-    "type": "Exp",
-    "protocols": [],
-    "dependencies": ["XEP-0045", "XEP-0249", "ROOM-GAME"],
-    "main": "Radiocol",
-    "handler": "yes",
-    "description": _("""Implementation of radio collective""")
+    C.PI_NAME: "Radio collective plugin",
+    C.PI_IMPORT_NAME: "Radiocol",
+    C.PI_TYPE: "Exp",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: ["XEP-0045", "XEP-0249", "ROOM-GAME"],
+    C.PI_MAIN: "Radiocol",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of radio collective""")
 }
 
 
--- a/src/plugins/plugin_misc_register_account.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_register_account.py	Sun Feb 12 18:59:10 2017 +0100
@@ -31,15 +31,15 @@
 
 
 PLUGIN_INFO = {
-    "name": "Register Account Plugin",
-    "import_name": "REGISTER-ACCOUNT",
-    "type": "MISC",
-    "protocols": [],
-    "dependencies": [],
-    "recommendations": [],
-    "main": "RegisterAccount",
-    "handler": "no",
-    "description": _(u"""Register XMPP account""")
+    C.PI_NAME: "Register Account Plugin",
+    C.PI_IMPORT_NAME: "REGISTER-ACCOUNT",
+    C.PI_TYPE: "MISC",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: [],
+    C.PI_RECOMMENDATIONS: [],
+    C.PI_MAIN: "RegisterAccount",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _(u"""Register XMPP account""")
 }
 
 
--- a/src/plugins/plugin_misc_room_game.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_room_game.py	Sun Feb 12 18:59:10 2017 +0100
@@ -37,14 +37,14 @@
 _DEBUG = False
 
 PLUGIN_INFO = {
-    "name": "Room game",
-    "import_name": "ROOM-GAME",
-    "type": "MISC",
-    "protocols": [],
-    "dependencies": ["XEP-0045", "XEP-0249"],
-    "main": "RoomGame",
-    "handler": "no",  # handler MUST be "no" (dynamic inheritance)
-    "description": _("""Base class for MUC games""")
+    C.PI_NAME: "Room game",
+    C.PI_IMPORT_NAME: "ROOM-GAME",
+    C.PI_TYPE: "MISC",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: ["XEP-0045", "XEP-0249"],
+    C.PI_MAIN: "RoomGame",
+    C.PI_HANDLER: "no",  # handler MUST be "no" (dynamic inheritance)
+    C.PI_DESCRIPTION: _("""Base class for MUC games""")
 }
 
 
--- a/src/plugins/plugin_misc_smtp.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_smtp.py	Sun Feb 12 18:59:10 2017 +0100
@@ -18,6 +18,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from sat.core.i18n import _
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 log = getLogger(__name__)
 from twisted.internet import defer
@@ -34,14 +35,14 @@
 from zope.interface import implements
 
 PLUGIN_INFO = {
-    "name": "SMTP server Plugin",
-    "import_name": "SMTP",
-    "type": "Misc",
-    "protocols": [],
-    "dependencies": ["Maildir"],
-    "main": "SMTP_server",
-    "handler": "no",
-    "description": _("""Create a SMTP server that you can use to send your "normal" type messages""")
+    C.PI_NAME: "SMTP server Plugin",
+    C.PI_IMPORT_NAME: "SMTP",
+    C.PI_TYPE: "Misc",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: ["Maildir"],
+    C.PI_MAIN: "SMTP_server",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Create a SMTP server that you can use to send your "normal" type messages""")
 }
 
 
--- a/src/plugins/plugin_misc_static_blog.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_static_blog.py	Sun Feb 12 18:59:10 2017 +0100
@@ -30,15 +30,15 @@
 
 
 PLUGIN_INFO = {
-    "name": "Static Blog Plugin",
-    "import_name": "STATIC-BLOG",
-    "type": "MISC",
-    "protocols": [],
-    "dependencies": [],
-    "recommendations": ['MISC-ACCOUNT'],  # TODO: remove when all blogs can be retrieved
-    "main": "StaticBlog",
-    "handler": "no",
-    "description": _("""Plugin for static blogs""")
+    C.PI_NAME: "Static Blog Plugin",
+    C.PI_IMPORT_NAME: "STATIC-BLOG",
+    C.PI_TYPE: "MISC",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: [],
+    C.PI_RECOMMENDATIONS: ['MISC-ACCOUNT'],  # TODO: remove when all blogs can be retrieved
+    C.PI_MAIN: "StaticBlog",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Plugin for static blogs""")
 }
 
 
--- a/src/plugins/plugin_misc_tarot.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_tarot.py	Sun Feb 12 18:59:10 2017 +0100
@@ -36,14 +36,14 @@
 CG_TAG = 'card_game'
 
 PLUGIN_INFO = {
-    "name": "Tarot cards plugin",
-    "import_name": "Tarot",
-    "type": "Misc",
-    "protocols": [],
-    "dependencies": ["XEP-0045", "XEP-0249", "ROOM-GAME"],
-    "main": "Tarot",
-    "handler": "yes",
-    "description": _("""Implementation of Tarot card game""")
+    C.PI_NAME: "Tarot cards plugin",
+    C.PI_IMPORT_NAME: "Tarot",
+    C.PI_TYPE: "Misc",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: ["XEP-0045", "XEP-0249", "ROOM-GAME"],
+    C.PI_MAIN: "Tarot",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of Tarot card game""")
 }
 
 
--- a/src/plugins/plugin_misc_text_commands.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_text_commands.py	Sun Feb 12 18:59:10 2017 +0100
@@ -28,14 +28,14 @@
 from collections import OrderedDict
 
 PLUGIN_INFO = {
-    "name": "Text commands",
-    "import_name": C.TEXT_CMDS,
-    "type": "Misc",
-    "protocols": ["XEP-0245"],
-    "dependencies": [],
-    "main": "TextCommands",
-    "handler": "no",
-    "description": _("""IRC like text commands""")
+    C.PI_NAME: "Text commands",
+    C.PI_IMPORT_NAME: C.TEXT_CMDS,
+    C.PI_TYPE: "Misc",
+    C.PI_PROTOCOLS: ["XEP-0245"],
+    C.PI_DEPENDENCIES: [],
+    C.PI_MAIN: "TextCommands",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""IRC like text commands""")
 }
 
 
--- a/src/plugins/plugin_misc_text_syntaxes.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_text_syntaxes.py	Sun Feb 12 18:59:10 2017 +0100
@@ -18,6 +18,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from sat.core.i18n import _, D_
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 log = getLogger(__name__)
 
@@ -52,14 +53,14 @@
 STYLES_ACCEPTED_VALUE = re.compile(STYLES_VALUES_REGEX)
 
 PLUGIN_INFO = {
-    "name": "Text syntaxes",
-    "import_name": "TEXT-SYNTAXES",
-    "type": "MISC",
-    "protocols": [],
-    "dependencies": [],
-    "main": "TextSyntaxes",
-    "handler": "no",
-    "description": _("""Management of various text syntaxes (XHTML-IM, Markdown, etc)""")
+    C.PI_NAME: "Text syntaxes",
+    C.PI_IMPORT_NAME: "TEXT-SYNTAXES",
+    C.PI_TYPE: "MISC",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: [],
+    C.PI_MAIN: "TextSyntaxes",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Management of various text syntaxes (XHTML-IM, Markdown, etc)""")
 }
 
 class UnknownSyntax(Exception):
--- a/src/plugins/plugin_misc_upload.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_upload.py	Sun Feb 12 18:59:10 2017 +0100
@@ -30,12 +30,12 @@
 
 
 PLUGIN_INFO = {
-    "name": "File Upload",
-    "import_name": "UPLOAD",
-    "type": C.PLUG_TYPE_MISC,
-    "main": "UploadPlugin",
-    "handler": "no",
-    "description": _("""File upload management""")
+    C.PI_NAME: "File Upload",
+    C.PI_IMPORT_NAME: "UPLOAD",
+    C.PI_TYPE: C.PLUG_TYPE_MISC,
+    C.PI_MAIN: "UploadPlugin",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""File upload management""")
 }
 
 
--- a/src/plugins/plugin_misc_watched.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_watched.py	Sun Feb 12 18:59:10 2017 +0100
@@ -26,14 +26,14 @@
 
 
 PLUGIN_INFO = {
-    "name": "Watched",
-    "import_name": "WATCHED",
-    "type": "Misc",
-    "protocols": [],
-    "dependencies": [],
-    "main": "Watched",
-    "handler": "no",
-    "description": _("""Watch for entities presence, and send notification accordingly""")
+    C.PI_NAME: "Watched",
+    C.PI_IMPORT_NAME: "WATCHED",
+    C.PI_TYPE: "Misc",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: [],
+    C.PI_MAIN: "Watched",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Watch for entities presence, and send notification accordingly""")
 }
 
 
--- a/src/plugins/plugin_misc_welcome.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_welcome.py	Sun Feb 12 18:59:10 2017 +0100
@@ -25,12 +25,12 @@
 
 
 PLUGIN_INFO = {
-    "name": "Welcome",
-    "import_name": "WELCOME",
-    "type": C.PLUG_TYPE_MISC,
-    "main": "Welcome",
-    "handler": "no",
-    "description": _("""Plugin which manage welcome message and things to to on first connection.""")
+    C.PI_NAME: "Welcome",
+    C.PI_IMPORT_NAME: "WELCOME",
+    C.PI_TYPE: C.PLUG_TYPE_MISC,
+    C.PI_MAIN: "Welcome",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Plugin which manage welcome message and things to to on first connection.""")
 }
 
 
--- a/src/plugins/plugin_misc_xmllog.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_misc_xmllog.py	Sun Feb 12 18:59:10 2017 +0100
@@ -18,20 +18,21 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from sat.core.i18n import _
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 log = getLogger(__name__)
 from twisted.words.protocols.jabber.xmlstream import XmlStream
 from twisted.words.xish import domish
 
 PLUGIN_INFO = {
-    "name": "Raw XML log Plugin",
-    "import_name": "XmlLog",
-    "type": "Misc",
-    "protocols": [],
-    "dependencies": [],
-    "main": "XmlLog",
-    "handler": "no",
-    "description": _("""Send raw XML logs to bridge""")
+    C.PI_NAME: "Raw XML log Plugin",
+    C.PI_IMPORT_NAME: "XmlLog",
+    C.PI_TYPE: "Misc",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: [],
+    C.PI_MAIN: "XmlLog",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Send raw XML logs to bridge""")
 }
 
 
--- a/src/plugins/plugin_sec_otr.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_sec_otr.py	Sun Feb 12 18:59:10 2017 +0100
@@ -37,14 +37,14 @@
 
 
 PLUGIN_INFO = {
-    "name": u"OTR",
-    "import_name": u"OTR",
-    "type": u"SEC",
-    "protocols": [u"XEP-0364"],
-    "dependencies": [u"XEP-0280", u"XEP-0334"],
-    "main": u"OTR",
-    "handler": u"no",
-    "description": _(u"""Implementation of OTR""")
+    C.PI_NAME: u"OTR",
+    C.PI_IMPORT_NAME: u"OTR",
+    C.PI_TYPE: u"SEC",
+    C.PI_PROTOCOLS: [u"XEP-0364"],
+    C.PI_DEPENDENCIES: [u"XEP-0280", u"XEP-0334"],
+    C.PI_MAIN: u"OTR",
+    C.PI_HANDLER: u"no",
+    C.PI_DESCRIPTION: _(u"""Implementation of OTR""")
 }
 
 NS_OTR = "otr_plugin"
--- a/src/plugins/plugin_syntax_wiki_dotclear.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_syntax_wiki_dotclear.py	Sun Feb 12 18:59:10 2017 +0100
@@ -30,13 +30,13 @@
 import re
 
 PLUGIN_INFO = {
-    "name": "Dotclear Wiki Syntax Plugin",
-    "import_name": "SYNT_DC_WIKI",
-    "type": C.PLUG_TYPE_SYNTAXE,
-    "dependencies": ["TEXT-SYNTAXES"],
-    "main": "DCWikiSyntax",
-    "handler": "",
-    "description": _("""Implementation of Dotclear wiki syntax""")
+    C.PI_NAME: "Dotclear Wiki Syntax Plugin",
+    C.PI_IMPORT_NAME: "SYNT_DC_WIKI",
+    C.PI_TYPE: C.PLUG_TYPE_SYNTAXE,
+    C.PI_DEPENDENCIES: ["TEXT-SYNTAXES"],
+    C.PI_MAIN: "DCWikiSyntax",
+    C.PI_HANDLER: "",
+    C.PI_DESCRIPTION: _("""Implementation of Dotclear wiki syntax""")
 }
 
 NOTE_TPL = u'[{}]' # Note template
--- a/src/plugins/plugin_tmp_directory_subscription.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_tmp_directory_subscription.py	Sun Feb 12 18:59:10 2017 +0100
@@ -19,20 +19,21 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from sat.core.i18n import _, D_
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 log = getLogger(__name__)
 
 
 PLUGIN_INFO = {
-    "name": "Directory subscription plugin",
-    "import_name": "DIRECTORY-SUBSCRIPTION",
-    "type": "TMP",
-    "protocols": [],
-    "dependencies": ["XEP-0050", "XEP-0055"],
-    "recommendations": [],
-    "main": "DirectorySubscription",
-    "handler": "no",
-    "description": _("""Implementation of directory subscription""")
+    C.PI_NAME: "Directory subscription plugin",
+    C.PI_IMPORT_NAME: "DIRECTORY-SUBSCRIPTION",
+    C.PI_TYPE: "TMP",
+    C.PI_PROTOCOLS: [],
+    C.PI_DEPENDENCIES: ["XEP-0050", "XEP-0055"],
+    C.PI_RECOMMENDATIONS: [],
+    C.PI_MAIN: "DirectorySubscription",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Implementation of directory subscription""")
 }
 
 
@@ -55,7 +56,7 @@
         @return: a deferred dict{unicode: unicode}
         """
         d = self.host.plugins["XEP-0055"]._getHostServices(profile)
-        
+
         def got_services(services):
             service_jid = services[0]
             session_id, session_data = self.host.plugins["XEP-0050"].requesting.newSession(profile=profile)
@@ -63,5 +64,5 @@
             session_data["node"] = CMD_UPDATE_SUBSCRIBTION
             data = {"session_id": session_id}
             return self.host.plugins["XEP-0050"]._requestingEntity(data, profile)
-            
+
         return d.addCallback(got_services)
--- a/src/plugins/plugin_xep_0020.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0020.py	Sun Feb 12 18:59:10 2017 +0100
@@ -18,6 +18,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from sat.core.i18n import _
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 log = getLogger(__name__)
 from sat.core import exceptions
@@ -35,13 +36,13 @@
 NS_FEATURE_NEG = 'http://jabber.org/protocol/feature-neg'
 
 PLUGIN_INFO = {
-    "name": "XEP 0020 Plugin",
-    "import_name": "XEP-0020",
-    "type": "XEP",
-    "protocols": ["XEP-0020"],
-    "main": "XEP_0020",
-    "handler": "yes",
-    "description": _("""Implementation of Feature Negotiation""")
+    C.PI_NAME: "XEP 0020 Plugin",
+    C.PI_IMPORT_NAME: "XEP-0020",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0020"],
+    C.PI_MAIN: "XEP_0020",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of Feature Negotiation""")
 }
 
 
--- a/src/plugins/plugin_xep_0033.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0033.py	Sun Feb 12 18:59:10 2017 +0100
@@ -18,6 +18,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from sat.core.i18n import _
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 log = getLogger(__name__)
 from sat.core import exceptions
@@ -53,14 +54,14 @@
 ADDRESS_TYPES = ["to", "cc", "bcc", "replyto", "replyroom", "noreply"]
 
 PLUGIN_INFO = {
-    "name": "Extended Stanza Addressing Protocol Plugin",
-    "import_name": "XEP-0033",
-    "type": "XEP",
-    "protocols": ["XEP-0033"],
-    "dependencies": [],
-    "main": "XEP_0033",
-    "handler": "yes",
-    "description": _("""Implementation of Extended Stanza Addressing""")
+    C.PI_NAME: "Extended Stanza Addressing Protocol Plugin",
+    C.PI_IMPORT_NAME: "XEP-0033",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0033"],
+    C.PI_DEPENDENCIES: [],
+    C.PI_MAIN: "XEP_0033",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of Extended Stanza Addressing""")
 }
 
 
--- a/src/plugins/plugin_xep_0045.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0045.py	Sun Feb 12 18:59:10 2017 +0100
@@ -41,15 +41,15 @@
 
 
 PLUGIN_INFO = {
-    "name": "XEP-0045 Plugin",
-    "import_name": "XEP-0045",
-    "type": "XEP",
-    "protocols": ["XEP-0045"],
-    "dependencies": [],
-    "recommendations": [C.TEXT_CMDS],
-    "main": "XEP_0045",
-    "handler": "yes",
-    "description": _("""Implementation of Multi-User Chat""")
+    C.PI_NAME: "XEP-0045 Plugin",
+    C.PI_IMPORT_NAME: "XEP-0045",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0045"],
+    C.PI_DEPENDENCIES: [],
+    C.PI_RECOMMENDATIONS: [C.TEXT_CMDS],
+    C.PI_MAIN: "XEP_0045",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of Multi-User Chat""")
 }
 
 NS_MUC = 'http://jabber.org/protocol/muc'
--- a/src/plugins/plugin_xep_0047.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0047.py	Sun Feb 12 18:59:10 2017 +0100
@@ -51,13 +51,13 @@
 DEFER_KEY = 'finished' # key of the deferred used to track session end
 
 PLUGIN_INFO = {
-    "name": "In-Band Bytestream Plugin",
-    "import_name": "XEP-0047",
-    "type": "XEP",
-    "protocols": ["XEP-0047"],
-    "main": "XEP_0047",
-    "handler": "yes",
-    "description": _("""Implementation of In-Band Bytestreams""")
+    C.PI_NAME: "In-Band Bytestream Plugin",
+    C.PI_IMPORT_NAME: "XEP-0047",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0047"],
+    C.PI_MAIN: "XEP_0047",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of In-Band Bytestreams""")
 }
 
 
--- a/src/plugins/plugin_xep_0048.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0048.py	Sun Feb 12 18:59:10 2017 +0100
@@ -33,15 +33,15 @@
 NS_BOOKMARKS = 'storage:bookmarks'
 
 PLUGIN_INFO = {
-    "name": "Bookmarks",
-    "import_name": "XEP-0048",
-    "type": "XEP",
-    "protocols": ["XEP-0048"],
-    "dependencies": ["XEP-0045"],
-    "recommendations": ["XEP-0049"],
-    "main": "XEP_0048",
-    "handler": "no",
-    "description": _("""Implementation of bookmarks""")
+    C.PI_NAME: "Bookmarks",
+    C.PI_IMPORT_NAME: "XEP-0048",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0048"],
+    C.PI_DEPENDENCIES: ["XEP-0045"],
+    C.PI_RECOMMENDATIONS: ["XEP-0049"],
+    C.PI_MAIN: "XEP_0048",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Implementation of bookmarks""")
 }
 
 
--- a/src/plugins/plugin_xep_0049.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0049.py	Sun Feb 12 18:59:10 2017 +0100
@@ -18,6 +18,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from sat.core.i18n import _
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 log = getLogger(__name__)
 from wokkel import compat
@@ -26,14 +27,14 @@
 
 
 PLUGIN_INFO = {
-    "name": "XEP-0049 Plugin",
-    "import_name": "XEP-0049",
-    "type": "XEP",
-    "protocols": ["XEP-0049"],
-    "dependencies": [],
-    "main": "XEP_0049",
-    "handler": "no",
-    "description": _("""Implementation of private XML storage""")
+    C.PI_NAME: "XEP-0049 Plugin",
+    C.PI_IMPORT_NAME: "XEP-0049",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0049"],
+    C.PI_DEPENDENCIES: [],
+    C.PI_MAIN: "XEP_0049",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Implementation of private XML storage""")
 }
 
 
--- a/src/plugins/plugin_xep_0050.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0050.py	Sun Feb 12 18:59:10 2017 +0100
@@ -59,13 +59,13 @@
                      ('disconnect', _('Disconnect'))])
 
 PLUGIN_INFO = {
-    "name": "Ad-Hoc Commands",
-    "import_name": "XEP-0050",
-    "type": "XEP",
-    "protocols": ["XEP-0050"],
-    "main": "XEP_0050",
-    "handler": "yes",
-    "description": _("""Implementation of Ad-Hoc Commands""")
+    C.PI_NAME: "Ad-Hoc Commands",
+    C.PI_IMPORT_NAME: "XEP-0050",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0050"],
+    C.PI_MAIN: "XEP_0050",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of Ad-Hoc Commands""")
 }
 
 
--- a/src/plugins/plugin_xep_0054.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0054.py	Sun Feb 12 18:59:10 2017 +0100
@@ -62,15 +62,15 @@
 MAX_AGE = 60 * 60 * 24 * 365
 
 PLUGIN_INFO = {
-    "name": "XEP 0054 Plugin",
-    "import_name": "XEP-0054",
-    "type": "XEP",
-    "protocols": ["XEP-0054", "XEP-0153"],
-    "dependencies": [],
-    "recommendations": ["XEP-0045"],
-    "main": "XEP_0054",
-    "handler": "yes",
-    "description": _("""Implementation of vcard-temp""")
+    C.PI_NAME: "XEP 0054 Plugin",
+    C.PI_IMPORT_NAME: "XEP-0054",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0054", "XEP-0153"],
+    C.PI_DEPENDENCIES: [],
+    C.PI_RECOMMENDATIONS: ["XEP-0045"],
+    C.PI_MAIN: "XEP_0054",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of vcard-temp""")
 }
 
 
--- a/src/plugins/plugin_xep_0055.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0055.py	Sun Feb 12 18:59:10 2017 +0100
@@ -40,15 +40,15 @@
 NS_SEARCH = 'jabber:iq:search'
 
 PLUGIN_INFO = {
-    "name": "Jabber Search",
-    "import_name": "XEP-0055",
-    "type": "XEP",
-    "protocols": ["XEP-0055"],
-    "dependencies": [],
-    "recommendations": ["XEP-0059"],
-    "main": "XEP_0055",
-    "handler": "no",
-    "description": _("""Implementation of Jabber Search""")
+    C.PI_NAME: "Jabber Search",
+    C.PI_IMPORT_NAME: "XEP-0055",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0055"],
+    C.PI_DEPENDENCIES: [],
+    C.PI_RECOMMENDATIONS: ["XEP-0059"],
+    C.PI_MAIN: "XEP_0055",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Implementation of Jabber Search""")
 }
 
 # config file parameters
--- a/src/plugins/plugin_xep_0059.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0059.py	Sun Feb 12 18:59:10 2017 +0100
@@ -19,6 +19,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from sat.core.i18n import _
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 log = getLogger(__name__)
 
@@ -31,13 +32,13 @@
 
 
 PLUGIN_INFO = {
-    "name": "Result Set Management",
-    "import_name": "XEP-0059",
-    "type": "XEP",
-    "protocols": ["XEP-0059"],
-    "main": "XEP_0059",
-    "handler": "yes",
-    "description": _("""Implementation of Result Set Management""")
+    C.PI_NAME: "Result Set Management",
+    C.PI_IMPORT_NAME: "XEP-0059",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0059"],
+    C.PI_MAIN: "XEP_0059",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of Result Set Management""")
 }
 
 
--- a/src/plugins/plugin_xep_0060.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0060.py	Sun Feb 12 18:59:10 2017 +0100
@@ -42,15 +42,15 @@
 
 
 PLUGIN_INFO = {
-    "name": "Publish-Subscribe",
-    "import_name": "XEP-0060",
-    "type": "XEP",
-    "protocols": ["XEP-0060"],
-    "dependencies": [],
-    "recommendations": ["XEP-0313"],
-    "main": "XEP_0060",
-    "handler": "yes",
-    "description": _("""Implementation of PubSub Protocol""")
+    C.PI_NAME: "Publish-Subscribe",
+    C.PI_IMPORT_NAME: "XEP-0060",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0060"],
+    C.PI_DEPENDENCIES: [],
+    C.PI_RECOMMENDATIONS: ["XEP-0313"],
+    C.PI_MAIN: "XEP_0060",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of PubSub Protocol""")
 }
 
 UNSPECIFIED = "unspecified error"
--- a/src/plugins/plugin_xep_0065.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0065.py	Sun Feb 12 18:59:10 2017 +0100
@@ -84,15 +84,15 @@
 
 
 PLUGIN_INFO = {
-    "name": "XEP 0065 Plugin",
-    "import_name": "XEP-0065",
-    "type": "XEP",
-    "protocols": ["XEP-0065"],
-    "dependencies": ["IP"],
-    "recommendations": ["NAT-PORT"],
-    "main": "XEP_0065",
-    "handler": "yes",
-    "description": _("""Implementation of SOCKS5 Bytestreams""")
+    C.PI_NAME: "XEP 0065 Plugin",
+    C.PI_IMPORT_NAME: "XEP-0065",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0065"],
+    C.PI_DEPENDENCIES: ["IP"],
+    C.PI_RECOMMENDATIONS: ["NAT-PORT"],
+    C.PI_MAIN: "XEP_0065",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of SOCKS5 Bytestreams""")
 }
 
 IQ_SET = '/iq[@type="set"]'
--- a/src/plugins/plugin_xep_0070.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0070.py	Sun Feb 12 18:59:10 2017 +0100
@@ -17,6 +17,7 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 from sat.core.i18n import _, D_
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 from twisted.words.protocols.jabber import xmlstream
 from twisted.words.protocols import jabber
@@ -43,14 +44,14 @@
 
 
 PLUGIN_INFO = {
-    "name": "XEP-0070 Plugin",
-    "import_name": "XEP-0070",
-    "type": "XEP",
-    "protocols": ["XEP-0070"],
-    "dependencies": [],
-    "main": "XEP_0070",
-    "handler": "yes",
-    "description": _("""Implementation of HTTP Requests via XMPP""")
+    C.PI_NAME: "XEP-0070 Plugin",
+    C.PI_IMPORT_NAME: "XEP-0070",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0070"],
+    C.PI_DEPENDENCIES: [],
+    C.PI_MAIN: "XEP_0070",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of HTTP Requests via XMPP""")
 }
 
 
--- a/src/plugins/plugin_xep_0071.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0071.py	Sun Feb 12 18:59:10 2017 +0100
@@ -41,14 +41,14 @@
 NS_XHTML = 'http://www.w3.org/1999/xhtml'
 
 PLUGIN_INFO = {
-    "name": "XHTML-IM Plugin",
-    "import_name": "XEP-0071",
-    "type": "XEP",
-    "protocols": ["XEP-0071"],
-    "dependencies": ["TEXT-SYNTAXES"],
-    "main": "XEP_0071",
-    "handler": "yes",
-    "description": _("""Implementation of XHTML-IM""")
+    C.PI_NAME: "XHTML-IM Plugin",
+    C.PI_IMPORT_NAME: "XEP-0071",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0071"],
+    C.PI_DEPENDENCIES: ["TEXT-SYNTAXES"],
+    C.PI_MAIN: "XEP_0071",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of XHTML-IM""")
 }
 
 allowed = {
--- a/src/plugins/plugin_xep_0077.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0077.py	Sun Feb 12 18:59:10 2017 +0100
@@ -31,13 +31,13 @@
 NS_REG = 'jabber:iq:register'
 
 PLUGIN_INFO = {
-    "name": "XEP 0077 Plugin",
-    "import_name": "XEP-0077",
-    "type": "XEP",
-    "protocols": ["XEP-0077"],
-    "dependencies": [],
-    "main": "XEP_0077",
-    "description": _("""Implementation of in-band registration""")
+    C.PI_NAME: "XEP 0077 Plugin",
+    C.PI_IMPORT_NAME: "XEP-0077",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0077"],
+    C.PI_DEPENDENCIES: [],
+    C.PI_MAIN: "XEP_0077",
+    C.PI_DESCRIPTION: _("""Implementation of in-band registration""")
 }
 
 
--- a/src/plugins/plugin_xep_0085.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0085.py	Sun Feb 12 18:59:10 2017 +0100
@@ -43,14 +43,14 @@
 DELETE_VALUE = "DELETE"
 
 PLUGIN_INFO = {
-    "name": "Chat State Notifications Protocol Plugin",
-    "import_name": "XEP-0085",
-    "type": "XEP",
-    "protocols": ["XEP-0085"],
-    "dependencies": [],
-    "main": "XEP_0085",
-    "handler": "yes",
-    "description": _("""Implementation of Chat State Notifications Protocol""")
+    C.PI_NAME: "Chat State Notifications Protocol Plugin",
+    C.PI_IMPORT_NAME: "XEP-0085",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0085"],
+    C.PI_DEPENDENCIES: [],
+    C.PI_MAIN: "XEP_0085",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of Chat State Notifications Protocol""")
 }
 
 
--- a/src/plugins/plugin_xep_0092.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0092.py	Sun Feb 12 18:59:10 2017 +0100
@@ -30,15 +30,15 @@
 TIMEOUT = 10
 
 PLUGIN_INFO = {
-    "name": "Software Version Plugin",
-    "import_name": "XEP-0092",
-    "type": "XEP",
-    "protocols": ["XEP-0092"],
-    "dependencies": [],
-    "recommendations": [C.TEXT_CMDS],
-    "main": "XEP_0092",
-    "handler": "no", # version is already handler in core.xmpp module
-    "description": _("""Implementation of Software Version""")
+    C.PI_NAME: "Software Version Plugin",
+    C.PI_IMPORT_NAME: "XEP-0092",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0092"],
+    C.PI_DEPENDENCIES: [],
+    C.PI_RECOMMENDATIONS: [C.TEXT_CMDS],
+    C.PI_MAIN: "XEP_0092",
+    C.PI_HANDLER: "no", # version is already handler in core.xmpp module
+    C.PI_DESCRIPTION: _("""Implementation of Software Version""")
 }
 
 
--- a/src/plugins/plugin_xep_0095.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0095.py	Sun Feb 12 18:59:10 2017 +0100
@@ -31,13 +31,13 @@
 
 
 PLUGIN_INFO = {
-    "name": "XEP 0095 Plugin",
-    "import_name": "XEP-0095",
-    "type": "XEP",
-    "protocols": ["XEP-0095"],
-    "main": "XEP_0095",
-    "handler": "yes",
-    "description": _("""Implementation of Stream Initiation""")
+    C.PI_NAME: "XEP 0095 Plugin",
+    C.PI_IMPORT_NAME: "XEP-0095",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0095"],
+    C.PI_MAIN: "XEP_0095",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of Stream Initiation""")
 }
 
 
--- a/src/plugins/plugin_xep_0096.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0096.py	Sun Feb 12 18:59:10 2017 +0100
@@ -35,14 +35,14 @@
 SI_PROFILE = "http://jabber.org/protocol/si/profile/" + SI_PROFILE_NAME
 
 PLUGIN_INFO = {
-    "name": "XEP-0096 Plugin",
-    "import_name": "XEP-0096",
-    "type": "XEP",
-    "protocols": ["XEP-0096"],
-    "dependencies": ["XEP-0020", "XEP-0095", "XEP-0065", "XEP-0047", "FILE"],
-    "main": "XEP_0096",
-    "handler": "no",
-    "description": _("""Implementation of SI File Transfer""")
+    C.PI_NAME: "XEP-0096 Plugin",
+    C.PI_IMPORT_NAME: "XEP-0096",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0096"],
+    C.PI_DEPENDENCIES: ["XEP-0020", "XEP-0095", "XEP-0065", "XEP-0047", "FILE"],
+    C.PI_MAIN: "XEP_0096",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Implementation of SI File Transfer""")
 }
 
 
--- a/src/plugins/plugin_xep_0100.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0100.py	Sun Feb 12 18:59:10 2017 +0100
@@ -27,13 +27,13 @@
 from twisted.internet import reactor, defer
 
 PLUGIN_INFO = {
-    "name": "Gateways Plugin",
-    "import_name": "XEP-0100",
-    "type": "XEP",
-    "protocols": ["XEP-0100"],
-    "dependencies": ["XEP-0077"],
-    "main": "XEP_0100",
-    "description": _("""Implementation of Gateways protocol""")
+    C.PI_NAME: "Gateways Plugin",
+    C.PI_IMPORT_NAME: "XEP-0100",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0100"],
+    C.PI_DEPENDENCIES: ["XEP-0077"],
+    C.PI_MAIN: "XEP_0100",
+    C.PI_DESCRIPTION: _("""Implementation of Gateways protocol""")
 }
 
 WARNING_MSG = D_(u"""Be careful ! Gateways allow you to use an external IM (legacy IM), so you can see your contact as XMPP contacts.
--- a/src/plugins/plugin_xep_0115.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0115.py	Sun Feb 12 18:59:10 2017 +0100
@@ -38,14 +38,14 @@
 CAPABILITY_UPDATE = PRESENCE + '/c[@xmlns="' + NS_ENTITY_CAPABILITY + '"]'
 
 PLUGIN_INFO = {
-    "name": "XEP 0115 Plugin",
-    "import_name": "XEP-0115",
-    "type": "XEP",
-    "protocols": ["XEP-0115"],
-    "dependencies": [],
-    "main": "XEP_0115",
-    "handler": "yes",
-    "description": _("""Implementation of entity capabilities""")
+    C.PI_NAME: "XEP 0115 Plugin",
+    C.PI_IMPORT_NAME: "XEP-0115",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0115"],
+    C.PI_DEPENDENCIES: [],
+    C.PI_MAIN: "XEP_0115",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of entity capabilities""")
 }
 
 
--- a/src/plugins/plugin_xep_0163.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0163.py	Sun Feb 12 18:59:10 2017 +0100
@@ -30,14 +30,14 @@
 NS_USER_MOOD = 'http://jabber.org/protocol/mood'
 
 PLUGIN_INFO = {
-    "name": "Personal Eventing Protocol Plugin",
-    "import_name": "XEP-0163",
-    "type": "XEP",
-    "protocols": ["XEP-0163", "XEP-0107"],
-    "dependencies": ["XEP-0060"],
-    "main": "XEP_0163",
-    "handler": "no",
-    "description": _("""Implementation of Personal Eventing Protocol""")
+    C.PI_NAME: "Personal Eventing Protocol Plugin",
+    C.PI_IMPORT_NAME: "XEP-0163",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0163", "XEP-0107"],
+    C.PI_DEPENDENCIES: ["XEP-0060"],
+    C.PI_MAIN: "XEP_0163",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Implementation of Personal Eventing Protocol""")
 }
 
 
--- a/src/plugins/plugin_xep_0166.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0166.py	Sun Feb 12 18:59:10 2017 +0100
@@ -48,13 +48,13 @@
 CONFIRM_TXT = D_("{entity} want to start a jingle session with you, do you accept ?")
 
 PLUGIN_INFO = {
-    "name": "Jingle",
-    "import_name": "XEP-0166",
-    "type": "XEP",
-    "protocols": ["XEP-0166"],
-    "main": "XEP_0166",
-    "handler": "yes",
-    "description": _("""Implementation of Jingle""")
+    C.PI_NAME: "Jingle",
+    C.PI_IMPORT_NAME: "XEP-0166",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0166"],
+    C.PI_MAIN: "XEP_0166",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of Jingle""")
 }
 
 
--- a/src/plugins/plugin_xep_0184.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0184.py	Sun Feb 12 18:59:10 2017 +0100
@@ -17,6 +17,7 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 from sat.core.i18n import _
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 from twisted.internet import reactor
 from twisted.words.protocols.jabber import xmlstream, jid
@@ -50,14 +51,14 @@
 
 
 PLUGIN_INFO = {
-"name": "XEP-0184 Plugin",
-"import_name": "XEP-0184",
-"type": "XEP",
-"protocols": ["XEP-0184"],
-"dependencies": [],
-"main": "XEP_0184",
-"handler": "yes",
-"description": _("""Implementation of Message Delivery Receipts""")
+C.PI_NAME: "XEP-0184 Plugin",
+C.PI_IMPORT_NAME: "XEP-0184",
+C.PI_TYPE: "XEP",
+C.PI_PROTOCOLS: ["XEP-0184"],
+C.PI_DEPENDENCIES: [],
+C.PI_MAIN: "XEP_0184",
+C.PI_HANDLER: "yes",
+C.PI_DESCRIPTION: _("""Implementation of Message Delivery Receipts""")
 }
 
 
--- a/src/plugins/plugin_xep_0203.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0203.py	Sun Feb 12 18:59:10 2017 +0100
@@ -19,6 +19,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from sat.core.i18n import _
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 log = getLogger(__name__)
 
@@ -33,13 +34,13 @@
 NS_DD = 'urn:xmpp:delay'
 
 PLUGIN_INFO = {
-    "name": "Delayed Delivery",
-    "import_name": "XEP-0203",
-    "type": "XEP",
-    "protocols": ["XEP-0203"],
-    "main": "XEP_0203",
-    "handler": "yes",
-    "description": _("""Implementation of Delayed Delivery""")
+    C.PI_NAME: "Delayed Delivery",
+    C.PI_IMPORT_NAME: "XEP-0203",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0203"],
+    C.PI_MAIN: "XEP_0203",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of Delayed Delivery""")
 }
 
 
--- a/src/plugins/plugin_xep_0231.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0231.py	Sun Feb 12 18:59:10 2017 +0100
@@ -29,14 +29,14 @@
 
 
 PLUGIN_INFO = {
-    "name": "Bits of Binary",
-    "import_name": "XEP-0231",
-    "type": "XEP",
-    "protocols": ["XEP-0231"],
-    "dependencies": ["XEP-0071"],
-    "main": "XEP_0231",
-    "handler": "yes",
-    "description": _("""Implementation of bits of binary (used for small images/files)""")
+    C.PI_NAME: "Bits of Binary",
+    C.PI_IMPORT_NAME: "XEP-0231",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0231"],
+    C.PI_DEPENDENCIES: ["XEP-0071"],
+    C.PI_MAIN: "XEP_0231",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of bits of binary (used for small images/files)""")
 }
 
 NS_BOB = u'urn:xmpp:bob'
--- a/src/plugins/plugin_xep_0234.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0234.py	Sun Feb 12 18:59:10 2017 +0100
@@ -38,14 +38,14 @@
 NS_JINGLE_FT = 'urn:xmpp:jingle:apps:file-transfer:4'
 
 PLUGIN_INFO = {
-    "name": "Jingle File Transfer",
-    "import_name": "XEP-0234",
-    "type": "XEP",
-    "protocols": ["XEP-0234"],
-    "dependencies": ["XEP-0166", "XEP-0300", "FILE"],
-    "main": "XEP_0234",
-    "handler": "yes",
-    "description": _("""Implementation of Jingle File Transfer""")
+    C.PI_NAME: "Jingle File Transfer",
+    C.PI_IMPORT_NAME: "XEP-0234",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0234"],
+    C.PI_DEPENDENCIES: ["XEP-0166", "XEP-0300", "FILE"],
+    C.PI_MAIN: "XEP_0234",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of Jingle File Transfer""")
 }
 
 
--- a/src/plugins/plugin_xep_0249.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0249.py	Sun Feb 12 18:59:10 2017 +0100
@@ -44,15 +44,15 @@
 AUTOJOIN_VALUES = ["ask", "always", "never"]
 
 PLUGIN_INFO = {
-    "name": "XEP 0249 Plugin",
-    "import_name": "XEP-0249",
-    "type": "XEP",
-    "protocols": ["XEP-0249"],
-    "dependencies": ["XEP-0045"],
-    "recommendations": [C.TEXT_CMDS],
-    "main": "XEP_0249",
-    "handler": "yes",
-    "description": _("""Implementation of Direct MUC Invitations""")
+    C.PI_NAME: "XEP 0249 Plugin",
+    C.PI_IMPORT_NAME: "XEP-0249",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0249"],
+    C.PI_DEPENDENCIES: ["XEP-0045"],
+    C.PI_RECOMMENDATIONS: [C.TEXT_CMDS],
+    C.PI_MAIN: "XEP_0249",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of Direct MUC Invitations""")
 }
 
 
--- a/src/plugins/plugin_xep_0260.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0260.py	Sun Feb 12 18:59:10 2017 +0100
@@ -18,6 +18,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from sat.core.i18n import _
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 log = getLogger(__name__)
 from sat.core import exceptions
@@ -37,15 +38,15 @@
 NS_JINGLE_S5B = 'urn:xmpp:jingle:transports:s5b:1'
 
 PLUGIN_INFO = {
-    "name": "Jingle SOCKS5 Bytestreams",
-    "import_name": "XEP-0260",
-    "type": "XEP",
-    "protocols": ["XEP-0260"],
-    "dependencies": ["XEP-0166", "XEP-0065"],
-    "recommendations": ["XEP-0261"], # needed for fallback
-    "main": "XEP_0260",
-    "handler": "yes",
-    "description": _("""Implementation of Jingle SOCKS5 Bytestreams""")
+    C.PI_NAME: "Jingle SOCKS5 Bytestreams",
+    C.PI_IMPORT_NAME: "XEP-0260",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0260"],
+    C.PI_DEPENDENCIES: ["XEP-0166", "XEP-0065"],
+    C.PI_RECOMMENDATIONS: ["XEP-0261"], # needed for fallback
+    C.PI_MAIN: "XEP_0260",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of Jingle SOCKS5 Bytestreams""")
 }
 
 
--- a/src/plugins/plugin_xep_0261.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0261.py	Sun Feb 12 18:59:10 2017 +0100
@@ -18,6 +18,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from sat.core.i18n import _
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 log = getLogger(__name__)
 from wokkel import disco, iwokkel
@@ -34,14 +35,14 @@
 NS_JINGLE_IBB = 'urn:xmpp:jingle:transports:ibb:1'
 
 PLUGIN_INFO = {
-    "name": "Jingle In-Band Bytestreams",
-    "import_name": "XEP-0261",
-    "type": "XEP",
-    "protocols": ["XEP-0261"],
-    "dependencies": ["XEP-0166", "XEP-0047"],
-    "main": "XEP_0261",
-    "handler": "yes",
-    "description": _("""Implementation of Jingle In-Band Bytestreams""")
+    C.PI_NAME: "Jingle In-Band Bytestreams",
+    C.PI_IMPORT_NAME: "XEP-0261",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0261"],
+    C.PI_DEPENDENCIES: ["XEP-0166", "XEP-0047"],
+    C.PI_MAIN: "XEP_0261",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of Jingle In-Band Bytestreams""")
 }
 
 
--- a/src/plugins/plugin_xep_0277.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0277.py	Sun Feb 12 18:59:10 2017 +0100
@@ -46,15 +46,15 @@
 
 
 PLUGIN_INFO = {
-    "name": "Microblogging over XMPP Plugin",
-    "import_name": "XEP-0277",
-    "type": "XEP",
-    "protocols": ["XEP-0277"],
-    "dependencies": ["XEP-0163", "XEP-0060", "TEXT-SYNTAXES"],
-    "recommendations": ["XEP-0059", "EXTRA-PEP"],
-    "main": "XEP_0277",
-    "handler": "no",
-    "description": _("""Implementation of microblogging Protocol""")
+    C.PI_NAME: "Microblogging over XMPP Plugin",
+    C.PI_IMPORT_NAME: "XEP-0277",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0277"],
+    C.PI_DEPENDENCIES: ["XEP-0163", "XEP-0060", "TEXT-SYNTAXES"],
+    C.PI_RECOMMENDATIONS: ["XEP-0059", "EXTRA-PEP"],
+    C.PI_MAIN: "XEP_0277",
+    C.PI_HANDLER: "no",
+    C.PI_DESCRIPTION: _("""Implementation of microblogging Protocol""")
 }
 
 
--- a/src/plugins/plugin_xep_0280.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0280.py	Sun Feb 12 18:59:10 2017 +0100
@@ -39,14 +39,14 @@
 NS_CARBONS = 'urn:xmpp:carbons:2'
 
 PLUGIN_INFO = {
-    "name": u"XEP-0280 Plugin",
-    "import_name": u"XEP-0280",
-    "type": u"XEP",
-    "protocols": [u"XEP-0280"],
-    "dependencies": [],
-    "main": u"XEP_0280",
-    "handler": u"yes",
-    "description": D_(u"""Implementation of Message Carbons""")
+    C.PI_NAME: u"XEP-0280 Plugin",
+    C.PI_IMPORT_NAME: u"XEP-0280",
+    C.PI_TYPE: u"XEP",
+    C.PI_PROTOCOLS: [u"XEP-0280"],
+    C.PI_DEPENDENCIES: [],
+    C.PI_MAIN: u"XEP_0280",
+    C.PI_HANDLER: u"yes",
+    C.PI_DESCRIPTION: D_(u"""Implementation of Message Carbons""")
 }
 
 
--- a/src/plugins/plugin_xep_0297.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0297.py	Sun Feb 12 18:59:10 2017 +0100
@@ -35,13 +35,13 @@
 NS_SF = C.NS_FORWARD
 
 PLUGIN_INFO = {
-    u"name": u"Stanza Forwarding",
-    u"import_name": u"XEP-0297",
-    u"type": u"XEP",
-    u"protocols": [u"XEP-0297"],
-    u"main": "XEP_0297",
-    u"handler": u"yes",
-    u"description": D_(u"""Implementation of Stanza Forwarding""")
+    C.PI_NAME: u"Stanza Forwarding",
+    C.PI_IMPORT_NAME: u"XEP-0297",
+    C.PI_TYPE: u"XEP",
+    C.PI_PROTOCOLS: [u"XEP-0297"],
+    C.PI_MAIN: "XEP_0297",
+    C.PI_HANDLER: u"yes",
+    C.PI_DESCRIPTION: D_(u"""Implementation of Stanza Forwarding""")
 }
 
 
--- a/src/plugins/plugin_xep_0300.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0300.py	Sun Feb 12 18:59:10 2017 +0100
@@ -18,6 +18,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from sat.core.i18n import _
+from sat.core.constants import Const as C
 from sat.core.log import getLogger
 log = getLogger(__name__)
 from sat.core import exceptions
@@ -32,13 +33,13 @@
 
 
 PLUGIN_INFO = {
-    "name": "Cryptographic Hash Functions",
-    "import_name": "XEP-0300",
-    "type": "XEP",
-    "protocols": ["XEP-0300"],
-    "main": "XEP_0300",
-    "handler": "yes",
-    "description": _("""Management of cryptographic hashes""")
+    C.PI_NAME: "Cryptographic Hash Functions",
+    C.PI_IMPORT_NAME: "XEP-0300",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0300"],
+    C.PI_MAIN: "XEP_0300",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Management of cryptographic hashes""")
 }
 
 NS_HASHES = "urn:xmpp:hashes:1"
--- a/src/plugins/plugin_xep_0313.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0313.py	Sun Feb 12 18:59:10 2017 +0100
@@ -39,13 +39,13 @@
 MESSAGE_RESULT = "/message/result[@xmlns='{mam_ns}' and @queryid='{query_id}']"
 
 PLUGIN_INFO = {
-    "name": "Message Archive Management",
-    "import_name": "XEP-0313",
-    "type": "XEP",
-    "protocols": ["XEP-0313"],
-    "main": "XEP_0313",
-    "handler": "yes",
-    "description": _("""Implementation of Message Archive Management""")
+    C.PI_NAME: "Message Archive Management",
+    C.PI_IMPORT_NAME: "XEP-0313",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0313"],
+    C.PI_MAIN: "XEP_0313",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of Message Archive Management""")
 }
 
 
--- a/src/plugins/plugin_xep_0334.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0334.py	Sun Feb 12 18:59:10 2017 +0100
@@ -35,14 +35,14 @@
 
 
 PLUGIN_INFO = {
-    "name": u"Message Processing Hints",
-    "import_name": u"XEP-0334",
-    "type": u"XEP",
-    "protocols": [u"XEP-0334"],
-    "main": "XEP_0334",
-    "handler": u"yes",
-    "description": D_(u"""Implementation of Message Processing Hints"""),
-    "usage": dedent(D_(u"""\
+    C.PI_NAME: u"Message Processing Hints",
+    C.PI_IMPORT_NAME: u"XEP-0334",
+    C.PI_TYPE: u"XEP",
+    C.PI_PROTOCOLS: [u"XEP-0334"],
+    C.PI_MAIN: "XEP_0334",
+    C.PI_HANDLER: u"yes",
+    C.PI_DESCRIPTION: D_(u"""Implementation of Message Processing Hints"""),
+    C.PI_USAGE: dedent(D_(u"""\
              Frontends can use HINT_* constants in mess_data['extra'] in a serialized 'hints' dict.
              Internal plugins can use directly addHint([HINT_* constant]).
              Will set mess_data['extra']['history'] to 'skipped' when no store is requested and message is not saved in history."""))
--- a/src/plugins/plugin_xep_0363.py	Sun Feb 12 17:55:43 2017 +0100
+++ b/src/plugins/plugin_xep_0363.py	Sun Feb 12 18:59:10 2017 +0100
@@ -42,14 +42,14 @@
 
 
 PLUGIN_INFO = {
-    "name": "HTTP File Upload",
-    "import_name": "XEP-0363",
-    "type": "XEP",
-    "protocols": ["XEP-0363"],
-    "dependencies": ["FILE", "UPLOAD"],
-    "main": "XEP_0363",
-    "handler": "yes",
-    "description": _("""Implementation of HTTP File Upload""")
+    C.PI_NAME: "HTTP File Upload",
+    C.PI_IMPORT_NAME: "XEP-0363",
+    C.PI_TYPE: "XEP",
+    C.PI_PROTOCOLS: ["XEP-0363"],
+    C.PI_DEPENDENCIES: ["FILE", "UPLOAD"],
+    C.PI_MAIN: "XEP_0363",
+    C.PI_HANDLER: "yes",
+    C.PI_DESCRIPTION: _("""Implementation of HTTP File Upload""")
 }
 
 NS_HTTP_UPLOAD = 'urn:xmpp:http:upload'