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 22import @DBM@ 23import locale 24import re 25 26locale.setlocale(locale.LC_ALL, '') 27 28class ServiceTypeDatabase: 29 30 def __init__(self, filename = "@pkglibdir@/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 100if __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"] 111