def test_egg_info(): egg_dir = os.path.join(os.path.dirname(__file__), 'fake_packages', 'FakePlugin.egg') found = pluginlib.find_egg_info_dir(os.path.join(egg_dir, 'fakeplugin')) assert found == os.path.join(egg_dir, 'FakePlugin.egg-info') found = pluginlib.find_egg_info_dir(os.path.dirname(__file__)) assert found == os.path.join(os.path.dirname(os.path.dirname(__file__)), 'PasteScript.egg-info')
def test_egg_info(): egg_dir = os.path.join(os.path.dirname(__file__), 'fake_packages', 'FakePlugin.egg') found = pluginlib.find_egg_info_dir(os.path.join(egg_dir, 'fakeplugin')) assert found == os.path.join(egg_dir, 'FakePlugin.egg-info') found = pluginlib.find_egg_info_dir(os.path.dirname(__file__)) assert found == os.path.join( os.path.dirname(os.path.dirname(__file__)), 'PasteScript.egg-info')
def find_dir(self, dirname, package=False): egg_info = pluginlib.find_egg_info_dir(os.getcwd()) # @@: Should give error about egg_info when top_level.txt missing f = open(os.path.join(egg_info, 'top_level.txt')) packages = [l.strip() for l in f.readlines() if l.strip() and not l.strip().startswith('#')] f.close() if not len(packages): raise BadCommand("No top level dir found for %s" % dirname) # @@: This doesn't support deeper servlet directories, # or packages not kept at the top level. base = os.path.dirname(egg_info) possible = [] for pkg in packages: d = os.path.join(base, pkg, dirname) if os.path.exists(d): possible.append((pkg, d)) if not possible: self.ensure_dir(os.path.join(base, packages[0], dirname), package=package) return self.find_dir(dirname) if len(possible) > 1: raise BadCommand( "Multiple %s dirs found (%s)" % (dirname, possible)) return possible[0]
def find_dir(self, dirname, package=False): egg_info = pluginlib.find_egg_info_dir(os.getcwd()) # @@: Should give error about egg_info when top_level.txt missing f = open(os.path.join(egg_info, 'top_level.txt')) packages = [ l.strip() for l in f.readlines() if l.strip() and not l.strip().startswith('#') ] f.close() if not len(packages): raise BadCommand("No top level dir found for %s" % dirname) # @@: This doesn't support deeper servlet directories, # or packages not kept at the top level. base = os.path.dirname(egg_info) possible = [] for pkg in packages: d = os.path.join(base, pkg, dirname) if os.path.exists(d): possible.append((pkg, d)) if not possible: self.ensure_dir(os.path.join(base, packages[0], dirname), package=package) return self.find_dir(dirname) if len(possible) > 1: raise BadCommand("Multiple %s dirs found (%s)" % (dirname, possible)) return possible[0]
def command(self): self.modelname = self.options.modelname self.modelpackage = self.options.modelpackage self.modelform = self.options.modelform self.primary_key = self.options.primary_key try: try: # Determine the package name from the .egg-info top_level.txt. here_dir = os.getcwd() egg_info = find_egg_info_dir(here_dir) f = open(os.path.join(egg_info, 'top_level.txt')) packages = [l.strip() for l in f.readlines() if l.strip() and not l.strip().startswith('#')] f.close() #upper 2 levels baselink = os.path.dirname( os.path.dirname(os.path.abspath(__file__))) file_op = FileOp( source_dir=os.path.join(baselink, 'templates')) self.base_package, directory = \ file_op.find_dir('controllers', True) except: raise command.BadCommand('No egg_info directory was found') except command.BadCommand, e: raise command.BadCommand('An error occurred. %s' % e)
def add_hidden_tag(self, output_dir, vars, pmarker): add_hidden = True egg_info = pluginlib.find_egg_info_dir(output_dir) theme_vars_fp = os.path.join(egg_info, 'theme_vars.txt') if egg_info and os.path.exists(theme_vars_fp): config = SafeConfigParser() config.read(theme_vars_fp) sec, opt = 'qplone3_theme', 'used_subtemplates' used_subtemplates = filter(None,[st.strip() \ for st in config.get(sec,opt).split(',')]) if self.name in used_subtemplates: sections = [self.name,] if config.has_section('multiple_templates') and \ config.has_option('multiple_templates',self.name): ms_sections = config.get('multiple_templates',self.name) sections = [s.strip() for s in ms_sections.split(',')] pmarkers = [config.get(sec, 'viewlet_profile_marker') \ for sec in sections] if pmarker in pmarkers: add_hidden = False return add_hidden
def _list_sub_templates(self, show_all=False): """ lists available templates """ templates = [] parent_template = None egg_info_dir = pluginlib.find_egg_info_dir(os.getcwd()) src_path = os.path.dirname(egg_info_dir) setup_path = os.path.sep.join(src_path.split(os.path.sep)[:-1]) setup_cfg = os.path.join(setup_path, 'setup.cfg') parent_template = None if os.path.exists(setup_cfg): parser = ConfigParser.ConfigParser() parser.read(setup_cfg) try: parent_template =\ parser.get('templer.local', 'template') or None except: pass for entry in self._all_entry_points(): try: entry_point = entry.load() t = entry_point(entry.name) if show_all or \ parent_template is None or \ parent_template in t.parent_templates: templates.append(t) except Exception, e: # We will not be stopped! print 'Warning: could not load entry point %s (%s: %s)' % ( entry.name, e.__class__.__name__, e)
def command(self): """Main command to create a modwsgi configuration files""" #Output directory is current folder unless specified vi output command. output_dir = os.path.join(self.options.output_dir, 'apache') #Input where the templates are at. input_dir= source_filename = os.path.join(os.path.dirname(__file__), 'templates/apache') #Finding directory that has egg info egg_info_dir = pluginlib.find_egg_info_dir(os.getcwd()) #Name of the module plugins= os.path.splitext(os.path.basename(egg_info_dir))[0] #print os.path.splitext(os.path.basename(egg_info_dir))[0] dist_name= pluginlib.get_distro(plugins) vars={} #If PKG-INFO exists read it and add it to vars if dist_name.has_metadata('PKG-INFO'): data=dist_name.get_metadata('PKG-INFO') for add_info in pluginlib.parse_lines(data): (key,value) = add_info.split(':',1) vars[key]=value #Add package names vars['project']=plugins vars['package']=plugins vars['egg']=pluginlib.egg_name(str(dist_name)) #Copy my template direcotry to destination. copy_dir(input_dir, output_dir, vars, verbosity=1, simulate=False, use_cheetah=True) print 'Thank you for using modwsgideploy!' print 'Please read README.txt in apache folder.' print 'http://lucasmanual.com/mywiki/modwsgideploy' print 'Made in Chicago,IL USA'
def add_template_vars(self, output_dir, vars): egg_info = pluginlib.find_egg_info_dir(output_dir) theme_vars_fp = os.path.join(egg_info, 'theme_vars.txt') if egg_info and os.path.exists(theme_vars_fp): config = SafeConfigParser() config.read(theme_vars_fp) # Update qplone3_theme used_subtemplate option sec, opt = 'qplone3_theme', 'used_subtemplates' val = filter(None,[st.strip() \ for st in config.get(sec,opt).split(',')]) val.append(self.name) config.set(sec, opt, ','.join(set(val))) # Add subtemplate vars if self.shared_vars: thesection = self.name if config.has_section(thesection): msection = 'multiple_templates' moption = self.name if not config.has_section(msection): config.add_section(msection) val = [] if config.has_option(msection, moption): val = config.get(msection, moption).split(',') else: val.append(moption) thesection = "%s_%d"%(moption,len(val)) val.append(thesection) config.set(msection, moption, ','.join(val)) config.add_section(thesection) for k in self.shared_vars: config.set(thesection, k, vars[k]) # Save theme_vars.txt file theme_file = file(theme_vars_fp,'w') config.write(theme_file) theme_file.close()
def get_template_vars(self, output_dir, vars): res = {} egg_info = pluginlib.find_egg_info_dir(output_dir) theme_vars_fp = os.path.join(egg_info, 'theme_vars.txt') if egg_info and os.path.exists(theme_vars_fp): config = SafeConfigParser() config.read(theme_vars_fp) for section in config.sections(): for option in config.options(section): key = section + '_' + option val = config.get(section, option) if section == 'multiple_templates': val = val.split(',') res[key] = val return res
def command(self): """Main command to create a new shell""" self.verbose = 3 if len(self.args) == 0: # Assume the .ini file is ./development.ini config_file = 'development.ini' if not os.path.isfile(config_file): raise BadCommand('%sError: CONFIG_FILE not found at: .%s%s\n' 'Please specify a CONFIG_FILE' % \ (self.parser.get_usage(), os.path.sep, config_file)) else: config_file = self.args[0] config_name = 'config:%s' % config_file here_dir = os.getcwd() locs = dict(__name__="pylons-admin") # XXX: Note, initializing CONFIG here is Legacy support. pylons.config # will automatically be initialized and restored via the registry # restorer along with the other StackedObjectProxys # Load app config into paste.deploy to simulate request config # Setup the Paste CONFIG object, adding app_conf/global_conf for legacy # code conf = appconfig(config_name, relative_to=here_dir) conf.update(dict(app_conf=conf.local_conf, global_conf=conf.global_conf)) paste.deploy.config.CONFIG.push_thread_config(conf) # Load locals and populate with objects for use in shell sys.path.insert(0, here_dir) # Load the wsgi app first so that everything is initialized right wsgiapp = loadapp(config_name, relative_to=here_dir) test_app = paste.fixture.TestApp(wsgiapp) # Query the test app to setup the environment tresponse = test_app.get('/_test_vars') request_id = int(tresponse.body) # Disable restoration during test_app requests test_app.pre_request_hook = lambda self: \ paste.registry.restorer.restoration_end() test_app.post_request_hook = lambda self: \ paste.registry.restorer.restoration_begin(request_id) # Restore the state of the Pylons special objects # (StackedObjectProxies) paste.registry.restorer.restoration_begin(request_id) # Determine the package name from the .egg-info top_level.txt. egg_info = find_egg_info_dir(here_dir) f = open(os.path.join(egg_info, 'top_level.txt')) packages = [l.strip() for l in f.readlines() if l.strip() and not l.strip().startswith('#')] f.close() # Start the rest of our imports now that the app is loaded found_base = False for pkg_name in packages: # Import all objects from the base module base_module = pkg_name + '.lib.base' found_base = can_import(base_module) if not found_base: # Minimal template base_module = pkg_name + '.controllers' found_base = can_import(base_module) if found_base: break if not found_base: raise ImportError("Could not import base module. Are you sure " "this is a Pylons app?") base = sys.modules[base_module] base_public = [__name for __name in dir(base) if not \ __name.startswith('_') or __name == '_'] for name in base_public: locs[name] = getattr(base, name) locs.update(dict(wsgiapp=wsgiapp, app=test_app)) mapper = tresponse.config.get('routes.map') if mapper: locs['mapper'] = mapper banner = " All objects from %s are available\n" % base_module banner += " Additional Objects:\n" if mapper: banner += " %-10s - %s\n" % ('mapper', 'Routes mapper object') banner += " %-10s - %s\n" % ('wsgiapp', "This project's WSGI App instance") banner += " %-10s - %s\n" % ('app', 'paste.fixture wrapped around wsgiapp') if not self.options.quiet: # Configure logging from the config file self.logging_file_config(config_file) try: if self.options.disable_ipython: raise ImportError() # try to use IPython if possible from IPython.Shell import IPShellEmbed shell = IPShellEmbed(argv=self.args) shell.set_banner(shell.IP.BANNER + '\n\n' + banner) try: shell(local_ns=locs, global_ns={}) finally: paste.registry.restorer.restoration_end() except ImportError: import code newbanner = "Pylons Interactive Shell\nPython %s\n\n" % sys.version banner = newbanner + banner shell = code.InteractiveConsole(locals=locs) try: import readline except ImportError: pass try: shell.interact(banner) finally: paste.registry.restorer.restoration_end()
def command(self): """Main command to create a new shell""" self.verbose = 3 if len(self.args) == 0: # Assume the .ini file is ./development.ini config_file = 'development.ini' if not os.path.isfile(config_file): raise BadCommand('%sError: CONFIG_FILE not found at: .%s%s\n' 'Please specify a CONFIG_FILE' % \ (self.parser.get_usage(), os.path.sep, config_file)) else: config_file = self.args[0] config_name = 'config:%s' % config_file here_dir = os.getcwd() locs = dict(__name__="pylons-admin") # XXX: Note, initializing CONFIG here is Legacy support. pylons.config # will automatically be initialized and restored via the registry # restorer along with the other StackedObjectProxys # Load app config into paste.deploy to simulate request config # Setup the Paste CONFIG object, adding app_conf/global_conf for legacy # code conf = appconfig(config_name, relative_to=here_dir) conf.update( dict(app_conf=conf.local_conf, global_conf=conf.global_conf)) paste.deploy.config.CONFIG.push_thread_config(conf) # Load locals and populate with objects for use in shell sys.path.insert(0, here_dir) # Load the wsgi app first so that everything is initialized right wsgiapp = loadapp(config_name, relative_to=here_dir) test_app = paste.fixture.TestApp(wsgiapp) # Query the test app to setup the environment tresponse = test_app.get('/_test_vars') request_id = int(tresponse.body) # Disable restoration during test_app requests test_app.pre_request_hook = lambda self: \ paste.registry.restorer.restoration_end() test_app.post_request_hook = lambda self: \ paste.registry.restorer.restoration_begin(request_id) # Restore the state of the Pylons special objects # (StackedObjectProxies) paste.registry.restorer.restoration_begin(request_id) # Determine the package name from the .egg-info top_level.txt. egg_info = find_egg_info_dir(here_dir) f = open(os.path.join(egg_info, 'top_level.txt')) packages = [ l.strip() for l in f.readlines() if l.strip() and not l.strip().startswith('#') ] f.close() # Start the rest of our imports now that the app is loaded found_base = False for pkg_name in packages: # Import all objects from the base module base_module = pkg_name + '.lib.base' found_base = can_import(base_module) if not found_base: # Minimal template base_module = pkg_name + '.controllers' found_base = can_import(base_module) if found_base: break if not found_base: raise ImportError("Could not import base module. Are you sure " "this is a Pylons app?") base = sys.modules[base_module] base_public = [__name for __name in dir(base) if not \ __name.startswith('_') or __name == '_'] for name in base_public: locs[name] = getattr(base, name) locs.update(dict(wsgiapp=wsgiapp, app=test_app)) mapper = tresponse.config.get('routes.map') if mapper: locs['mapper'] = mapper banner = " All objects from %s are available\n" % base_module banner += " Additional Objects:\n" if mapper: banner += " %-10s - %s\n" % ('mapper', 'Routes mapper object') banner += " %-10s - %s\n" % ('wsgiapp', "This project's WSGI App instance") banner += " %-10s - %s\n" % ('app', 'paste.fixture wrapped around wsgiapp') if not self.options.quiet: # Configure logging from the config file self.logging_file_config(config_file) try: if self.options.disable_ipython: raise ImportError() # try to use IPython if possible from IPython.Shell import IPShellEmbed shell = IPShellEmbed(argv=self.args) shell.set_banner(shell.IP.BANNER + '\n\n' + banner) try: shell(local_ns=locs, global_ns={}) finally: paste.registry.restorer.restoration_end() except ImportError: import code newbanner = "Pylons Interactive Shell\nPython %s\n\n" % sys.version banner = newbanner + banner shell = code.InteractiveConsole(locals=locs) try: import readline except ImportError: pass try: shell.interact(banner) finally: paste.registry.restorer.restoration_end()
def get_egg_info_dir(self): return pluginlib.find_egg_info_dir(os.getcwd())
def dest_dir(self): ns_pkg, ns_pkg2, pkg = self.get_parent_namespace_packages() dest_dir = os.path.join( os.path.dirname(pluginlib.find_egg_info_dir(os.getcwd())), ns_pkg, ns_pkg2, pkg) return dest_dir