Ajout d'un script WSGI pour l'annuaire des téléphones IP Thomson ST2030.
authorProgfou <jean-christophe.andre@auf.org>
Sun, 9 Jan 2011 18:01:56 +0000 (01:01 +0700)
committerProgfou <jean-christophe.andre@auf.org>
Sun, 9 Jan 2011 18:01:56 +0000 (01:01 +0700)
partageweb2/partage-compta.py
voip/ST2030-annuaire.py [new file with mode: 0755]

index 82e86cd..a3d3c89 100755 (executable)
@@ -3,6 +3,11 @@
 """
 Outil de partage de fichiers.
 
 """
 Outil de partage de fichiers.
 
+Copyright : Agence universitaire de la Francophonie — www.auf.org
+Licence : GNU General Public Licence, version 2
+Auteur : Jean Christophe André
+Date de création : 26 août 2010
+
 Depends: libapache2-mod-wsgi
 
 Attention : le code n'est pas encore “thread-safe”...
 Depends: libapache2-mod-wsgi
 
 Attention : le code n'est pas encore “thread-safe”...
diff --git a/voip/ST2030-annuaire.py b/voip/ST2030-annuaire.py
new file mode 100755 (executable)
index 0000000..ba2f455
--- /dev/null
@@ -0,0 +1,57 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+Annuaire téléphonique dynamique pour les téléphones IP Thomson ST2030.
+
+Copyright : Agence universitaire de la Francophonie — www.auf.org
+Licence : GNU General Public Licence, version 2
+Auteur : Jean Christophe André
+Date de création : 22 octobre 2010
+
+Depends: libapache2-mod-wsgi auf-refer
+
+Attention : le code n'est pas encore “thread-safe”...
+"""
+import aufrefer
+
+phonebook_document = u'<ThomsonPhoneMenu>\n%s\n</ThomsonPhoneMenu>'
+phonebook_entry = u'<DirectoryEntry><Name>%(name)s</Name><Telephone>%(phone)s</Telephone></DirectoryEntry>'
+
+def search(pattern):
+    phonebook_entries = []
+    for user in aufrefer.get('annuaire.json'):
+        if user['tel_ip'] and pattern in user['adel']:
+            name = user['adel'].split('@')[0]
+            phone = user['tel_ip'].replace(' ','')
+            entry = phonebook_entry % {'name': name, 'phone': phone}
+            phonebook_entries.append(entry)
+    return phonebook_document % '\n'.join(phonebook_entries[0:32])
+
+def application(environ, start_response):
+    query = environ.get('QUERY_STRING').lower()
+    params = dict([x.split('=') for x in query.split('&')])
+    if not params.get('mac') or not params.get('search'):
+        headers = [('Content-Type', 'text/plain; charset=utf-8'), ]
+        start_response('401 Authorization Required', headers)
+        return ['Authorization Required']
+    data = search(params.get('search')).encode('utf-8')
+    mime_type = 'text/xml; charset=utf-8'
+    length = str(len(data))
+    headers = [('Content-Type', mime_type), ('Content-Length', length), ]
+    start_response('200 OK', headers)
+    return [data]
+
+if __name__ == '__main__':
+    # this runs when script is started directly from commandline
+    try:
+        # create a simple WSGI server and run the application
+        from wsgiref import simple_server
+        print "Running test application - point your browser at http://localhost:8000/ ..."
+        httpd = simple_server.WSGIServer(('', 8000), simple_server.WSGIRequestHandler)
+        httpd.set_app(application)
+        httpd.serve_forever()
+    except ImportError:
+        # wsgiref not installed, just output html to stdout
+        for content in application({}, lambda status, headers: None):
+            print content
+