Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1import importlib 

2import pluggy 

3import pkg_resources 

4import sys 

5from . import hookspecs 

6 

7DEFAULT_PLUGINS = ( 

8 "datasette.publish.heroku", 

9 "datasette.publish.cloudrun", 

10 "datasette.facets", 

11 "datasette.sql_functions", 

12 "datasette.actor_auth_cookie", 

13 "datasette.default_permissions", 

14) 

15 

16pm = pluggy.PluginManager("datasette") 

17pm.add_hookspecs(hookspecs) 

18 

19if not hasattr(sys, "_called_from_test"): 

20 # Only load plugins if not running tests 

21 pm.load_setuptools_entrypoints("datasette") 

22 

23# Load default plugins 

24for plugin in DEFAULT_PLUGINS: 

25 mod = importlib.import_module(plugin) 

26 pm.register(mod, plugin) 

27 

28 

29def get_plugins(): 

30 plugins = [] 

31 plugin_to_distinfo = dict(pm.list_plugin_distinfo()) 

32 for plugin in pm.get_plugins(): 

33 static_path = None 

34 templates_path = None 

35 if plugin.__name__ not in DEFAULT_PLUGINS: 

36 try: 

37 if pkg_resources.resource_isdir(plugin.__name__, "static"): 

38 static_path = pkg_resources.resource_filename( 

39 plugin.__name__, "static" 

40 ) 

41 if pkg_resources.resource_isdir(plugin.__name__, "templates"): 

42 templates_path = pkg_resources.resource_filename( 

43 plugin.__name__, "templates" 

44 ) 

45 except (KeyError, ImportError): 

46 # Caused by --plugins_dir= plugins - KeyError/ImportError thrown in Py3.5 

47 pass 

48 plugin_info = { 

49 "name": plugin.__name__, 

50 "static_path": static_path, 

51 "templates_path": templates_path, 

52 "hooks": [h.name for h in pm.get_hookcallers(plugin)], 

53 } 

54 distinfo = plugin_to_distinfo.get(plugin) 

55 if distinfo: 

56 plugin_info["version"] = distinfo.version 

57 plugin_info["name"] = distinfo.project_name 

58 plugins.append(plugin_info) 

59 return plugins