blob: b2035fdf6b5089c0e604522a2e0174d7ea7f9e1c [file] [log] [blame]
#!@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