def shop_app_module_name(appname):
    module_name = '%s.apps.store.apps.%s' % (project_name(), appname)
    module = try_import(module_name)
    if module is not None:
        return module_name
    module_name = 'boilerplate.apps.store.apps.%s' % appname
    module = try_import(module_name)
    if module is not None:
        return module_name
    def modules(self):
        """
        Populate and return registered payment modules

        :return: An OrderedDict like { module_name -> { 'url': url,
                                                        'app': application }}
        """
        if self._modules is None:
            self._modules = OrderedDict()
            for root, appname in settings.BOILER_PAYMENT_MODULES:
                app = try_import(appname + '.app')
                if app is not None:
                    application = app.application
                    self._modules[application.name] = {'url': root,
                                                      'app': application}
                else:
                    self.log.warning("Oscar misconfigured! %s.app cannot be "
                                     "imported", appname)

        return self._modules
def import_shop_app(appname, submodule=''):
    module_name = shop_app_module_name(appname)
    if module_name is not None:
        if submodule:
            module_name = "%s.%s" % (module_name, submodule)
        return try_import(module_name)