]> git.meshlink.io Git - catta/blobdiff - avahi-python/avahi/ServiceTypeDatabase.py.in
fix avahi_netlink_new to allow multiple netlinks per process
[catta] / avahi-python / avahi / ServiceTypeDatabase.py.in
index 8a77a31b28bfcd78bbc816d27cd747315a6d26fb..b2035fdf6b5089c0e604522a2e0174d7ea7f9e1c 100644 (file)
@@ -24,8 +24,9 @@ import re
 locale.setlocale(locale.LC_ALL, '')
 
 class ServiceTypeDatabase:
+    """ServiceTypeDatabase maps service types to descriptions"""
 
-    def __init__(self, filename = "@pkglibdir@/service-types.db"):
+    def __init__(self, filename = "@pkglibdatadir@/service-types.db"):
 
         self.db = @DBM@.open(filename, "r")
 
@@ -45,13 +46,13 @@ class ServiceTypeDatabase:
             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):
@@ -66,14 +67,7 @@ class ServiceTypeDatabase:
 
     def items(self):
 
-        items = []
-        @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):
-                localized_service_name = self[key]
-                items.append((key, localized_service_name))
-            @NEXT_KEY@
-        return items
+        return list(self.iteritems())
 
     def has_key(self, key):
 
@@ -81,7 +75,7 @@ class ServiceTypeDatabase:
 
             if self.db.has_key(key + suffix):
                 return True
-            
+
         return False
 
     def __contains__(self, item):
@@ -92,11 +86,57 @@ class ServiceTypeDatabase:
                 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()
 
@@ -105,4 +145,17 @@ if __name__ == "__main__":
     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