def import_app(module): parts = module.split(":", 1) if len(parts) == 1: module, obj = module, "application" else: module, obj = parts[0], parts[1] try: __import__(module) except ImportError: if module.endswith(".py") and os.path.exists(module): msg = "Failed to find application, did you mean '%s:%s'?" raise ImportError(msg % (module.rsplit(".", 1)[0], obj)) else: raise mod = sys.modules[module] try: app = eval(obj, mod.__dict__) except NameError: raise AppImportError("Failed to find application: %r" % module) if app is None: raise AppImportError("Failed to find application object: %r" % obj) if not callable(app): raise AppImportError("Application object must be callable.") return app
def _import_app(self, module): """fork from gunicorn.until.import_app. thrift app is not callable,delete callable test. """ parts = module.split(":", 1) if len(parts) == 1: module, obj = module, "application" else: module, obj = parts[0], parts[1] try: __import__(module) except ImportError: if module.endswith(".py") and os.path.exists(module): raise ImportError("Failed to find application, did " "you mean '%s:%s'?" % (module.rsplit(".", 1)[0], obj)) else: raise mod = sys.modules[module] try: app = eval(obj, mod.__dict__) except NameError: raise AppImportError("Failed to find application: %r" % module) if app is None: raise AppImportError("Failed to find application object: %r" % obj) return app
def import_app(module): parts = module.split(":", 1) if len(parts) == 1: module, obj = module, "application" else: module, obj = parts[0], parts[1] try: __import__(module) except ImportError: if module.endswith(".py") and os.path.exists(module): msg = "Failed to find application, did you mean '%s:%s'?" raise ImportError(msg % (module.rsplit(".", 1)[0], obj)) raise mod = sys.modules[module] is_debug = logging.root.level == logging.DEBUG try: app = eval(obj, vars(mod)) except NameError: if is_debug: traceback.print_exception(*sys.exc_info()) raise AppImportError("Failed to find application object %r in %r" % (obj, module)) if app is None: raise AppImportError("Failed to find application object: %r" % obj) if not callable(app): raise AppImportError("Application object must be callable.") return app
def import_app(app_obj): if app_obj is None: raise AppImportError("Failed to find application object: %r" % app_obj) if not app_obj.__class__ == flask.Flask: raise Exception("%s is not a flask.Flask instance!" % app_obj) if not callable(app_obj): raise AppImportError("Application object must be callable.") return app_obj
def check_protocol_and_transport(app): if not app.cfg.thrift_protocol_factory.startswith('thriftpy'): raise AppImportError( 'Thriftpy worker can only use protocol from thriftpy,' 'specify `thrift_protocol_factory` as one of the ' 'following:' '`thriftpy.protocol:TCyBinaryProtocolFactory`, ' '`thriftpy.protocol:TBinaryProtocolFactory`') if not app.cfg.thrift_transport_factory.startswith('thriftpy'): raise AppImportError( 'Thriftpy worker can only use transport from thriftpy,' 'specify `thrift_transport_factory` as one of the ' 'following:' '`thriftpy.transport:TCyBufferedTransportFactory`, ' '`thriftpy.transport:TBufferedTransportFactory`')
def load_thrift_app(self): if ':' in self.app_uri: app = utils.load_obj(self.app_uri) else: services = self.cfg.thrift_processor_services if isinstance(services, dict): app, self.services = utils.multiplexed_processor( self.cfg.worker_class_str, services) # elif isinstance(services, list): # self.services_names = [x[0] for x in services if isinstance(x, (tuple, list))] # app = utils.multiplexed_processor(*services) else: raise AppImportError( "Invalid \"thrift_processor_services\" configuration. " "{processorName:processor} please") return app
def load_obj(import_path): parts = import_path.split(":", 1) if len(parts) == 1: raise ValueError("Wrong import path, module:obj please") module, obj = parts[0], parts[1] try: mod = importlib.import_module(module) except ImportError: if module.endswith(".py") and os.path.exists(module): raise ImportError("Failed to find application, did " "you mean '%s:%s'?" % (module.rsplit(".", 1)[0], obj)) else: raise try: app = getattr(mod, obj) except AttributeError: raise AppImportError("Failed to find application object: %r" % obj) return app
def import_app(module): parts = module.split(":", 1) if len(parts) == 1: obj = "application" else: module, obj = parts[0], parts[1] try: mod = importlib.import_module(module) except ImportError: if module.endswith(".py") and os.path.exists(module): msg = "Failed to find application, did you mean '%s:%s'?" raise ImportError(msg % (module.rsplit(".", 1)[0], obj)) raise # Parse obj as a single expression to determine if it's a valid # attribute name or function call. try: expression = ast.parse(obj, mode="eval").body except SyntaxError: raise AppImportError( "Failed to parse %r as an attribute name or function call." % obj ) if isinstance(expression, ast.Name): name = expression.id args = kwargs = None elif isinstance(expression, ast.Call): # Ensure the function name is an attribute name only. if not isinstance(expression.func, ast.Name): raise AppImportError("Function reference must be a simple name: %r" % obj) name = expression.func.id # Parse the positional and keyword arguments as literals. try: args = [ast.literal_eval(arg) for arg in expression.args] kwargs = {kw.arg: ast.literal_eval(kw.value) for kw in expression.keywords} except ValueError: # literal_eval gives cryptic error messages, show a generic # message with the full expression instead. raise AppImportError( "Failed to parse arguments as literal values: %r" % obj ) else: raise AppImportError( "Failed to parse %r as an attribute name or function call." % obj ) is_debug = logging.root.level == logging.DEBUG try: app = getattr(mod, name) except AttributeError: if is_debug: traceback.print_exception(*sys.exc_info()) raise AppImportError("Failed to find attribute %r in %r." % (name, module)) # If the expression was a function call, call the retrieved object # to get the real application. if args is not None: try: app = app(*args, **kwargs) except TypeError as e: # If the TypeError was due to bad arguments to the factory # function, show Python's nice error message without a # traceback. if _called_with_wrong_args(app): raise AppImportError( "".join(traceback.format_exception_only(TypeError, e)).strip() ) # Otherwise it was raised from within the function, show the # full traceback. raise if app is None: raise AppImportError("Failed to find application object: %r" % obj) if not callable(app): raise AppImportError("Application object must be callable.") return app