Пример #1
0
    def _load_app(self, app_fs_root):
        """Given an app's fs root, return an instance of the application.

        Each app is imported under the app_fs_root so that they don't collide in
        sys.modules.

        """

        logger.debug("loading app from %s" % app_fs_root)
        try:
            fp, pathname, description = imp.find_module('app', [app_fs_root])
            app = imp.load_module(app_fs_root, fp, pathname, description)
        except ImportError:
            raise ImportError("unable to import app from " + "%s: \n%s" %
                              (app_fs_root, traceback.format_exc()))

        # Validate the app.
        # =================
        # We use zope interfaces, although your app needn't implement zope
        # interfaces explicitly.

        try:
            verifyObject(IApp, app, tentative=True)
        except:
            logger.debug("app in %s is not valid." % app_fs_root)
            raise
        try:
            verifyClass(IApplication, app.Application, tentative=True)
        except:
            logger.debug("app.Application in %s is not valid." % app_fs_root)
            raise

        return self._instantiate_Application(app_fs_root, app.Application)
Пример #2
0
def load_app(site_root, app_uri_root):
    """Given a site's FS root and an app's URI root, load the application.
    """

    msg = ("Found bad app `%s'. Each app must be a path rooted in the " +
           "website root, and it must have a subdirectory named __.")

    # Find the app's filesystem root.
    # ===============================

    _parts = [p for p in app_uri_root.lstrip('/').split('/') if p]
    _parts.insert(0, site_root)
    fs_root = os.sep.join(_parts)
    if not os.path.isdir(fs_root):
        raise StandardError(msg % fs_root)

    # Find the app's magic directory.
    # ===============================

    __ = os.path.join(fs_root, '__')
    if not os.path.isdir(__):
        if fs_root == site_root:
            __ = None  # special case
        else:
            raise StandardError(msg % fs_root)

    # Load the actual module.
    # =======================
    # We support automatically falling back to DefaultApp for the root
    # directory. Otherwise, we fail if there is no importable app. We also
    # validate the app using zope interfaces. Your app needn't implement zope
    # interfaces explicitly, however. Also note that we import each app under
    # the app_uri_root so that they don't collide in sys.modules.

    if __ is None:
        app = DefaultApp
    else:
        try:
            fp, pathname, description = imp.find_module('app', [__])
            app = imp.load_module(app_uri_root, fp, pathname, description)
        except ImportError:
            raise ImportError("Unable to import an app from " + "%s: \n%s" %
                              (__, traceback.format_exc()))

    verifyObject(IApp, app, tentative=True)
    verifyClass(IApplication, app.Application, tentative=True)

    # Add some useful API to Application, and return an instance.
    # ===========================================================

    app.Application.site_root = site_root
    app.Application.uri_root = app_uri_root
    app.Application.fs_root = fs_root
    app.Application.__ = __

    return app.Application()
Пример #3
0
 def test_interfaces(self):
     verifyObject(ITimeDelta, timedelta(minutes=20))
     verifyObject(IDate, date(2000, 1, 2))
     verifyObject(IDateTime, datetime(2000, 1, 2, 10, 20))
     verifyObject(ITime, time(20, 30, 15, 1234))
     verifyObject(ITZInfo, tzinfo())
     verifyClass(ITimeDeltaClass, timedelta)
     verifyClass(IDateClass, date)
     verifyClass(IDateTimeClass, datetime)
     verifyClass(ITimeClass, time)
Пример #4
0
    def __init__(self, request):
        """Takes an IRequest provider.
        """

        verifyObject(IRequest, request, tentative=True)

        for attr in IRequest._InterfaceClass__attrs.keys():  # hack!
            if not attr.startswith('_'):
                val = getattr(request, attr)
                setattr(self, attr, val)
Пример #5
0
    def __init__(self, request):
        """Takes an IRequest provider.
        """

        verifyObject(IRequest, request)

        for attr in ['raw', 'raw_line', 'raw_headers', 'raw_body',
                     'method', 'uri', 'path', 'message']:
            val = getattr(request, attr)
            setattr(self, attr, val)
Пример #6
0
def add_api(responder, root, uri):
    """Given a responder, a filesystem path, and a URI, return the responder.
    """
    try:
        verifyObject(IResponder, responder, tentative=True)
    except:
        error_logger.debug("%s is not valid." % responder)
        raise
    if not hasattr(responder, 'uri'):
        responder.uri = uri
    if not hasattr(responder, 'root'):
        responder.root = root
    return responder
Пример #7
0
 def test(self):
     from httpy._zope.server.logger.pythonlogger import PythonLogger
     from httpy._zope.server.interfaces.logger import IMessageLogger
     plogger = PythonLogger(self.name)
     verifyObject(IMessageLogger, plogger)
     msg1 = 'test message 1'
     plogger.logMessage(msg1)
     self.assertEquals(self.handler.last_record.msg, msg1)
     self.assertEquals(self.handler.last_record.levelno, logging.INFO)
     msg2 = 'test message 2\r\n'
     plogger.level = logging.ERROR
     plogger.logMessage(msg2)
     self.assertEquals(self.handler.last_record.msg, msg2.rstrip())
     self.assertEquals(self.handler.last_record.levelno, logging.ERROR)
Пример #8
0
    def load_responder(self, root):
        """Given a responder's filesystem root, return an instance.

        Each responder is imported under the root so that they don't collide in
        sys.modules.

        """

        logger.debug("loading responder from %s" % root)
        try:
            result = imp.find_module('responder', [root])
            responder = imp.load_module(root, *result)
        except ImportError:
            raise ImportError("unable to import responder from " + "%s: \n%s" %
                              (root, traceback.format_exc()))

        # Validate the responder.
        # =======================
        # We use zope interfaces, although your responder needn't implement
        # them explicitly. Allow both module and class responders.

        try:  # responder.Responder.respond()

            verifyObject(Iresponder, responder, tentative=True)

            try:
                responder = responder.Responder
                verifyClass(IBaseResponder, responder, tentative=True)
            except Invalid:
                logger.debug("responder.Responder in %s " % root +
                             "is not valid.")
                raise

        except Invalid:  # responder.respond()

            try:
                verifyObject(IBaseResponder, responder, tentative=True)
            except:
                logger.debug("responder in %s is not valid." % root)
                raise

        # Alter sys.path, add API and return.
        # ===================================

        pkg = self.sys_path(root)
        self.add_api(responder, root, pkg)
        if inspect.isclass(responder):
            responder = responder()
        return responder
Пример #9
0
    def get_framework(self):
        """Return an instance of the site's framework.

        We are looking for a module defined in __/framework.py.

        """

        try:
            logger.debug("loading framework ...")
            fp, pathname, description = imp.find_module( 'framework'
                                                       , [self.config.__]
                                                        )
            framework = imp.load_module('framework', fp, pathname, description)
        except ImportError:
            logger.warning("framework import failed:\n" +
                           traceback.format_exc())
            logger.info("falling back to PassThrough")
            framework = PassThrough


        # Validate the framework.
        # =======================
        # We use zope interfaces, although your framework needn't implement
        # zope interfaces explicitly.

        try:
            verifyObject(IFramework, framework, tentative=True)
        except:
            logger.debug("framework in %s is not valid." % self.config.__)
            raise


        # Add API and return.
        # ===================

        framework.__ = self.config.__
        framework.site_root = self.config.root
        framework.debug_mode = self.debug_mode
        framework.devel_mode = self.devel_mode
        framework.deploy_mode = self.deploy_mode

        return framework
Пример #10
0
    def _load_module(self, __, name):
        """Given a magic directory, return a module.

        We support automatically falling back to DefaultApp for the root
        directory. Otherwise, we fail if there is no importable app. We also
        validate the app using zope interfaces. Your app needn't implement zope
        interfaces explicitly, however.

        """

        if __ is None:
            app = DefaultApp
        else:
            try:
                fp, pathname, description = imp.find_module('app', [__])
                app = imp.load_module(name, fp, pathname, description)
            except ImportError:
                raise ConfigError("Unable to import an app from " +
                                  "%s: \n%s" % (__, traceback.format_exc()))

        verifyObject(IApp, app, tentative=True)
        verifyClass(ITransaction, app.Transaction, tentative=True)

        return app
Пример #11
0
    def testModule(self):

        from httpy._zope.interface.tests.ifoo import IFoo
        from httpy._zope.interface.tests import dummy

        verifyObject(IFoo, dummy)
Пример #12
0
 def test_IFileSystemInterface(self):
     verifyObject(IFileSystem, self.filesystem)