Jason R. Coombs avatar Jason R. Coombs committed 47ac5a7

Instead of listing excluded classes explicitly, just construct those that don't raise a TypeError when constructed without parameters.

Comments (0)

Files changed (2)


 def get_all_keyring():
-    Return a list of all implemented keyrings.
+    Return a list of all implemented keyrings that can be constructed without
+    parameters.
-    # except don't include these because they can't be constructed without
-    #  additional parameters.
-    exclude_classes = [
-        MultipartKeyringWrapper,
-        BasicPyfilesystemKeyring,
-        EncryptedPyfilesystemKeyring,
-        KeyczarCrypter,
-        GoogleDocsKeyring,
-    ]
-    return [
-        keyring_class()
-        for keyring_class in KeyringBackend._classes
-        if keyring_class not in exclude_classes
-    ]
+    return list(keyring.util.suppress_exceptions(KeyringBackend._classes,
+        exceptions=TypeError))


     if 'functools' in globals():
         wrapper = functools.wraps(func)(wrapper)
     return wrapper
+def suppress_exceptions(callables, exceptions=Exception):
+    """
+    yield the results of calling each element of callables, suppressing
+    any indicated exceptions.
+    """
+    for callable in callables:
+        try:
+            yield callable()
+        except exceptions:
+            pass
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.