Projet

Général

Profil

Télécharger (1,94 ko) Statistiques
| Branche: | Tag: | Révision:

root / entrouvert / wsgi / middleware.py @ 9c67cb92

1
from urllib import quote
2
import json
3
import pkg_resources
4

    
5
class VersionMiddleware(object):
6
    ENTROUVERT_PACKAGES = [
7
            'wcs',
8
            'wcs-au-quotidien',
9
            'authentic2',
10
            'authentic2-idp-cas',
11
            'authentic2-idp-ltpa',
12
            'authentic2-idp-oauth2',
13
            'polynum',
14
            'appli_project',
15
            'passerelle',
16
            'docbow',
17
            'calebasse',
18
            'python-entrouvert',
19
            'nose',
20
            'portail-citoyen',
21
            'portail-citoyen2',
22
            'portail-citoyen-announces',
23
            'django-cms-ajax-text-plugin',
24
            'mandaye',
25
            'eopayment',
26
            'mandaye-cam',
27
            'mandaye-meyzieu',
28
            'mandaye-vincennes',
29
            'compte-meyzieu',
30
            'compte-agglo-montpellier',
31
            'compte-orleans',
32
            'hobo',
33
            'django-cmsplugin-blurp',
34
    ]
35
    VERSION = 1
36

    
37
    def __init__(self, application):
38
        self.application = application
39

    
40
    def __call__(self, environ, start_response):
41
        path = ''
42
        path += quote(environ.get('SCRIPT_NAME', ''))
43
        path += quote(environ.get('PATH_INFO', ''))
44
        method = environ.get('REQUEST_METHOD', 'GET')
45
        if method == 'GET' and (path == '/__version__' or
46
                path == '/__version__/'):
47
            packages_version = self.get_packages_version()
48
            start_response('200 Ok', [('content-type', 'application/json')])
49
            return [json.dumps(packages_version)]
50
        return self.application(environ, start_response)
51

    
52
    @classmethod
53
    def get_packages_version(cls):
54
        packages_version = {}
55
        for distribution in tuple(pkg_resources.WorkingSet()):
56
            project_name = distribution.project_name
57
            version = distribution.version
58
            if project_name in cls.ENTROUVERT_PACKAGES:
59
                packages_version[project_name] = version
60
        return packages_version
(2-2/3)