From 3c7af5cffa21cf302b357c6ab722cdb0615e1950 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sat, 27 Aug 2005 17:12:48 +0000 Subject: * add new object ServiceTypeDatabase to avahi module for python git-svn-id: file:///home/lennart/svn/public/avahi/trunk@456 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- avahi-utils/avahi/Makefile.am | 17 +++-- avahi-utils/avahi/ServiceTypeDatabase.py.in | 97 +++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 avahi-utils/avahi/ServiceTypeDatabase.py.in diff --git a/avahi-utils/avahi/Makefile.am b/avahi-utils/avahi/Makefile.am index 68c7147..c5a4be8 100644 --- a/avahi-utils/avahi/Makefile.am +++ b/avahi-utils/avahi/Makefile.am @@ -17,13 +17,22 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA. +EXTRA_DIST = __init__.py SimpleGladeApp.py ServiceTypeDatabase.py.in + if HAVE_PYTHON avahidir = $(pythondir)/avahi -avahi_PYTHON = __init__.py SimpleGladeApp.py +avahi_PYTHON = __init__.py SimpleGladeApp.py ServiceTypeDatabase.py + +BUILT_SOURCES = ServiceTypeDatabase.py + +ServiceTypeDatabase.py: ServiceTypeDatabase.py.in + sed -e 's,@PYTHON\@,$(PYTHON),g' \ + -e 's,@pkgdatadir\@,$(pkgdatadir),g' $< > $@ + chmod +x $@ + +CLEANFILES=*.pyc *.pyo ServiceTypeDatabase.py + endif -EXTRA_DIST = __init__.py SimpleGladeApp.py -clean-local: - rm -rf *.pyc *.pyo diff --git a/avahi-utils/avahi/ServiceTypeDatabase.py.in b/avahi-utils/avahi/ServiceTypeDatabase.py.in new file mode 100644 index 0000000..863c85d --- /dev/null +++ b/avahi-utils/avahi/ServiceTypeDatabase.py.in @@ -0,0 +1,97 @@ +#!@PYTHON@ +# -*-python-*- +# $Id$ + +# 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 anydbm +import locale + +locale.setlocale(locale.LC_ALL, '') + +class ServiceTypeDatabase: + + def __init__(self, filename = "@pkgdatadir@/service-types.db"): + + self.db = anydbm.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 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 + + + +if __name__ == "__main__": + + b = ServiceTypeDatabase() + + print b["_http._tcp"] + print b["_ftp._tcp"] + print b["_webdav._tcp"] + print b["_webdavs._tcp"] + + print b["gurki._tcp"] -- cgit