def requestService() -> IRequestService: try: import application except ImportError: raise SetupError('Cannot access the application module') ioc.activate(application.assembly) value = requestService() ioc.deactivate() return value
def registerAuthentication(support): assert isinstance(support, IAuthenticationSupport), 'Invalid support %s' % support try: import application except ImportError: raise SetupError('Cannot access the application module') activate(application.assembly) authenticators().append(support) deactivate()
def dump(): assert isinstance(application.options, OptionsCore), 'Invalid application options %s' % application.options if not application.options.writeConfigurations: return if not __debug__: print('Cannot dump configuration file if python is run with "-O" or "-OO" option', file=sys.stderr) sys.exit(1) configFile = application.options.configurationPath try: if os.path.isfile(configFile): with open(configFile, 'r') as f: config = load(f) else: config = {} assembly = application.assembly = ioc.open(aop.modulesIn('__setup__.**'), config=config) assert isinstance(assembly, Assembly), 'Invalid assembly %s' % assembly try: if os.path.isfile(configFile): os.rename(configFile, configFile + '.bak') for config in assembly.configurations: assembly.processForName(config) # Forcing the processing of all configurations with open(configFile, 'w') as f: save(assembly.trimmedConfigurations(), f) print('Created "%s" configuration file' % configFile) finally: ioc.deactivate() except SystemExit: raise except: print('-' * 150, file=sys.stderr) print('A problem occurred while dumping configurations', file=sys.stderr) traceback.print_exc(file=sys.stderr) print('-' * 150, file=sys.stderr)
def deploy(): package_extender.PACKAGE_EXTENDER.addFreezedPackage('__setup__.') from ally.container import ioc, aop from ally.container.ioc import ConfigError, SetupError from ally.container.config import save, load global assembly if assembly: raise ImportError('The application is already deployed') try: isConfig = os.path.isfile(configurationsFilePath) if isConfig: with open(configurationsFilePath, 'r') as f: config = load(f) else: config = {} assembly = ioc.open(aop.modulesIn('__setup__.**'), config=config) try: assembly.processStart() except (ConfigError, SetupError): # We save the file in case there are missing configuration with open(configurationsFilePath, 'w') as f: save(assembly.trimmedConfigurations(), f) isConfig = True raise finally: if not isConfig: with open(configurationsFilePath, 'w') as f: save(assembly.trimmedConfigurations(), f) ioc.deactivate() except: print('-' * 150, file=sys.stderr) print('A problem occurred while deploying', file=sys.stderr) traceback.print_exc() print('-' * 150, file=sys.stderr)
def use_linked_cdm_force(): try: import application except ImportError: raise SetupError('Cannot access the application module') ioc.activate(application.assembly) force = server_type() == 'mongrel2' ioc.deactivate() if force: support.force(use_linked_cdm, False)
def deploy(): assert isinstance(application.options, OptionsCore), 'Invalid application options %s' % application.options if not application.options.start: return try: if not os.path.isfile(application.options.configurationPath): print('The configuration file "%s" doesn\'t exist, create one by running the the application ' 'with "-dump" option' % application.options.configurationPath, file=sys.stderr) sys.exit(1) with open(application.options.configurationPath, 'r') as f: config = load(f) assembly = application.assembly = ioc.open(aop.modulesIn('__setup__.**'), config=config) assert isinstance(assembly, Assembly), 'Invalid assembly %s' % assembly import logging logging.basicConfig(format=format()) for name in warning_for(): logging.getLogger(name).setLevel(logging.WARN) for name in info_for(): logging.getLogger(name).setLevel(logging.INFO) for name in debug_for(): logging.getLogger(name).setLevel(logging.DEBUG) try: assembly.processStart() finally: ioc.deactivate() except SystemExit: raise except (SetupError, ConfigError): print('-' * 150, file=sys.stderr) print('A setup or configuration error occurred while deploying, try to rebuild the application properties by ' 'running the the application with "configure components" options', file=sys.stderr) traceback.print_exc(file=sys.stderr) print('-' * 150, file=sys.stderr) except: print('-' * 150, file=sys.stderr) print('A problem occurred while deploying', file=sys.stderr) traceback.print_exc(file=sys.stderr) print('-' * 150, file=sys.stderr)
def compileProcessings(assembly): ''' Compiles the path assemblies to path processings. ''' assert isinstance(assembly, ioc_setup.Assembly) ioc.activate(assembly) pathAssemblies, pathProcessing = assembly.processForPartialName( 'pathAssemblies'), [] ioc.deactivate() for pattern, assembly in pathAssemblies: assert isinstance(pattern, str), 'Invalid pattern %s' % pattern assert isinstance(assembly, Assembly), 'Invalid assembly %s' % assembly processing, report = assembly.create(ONLY_AVAILABLE, CREATE_REPORT, request=RequestHTTP, requestCnt=RequestContentHTTP, response=ResponseHTTP, responseCnt=ResponseContentHTTP) print('Assembly report for pattern \'%s\':\n%s' % (pattern, report)) pathProcessing.append((re.compile(pattern), processing)) return pathProcessing
def deploy(): loadPlugins() if not os.path.isfile(configurations_file_path()): print('The configuration file "%s" doesn\'t exist, create one by running the the application ' 'with "-dump" option' % configurations_file_path()) sys.exit(1) with open(configurations_file_path(), 'r') as f: config = load(f) PACKAGE_EXTENDER.addFreezedPackage('__plugin__.') pluginModules = aop.modulesIn('__plugin__.**') for module in pluginModules.load().asList(): if not isPackage(module) and re.match('__plugin__\\.[^\\.]+$', module.__name__): raise SetupError('The plugin setup module %r is not allowed directly in the __plugin__ package it needs ' 'to be in a sub package' % module.__name__) assembly = ioc.open(pluginModules, config=config) try: assembly.processStart() from __plugin__.plugin.registry import services services = services() finally: ioc.deactivate() try: import application except ImportError: raise SetupError('Cannot access the application module') resourcesRegister = entityFor(IResourcesRegister, application.assembly) assert isinstance(resourcesRegister, IResourcesRegister), 'There is no resource register for the services' assert log.debug('Registered REST services:\n\t%s', '\n\t'.join(str(srv) for srv in services)) or True for service in services: resourcesRegister.register(service)
def publish_development(): ''' If true the development services will be published. ''' try: import application except ImportError: raise SetupError('Cannot access the application module') ioc.activate(application.assembly) value = publish_development() ioc.deactivate() return value
def deploy(*tests): package_extender.PACKAGE_EXTENDER.addFreezedPackage('__setup__.') from ally.container import ioc, aop try: setups = aop.modulesIn('__setup__.**') # We need to remove the server configurations setups.exclude('**.server_*') try: ioc.open(setups, *tests).processStart() finally: ioc.deactivate() except: print('-' * 150, file=sys.stderr) print('A problem occurred while deploying', file=sys.stderr) traceback.print_exc() print('-' * 150, file=sys.stderr)
def __deploy__(): # Deploy the application try: import package_extender package_extender.PACKAGE_EXTENDER.addFreezedPackage('__deploy__.') from ally.container import ioc, aop except ImportError: print( 'Corrupted or missing ally-utilites component, make sure that this component is not missing from python path ' 'or components eggs', file=sys.stderr) sys.exit(1) application = sys.modules['application'] = ModuleType('application') try: # We create the parser to be prepared. application.parser = argparse.ArgumentParser( description='The ally distribution application deployer.') application.Options = object # Prepare the option class # In the first stage we prepare the application deployment. assembly = ioc.open(aop.modulesIn('__deploy__.*.prepare')) try: assembly.processStart() finally: ioc.deactivate() # In the second stage we parse the application arguments. application.options = application.parser.parse_args( namespace=application.Options()) # In the final stage we deploy the application. assembly = ioc.open(aop.modulesIn('__deploy__.*.deploy')) try: assembly.processStart() finally: ioc.deactivate() except SystemExit: raise except: print('-' * 150, file=sys.stderr) print('A problem occurred while deploying', file=sys.stderr) traceback.print_exc() print('-' * 150, file=sys.stderr) sys.exit(1)
def deploy(): for name in os.listdir(plugins_path()): fullPath = os.path.join(plugins_path(), name) if os.path.isfile(fullPath) and fullPath.endswith('.egg'): for exclude in excluded_plugins(): if name.startswith(exclude): break else: if fullPath not in sys.path: sys.path.append(fullPath) isConfig, filePathConfig = os.path.isfile(configurations_file_path()), configurations_file_path() if isConfig: with open(filePathConfig, 'r') as f: config = load(f) else: config = {} PACKAGE_EXTENDER.addFreezedPackage('__plugin__.') pluginModules = aop.modulesIn('__plugin__.**') for module in pluginModules.load().asList(): if not isPackage(module) and re.match('__plugin__\\.[^\\.]+$', module.__name__): raise SetupError('The plugin setup module %r is not allowed directly in the __plugin__ package it needs ' 'to be in a sub package' % module.__name__) assembly = ioc.open(pluginModules, config=config) try: assembly.processStart() from __plugin__.plugin.registry import services services = services() except (ConfigError, SetupError): # We save the file in case there are missing configuration with open(filePathConfig, 'w') as f: save(assembly.trimmedConfigurations(), f) isConfig = True raise finally: if not isConfig: with open(filePathConfig, 'w') as f: save(assembly.trimmedConfigurations(), f) ioc.deactivate() import ally_deploy_application resourcesRegister = entityFor(IResourcesRegister, ally_deploy_application.assembly) assert isinstance(resourcesRegister, IResourcesRegister), 'There is no resource register for the services' assert log.debug('Registered REST services:\n\t%s', '\n\t'.join(str(srv) for srv in services)) or True for service in services: resourcesRegister.register(service)
def compileProcessings(assembly): ''' Compiles the path assemblies to path processings. ''' assert isinstance(assembly, ioc_setup.Assembly) ioc.activate(assembly) pathAssemblies, pathProcessing = assembly.processForPartialName('pathAssemblies'), [] ioc.deactivate() for pattern, assembly in pathAssemblies: assert isinstance(pattern, str), 'Invalid pattern %s' % pattern assert isinstance(assembly, Assembly), 'Invalid assembly %s' % assembly processing, report = assembly.create(ONLY_AVAILABLE, CREATE_REPORT, request=RequestHTTP, requestCnt=RequestContentHTTP, response=ResponseHTTP, responseCnt=ResponseContentHTTP) print('Assembly report for pattern \'%s\':\n%s' % (pattern, report)) pathProcessing.append((re.compile(pattern), processing)) return pathProcessing
def __deploy__(): # Deploy the application try: import package_extender package_extender.PACKAGE_EXTENDER.addFreezedPackage('__deploy__.') from ally.container import ioc, aop except ImportError: print('Corrupted or missing ally-utilites component, make sure that this component is not missing from python path ' 'or components eggs', file=sys.stderr) sys.exit(1) application = sys.modules['application'] = ModuleType('application') try: # We create the parser to be prepared. application.parser = argparse.ArgumentParser(description='The ally distribution application deployer.') application.Options = object # Prepare the option class # In the first stage we prepare the application deployment. assembly = ioc.open(aop.modulesIn('__deploy__.*.prepare')) try: assembly.processStart() finally: ioc.deactivate() # In the second stage we parse the application arguments. application.options = application.parser.parse_args(namespace=application.Options()) # In the final stage we deploy the application. assembly = ioc.open(aop.modulesIn('__deploy__.*.deploy')) try: assembly.processStart() finally: ioc.deactivate() except SystemExit: raise except: print('-' * 150, file=sys.stderr) print('A problem occurred while deploying', file=sys.stderr) traceback.print_exc() print('-' * 150, file=sys.stderr) sys.exit(1)
@copyright: 2012 Sourcefabric o.p.s. @license: http://www.gnu.org/licenses/gpl-3.0.txt @author: Gabriel Nistor Configuration to add multiprocessing abilities to the database. ''' from __setup__.ally_core_http import server_type from ally.container import ioc import ally_deploy_application import logging # -------------------------------------------------------------------- log = logging.getLogger(__name__) # -------------------------------------------------------------------- ioc.activate(ally_deploy_application.assembly) if server_type() == 'production': try: from sql_alchemy.multiprocess_config import enableMultiProcessPool except ImportError: # Probably there is no sql alchemy available. log.warning( 'Cannot enable multiple processors support for database connection pools', exc_info=True) else: enableMultiProcessPool() ioc.deactivate()
Created on Oct 18, 2012 @package: ally core http @copyright: 2012 Sourcefabric o.p.s. @license: http://www.gnu.org/licenses/gpl-3.0.txt @author: Gabriel Nistor Configuration to add multiprocessing abilities to the database. ''' from __setup__.ally_core_http import server_type from ally.container import ioc import ally_deploy_application import logging # -------------------------------------------------------------------- log = logging.getLogger(__name__) # -------------------------------------------------------------------- ioc.activate(ally_deploy_application.assembly) if server_type() == 'production': try: from sql_alchemy.multiprocess_config import enableMultiProcessPool except ImportError: # Probably there is no sql alchemy available. log.warning('Cannot enable multiple processors support for database connection pools', exc_info=True) else: enableMultiProcessPool() ioc.deactivate()
def config(): assert isinstance(application.options, OptionsMongrel2), 'Invalid application options %s' % application.options if not application.options.configMongrel2: return workspace = application.options.configMongrel2 folders = [path.join('mongrel2', name) for name in ('logs', 'run', 'tmp')] folders.append(path.join('shared', 'upload')) for name in folders: folder = path.join(workspace, name) if not path.isdir(folder): makedirs(folder) configFile = application.options.configurationPath if path.isfile(configFile): with open(configFile, 'r') as f: config = load(f) else: print('The configuration file "%s" doesn\'t exist, create one by running the the application ' 'with "-dump" option, also change the application properties "server_type" configuration to "mongrel2" ' 'and also adjust the "recv_spec", "send_spec" and "server_port" accordingly' % configFile, file=sys.stderr) sys.exit(1) try: assembly = application.assembly = ioc.open(aop.modulesIn('__setup__.**'), config=config) assert isinstance(assembly, Assembly), 'Invalid assembly %s' % assembly updateConfig = False if server_type() != 'mongrel2': updateConfig = True support.persist(server_type, 'mongrel2') sendIdent = send_ident() if sendIdent is None: updateConfig = True sendIdent = str(uuid4()) support.persist(send_ident, sendIdent) replace = {} try: replace['${send_spec}'] = send_spec() replace['${send_ident}'] = sendIdent replace['${recv_spec}'] = recv_spec() replace['${recv_ident}'] = recv_ident() replace['${server_port}'] = str(server_port()) if updateConfig: if path.isfile(configFile): renames(configFile, configFile + '.bak') for config in assembly.configurations: assembly.processForName(config) # Forcing the processing of all configurations with open(configFile, 'w') as f: save(assembly.trimmedConfigurations(), f) print('Updated the "%s" configuration file' % configFile) finally: ioc.deactivate() except SystemExit: raise except: print('-' * 150, file=sys.stderr) print('A problem occurred while configuring Mongrel2', file=sys.stderr) traceback.print_exc(file=sys.stderr) print('-' * 150, file=sys.stderr) else: conf = openURI(path.join(pythonPath(), 'resources', 'ally.conf')) conf = codecs.getreader('utf8')(conf) conf = ReplaceInFile(conf, replace) with open(path.join(workspace, 'ally.conf'), 'w') as f: pipe(conf, f) with open(path.join(workspace, 'README-Mongrel2.txt'), 'wb') as f: pipe(openURI(path.join(pythonPath(), 'resources', 'README-Mongrel2.txt')), f) print('Configured "%s" mongrel2 workspace' % workspace)
def registerAuthentication(support): assert isinstance(support, IAuthenticationSupport), 'Invalid support %s' % support activate(ally_deploy_application.assembly) authenticators().append(support) deactivate()