view scripts/list_plugins/list_plugins.py @ 103:e69883c1ec30

docker (libervia_cont): added a "status" command: - if libervia container is not running, it exits with error code 1 - if libervia container is running but no server is launched, it exits with error code 2 - if libervia container is running and server is launcher, it exits with error code 0 (success) server detection is done by doing a simple grep on logs, that's not perfectly reliable (ports can be changed in configuration, even if that doesn't really make sense in Docker context) but should be good enough for this purpose.
author Goffi <goffi@goffi.org>
date Sat, 27 Feb 2016 00:45:40 +0100
parents cea50c3e94f0
children
line wrap: on
line source

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
SàT website: Salut à Toi's presentation website
Copyright (C) 2015  Jérôme Poisson (goffi@goffi.org)
Copyright (C) 2015  Adrien Cossa (souliane@mailoo.org)

This file is part of SàT website.

SàT website is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Foobar 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 Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
"""


from sat import plugins
import pkgutil

WEBSITE = "/home/souliane/workspace/sat_website"

HEADER = u"""
{% comment %}
SàT website: Salut à Toi's presentation website
Copyright (C) 2012  Jérôme Poisson (goffi@goffi.org)
Copyright (C) 2015  Adrien Cossa (souliane@mailoo.org)

This file is part of SàT website.

SàT website is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Foobar 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 Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with Foobar.  If not, see <http://www.gnu.org/licenses/>.


NOTE: this file has been automatically generated by the following script:
http://repos.goffi.org/sat_docs/file/tip/scripts/list_plugins/list_plugins.py

Please avoid manual modification, try to update the script instead! Before /
after a regeneration, don't forget to save / merge the manual modifications.

{% endcomment %}
{% load i18n %}
"""

import urllib2
import lxml.html

# use it to retrieve the XEP name from the official list
XEPS_URL = "http://xmpp.org/xmpp-protocols/xmpp-extensions/"

def get_infos():
    result = {}
    doc = lxml.html.parse(XEPS_URL)

    def setXEP(name):
        url = "http://xmpp.org/extensions/%s.html" % name.lower()
        # use the XEP name as description
        desc = doc.xpath("//tr[@id='%s']/td" % name.lower().replace("-", ""))[1].text
        desc = '{% trans "' + desc.replace('"', '\\"') + '" %}'
        result.setdefault("xep", []).append((name, url, desc))

    def setEXP(name):
        desc = infos['description']
        if desc.startswith('Implementation of '):
            desc = desc[18:]
        desc = '{% trans "' + desc.replace('"', '\\"') + '" %}'
        result.setdefault("exp", []).append((name, None, desc))

    for loader, module_name, is_pkg in  pkgutil.walk_packages(plugins.__path__):
        module = loader.find_module(module_name).load_module(module_name)
        infos = getattr(module, 'PLUGIN_INFO')

        if infos['type'] == 'XEP':
            name = infos['import_name']
            setXEP(name)
            protocols = infos['protocols']
            for protocol in protocols:
                if protocol != name:
                    setXEP(protocol)
        else:
            name = '{% trans "' + infos['name'] + '" %}'
            setEXP(name)

    return result


def print_infos(infos, file):
    with open(file, 'w',) as f:
        f.write(HEADER.encode("utf-8"))
        for name, url, desc in infos:
            name = ('<a href="%s" target="#">%s</a>' % (url, name)) if url else name
            entry = u"""
<div class="row">
  <div class="col-md-2">%s</div>
  <div class="col-md-7 feature">%s</div>
</div>""" % (name, desc)
            f.write(entry.encode("utf-8"))

infos = get_infos()
for type_ in ("xep", "exp"):
    print_infos(infos[type_], "%s/templates/sat_website/specifications_%s.html" % (WEBSITE, type_))