Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(331)

Side by Side Diff: third_party/boto/plugin.py

Issue 12633019: Added boto/ to depot_tools/third_party (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Moved boto down by one Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « third_party/boto/mashups/server.py ('k') | third_party/boto/provider.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright 2010 Google Inc.
2 #
3 # Permission is hereby granted, free of charge, to any person obtaining a
4 # copy of this software and associated documentation files (the
5 # "Software"), to deal in the Software without restriction, including
6 # without limitation the rights to use, copy, modify, merge, publish, dis-
7 # tribute, sublicense, and/or sell copies of the Software, and to permit
8 # persons to whom the Software is furnished to do so, subject to the fol-
9 # lowing conditions:
10 #
11 # The above copyright notice and this permission notice shall be included
12 # in all copies or substantial portions of the Software.
13 #
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
16 # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
17 # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
18 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20 # IN THE SOFTWARE.
21
22
23 """
24 Implements plugin related api.
25
26 To define a new plugin just subclass Plugin, like this.
27
28 class AuthPlugin(Plugin):
29 pass
30
31 Then start creating subclasses of your new plugin.
32
33 class MyFancyAuth(AuthPlugin):
34 capability = ['sign', 'vmac']
35
36 The actual interface is duck typed.
37
38 """
39
40 import glob
41 import imp, os.path
42
43 class Plugin(object):
44 """Base class for all plugins."""
45
46 capability = []
47
48 @classmethod
49 def is_capable(cls, requested_capability):
50 """Returns true if the requested capability is supported by this plugin
51 """
52 for c in requested_capability:
53 if not c in cls.capability:
54 return False
55 return True
56
57 def get_plugin(cls, requested_capability=None):
58 if not requested_capability:
59 requested_capability = []
60 result = []
61 for handler in cls.__subclasses__():
62 if handler.is_capable(requested_capability):
63 result.append(handler)
64 return result
65
66 def _import_module(filename):
67 (path, name) = os.path.split(filename)
68 (name, ext) = os.path.splitext(name)
69
70 (file, filename, data) = imp.find_module(name, [path])
71 try:
72 return imp.load_module(name, file, filename, data)
73 finally:
74 if file:
75 file.close()
76
77 _plugin_loaded = False
78
79 def load_plugins(config):
80 global _plugin_loaded
81 if _plugin_loaded:
82 return
83 _plugin_loaded = True
84
85 if not config.has_option('Plugin', 'plugin_directory'):
86 return
87 directory = config.get('Plugin', 'plugin_directory')
88 for file in glob.glob(os.path.join(directory, '*.py')):
89 _import_module(file)
90
OLDNEW
« no previous file with comments | « third_party/boto/mashups/server.py ('k') | third_party/boto/provider.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698