Projet

Général

Profil

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

root / entrouvert / wsgi / middleware.py @ 698c4ef1

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
    ]
33
    VERSION = 1
34

    
35
    def __init__(self, application):
36
        self.application = application
37

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

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