Best Python code snippet using pandera_python
pandora-plugin
Source:pandora-plugin  
...134""" % plugin)135  plugin_am_file=os.path.join(plugin['rel_path'],'plugin.am')136  if os.path.exists(plugin_am_file):137    plugin_file.write('include %s\n' % plugin_am_file)138def write_external_plugin():139  """Return True if the plugin had changed."""140  plugin = read_plugin_ini('.')141  expand_plugin_ini(plugin)142  plugin_file = ChangeProtectedFile('configure.ac')143  write_external_configure(plugin, plugin_file)144  result = plugin_file.close()145  plugin_file = ChangeProtectedFile('Makefile.am')146  write_external_makefile(plugin, plugin_file)147  # Write some stub configure.ac and Makefile.am files that include the above148  result = plugin_file.close() or result149  return result150def write_plugin(plugin, plugin_ini_list):151  # Since this function is recursive, make sure we're not already in it.152  if plugin.has_key('writing_status'):153    if plugin['writing_status'] == 'done':154      return155    else:156      print "Dependency loop detected with %s" % plugin['name']157      exit(1)158  plugin['writing_status'] = 'dependencies'159  # Write all dependencies first to get around annoying automake bug160  for dependency in plugin['dependency_list']:161    found = False162    for find_plugin in plugin_ini_list:163      if find_plugin['module_name'] == dependency:164        found = True165        write_plugin(find_plugin, plugin_ini_list)166        break167    if found is False:168      print "Could not find dependency %s: %s" % (plugin['name'], dependency)169      exit(1)170  write_plugin_ac(plugin, plugin_ac_file)171  write_plugin_am(plugin, plugin_am_file)172  write_plugin_docs(plugin, plugin_doc_index, plugin_am_file)173  plugin['writing_status'] = 'done'174def write_plugin_docs(plugin, doc_index, plugin_am):175  if plugin['docs'] is not None and os.path.isdir("docs/plugins"):176    if not os.path.exists(os.path.join("docs/plugins",plugin["name"])):177      os.symlink(os.path.abspath(plugin["docs"]), os.path.join("docs/plugins",plugin["name"]))178    doc_index.write("""179   %(name)s/index""" % plugin)180    plugin_am.write("""181EXTRA_DIST+=${top_srcdir}/docs/plugins/%(name)s/*.rst182""" % plugin)183def write_plugin_ac(plugin, plugin_ac):184  #185  # Write plugin config instructions into plugin.ac file.186  #187  plugin_ac_file=os.path.join(plugin['rel_path'],'plugin.ac')188  plugin_m4_dir=os.path.join(plugin['rel_path'],'m4')189  plugin_m4_files=[]190  if os.path.exists(plugin_m4_dir) and os.path.isdir(plugin_m4_dir):191    for m4_file in os.listdir(plugin_m4_dir):192      if os.path.splitext(m4_file)[-1] == '.m4':193        plugin_m4_files.append(os.path.join(plugin['rel_path'], m4_file))194  plugin_ac.write("""195dnl Config for %(title)s196""" % plugin)197  for m4_file in plugin_m4_files:198    plugin_ac.write('m4_sinclude([%s])\n' % m4_file)199  plugin['plugin_dep_libs']=" ".join(["\${top_builddir}/%s" % f for f in plugin['libs'].split()])200  plugin_ac.write("""201AC_ARG_WITH([%(name_with_dashes)s-plugin],[202dnl indented wierd to make the help output correct203AS_HELP_STRING([--with-%(name_with_dashes)s-plugin],[Build %(title)s. @<:@default=%(enabled)s@:>@])204AS_HELP_STRING([--without-%(name_with_dashes)s-plugin],[Disable building %(title)s])205  ],[206    with_%(name)s_plugin="$withval"207    AS_IF([test "x$with_%(name)s_plugin" = "xyes"],[208      requested_%(name)s_plugin="yes"209    ],[210      requested_%(name)s_plugin="no"211    ])212  ],[213    with_%(name)s_plugin="%(enabled)s"214    requested_%(name)s_plugin="no"215  ])216AC_ARG_WITH([static-%(name_with_dashes)s-plugin],[217AS_HELP_STRING([--with-static-%(name_with_dashes)s-plugin],[Build Archive Storage Engine. @<:@default=%(static_yesno)s@:>@])218AS_HELP_STRING([--without-static-%(name_with_dashes)s-plugin],[Disable building Archive Storage Engine])219  ],[220    with_static_%(name)s_plugin=${withval}221  ],[222    with_static_%(name)s_plugin=%(static_yesno)s223])224AS_IF([test "x${with_static_%(name)s_plugin}" = "xyes" -o "x${with_all_static}" = "xyes"],[225  shared_%(name)s_plugin=no226  ],[227  shared_%(name)s_plugin=yes228])229AC_ARG_ENABLE([%(name_with_dashes)s-plugin],[230dnl indented wierd to make the help output correct231AS_HELP_STRING([--enable-%(name_with_dashes)s-plugin],[Enable loading %(title)s by default. @<:@default=%(default_yesno)s@:>@])232AS_HELP_STRING([--disable-%(name_with_dashes)s-plugin],[Disable loading %(title)s by default.])233  ],234  [enable_%(name)s_plugin="$enableval"],235  [enable_%(name)s_plugin=%(default_yesno)s])236""" % plugin)237  if os.path.exists(plugin_ac_file):238    plugin_ac.write('m4_sinclude([%s])\n' % plugin_ac_file)239  # The plugin author has specified some check to make to determine240  # if the plugin can be built. If the plugin is turned on and this241  # check fails, then configure should error out. If the plugin is not242  # turned on, then the normal conditional build stuff should just let243  # it silently not build244  if plugin['has_build_conditional']:245    plugin_ac.write("""246AS_IF([test %(build_conditional)s],247      [], dnl build_conditional can only negate248      [249        AS_IF([test "x${requested_%(name)s_plugin}" = "xyes"],250              [AC_MSG_ERROR([Plugin %(name)s was explicitly requested, yet failed build dependency checks. Aborting!])])251        with_%(name)s_plugin=no252      ])253""" % plugin)254  if not plugin['unconditional']:255    plugin_ac.write("""256AM_CONDITIONAL([%(static_build_conditional_tag)s],257               [test %(build_conditional)s -a ! %(shared_build)s])258AM_CONDITIONAL([%(shared_build_conditional_tag)s],259               [test %(build_conditional)s -a %(shared_build)s])260AM_CONDITIONAL([%(build_conditional_tag)s],261               [test %(build_conditional)s])262    """ % plugin)263  plugin_ac.write("""264AS_IF([test "x$with_%(name)s_plugin" = "xyes"],[265""" % plugin)266  if plugin['testsuite']:267    plugin_ac.write("""268      pandora_plugin_test_list="%(name)s,${pandora_plugin_test_list}"269    """ % plugin)270  plugin_ac.write("""271      AS_IF([test "x${with_static_%(name)s_plugin}" = "xyes" -o "x${with_all_static}" = "xyes"],[272        AS_IF([test "x$enable_%(name)s_plugin" = "xyes"],[273          pandora_builtin_load_list="%(module_name)s,${pandora_builtin_load_list}"274          pandora_builtin_load_symbols_list="_drizzled_%(module_name)s_plugin_,${pandora_builtin_load_symbols_list}"275          PANDORA_PLUGIN_DEP_LIBS="${PANDORA_PLUGIN_DEP_LIBS} %(plugin_dep_libs)s"276        ])277        pandora_builtin_list="%(module_name)s,${pandora_builtin_list}"278        pandora_builtin_symbols_list="_drizzled_%(module_name)s_plugin_,${pandora_builtin_symbols_list}"279        pandora_plugin_libs="${pandora_plugin_libs} \${top_builddir}/%(root_plugin_dir)s/%(libname)s.la"280     ],[281        AS_IF([test "x$enable_%(name)s_plugin" = "xyes"],[282          pandora_default_plugin_list="%(name)s,${pandora_default_plugin_list}"283        ])284    ])285    """ % plugin)286  plugin_ac.write("])\n")287def fix_file_paths(plugin, files):288  # TODO: determine path to plugin dir relative to top_srcdir... append it to289  # source files if they don't already have it290  new_files=""291  if plugin['plugin_dir'] != ".":292    for file in files.split():293      if not file.startswith(plugin['rel_path']):294        file= os.path.join(plugin['rel_path'], file)295        new_files= "%s %s" % (new_files, file)296  else:297    new_files= " ".join(plugin['sources'].split())298  if new_files != "":299    return new_files300  return files301def expand_plugin_ini(plugin):302    if plugin['name'] == "**OUT-OF-TREE**":303      print "Out of tree plugins require the name field to be specified in plugin.ini"304      sys.exit(1)305    if plugin['plugin_dir'] == ".":306      plugin['rel_path']= plugin['plugin_dir']307      plugin['unconditional']=True308    else:309      plugin['rel_path']= plugin['plugin_dir'][len(config['top_srcdir'])+len(os.path.sep):]310      plugin['unconditional']=False311    plugin['sources']= fix_file_paths(plugin, plugin['sources'])312    plugin['main_source']= plugin['sources'].split()[0]313    plugin['headers']= fix_file_paths(plugin, plugin['headers'])314    plugin['install_headers']= fix_file_paths(plugin, plugin['install_headers'])315    plugin['tests']= fix_file_paths(plugin, plugin['tests'])316    # Make a yes/no version for autoconf help messages317    if plugin['load_by_default']:318      plugin['default_yesno']="yes"319    else:320      plugin['default_yesno']="no"321    if plugin.has_key('extra_dist'):322      plugin['extra_dist']=" ".join([os.path.join(plugin['rel_path'],f) for f in plugin['extra_dist'].split()])323    if plugin['static']:324      plugin['static_yesno']="yes"325    else:326      plugin['static_yesno']="no"327    plugin['build_conditional_tag']= "BUILD_%s_PLUGIN" % plugin['name'].upper()328    plugin['shared_build_conditional_tag']= "BUILD_%s_PLUGIN_SHARED" % plugin['name'].upper()329    plugin['static_build_conditional_tag']= "BUILD_%s_PLUGIN_STATIC" % plugin['name'].upper()330    plugin['name_with_dashes']= plugin['name'].replace('_','-')331    if plugin.has_key('build_conditional'):332      plugin['has_build_conditional']=True333      plugin['build_conditional']='"x${with_%(name)s_plugin}" = "xyes" -a %(build_conditional)s' % plugin334    else:335      plugin['has_build_conditional']=False336      plugin['build_conditional']='"x${with_%(name)s_plugin}" = "xyes"' %plugin337    plugin['shared_build']='"x${shared_%(name)s_plugin}" = "xyes"' %plugin338    if plugin['install']:339      plugin['library_type']= 'pkgplugin'340    else:341      plugin['library_type']= 'noinst'342def find_testsuite(plugin_dir):343  for testdir in ['drizzle-tests','tests']:344    if os.path.isdir(os.path.join(plugin_dir,testdir)):345      return testdir346  if os.path.isdir(os.path.join('tests','suite',os.path.basename(plugin_dir))):347    return ""348  return None349def find_docs(plugin_dir):350  if os.path.isfile(os.path.join(plugin_dir, "docs", "index.rst")):351    return os.path.join(plugin_dir, "docs")352def read_plugin_ini(plugin_dir):353    sources_default=""354    if plugin_dir == ".":355      plugin_name="**OUT-OF-TREE**"356      module_name="**OUT-OF-TREE**"357    else:358      sources_default="%s.cc" % os.path.basename(plugin_dir)359      plugin_name = plugin_dir[plugin_dir.index(config['root_plugin_dir']) + len(config['root_plugin_dir']) + 1:]360      module_name = plugin_name.replace("/", config['module_name_separator']).replace("\\", config['module_name_separator'])361      plugin_name = plugin_name.replace("/", config['plugin_name_separator']).replace("\\", config['plugin_name_separator'])362    plugin_file= os.path.join(plugin_dir,config['plugin_ini_fname'])363    plugin_defaults= dict(sources=sources_default,364                          headers="",365                          install_headers="",366                          cflags="",367                          cppflags="",368                          cxxflags="",369                          libs="",370                          ldflags="",371                          author="",372                          title="",373                          description="",374                          license="PLUGIN_LICENSE_GPL",375                          name=plugin_name,376                          module_name=module_name,377                          load_by_default=config['default_load_by_default'],378                          disabled="False",379                          static="False",380                          dependencies="",381                          dependency_aliases="",382                          tests="",383                          install=config['default_install'])384    parser=ConfigParser.ConfigParser(defaults= plugin_defaults)385    parser.read(plugin_file)386    plugin=dict(parser.items('plugin'))387    plugin['plugin_dir'] = plugin_dir388    if plugin_dir == '.':389      if not plugin.has_key('url'):390        print "External Plugins are required to specifiy a url"391        plugin['url']= 'http://launchpad.net/%(name)s' % plugin392        sys.exit(1)393      if plugin_dir == '.' and not plugin.has_key('version'):394        print "External Plugins are required to specifiy a version"395        sys.exit(1)396    if not plugin.has_key('version'):397      plugin['version'] = config['default_plugin_version']398    if plugin.has_key('load_by_default'):399      plugin['load_by_default']=parser.getboolean('plugin','load_by_default')400    if plugin.has_key('disabled'):401      plugin['disabled']=parser.getboolean('plugin','disabled')402    if plugin['disabled']:403      plugin['enabled']="no"404    else:405      plugin['enabled']="yes"406    if plugin.has_key('static'):407      try:408        plugin['static']= parser.getboolean('plugin','static')409      except:410        if plugin['static'][:5] == os.sys.platform[:5]:411          plugin['static']= True412        else:413          plugin['static']= False414    if plugin.has_key('install'):415      plugin['install']= parser.getboolean('plugin','install')416    if plugin.has_key('testsuite'):417      if plugin['testsuite'] == 'disable':418        plugin['testsuite']= False419        plugin['dist_testsuite']= find_testsuite(plugin_dir)420    else:421      plugin_testsuite= find_testsuite(plugin_dir)422      plugin['testsuitedir']=plugin_testsuite423      if plugin_testsuite is not None:424        plugin['testsuite']=True425      else:426        plugin['testsuite']=False427    plugin['docs']= find_docs(plugin_dir)428    plugin['cflags']+= ' ' + config['extra_cflags']429    plugin['cppflags']+= ' ' + config['extra_cppflags']430    plugin['cxxflags']+= ' ' + config['extra_cxxflags']431    plugin['libname']= "lib%s%s%s" % (config['plugin_prefix'],432                                      plugin['name'],433                                      config['plugin_suffix'])434    if config['force_lowercase_libname']:435      plugin['libname']= plugin['libname'].lower()436    plugin['root_plugin_dir']= config['root_plugin_dir']437    plugin['plugin_prefix']= config['plugin_prefix']438    plugin['plugin_suffix']= config['plugin_suffix']439    plugin['pkgplugindir']= config['pkgplugindir']440    # Dependencies must have a module but dependency aliases are simply added441    # to the variable passed during compile.442    plugin['dependency_list'] = plugin['dependencies'].split()443    dependency_aliases = plugin['dependency_aliases'].split()444    plugin['dependencies'] = ','.join(plugin['dependency_list'] +445                                      plugin['dependency_aliases'].split())446    dependency_libs = ["%s/lib%s%s.la" % (config['root_plugin_dir'],447                                          dependency.lower().replace('::', '_'),448                                          config['plugin_suffix'])449                       for dependency in plugin['dependency_list']]450    plugin['libs'] = " ".join(plugin['libs'].split() + dependency_libs);451# Libtool is going to expand:452#      -DPANDORA_MODULE_AUTHOR='"Padraig O'"'"'Sullivan"'453# to:454# "-DPANDORA_MODULE_AUTHOR=\"Padraig O'Sullivan\""455# So we have to replace internal ''s to '"'"'456    for key in ('author','title','description','version'):457      plugin[key]=plugin[key].replace('"','\\"')458      plugin[key]=plugin[key].replace("'","'\"'\"'")459    return plugin460def write_plugin_am(plugin, plugin_am):461  """Write an automake fragment for this plugin.462  :param plugin: The plugin dict.463  :param plugin_am: The file to write to.464  """465  # The .plugin.ini.stamp avoids changing the datestamp on plugin.ini which can466  # confuse VCS systems.467  plugin_am.write("""468EXTRA_DIST += %(rel_path)s/plugin.ini469# Prevent errors when a plugin dir is removed470%(rel_path)s/plugin.ini:471""" % plugin)472  if plugin.has_key('extra_dist') and plugin['extra_dist'] != "":473    plugin_am.write("EXTRA_DIST += %(extra_dist)s\n" % plugin)474  if plugin['headers'] != "":475    plugin_am.write("noinst_HEADERS += %(headers)s\n" % plugin)476  if plugin['install_headers'] != "":477    plugin_am.write("nobase_pkginclude_HEADERS += %(install_headers)s\n" % plugin)478  if plugin['testsuite']:479    if plugin.has_key('testsuitedir') and plugin['testsuitedir'] != "":480      plugin_am.write("EXTRA_DIST += %(rel_path)s/%(testsuitedir)s\n" % plugin)481  if plugin.has_key('dist_testsuite') and plugin['dist_testsuite'] != "":482    plugin_am.write("EXTRA_DIST += %(rel_path)s/%(dist_testsuite)s\n" % plugin)483  if plugin['docs'] is not None:484    plugin_am.write("EXTRA_DIST += ${top_srcdir}/%(rel_path)s/docs/*.rst\n" % plugin)485  plugin_am.write("""486%(root_plugin_dir)s_%(plugin_prefix)s%(name)s_dir=${top_srcdir}/%(rel_path)s487# Include sources in EXTRA_DIST because we might not build this, but we488# still want the sources to wind up in a tarball489EXTRA_DIST += %(rel_path)s/plugin.ini %(sources)s490if %(static_build_conditional_tag)s491  noinst_LTLIBRARIES+=%(root_plugin_dir)s/%(libname)s.la492  %(root_plugin_dir)s_%(libname)s_la_LIBADD=%(libs)s493  %(root_plugin_dir)s_%(libname)s_la_DEPENDENCIES=%(libs)s494  %(root_plugin_dir)s_%(libname)s_la_LDFLAGS=$(AM_LDFLAGS) %(ldflags)s $(GCOV_LIBS)495  %(root_plugin_dir)s_%(libname)s_la_CPPFLAGS=$(AM_CPPFLAGS) -DPANDORA_MODULE_NAME=%(module_name)s -DPANDORA_MODULE_AUTHOR='%(author)s' -DPANDORA_MODULE_TITLE='%(title)s' -DPANDORA_MODULE_VERSION='%(version)s' -DPANDORA_MODULE_LICENSE=%(license)s -DPANDORA_MODULE_DEPENDENCIES='%(dependencies)s' %(cppflags)s496  %(root_plugin_dir)s_%(libname)s_la_CXXFLAGS=$(AM_CXXFLAGS) %(cxxflags)s497  %(root_plugin_dir)s_%(libname)s_la_CFLAGS=$(AM_CFLAGS) %(cflags)s498  %(root_plugin_dir)s_%(libname)s_la_SOURCES=%(sources)s499  check_PROGRAMS += %(tests)s500  PANDORA_DYNAMIC_LDADDS+=${top_builddir}/%(root_plugin_dir)s/%(libname)s.la501endif502EXTRA_DIST += %(rel_path)s/plugin.ini503if %(shared_build_conditional_tag)s504  %(library_type)s_LTLIBRARIES+=%(root_plugin_dir)s/%(libname)s.la505  %(root_plugin_dir)s_%(libname)s_la_LDFLAGS=-avoid-version -rpath $(pkgplugindir) $(AM_LDFLAGS) %(ldflags)s $(GCOV_LIBS)506  %(root_plugin_dir)s_%(libname)s_la_LIBADD=%(libs)s507  %(root_plugin_dir)s_%(libname)s_la_DEPENDENCIES=%(libs)s508  %(root_plugin_dir)s_%(libname)s_la_CPPFLAGS=$(AM_CPPFLAGS) -DPANDORA_DYNAMIC_PLUGIN -DPANDORA_MODULE_NAME=%(module_name)s -DPANDORA_MODULE_AUTHOR='%(author)s' -DPANDORA_MODULE_TITLE='%(title)s' -DPANDORA_MODULE_VERSION='%(version)s' -DPANDORA_MODULE_LICENSE=%(license)s -DPANDORA_MODULE_DEPENDENCIES='%(dependencies)s' %(cppflags)s509  %(root_plugin_dir)s_%(libname)s_la_CXXFLAGS=$(AM_CXXFLAGS) %(cxxflags)s510  %(root_plugin_dir)s_%(libname)s_la_CFLAGS=$(AM_CFLAGS) %(cflags)s511  %(root_plugin_dir)s_%(libname)s_la_SOURCES=%(sources)s512  check_PROGRAMS += %(tests)s513endif514""" % plugin)515  plugin_am_file=os.path.join(plugin['rel_path'],'plugin.am')516  if os.path.exists(plugin_am_file):517    plugin_am.write('include %s\n' % plugin_am_file)518#519# MAIN STARTS HERE:520#521# Parse the pandora-plugin config file522config_defaults= dict(523  top_srcdir='.',524  top_builddir='.',525  plugin_ini_fname='plugin.ini',526  plugin_prefix='',527  plugin_suffix='',528  extra_cflags='',529  extra_cppflags='',530  extra_cxxflags='',531  root_plugin_dir='',532  pkgplugindir='',533  default_install='True',534  default_plugin_version='',535  default_load_by_default='False',536  force_lowercase_libname='True',537  plugin_name_separator='_',538  module_name_separator='::'539)540config_parser = ConfigParser.ConfigParser(defaults=config_defaults)541config_parser.read(pandora_plugin_file)542config = dict(config_parser.items('pandora-plugin'))543config['force_lowercase_libname']=config_parser.getboolean('pandora-plugin','force_lowercase_libname')544# I'm 3 seconds away from writing a comprehensive build solution545if not os.path.exists('config/pandora_vc_revinfo'):546  if os.path.exists('.bzr'):547    bzr_revno= subprocess.Popen(["bzr", "revno"], stdout=subprocess.PIPE).communicate()[0].strip()548    rev_date= datetime.date.fromtimestamp(time.time())549    config['default_plugin_version'] = "%d.%02d.%s" % (rev_date.year, rev_date.month, bzr_revno)550  else:551    config['default_plugin_version']=datetime.date.fromtimestamp(time.time()).isoformat()552else:553  # need to read config/pandora_vc_revno554  pandora_vc_revno=open('config/pandora_vc_revinfo','r').read().split()555  rev_date=""556  bzr_revno=""557  for revno_line in pandora_vc_revno:558    (revno_key,revno_val)= revno_line.split("=")559    if revno_key == 'PANDORA_VC_REVNO':560      bzr_revno=revno_val.strip()561    elif revno_key == 'PANDORA_RELEASE_DATE':562      rev_date=revno_val.strip()563  config['default_plugin_version'] = "%s.%s" % (rev_date, bzr_revno)564actions=[]565for arg in sys.argv:566  if arg.startswith('--top_srcdir='):567    config['top_srcdir']=arg[12:]568  elif arg.startswith('--top_builddir='):569    config['top_builddir']=arg[14:]570  elif arg == "--force-all":571    actions=['plugin-list','pandora-plugin.am','write']572    break573  else:574    actions.append(arg)575if len(actions) == 0:576  actions.append('write')577plugin_list=[]578def accumulate_plugins(arg, dirname, fnames):579  # plugin_ini_fname is a name in dirname indicating dirname is a plugin.580  if config['plugin_ini_fname'] in fnames:581    arg.append(dirname)582os.path.walk(os.path.join(config['top_srcdir'],583                          config['root_plugin_dir']),584             accumulate_plugins,585             plugin_list)586if not os.path.exists("config/pandora-plugin.am") or "write" in actions:587  plugin_am_file = ChangeProtectedFile(os.path.join('config', 'pandora-plugin.am'))588  plugin_am_file.write("""589# always the current list, generated every build so keep this lean.590# pandora-plugin.list: datestamp preserved list591${srcdir}/config/pandora-plugin.list: .plugin.scan592.plugin.scan:593	@cd ${top_srcdir} && python config/pandora-plugin plugin-list594# Plugins affect configure; so to prevent configure running twice in a tarball595# build (once up front, once with the right list of plugins, we ship the596# generated list of plugins and the housekeeping material for that list so it597# is likewise not updated.598EXTRA_DIST += \599	config/pandora-plugin.am \600	config/pandora-plugin.ac \601	config/pandora-plugin \602	config/pandora-plugin.ini603# Seed the list of plugin LDADDS which plugins may extend.604PANDORA_DYNAMIC_LDADDS=605# plugin.stamp: graph dominator for creating all per pandora-plugin.ac/am606# files. This is invoked when the code to generate such files has altered.""")607if not os.path.exists("config/pandora-plugin.ac") or "write" in actions:608  plugin_ac_file = ChangeProtectedFile(os.path.join('config', 'pandora-plugin.ac'))609  plugin_ac_file.write("dnl Generated file, run make to rebuild\n")610  plugin_ac_file.write("""611AC_ARG_WITH([all-static],[612AS_HELP_STRING([--with-all-static],[Link all plugins staticly into the server @<:@default=no@:>@])613],[614    with_all_static="$withval"615    ],[616    with_all_static=no617])618  """)619if os.path.exists("docs/plugins"):620  if not os.path.exists("docs/plugins/list.rst") or "write" in actions:621    plugin_doc_index = ChangeProtectedFile("docs/plugins/list.rst")622    plugin_doc_index.write("""623Plugin Documentation624====================625.. toctree::626   :maxdepth: 2627""")628if os.path.exists('plugin.ini'):629  # Are we in a plugin dir which wants to have a self-sufficient build system?630  plugin_list=['.']631  write_external_plugin()632else:633  plugin_list_file = ChangeProtectedFile(os.path.join('config', 'pandora-plugin.list'))634  for p in plugin_list:635    plugin_list_file.write(p)636    plugin_list_file.write("\n")637  plugin_list.sort()638  plugin_list_file.close()639if not os.path.exists("config/pandora-plugin.am") or 'write' in actions:640  plugin_am_file.write("\n${top_srcdir}/config/pandora-plugin.am: ${top_srcdir}/config/pandora-plugin.list ${top_srcdir}/config/pandora-plugin ")641  for plugin_dir in plugin_list:642    plugin_am_file.write("\\\n\t%s/plugin.ini " % plugin_dir)643  plugin_am_file.write("\n\tcd ${top_srcdir} && python config/pandora-plugin write\n")644  plugin_ini_list=[]645  # Load all plugin.ini files first so we can do dependency tracking.646  for plugin_dir in plugin_list:647    plugin = read_plugin_ini(plugin_dir)648    expand_plugin_ini(plugin)649    plugin_ini_list.append(plugin)650  # Check for duplicates651  plugin_name_list = [plugin['libname'] for plugin in plugin_ini_list]652  for plugin in plugin_ini_list:653    if plugin_name_list.count(plugin['libname']) != 1:654      print "Duplicate module name %s" % plugin['libname']655      exit(1)656  for plugin in plugin_ini_list:657    write_plugin(plugin, plugin_ini_list)658if plugin_am_file is not None:659  plugin_am_file.close()660if plugin_ac_file is not None:661  plugin_ac_file.close()662if plugin_doc_index is not None:...plugins.py
Source:plugins.py  
...62        request = super(PluginsTestBaseCase, self).get_request(*args, **kwargs)63        request.placeholder_media = Media()64        return request65class PluginsTestCase(PluginsTestBaseCase):66    def test_add_edit_plugin(self):67        """68        Test that you can add a text plugin69        """70        # add a new text plugin71        page_data = self.get_new_page_data()72        response = self.client.post(URL_CMS_PAGE_ADD, page_data)73        page = Page.objects.all()[0]74        plugin_data = {75            'plugin_type':"TextPlugin",76            'language':settings.LANGUAGES[0][0],77            'placeholder':page.placeholders.get(slot="body").pk,78        }79        response = self.client.post(URL_CMS_PLUGIN_ADD, plugin_data)80        self.assertEquals(response.status_code, 200)81        self.assertEquals(int(response.content), CMSPlugin.objects.all()[0].pk)82        # now edit the plugin83        edit_url = URL_CMS_PLUGIN_EDIT + response.content + "/"84        response = self.client.get(edit_url)85        self.assertEquals(response.status_code, 200)86        data = {87            "body":"Hello World"88        }89        response = self.client.post(edit_url, data)90        self.assertEquals(response.status_code, 200)91        txt = Text.objects.all()[0]92        self.assertEquals("Hello World", txt.body)93    def test_copy_plugins(self):94        """95        Test that copying plugins works as expected.96        """97        # create some objects98        page_en = create_page("CopyPluginTestPage (EN)", "nav_playground.html", "en")99        page_de = create_page("CopyPluginTestPage (DE)", "nav_playground.html", "de")100        ph_en = page_en.placeholders.get(slot="body")101        ph_de = page_de.placeholders.get(slot="body")102        103        # add the text plugin104        text_plugin_en = add_plugin(ph_en, "TextPlugin", "en", body="Hello World")105        self.assertEquals(text_plugin_en.pk, CMSPlugin.objects.all()[0].pk)106        107        # add a *nested* link plugin108        link_plugin_en = add_plugin(ph_en, "LinkPlugin", "en", target=text_plugin_en,109                                 name="A Link", url="https://www.django-cms.org")110        111        # the call above to add a child makes a plugin reload required here.112        text_plugin_en = self.reload(text_plugin_en)113        114        # check the relations115        self.assertEquals(text_plugin_en.get_children().count(), 1)116        self.assertEqual(link_plugin_en.parent.pk, text_plugin_en.pk)117        118        # just sanity check that so far everything went well119        self.assertEqual(CMSPlugin.objects.count(), 2)120        121        # copy the plugins to the german placeholder122        copy_plugins_to(ph_en.cmsplugin_set.all(), ph_de, 'de')123        124        self.assertEqual(ph_de.cmsplugin_set.filter(parent=None).count(), 1)125        text_plugin_de = ph_de.cmsplugin_set.get(parent=None).get_plugin_instance()[0]126        self.assertEqual(text_plugin_de.get_children().count(), 1)127        link_plugin_de = text_plugin_de.get_children().get().get_plugin_instance()[0]128        129        130        # check we have twice as many plugins as before131        self.assertEqual(CMSPlugin.objects.count(), 4)132        133        # check language plugins134        self.assertEqual(CMSPlugin.objects.filter(language='de').count(), 2)135        self.assertEqual(CMSPlugin.objects.filter(language='en').count(), 2)136        137        138        text_plugin_en = self.reload(text_plugin_en)139        link_plugin_en = self.reload(link_plugin_en)140        141        # check the relations in english didn't change142        self.assertEquals(text_plugin_en.get_children().count(), 1)143        self.assertEqual(link_plugin_en.parent.pk, text_plugin_en.pk)144        145        self.assertEqual(link_plugin_de.name, link_plugin_en.name)146        self.assertEqual(link_plugin_de.url, link_plugin_en.url)147        148        self.assertEqual(text_plugin_de.body, text_plugin_en.body)149        150    def test_remove_plugin_before_published(self):151        """152        When removing a draft plugin we would expect the public copy of the plugin to also be removed153        """154        # add a page155        page_data = self.get_new_page_data()156        response = self.client.post(URL_CMS_PAGE_ADD, page_data)157        page = Page.objects.all()[0]158        # add a plugin159        plugin_data = {160            'plugin_type':"TextPlugin",161            'language':settings.LANGUAGES[0][0],162            'placeholder':page.placeholders.get(slot="body").pk,163        }164        response = self.client.post(URL_CMS_PLUGIN_ADD, plugin_data)165        self.assertEquals(response.status_code, 200)166        self.assertEquals(int(response.content), CMSPlugin.objects.all()[0].pk)167        # there should be only 1 plugin168        self.assertEquals(CMSPlugin.objects.all().count(), 1)169        # delete the plugin170        plugin_data = {171            'plugin_id': int(response.content)172        }173        remove_url = URL_CMS_PLUGIN_REMOVE174        response = self.client.post(remove_url, plugin_data)175        self.assertEquals(response.status_code, 200)176        # there should be no plugins177        self.assertEquals(0, CMSPlugin.objects.all().count())178    def test_remove_plugin_after_published(self):179        # add a page180        page_data = self.get_new_page_data()181        response = self.client.post(URL_CMS_PAGE_ADD, page_data)182        page = Page.objects.all()[0]183        # add a plugin184        plugin_data = {185            'plugin_type':"TextPlugin",186            'language':settings.LANGUAGES[0][0],187            'placeholder':page.placeholders.get(slot="body").pk,188        }189        response = self.client.post(URL_CMS_PLUGIN_ADD, plugin_data)190        plugin_id = int(response.content)191        self.assertEquals(response.status_code, 200)192        self.assertEquals(int(response.content), CMSPlugin.objects.all()[0].pk)193        # there should be only 1 plugin194        self.assertEquals(CMSPlugin.objects.all().count(), 1)195        # publish page196        response = self.client.post(URL_CMS_PAGE + "%d/change-status/" % page.pk, {1 :1})197        self.assertEqual(response.status_code, 200)198        # there should now be two plugins - 1 draft, 1 public199        self.assertEquals(CMSPlugin.objects.all().count(), 2)200        # delete the plugin201        plugin_data = {202            'plugin_id': plugin_id203        }204        remove_url = URL_CMS_PLUGIN_REMOVE205        response = self.client.post(remove_url, plugin_data)206        self.assertEquals(response.status_code, 200)207        # there should be no plugins208        self.assertEquals(CMSPlugin.objects.all().count(), 0)209    def test_remove_plugin_not_associated_to_page(self):210        """211        Test case for PlaceholderField212        """213        page_data = self.get_new_page_data()214        response = self.client.post(URL_CMS_PAGE_ADD, page_data)215        page = Page.objects.all()[0]216        # add a plugin217        plugin_data = {218            'plugin_type':"TextPlugin",219            'language':settings.LANGUAGES[0][0],220            'placeholder':page.placeholders.get(slot="body").pk,221        }222        response = self.client.post(URL_CMS_PLUGIN_ADD, plugin_data)223        self.assertEquals(response.status_code, 200)224        self.assertEquals(int(response.content), CMSPlugin.objects.all()[0].pk)225        # there should be only 1 plugin226        self.assertEquals(CMSPlugin.objects.all().count(), 1)227        ph = Placeholder(slot="subplugin")228        ph.save()229        plugin_data = {230            'plugin_type':"TextPlugin",231            'language':settings.LANGUAGES[0][0],232            'placeholder': ph.pk,233            'parent': int(response.content)234        }235        response = self.client.post(URL_CMS_PLUGIN_ADD, plugin_data)236        # no longer allowed for security reasons237        self.assertEqual(response.status_code, 404)238    def test_register_plugin_twice_should_raise(self):239        number_of_plugins_before = len(plugin_pool.get_all_plugins())240        # The first time we register the plugin is should work241        plugin_pool.register_plugin(DumbFixturePlugin)242        # Let's add it a second time. We should catch and exception243        raised = False244        try:245            plugin_pool.register_plugin(DumbFixturePlugin)246        except PluginAlreadyRegistered:247            raised = True248        self.assertTrue(raised)249        # Let's also unregister the plugin now, and assert it's not in the250        # pool anymore251        plugin_pool.unregister_plugin(DumbFixturePlugin)252        # Let's make sure we have the same number of plugins as before:253        number_of_plugins_after = len(plugin_pool.get_all_plugins())254        self.assertEqual(number_of_plugins_before, number_of_plugins_after)255    def test_unregister_non_existing_plugin_should_raise(self):256        number_of_plugins_before = len(plugin_pool.get_all_plugins())257        raised = False258        try:259            # There should not be such a plugin registered if the others tests260            # don't leak plugins261            plugin_pool.unregister_plugin(DumbFixturePlugin)262        except PluginNotRegistered:263            raised = True264        self.assertTrue(raised)265        # Let's count, to make sure we didn't remove a plugin accidentally.266        number_of_plugins_after = len(plugin_pool.get_all_plugins())267        self.assertEqual(number_of_plugins_before, number_of_plugins_after)268                269    def test_inheritplugin_media(self):270        """271        Test case for InheritPagePlaceholder272        """273        with SettingsOverride(CMS_MODERATOR=False):274            inheritfrompage = create_page('page to inherit from',275                                          'nav_playground.html',276                                          'en')277            278            body = inheritfrompage.placeholders.get(slot="body")279            280            plugin = TwitterRecentEntries(281                plugin_type='TwitterRecentEntriesPlugin',282                placeholder=body, 283                position=1, 284                language=settings.LANGUAGE_CODE,285                twitter_user='djangocms',286            )287            plugin.insert_at(None, position='last-child', save=True)288            289            page = create_page('inherit from page',290                               'nav_playground.html',291                               'en',292                               published=True)293            294            inherited_body = page.placeholders.get(slot="body")295                    296            inherit_plugin = InheritPagePlaceholder(297                plugin_type='InheritPagePlaceholderPlugin',298                placeholder=inherited_body, 299                position=1, 300                language=settings.LANGUAGE_CODE,301                from_page=inheritfrompage,302                from_language=settings.LANGUAGE_CODE)303            inherit_plugin.insert_at(None, position='last-child', save=True)304            305            self.client.logout()306            response = self.client.get(page.get_absolute_url())307            self.assertTrue('%scms/js/libs/jquery.tweet.js' % settings.STATIC_URL in response.content, response.content)308    def test_copy_textplugin(self):309        """310        Test that copying of textplugins replaces references to copied plugins311        """312        page = create_page("page", "nav_playground.html", "en")313        314        placeholder = page.placeholders.get(slot='body')315        plugin_base = CMSPlugin(316            plugin_type='TextPlugin',317            placeholder=placeholder,318            position=1,319            language=self.FIRST_LANG)320        plugin_base.insert_at(None, position='last-child', save=False)321        plugin = Text(body='')322        plugin_base.set_base_attr(plugin)...cordova_plugins.js
Source:cordova_plugins.js  
1cordova.define('cordova/plugin_list', function(require, exports, module) {2module.exports = [3    {4        "file": "plugins/cordova-plugin-battery-status/www/battery.js",5        "id": "cordova-plugin-battery-status.battery",6        "pluginId": "cordova-plugin-battery-status",7        "clobbers": [8            "navigator.battery"9        ]10    },11    {12        "file": "plugins/cordova-plugin-battery-status/src/browser/BatteryProxy.js",13        "id": "cordova-plugin-battery-status.Battery",14        "pluginId": "cordova-plugin-battery-status",15        "runs": true16    },17    {18        "file": "plugins/cordova-plugin-camera/www/CameraConstants.js",19        "id": "cordova-plugin-camera.Camera",20        "pluginId": "cordova-plugin-camera",21        "clobbers": [22            "Camera"23        ]24    },25    {26        "file": "plugins/cordova-plugin-camera/www/CameraPopoverOptions.js",27        "id": "cordova-plugin-camera.CameraPopoverOptions",28        "pluginId": "cordova-plugin-camera",29        "clobbers": [30            "CameraPopoverOptions"31        ]32    },33    {34        "file": "plugins/cordova-plugin-camera/www/Camera.js",35        "id": "cordova-plugin-camera.camera",36        "pluginId": "cordova-plugin-camera",37        "clobbers": [38            "navigator.camera"39        ]40    },41    {42        "file": "plugins/cordova-plugin-camera/src/browser/CameraProxy.js",43        "id": "cordova-plugin-camera.CameraProxy",44        "pluginId": "cordova-plugin-camera",45        "runs": true46    },47    {48        "file": "plugins/cordova-plugin-file/www/DirectoryEntry.js",49        "id": "cordova-plugin-file.DirectoryEntry",50        "pluginId": "cordova-plugin-file",51        "clobbers": [52            "window.DirectoryEntry"53        ]54    },55    {56        "file": "plugins/cordova-plugin-file/www/DirectoryReader.js",57        "id": "cordova-plugin-file.DirectoryReader",58        "pluginId": "cordova-plugin-file",59        "clobbers": [60            "window.DirectoryReader"61        ]62    },63    {64        "file": "plugins/cordova-plugin-file/www/Entry.js",65        "id": "cordova-plugin-file.Entry",66        "pluginId": "cordova-plugin-file",67        "clobbers": [68            "window.Entry"69        ]70    },71    {72        "file": "plugins/cordova-plugin-file/www/File.js",73        "id": "cordova-plugin-file.File",74        "pluginId": "cordova-plugin-file",75        "clobbers": [76            "window.File"77        ]78    },79    {80        "file": "plugins/cordova-plugin-file/www/FileEntry.js",81        "id": "cordova-plugin-file.FileEntry",82        "pluginId": "cordova-plugin-file",83        "clobbers": [84            "window.FileEntry"85        ]86    },87    {88        "file": "plugins/cordova-plugin-file/www/FileError.js",89        "id": "cordova-plugin-file.FileError",90        "pluginId": "cordova-plugin-file",91        "clobbers": [92            "window.FileError"93        ]94    },95    {96        "file": "plugins/cordova-plugin-file/www/FileReader.js",97        "id": "cordova-plugin-file.FileReader",98        "pluginId": "cordova-plugin-file",99        "clobbers": [100            "window.FileReader"101        ]102    },103    {104        "file": "plugins/cordova-plugin-file/www/FileSystem.js",105        "id": "cordova-plugin-file.FileSystem",106        "pluginId": "cordova-plugin-file",107        "clobbers": [108            "window.FileSystem"109        ]110    },111    {112        "file": "plugins/cordova-plugin-file/www/FileUploadOptions.js",113        "id": "cordova-plugin-file.FileUploadOptions",114        "pluginId": "cordova-plugin-file",115        "clobbers": [116            "window.FileUploadOptions"117        ]118    },119    {120        "file": "plugins/cordova-plugin-file/www/FileUploadResult.js",121        "id": "cordova-plugin-file.FileUploadResult",122        "pluginId": "cordova-plugin-file",123        "clobbers": [124            "window.FileUploadResult"125        ]126    },127    {128        "file": "plugins/cordova-plugin-file/www/FileWriter.js",129        "id": "cordova-plugin-file.FileWriter",130        "pluginId": "cordova-plugin-file",131        "clobbers": [132            "window.FileWriter"133        ]134    },135    {136        "file": "plugins/cordova-plugin-file/www/Flags.js",137        "id": "cordova-plugin-file.Flags",138        "pluginId": "cordova-plugin-file",139        "clobbers": [140            "window.Flags"141        ]142    },143    {144        "file": "plugins/cordova-plugin-file/www/LocalFileSystem.js",145        "id": "cordova-plugin-file.LocalFileSystem",146        "pluginId": "cordova-plugin-file",147        "clobbers": [148            "window.LocalFileSystem"149        ],150        "merges": [151            "window"152        ]153    },154    {155        "file": "plugins/cordova-plugin-file/www/Metadata.js",156        "id": "cordova-plugin-file.Metadata",157        "pluginId": "cordova-plugin-file",158        "clobbers": [159            "window.Metadata"160        ]161    },162    {163        "file": "plugins/cordova-plugin-file/www/ProgressEvent.js",164        "id": "cordova-plugin-file.ProgressEvent",165        "pluginId": "cordova-plugin-file",166        "clobbers": [167            "window.ProgressEvent"168        ]169    },170    {171        "file": "plugins/cordova-plugin-file/www/fileSystems.js",172        "id": "cordova-plugin-file.fileSystems",173        "pluginId": "cordova-plugin-file"174    },175    {176        "file": "plugins/cordova-plugin-file/www/requestFileSystem.js",177        "id": "cordova-plugin-file.requestFileSystem",178        "pluginId": "cordova-plugin-file",179        "clobbers": [180            "window.requestFileSystem"181        ]182    },183    {184        "file": "plugins/cordova-plugin-file/www/resolveLocalFileSystemURI.js",185        "id": "cordova-plugin-file.resolveLocalFileSystemURI",186        "pluginId": "cordova-plugin-file",187        "merges": [188            "window"189        ]190    },191    {192        "file": "plugins/cordova-plugin-file/www/browser/isChrome.js",193        "id": "cordova-plugin-file.isChrome",194        "pluginId": "cordova-plugin-file",195        "runs": true196    },197    {198        "file": "plugins/cordova-plugin-file/www/browser/Preparing.js",199        "id": "cordova-plugin-file.Preparing",200        "pluginId": "cordova-plugin-file",201        "runs": true202    },203    {204        "file": "plugins/cordova-plugin-file/src/browser/FileProxy.js",205        "id": "cordova-plugin-file.browserFileProxy",206        "pluginId": "cordova-plugin-file",207        "runs": true208    },209    {210        "file": "plugins/cordova-plugin-file/www/fileSystemPaths.js",211        "id": "cordova-plugin-file.fileSystemPaths",212        "pluginId": "cordova-plugin-file",213        "merges": [214            "cordova"215        ],216        "runs": true217    },218    {219        "file": "plugins/cordova-plugin-file/www/browser/FileSystem.js",220        "id": "cordova-plugin-file.firefoxFileSystem",221        "pluginId": "cordova-plugin-file",222        "merges": [223            "window.FileSystem"224        ]225    },226    {227        "file": "plugins/cordova-plugin-media-capture/www/CaptureAudioOptions.js",228        "id": "cordova-plugin-media-capture.CaptureAudioOptions",229        "pluginId": "cordova-plugin-media-capture",230        "clobbers": [231            "CaptureAudioOptions"232        ]233    },234    {235        "file": "plugins/cordova-plugin-media-capture/www/CaptureImageOptions.js",236        "id": "cordova-plugin-media-capture.CaptureImageOptions",237        "pluginId": "cordova-plugin-media-capture",238        "clobbers": [239            "CaptureImageOptions"240        ]241    },242    {243        "file": "plugins/cordova-plugin-media-capture/www/CaptureVideoOptions.js",244        "id": "cordova-plugin-media-capture.CaptureVideoOptions",245        "pluginId": "cordova-plugin-media-capture",246        "clobbers": [247            "CaptureVideoOptions"248        ]249    },250    {251        "file": "plugins/cordova-plugin-media-capture/www/CaptureError.js",252        "id": "cordova-plugin-media-capture.CaptureError",253        "pluginId": "cordova-plugin-media-capture",254        "clobbers": [255            "CaptureError"256        ]257    },258    {259        "file": "plugins/cordova-plugin-media-capture/www/MediaFileData.js",260        "id": "cordova-plugin-media-capture.MediaFileData",261        "pluginId": "cordova-plugin-media-capture",262        "clobbers": [263            "MediaFileData"264        ]265    },266    {267        "file": "plugins/cordova-plugin-media-capture/www/MediaFile.js",268        "id": "cordova-plugin-media-capture.MediaFile",269        "pluginId": "cordova-plugin-media-capture",270        "clobbers": [271            "MediaFile"272        ]273    },274    {275        "file": "plugins/cordova-plugin-media-capture/www/capture.js",276        "id": "cordova-plugin-media-capture.capture",277        "pluginId": "cordova-plugin-media-capture",278        "clobbers": [279            "navigator.device.capture"280        ]281    },282    {283        "file": "plugins/cordova-plugin-media-capture/src/browser/CaptureProxy.js",284        "id": "cordova-plugin-media-capture.CaptureProxy",285        "pluginId": "cordova-plugin-media-capture",286        "runs": true287    },288    {289        "file": "plugins/cordova-plugin-contacts/www/contacts.js",290        "id": "cordova-plugin-contacts.contacts",291        "pluginId": "cordova-plugin-contacts",292        "clobbers": [293            "navigator.contacts"294        ]295    },296    {297        "file": "plugins/cordova-plugin-contacts/www/Contact.js",298        "id": "cordova-plugin-contacts.Contact",299        "pluginId": "cordova-plugin-contacts",300        "clobbers": [301            "Contact"302        ]303    },304    {305        "file": "plugins/cordova-plugin-contacts/www/ContactAddress.js",306        "id": "cordova-plugin-contacts.ContactAddress",307        "pluginId": "cordova-plugin-contacts",308        "clobbers": [309            "ContactAddress"310        ]311    },312    {313        "file": "plugins/cordova-plugin-contacts/www/ContactError.js",314        "id": "cordova-plugin-contacts.ContactError",315        "pluginId": "cordova-plugin-contacts",316        "clobbers": [317            "ContactError"318        ]319    },320    {321        "file": "plugins/cordova-plugin-contacts/www/ContactField.js",322        "id": "cordova-plugin-contacts.ContactField",323        "pluginId": "cordova-plugin-contacts",324        "clobbers": [325            "ContactField"326        ]327    },328    {329        "file": "plugins/cordova-plugin-contacts/www/ContactFindOptions.js",330        "id": "cordova-plugin-contacts.ContactFindOptions",331        "pluginId": "cordova-plugin-contacts",332        "clobbers": [333            "ContactFindOptions"334        ]335    },336    {337        "file": "plugins/cordova-plugin-contacts/www/ContactName.js",338        "id": "cordova-plugin-contacts.ContactName",339        "pluginId": "cordova-plugin-contacts",340        "clobbers": [341            "ContactName"342        ]343    },344    {345        "file": "plugins/cordova-plugin-contacts/www/ContactOrganization.js",346        "id": "cordova-plugin-contacts.ContactOrganization",347        "pluginId": "cordova-plugin-contacts",348        "clobbers": [349            "ContactOrganization"350        ]351    },352    {353        "file": "plugins/cordova-plugin-contacts/www/ContactFieldType.js",354        "id": "cordova-plugin-contacts.ContactFieldType",355        "pluginId": "cordova-plugin-contacts",356        "merges": [357            ""358        ]359    },360    {361        "file": "plugins/cordova-plugin-device/www/device.js",362        "id": "cordova-plugin-device.device",363        "pluginId": "cordova-plugin-device",364        "clobbers": [365            "device"366        ]367    },368    {369        "file": "plugins/cordova-plugin-device/src/browser/DeviceProxy.js",370        "id": "cordova-plugin-device.DeviceProxy",371        "pluginId": "cordova-plugin-device",372        "runs": true373    },374    {375        "file": "plugins/cordova-plugin-device-motion/www/Acceleration.js",376        "id": "cordova-plugin-device-motion.Acceleration",377        "pluginId": "cordova-plugin-device-motion",378        "clobbers": [379            "Acceleration"380        ]381    },382    {383        "file": "plugins/cordova-plugin-device-motion/www/accelerometer.js",384        "id": "cordova-plugin-device-motion.accelerometer",385        "pluginId": "cordova-plugin-device-motion",386        "clobbers": [387            "navigator.accelerometer"388        ]389    },390    {391        "file": "plugins/cordova-plugin-device-motion/src/browser/AccelerometerProxy.js",392        "id": "cordova-plugin-device-motion.AccelerometerProxy",393        "pluginId": "cordova-plugin-device-motion",394        "runs": true395    },396    {397        "file": "plugins/cordova-plugin-device-orientation/www/CompassError.js",398        "id": "cordova-plugin-device-orientation.CompassError",399        "pluginId": "cordova-plugin-device-orientation",400        "clobbers": [401            "CompassError"402        ]403    },404    {405        "file": "plugins/cordova-plugin-device-orientation/www/CompassHeading.js",406        "id": "cordova-plugin-device-orientation.CompassHeading",407        "pluginId": "cordova-plugin-device-orientation",408        "clobbers": [409            "CompassHeading"410        ]411    },412    {413        "file": "plugins/cordova-plugin-device-orientation/www/compass.js",414        "id": "cordova-plugin-device-orientation.compass",415        "pluginId": "cordova-plugin-device-orientation",416        "clobbers": [417            "navigator.compass"418        ]419    },420    {421        "file": "plugins/cordova-plugin-device-orientation/src/browser/CompassProxy.js",422        "id": "cordova-plugin-device-orientation.CompassProxy",423        "pluginId": "cordova-plugin-device-orientation",424        "runs": true425    },426    {427        "file": "plugins/cordova-plugin-dialogs/www/notification.js",428        "id": "cordova-plugin-dialogs.notification",429        "pluginId": "cordova-plugin-dialogs",430        "merges": [431            "navigator.notification"432        ]433    },434    {435        "file": "plugins/cordova-plugin-dialogs/www/browser/notification.js",436        "id": "cordova-plugin-dialogs.notification_browser",437        "pluginId": "cordova-plugin-dialogs",438        "merges": [439            "navigator.notification"440        ]441    },442    {443        "file": "plugins/cordova-plugin-file-transfer/www/FileTransferError.js",444        "id": "cordova-plugin-file-transfer.FileTransferError",445        "pluginId": "cordova-plugin-file-transfer",446        "clobbers": [447            "window.FileTransferError"448        ]449    },450    {451        "file": "plugins/cordova-plugin-file-transfer/www/FileTransfer.js",452        "id": "cordova-plugin-file-transfer.FileTransfer",453        "pluginId": "cordova-plugin-file-transfer",454        "clobbers": [455            "window.FileTransfer"456        ]457    },458    {459        "file": "plugins/cordova-plugin-file-transfer/www/browser/FileTransfer.js",460        "id": "cordova-plugin-file-transfer.BrowserFileTransfer",461        "pluginId": "cordova-plugin-file-transfer",462        "clobbers": [463            "window.FileTransfer"464        ]465    },466    {467        "file": "plugins/cordova-plugin-globalization/www/GlobalizationError.js",468        "id": "cordova-plugin-globalization.GlobalizationError",469        "pluginId": "cordova-plugin-globalization",470        "clobbers": [471            "window.GlobalizationError"472        ]473    },474    {475        "file": "plugins/cordova-plugin-globalization/www/globalization.js",476        "id": "cordova-plugin-globalization.globalization",477        "pluginId": "cordova-plugin-globalization",478        "clobbers": [479            "navigator.globalization"480        ]481    },482    {483        "file": "plugins/cordova-plugin-globalization/www/browser/moment.js",484        "id": "cordova-plugin-globalization.moment",485        "pluginId": "cordova-plugin-globalization",486        "runs": true487    },488    {489        "file": "plugins/cordova-plugin-globalization/src/browser/GlobalizationProxy.js",490        "id": "cordova-plugin-globalization.GlobalizationProxy",491        "pluginId": "cordova-plugin-globalization",492        "runs": true493    },494    {495        "file": "plugins/cordova-plugin-inappbrowser/www/inappbrowser.js",496        "id": "cordova-plugin-inappbrowser.inappbrowser",497        "pluginId": "cordova-plugin-inappbrowser",498        "clobbers": [499            "cordova.InAppBrowser.open",500            "window.open"501        ]502    },503    {504        "file": "plugins/cordova-plugin-inappbrowser/src/browser/InAppBrowserProxy.js",505        "id": "cordova-plugin-inappbrowser.InAppBrowserProxy",506        "pluginId": "cordova-plugin-inappbrowser",507        "merges": [508            ""509        ]510    },511    {512        "file": "plugins/cordova-plugin-media/www/MediaError.js",513        "id": "cordova-plugin-media.MediaError",514        "pluginId": "cordova-plugin-media",515        "clobbers": [516            "window.MediaError"517        ]518    },519    {520        "file": "plugins/cordova-plugin-media/www/Media.js",521        "id": "cordova-plugin-media.Media",522        "pluginId": "cordova-plugin-media",523        "clobbers": [524            "window.Media"525        ]526    },527    {528        "file": "plugins/cordova-plugin-media/www/browser/Media.js",529        "id": "cordova-plugin-media.BrowserMedia",530        "pluginId": "cordova-plugin-media",531        "clobbers": [532            "window.Media"533        ]534    },535    {536        "file": "plugins/cordova-plugin-network-information/www/network.js",537        "id": "cordova-plugin-network-information.network",538        "pluginId": "cordova-plugin-network-information",539        "clobbers": [540            "navigator.connection",541            "navigator.network.connection"542        ]543    },544    {545        "file": "plugins/cordova-plugin-network-information/www/Connection.js",546        "id": "cordova-plugin-network-information.Connection",547        "pluginId": "cordova-plugin-network-information",548        "clobbers": [549            "Connection"550        ]551    },552    {553        "file": "plugins/cordova-plugin-network-information/src/browser/network.js",554        "id": "cordova-plugin-network-information.NetworkInfoProxy",555        "pluginId": "cordova-plugin-network-information",556        "runs": true557    },558    {559        "file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js",560        "id": "cordova-plugin-splashscreen.SplashScreen",561        "pluginId": "cordova-plugin-splashscreen",562        "clobbers": [563            "navigator.splashscreen"564        ]565    },566    {567        "file": "plugins/cordova-plugin-splashscreen/src/browser/SplashScreenProxy.js",568        "id": "cordova-plugin-splashscreen.SplashScreenProxy",569        "pluginId": "cordova-plugin-splashscreen",570        "runs": true571    },572    {573        "file": "plugins/cordova-plugin-statusbar/www/statusbar.js",574        "id": "cordova-plugin-statusbar.statusbar",575        "pluginId": "cordova-plugin-statusbar",576        "clobbers": [577            "window.StatusBar"578        ]579    },580    {581        "file": "plugins/cordova-plugin-statusbar/src/browser/statusbar.js",582        "id": "cordova-plugin-statusbar.statusbar.Browser",583        "pluginId": "cordova-plugin-statusbar",584        "merges": [585            "window.StatusBar"586        ]587    },588    {589        "file": "plugins/cordova-plugin-vibration/www/vibration.js",590        "id": "cordova-plugin-vibration.notification",591        "pluginId": "cordova-plugin-vibration",592        "merges": [593            "navigator.notification",594            "navigator"595        ]596    },597    {598        "file": "plugins/cordova-plugin-vibration/src/browser/Vibration.js",599        "id": "cordova-plugin-vibration.Vibration",600        "pluginId": "cordova-plugin-vibration",601        "merges": [602            "navigator.notification",603            "navigator"604        ]605    }606];607module.exports.metadata = 608// TOP OF METADATA609{610    "cordova-plugin-battery-status": "1.1.2",611    "cordova-plugin-camera": "2.1.1",612    "cordova-plugin-file": "6.0.2",613    "cordova-plugin-media-capture": "1.2.0",614    "cordova-plugin-console": "1.0.7",615    "cordova-plugin-contacts": "2.0.1",616    "cordova-plugin-device": "1.1.7",617    "cordova-plugin-device-motion": "1.2.5",618    "cordova-plugin-device-orientation": "1.0.7",619    "cordova-plugin-dialogs": "1.2.1",620    "cordova-plugin-file-transfer": "1.5.1",621    "cordova-plugin-geolocation": "2.1.0",622    "cordova-plugin-globalization": "1.0.9",623    "cordova-plugin-inappbrowser": "1.3.0",624    "cordova-plugin-media": "2.2.0",625    "cordova-plugin-network-information": "1.2.1",626    "cordova-plugin-splashscreen": "3.2.2",627    "cordova-plugin-statusbar": "2.1.3",628    "cordova-plugin-vibration": "2.1.6",629    "cordova-plugin-whitelist": "1.2.2"630}631// BOTTOM OF METADATA...PluginManager.py
Source:PluginManager.py  
...35    def add_directory(self, path):36        """Add directory to search path for plugins"""37        self._backend.add_plugin_directories(path)38        self._cache = None39    def add_plugin(self, plugin):40        """Add singe plugin-instance"""41        self._backend.add_plugins(plugin)42    def _load(self):43        """lazy load"""44        if self._cache is not None:45            # cache clean!46            return47        self._cache = plugin.PluginStorage()48        self._backend.collect_plugins()49        (enabled, disabled) = self._validate_plugins(self._backend.get_plugins())50        for plugin_to_add in enabled:51            self._load_plugin(plugin_to_add, self._cache)52        self._cache_disabled = self._filter_duplicated_disabled(53            enabled, disabled)54        self._plugins_loaded = len(enabled)55    def _validate_plugins(self, plugins):56        def partition(plugins):57            plugins_valid = []58            plugins_incompatible = []59            for plugin_to_validate in plugins:60                if not is_plugin(plugin_to_validate):61                    continue62                compability_check_result = self._plugin_dependency.check(63                    plugin_to_validate)64                if compability_check_result is True:65                    plugins_valid.append(plugin_to_validate)66                else:67                    item = (68                        plugin_to_validate.get_name(),69                        compability_check_result)70                    plugins_incompatible.append(item)71            return (plugins_valid, plugins_incompatible)72        def is_plugin(plugin_to_validate):73            if not isinstance(plugin_to_validate, pluginmanager.IPlugin):74                return False75            if plugin_to_validate.get_name() == "plugin":76                return False77            return True78        return partition(plugins)79    def _load_plugin(self, plugin_to_add, plugin_storage):80        def handle_aliases(plugin_to_add):81            add_plugin(82                plugin_to_add.get_name().split(' '),83                plugin_to_add,84                plugin_storage)85            for name in plugin_to_add.alias():86                add_plugin(87                    name.lower().split(' '),88                    plugin_to_add,89                    plugin_storage)90        def add_plugin(name, plugin_to_add, parent):91            if len(name) == 1:92                add_plugin_single(name[0], plugin_to_add, parent)93            else:94                add_plugin_compose(name[0], name[1:], plugin_to_add, parent)95        def add_plugin_single(name, plugin_to_add, parent):96            plugin_existing = parent.get_plugins(name)97            if plugin_existing is None:98                parent.add_plugin(name, plugin_to_add)99            else:100                if not plugin_existing.is_callable_plugin():101                    plugin_existing.change_with(plugin_to_add)102                    parent.add_plugin(name, plugin_to_add)103                else:104                    error("Duplicated plugin {}!".format(name))105        def add_plugin_compose(106                name_first,107                name_remaining,108                plugin_to_add,109                parent):110            plugin_existing = parent.get_plugins(name_first)111            if plugin_existing is None:112                plugin_existing = plugin.Plugin()113                plugin_existing._name = name_first114                plugin_existing.__doc__ = ''115                parent.add_plugin(name_first, plugin_existing)116            add_plugin(name_remaining, plugin_to_add, plugin_existing)117        return handle_aliases(plugin_to_add)118    def _filter_duplicated_disabled(self, enabled_list, disabled_list):119        enabled_names = []120        for plugin_enabled in enabled_list:121            enabled_names.append(plugin_enabled.get_name())122            enabled_names.extend(plugin_enabled.alias())123        disabled_unique = {}124        for plugin_name, disable_reason in disabled_list:125            if plugin_name in enabled_names:126                continue127            if plugin_name in disabled_unique:128                disabled_unique[plugin_name].append(disable_reason)129            else:130                disabled_unique[plugin_name] = [disable_reason]...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
