]> git.meshlink.io Git - catta/blob - avahi-python/avahi/ServiceTypeDatabase.py.in
Allow storing the service type database as Solaris DBM file, alternatively to gdbm...
[catta] / avahi-python / avahi / ServiceTypeDatabase.py.in
1 #!@PYTHON@
2 # -*-python-*-
3 # $Id$
4
5 # This file is part of avahi.
6 #
7 # avahi is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU Lesser General Public License as
9 # published by the Free Software Foundation; either version 2 of the
10 # License, or (at your option) any later version.
11 #
12 # avahi is distributed in the hope that it will be useful, but WITHOUT
13 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
15 # License for more details.
16 #
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with avahi; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
20 # USA.
21
22 import @DBM@
23 import locale
24 import re
25
26 locale.setlocale(locale.LC_ALL, '')
27
28 class ServiceTypeDatabase:
29
30     def __init__(self, filename = "@pkgdatadir@/service-types.db"):
31
32         self.db = @DBM@.open(filename, "r")
33
34         l = locale.getlocale(locale.LC_MESSAGES)
35
36         self.suffixes = ()
37
38         if not l[0] is None:
39
40             if not l[1] is None:
41                 self.suffixes += (l[0] + "@" + l[1], )
42
43             self.suffixes += (l[0], )
44
45             i = l[0].find("_")
46
47             if i >= 0:
48
49                 k = l[0][:i]
50                 
51                 if not l[1] is None:
52                     self.suffixes += (k + "@" + l[1], )
53
54                 self.suffixes += (k, )
55             
56             
57         self.suffixes = tuple(map(lambda x:  "["+x+"]", self.suffixes)) + ("", )
58
59     def __getitem__(self, key):
60
61         for suffix in self.suffixes:
62             try:
63                 return self.db[key + suffix]
64             except KeyError:
65                 pass
66
67         raise KeyError()
68
69     def items(self):
70
71         items = []
72         @FIRST_KEY@
73         @CHECK_KEY@
74             if re.search('_[a-zA-Z0-9-]+\._[a-zA-Z0-9-]+', key) and not re.search('_[a-zA-Z0-9-]+\._[a-zA-Z0-9-]+\[.*\]', key):
75                 localized_service_name = self[key]
76                 items.append((key, localized_service_name))
77             @NEXT_KEY@
78         return items
79
80     def has_key(self, key):
81
82         for suffix in self.suffixes:
83
84             if self.db.has_key(key + suffix):
85                 return True
86             
87         return False
88
89     def __contains__(self, item):
90
91         for suffix in self.suffixes:
92
93             if item+suffix in self.db:
94                 return True
95
96         return False
97         
98
99         
100 if __name__ == "__main__":
101     
102     b = ServiceTypeDatabase()
103     print b.items()
104
105     print b["_http._tcp"]
106     print b["_ftp._tcp"]
107     print b["_webdav._tcp"]
108     print b["_webdavs._tcp"]
109
110     print b["gurki._tcp"]