#!@PYTHON@
# -*-python-*-
-# $Id$
-
# This file is part of avahi.
#
# avahi is free software; you can redistribute it and/or modify it
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA.
-import gdbm
+import @DBM@
import locale
import re
locale.setlocale(locale.LC_ALL, '')
class ServiceTypeDatabase:
+ """ServiceTypeDatabase maps service types to descriptions"""
- def __init__(self, filename = "@pkgdatadir@/service-types.db"):
+ def __init__(self, filename = "@pkglibdatadir@/service-types.db"):
- self.db = gdbm.open(filename, "r")
+ self.db = @DBM@.open(filename, "r")
l = locale.getlocale(locale.LC_MESSAGES)
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):
def items(self):
- items = []
- key = self.db.firstkey()
- while key is not None:
- if re.search('_\w*\._\w*', key) and not re.search('_\w*\._\w*\[.*\]', key):
- localized_service_name = self[key]
- items.append((key, localized_service_name))
- key = self.db.nextkey(key)
- return items
+ return list(self.iteritems())
def has_key(self, key):
if self.db.has_key(key + suffix):
return True
-
+
return False
def __contains__(self, item):
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["gurki._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