#!@PYTHON@ # -*-python-*- # This file is part of avahi. # # avahi is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as # published by the Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # avahi is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with avahi; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA. import @DBM@ import locale import re locale.setlocale(locale.LC_ALL, '') class ServiceTypeDatabase: """ServiceTypeDatabase maps service types to descriptions""" def __init__(self, filename = "@pkglibdatadir@/service-types.db"): self.db = @DBM@.open(filename, "r") l = locale.getlocale(locale.LC_MESSAGES) self.suffixes = () if not l[0] is None: if not l[1] is None: self.suffixes += (l[0] + "@" + l[1], ) self.suffixes += (l[0], ) i = l[0].find("_") if i >= 0: k = l[0][:i] if not l[1] is None: self.suffixes += (k + "@" + l[1], ) self.suffixes += (k, ) self.suffixes = tuple(map(lambda x: "["+x+"]", self.suffixes)) + ("", ) def __getitem__(self, key): for suffix in self.suffixes: try: return self.db[key + suffix] except KeyError: pass raise KeyError() def items(self): return list(self.iteritems()) def has_key(self, key): for suffix in self.suffixes: if self.db.has_key(key + suffix): return True return False def __contains__(self, item): for suffix in self.suffixes: if item+suffix in self.db: return True return False def __iter__(self): @FIRST_KEY@ @CHECK_KEY@ 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): yield key @NEXT_KEY@ def __len__(self): count = 0 for _ in self: count+=1 self.__len__ = lambda : count return len(self) def get(self, key, default=None): if key in self: return self[key] else: return default def iteritems(self): return ((key, self[key]) for key in self) def iterkeys(self): return self.__iter__() def itervalues(self): return (self[key] for key in self) def keys(self): return list(self) def values(self): return list(self.itervalues()) if __name__ == "__main__": b = ServiceTypeDatabase() print b.items() print b["_http._tcp"] print b["_ftp._tcp"] print b["_webdav._tcp"] print b["_webdavs._tcp"] print b.get("gurki._tcp") print len(b) for key, _ in zip(b, xrange(3)): print key for key, _ in zip(b.iteritems(), xrange(3)): print key for key, _ in zip(b.itervalues(), xrange(3)): print key