Example #1
0
 def get(self, request, *args, **kw):
     # ui = settings.SITE.ui
     ui = settings.SITE.plugins.bootstrap3
     assert ui.renderer is not None
     context = dict(
         title=settings.SITE.title,
         main='',
     )
     if settings.SITE.user_model is not None:
         user = request.subst_user or request.user
     else:
         user = auth.AnonymousUser.instance()
     a = settings.SITE.get_main_action(user)
     if a is None:
         ar = BaseRequest(
             user=user, request=request,
             renderer=ui.renderer)
     else:
         if not a.get_view_permission(user.profile):
             raise exceptions.PermissionDenied(
                 "Action not allowed for %s" % user.profile)
         kw.update(renderer=ui.renderer)
         ar = a.request(request=request, **kw)
         context.update(title=ar.get_title())
         # TODO: let ar generate main
         # context.update(main=ui.bs3_renderer.action_call(request,a,{}))
     context.update(ar=ar)
     return http_response(ui, request, 'bootstrap3/index.html', context)
Example #2
0
    def post(self, request, *args, **kw):
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = auth.authenticate(
            request, username=username, password=password)
        if user is not None:
            # user.is_authenticated:
            auth.login(request, user)

        ar = BaseRequest(request)
        # mw = auth.get_auth_middleware()
        # msg = mw.authenticate(username, password, request)
        # if msg:
        #     request.session.pop('username', None)
        #     ar.error(msg)
        # else:
        #     request.session['username'] = username
        #     # request.session['password'] = password
        # ar.success(("Now logged in as %r" % username))
        #     # print "20150428 Now logged in as %r (%s)" % (username, user)
        if user is None:
            ar.error(_("Failed to log in as {}.".format(username)))
        else:
            ar.success(("Now logged in as %r" % username))
        return ar.renderer.render_action_response(ar)
Example #3
0
def render_from_request(request, template_name, **context):
    template = dd.plugins.jinja.renderer.jinja_env.get_template(template_name)
    ar = BaseRequest(
        renderer=dd.plugins.public.renderer,
        request=request)
    context = ar.get_printable_context(**context)
    return template.render(**context)
Example #4
0
 def get(self, request, *args, **kw):
     #~ logger.info("20130719 MainHtml")
     settings.SITE.startup()
     ui = settings.SITE.kernel
     #~ raise Exception("20131023")
     ar = BaseRequest(request)
     ar.success(html=settings.SITE.get_main_html(request))
     return ui.render_action_response(ar)
Example #5
0
 def get(self, request, *args, **kw):
     # ~ logger.info("20130719 MainHtml")
     settings.SITE.startup()
     # ~ raise Exception("20131023")
     ar = BaseRequest(request)
     ar.success(html=settings.SITE.get_main_html(
         request, extjs=settings.SITE.plugins.extjs))
     return ar.renderer.render_action_response(ar)
Example #6
0
 def get(self, request, *args, **kw):
     """Returns a json struct for the main user dashboard."""
     # ~ logger.info("20130719 MainHtml")
     settings.SITE.startup()
     # ~ raise Exception("20131023")
     ar = BaseRequest(request)
     html = settings.SITE.get_main_html(
         request, extjs=settings.SITE.plugins.openui5)
     html = settings.SITE.plugins.openui5.renderer.html_text(html)
     ar.success(html=html)
     return json_response(ar.response, ar.content_type)
Example #7
0
 def get(self, request, *args, **kw):
     # raise Exception("20171122 {} {}".format(
     #     get_language(), settings.MIDDLEWARE_CLASSES))
     ar = BaseRequest(request=request, renderer=settings.SITE.kernel.default_renderer, permalink_uris=True)
     env = settings.SITE.plugins.jinja.renderer.jinja_env
     template = env.get_template("publisher/login.html")
     context = ar.get_printable_context(obj=self)
     response = http.HttpResponse(
         template.render(**context),
         content_type='text/html;charset="utf-8"')
     return response
Example #8
0
    def get(self, request, *args, **kw):
        action_name = request.GET.get(constants.URL_PARAM_ACTION_NAME)
        if action_name == 'logout':
            username = request.session.pop('username', None)
            request.session.pop('password', None)
            #~ username = request.session['username']
            #~ del request.session['password']

            ar = BaseRequest(request)
            ar.success("User %r logged out." % username)
            return settings.SITE.kernel.render_action_response(ar)
        raise http.Http404()
Example #9
0
    def get(self, request, *args, **kw):
        action_name = request.GET.get(constants.URL_PARAM_ACTION_NAME)
        if action_name == 'logout':
            username = request.session.pop('username', None)
            request.session.pop('password', None)
            #~ username = request.session['username']
            #~ del request.session['password']

            ar = BaseRequest(request)
            ar.success("User %r logged out." % username)
            return settings.SITE.kernel.render_action_response(ar)
        raise http.Http404()
Example #10
0
 def get(self, request, *args, **kw):
     # ~ logger.info("20130719 MainHtml")
     settings.SITE.startup()
     ui = settings.SITE.kernel
     # ~ raise Exception("20131023")
     ar = BaseRequest(request)
     html = settings.SITE.get_main_html(
         request, extjs=settings.SITE.plugins.extjs)
     html = settings.SITE.plugins.extjs.renderer.html_text(html)
     ar.success(html=html)
     ar.set_response(**test_version_mismatch(request))
     return ui.default_renderer.render_action_response(ar)
Example #11
0
 def post(self, request, *args, **kw):
     username = request.POST.get('username')
     password = request.POST.get('password')
     user = auth.authenticate(username, password)
     ar = BaseRequest(request)
     if user is None:
         ar.error("Could not authenticate %r" % username)
     else:
         request.session['username'] = username
         request.session['password'] = password
         ar.success(("Now logged in as %r" % username))
         # print "20150428 Now logged in as %r (%s)" % (username, user)
     return settings.SITE.kernel.render_action_response(ar)
Example #12
0
 def get(self, request, *args, **kw):
     """Returns a json struct for the main user dashboard."""
     # ~ logger.info("20130719 MainHtml")
     settings.SITE.startup()
     # ~ raise Exception("20131023")
     ar = BaseRequest(request)
     # Add to reqeust not ar, as there's error if passing ar to get_main_html
     request.requesting_panel = "dashboard-main"
     html = settings.SITE.get_main_html(request,
                                        extjs=settings.SITE.plugins.react)
     html = settings.SITE.plugins.react.renderer.html_text(html)
     ar.success(html=html)
     return json_response(ar.response, ar.content_type)
Example #13
0
 def serialize(self, ar=None):
     if ar is None:
         ar = BaseRequest()
     return (
         self.chat.user.username,
         ar.parse_memo(self.chat.body),
         json.loads(json.dumps(self.created, cls=DjangoJSONEncoder)),
         json.loads(json.dumps(self.seen, cls=DjangoJSONEncoder)),
         self.chat.pk,
         self.chat.user.id,
         self.chat.group.id,
         self.chat.hash,
         self.chat.ticket.id if self.chat.ticket else None,
     )
Example #14
0
def reregister_vouchers(args):
    """Called by :manage:`reregister`. See there."""
    Journal = rt.models.ledger.Journal
    VoucherStates = rt.models.ledger.VoucherStates
    if len(args):
        journals = [Journal.get_by_ref(a) for a in args]
    else:
        journals = Journal.objects.order_by('seqno')
        rt.models.ledger.Movement.objects.all().delete()
    count = 0
    clear_afterwards = True
    for jnl in journals:
        msg = "Re-register all vouchers in journal {0}".format(jnl)
        puts(msg)
        cl = jnl.get_doc_model()
        qs = cl.objects.filter(journal=jnl, state=VoucherStates.registered)
        qs = qs.order_by('entry_date')
        for obj in progress.bar(qs):
            ses = BaseRequest(user=obj.user)
            obj.register_voucher(ses, not clear_afterwards)
            count += 1

    msg = "{0} vouchers have been re-registered."
    puts(msg.format(count))

    if clear_afterwards:
        msg = "Check clearings for all partners"
        puts(msg)
        qs = rt.models.contacts.Partner.objects.all()
        for obj in progress.bar(qs):
            check_clearings_by_partner(obj)
Example #15
0
def objects():
    Comment = rt.models.comments.Comment
    User = rt.models.users.User
    Comment.auto_touch = False
    TXT = Cycler([
        styled, table, lorem, short_lorem, breaking, cond_comment, plain1,
        plain2
    ])
    for model in rt.models_by_base(Commentable):
        OWNERS = Cycler(model.objects.all())
        if len(OWNERS) == 0:
            return

        now = datetime.datetime.combine(dd.today(-30), i2t(822))
        if settings.USE_TZ:
            now = make_aware(now)
        DELTA = datetime.timedelta(minutes=34)

        owner = OWNERS.pop()
        for i in range(12):
            for u in User.objects.all():
                ses = BaseRequest(user=u)
                # if owner.private:
                #     txt = "<p>Confidential comment</p>"
                # else:
                #     txt = TXT.pop() # txt = "Hackerish comment"
                obj = Comment(user=u, owner=owner, body=TXT.pop())
                obj.on_create(ses)
                obj.after_ui_create(ses)
                obj.before_ui_save(ses)
                obj.modified = now
                yield obj
                now += DELTA
                if i % 3:
                    owner = OWNERS.pop()
Example #16
0
def notify_handler(sender, instance=None, **kwargs):
    self = instance  # a Change object
    notify = rt.modules.notifier.Notification.notify
    others = rt.modules.stars.Star.for_obj(self.master).exclude(user=self.user)
    ar = BaseRequest(user=self.user)
    for star in others:
        msg = "{obj} was modified by %s" % self.user
        notify(ar, self.master, star.user, msg)
Example #17
0
 def get(self, request, *args, **kw):
     ui = settings.SITE.plugins.odata
     # print("20170607", request.user)
     # assert ui.renderer is not None
     ar = BaseRequest(
         # user=user,
         request=request,
         renderer=ui.renderer)
     return metada_response(ar)
Example #18
0
    def get_previews(self, ar=None):
        front_end = settings.SITE.plugins.memo.front_end or settings.SITE.default_ui
        if ar is None or ar.renderer.front_end is not front_end:
            ar = BaseRequest(renderer=front_end.renderer)
            # print("20190926 using BaseRequest with front end {}".format(front_end))

        parse = settings.SITE.plugins.memo.parser.parse
        short = parse(truncate_comment(self.body), ar)
        full = parse(self.body, ar)
        return (short, full)
Example #19
0
    def get(self, request):
        ui = settings.SITE.plugins.openui5
        ar = BaseRequest(
            # user=user,
            request=request,
            renderer=ui.renderer)
        context = dict(
            # title=ar.get_title(),
            # heading=ar.get_title(),
            # main=main,
        )
        context.update(ar=ar)

        context = ar.get_printable_context(**context)
        env = settings.SITE.plugins.jinja.renderer.jinja_env
        template = env.get_template("openui5/main.html")
        return http.HttpResponse(
            template.render(**context),
            content_type='text/html;charset="utf-8"')
Example #20
0
 def get(self, request, index, *args, **kw):
     """Returns a rendered HTML version the requested user dashboard."""
     ar = BaseRequest(request)
     ar.renderer = settings.SITE.plugins.react.renderer
     ar.requesting_panel = f"dashboard-{index}"
     dash = ar.get_user().get_preferences().dashboard_items
     if len(dash) > index:
         html = ar.show_story([dash[index]])
     else:
         html = ""
     ar.success(html=html)
     return json_response(ar.response, ar.content_type)
Example #21
0
 def get(self, request, *args, **kw):
     # raise Exception("20171122 {} {}".format(
     #     get_language(), settings.MIDDLEWARE_CLASSES))
     ui = settings.SITE.plugins.bootstrap3
     # print("20170607", request.user)
     # assert ui.renderer is not None
     ar = BaseRequest(
         # user=user,
         request=request,
         renderer=ui.renderer)
     return index_response(ar)
Example #22
0
    def post(self, request, *args, **kw):
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = auth.authenticate(
            request, username=username, password=password)
        if user is not None:
            # user.is_authenticated:
            auth.login(request, user)

        ar = BaseRequest(request)
        # mw = auth.get_auth_middleware()
        # msg = mw.authenticate(username, password, request)
        # if msg:
        #     request.session.pop('username', None)
        #     ar.error(msg)
        # else:
        #     request.session['username'] = username
        #     # request.session['password'] = password
        # ar.success(("Now logged in as %r" % username))
        #     # print "20150428 Now logged in as %r (%s)" % (username, user)
        if user is None:
            ar.error(_("Failed to log in as {}.".format(username)))
        else:
            ar.success(("Now logged in as %r" % username))
        return ar.renderer.render_action_response(ar)
Example #23
0
 def getit():
     ui = settings.SITE.plugins.react
     # if not settings.SITE.build_js_cache_on_startup:
     #     ui.renderer.build_js_cache(False)
     ar = BaseRequest(
         # user=user,
         request=request,
         renderer=ui.renderer)
     context = dict(
         # title=ar.get_title(),
         # heading=ar.get_title(),
         # main=main,
         front_end=ui,
         request=request,
         user=user,  # Current user
     )
     context.update(ar=ar)
     context = ar.get_printable_context(**context)
     env = settings.SITE.plugins.jinja.renderer.jinja_env
     template = env.get_template("react/main.html")
     return http.HttpResponse(template.render(**context),
                              content_type='text/html;charset="utf-8"')
Example #24
0
    def get_callback(self, request, thread_id, button_id):
        """
        Return an existing (pending) callback. 
        This is called from `lino.ui.views.Callbacks`.
        """
        # ~ logger.info("20130409 get_callback")
        ar = BaseRequest(request)
        thread_id = int(thread_id)
        cb = self.pending_threads.pop(thread_id, None)
        # ~ d = self.pop_thread(int(thread_id))
        if cb is None:
            # ~ logger.info("20130811 No callback %r in %r" % (thread_id,self.pending_threads.keys()))
            ar.error("Unknown callback %r" % thread_id)
            return self.render_action_response(ar.response)
        # ~ buttonId = request.GET[ext_requests.URL_PARAM_'bi']
        # ~ print buttonId
        for c in cb.choices:
            if c.name == button_id:
                # ~ rv = c.func(request)
                c.func(ar)
                return self.render_action_response(ar.response)

        ar.error("Invalid button %r for callback" % (button_id, thread_id))
        return self.render_action_response(ar.response)
Example #25
0
 def get(self, request, *args, **kw):
     ui = dd.plugins.bootstrap3
     assert ui.renderer is not None
     context = dict(
         title=settings.SITE.title,
         main=settings.SITE.get_main_html(request),
     )
     if settings.SITE.user_model is None:
         user = auth.AnonymousUser.instance()
     else:
         user = request.subst_user or request.user
     ar = BaseRequest(
         user=user, request=request,
         renderer=ui.renderer)
     # context.update(ar=ar)
     return http_response(ar, 'bootstrap3/index.html', context)
Example #26
0
 def get(self, request, *args, **kw):
     # ~ logger.info("20130719 MainHtml")
     settings.SITE.startup()
     ui = settings.SITE.kernel
     # ~ raise Exception("20131023")
     ar = BaseRequest(request)
     html = settings.SITE.get_main_html(request,
                                        extjs=settings.SITE.plugins.extjs)
     html = settings.SITE.plugins.extjs.renderer.html_text(html)
     ar.success(html=html)
     ar.set_response(**test_version_mismatch(request))
     return ui.default_renderer.render_action_response(ar)
Example #27
0
 def send_email(self, ar):
     if not self.user.email:
         dd.logger.info("User %s has no email address", self.user)
         return
     # dd.logger.info("20151116 %s %s", ar.bound_action, ar.actor)
     # ar = ar.spawn_request(renderer=dd.plugins.bootstrap3.renderer)
     sar = BaseRequest(
         # user=self.user, renderer=dd.plugins.bootstrap3.renderer)
         user=self.user,
         renderer=settings.SITE.kernel.text_renderer)
     tpl = dd.plugins.notifier.email_subject_template
     subject = tpl.format(obj=self)
     subject = settings.EMAIL_SUBJECT_PREFIX + subject
     template = rt.get_template('notifier/body.eml')
     context = dict(obj=self, E=E, rt=rt, ar=sar)
     body = template.render(**context)
     sender = ar.get_user().email or settings.SERVER_EMAIL
     rt.send_email(subject, sender, body, [self.user.email])
Example #28
0
    def get(self, request):
        request = BaseRequest(request)
        u = request.user
        su = request.subst_user
        su_name = request.subst_user.get_full_name() if su else ""

        # not_anon = u.is_authenticated if type(u.is_authenticated) == bool else u.is_authenticated()
        not_anon = u.is_authenticated

        def getit():
            # print(20200419, settings.SITE.build_media_url(*settings.SITE.plugins.react.renderer.lino_js_parts()))
            if not settings.SITE.build_js_cache_on_startup:
                settings.SITE.plugins.react.renderer.build_js_cache(False)
            user_settings = dict(
                user_type=u.user_type,
                dashboard_items=len(u.get_preferences().dashboard_items),
                # [d.serialize() for d in u.get_preferences().dashboard_items],
                lv=str(settings.SITE.kernel.code_mtime),
                lang=get_language(),
                site_data=settings.SITE.build_media_url(
                    *settings.SITE.plugins.react.renderer.lino_js_parts()),
                logged_in=not_anon,
                username=u.get_full_name() if not_anon else _("Anonymous"),
                su_name=
                su_name,  # subst_user # must be passed as param in get_user_settings request,
                act_as_subtext=_(
                    "You are authorised to act as the following users."),
                act_as_title_text=_("Act as another user"),
                act_as_button_text=_("Act as another user"),
                act_as_self_text=_("Stop acting as another user"),
                # #3070: Add id and the text of "My setting" menu
                my_setting_text=_("My settings"),
                user_id=u.pk,
            )
            if su_name:
                user_settings["user_id"] = user_settings["su_id"] = su.id
                user_settings["su_user_type"] = su.user_type

            if not_anon:
                user_settings["authorities"] = u.get_authorities()

            return json_response(user_settings)

        return with_user_profile((su or u).user_type, getit)
Example #29
0
 def post(self, request, *args, **kw):
     username = request.POST.get('username')
     password = request.POST.get('password')
     user = auth.authenticate(username, password)
     ar = BaseRequest(request)
     if user is None:
         ar.error("Could not authenticate %r" % username)
     else:
         request.session['username'] = username
         request.session['password'] = password
         ar.success(("Now logged in as %r" % username))
         # print "20150428 Now logged in as %r (%s)" % (username, user)
     return settings.SITE.kernel.render_action_response(ar)
Example #30
0
    def get(self, request, name=None):
        # ar = action_request(None, None, request, request.GET, True)
        ar = BaseRequest(
            # user=user,
            request=request,
            renderer=settings.SITE.plugins.openui5.renderer)
        u = ar.get_user()

        context = dict(
            menu=settings.SITE.get_site_menu(None, u.user_type)
        )

        device_type = request.device_type
        print ("device_type", device_type)
        # print(u)
        # print(name)
        if name.startswith("dialog/SignInActionFormPanel"):
            tplname = "openui5/fragment/SignInActionFormPanel.fragment.xml"

        elif name.startswith("menu/user/user.fragment.xml"):
            tplname = "openui5/fragment/UserMenu.fragment.xml"

        elif name.startswith("menu/"):
            tplname = "openui5/fragment/Menu.fragment.xml"
            sel_menu = name.split("/", 1)[1].split('.', 1)[0]
            # [05/Feb/2018 09:32:25] "GET /ui/menu/mailbox.fragment.xml HTTP/1.1" 200 325
            for i in context['menu'].items:
                if i.name == sel_menu:
                    context.update(dict(
                        opened_menu=i
                    ))
                    break
            else:
                raise Exception("No Menu with name %s" % sel_menu)
        elif name.startswith("grid/") or name.startswith("slavetable/") or \
                name.startswith("view/grid/") or name.startswith("view/slavetable/"):  # Table/grid view
            # todo Get table data
            # "grid/tickets/AllTickets.view.xml"
            # or
            # "slavetable/tickets/AllTickets.view.xml
            app_label, actor = re.match(r"(?:(?:view\/)?grid|slavetable)\/(.+)\/(.+).view.xml$", name).groups()
            ar = action_request(app_label, actor, request, request.GET, True)
            actor = rt.models.resolve(app_label + "." + actor)
            store = ar.ah.store
            columns = actor.get_handle().get_columns()
            store.list_fields
            # todo match columns's field.name with store.list_fields storefield's index.
            index_mod = 0
            for c in columns:
                c.fields_index = find(store.list_fields, c.field.name,
                                      key=lambda f: f.name) + index_mod
                if isinstance(c, ComboFieldElement):
                    # Skip the data value for multi value columns, such as choices and FK fields.
                    # use c.fields_index -1 for data value
                    index_mod += 1
            # print(ar.ah.store.pk_index) # indexk of PK in detail row data

            if settings.SITE.is_installed('contenttypes'):
                # Used in slave tables of gfks relations
                m = getattr(store.pk, 'model', None)
                # e.g. pk may be the VALUE_FIELD of a choicelist which
                # has no model
                if m is not None:
                    ct = ContentType.objects.get_for_model(m).pk
                    context.update(content_type=ct)

            context.update({
                "actor": actor,
                "columns": columns,
                "actions": actor.get_actions(),
                "title": actor.label,
                "pk_index": store.pk_index,
                "is_slave": name.startswith("slavetable/") or actor.master is not None,
            })
            if name.startswith("slavetable/"):
                tplname = "openui5/view/slaveTable.view.xml"
            else:
                # if device_type == 'desktop':
                if not actor.tablet_columns and not actor.mobile_columns:
                    tplname = "openui5/view/table.view.xml"  # Change to "grid" to match action?
                else:
                    tplname = "openui5/view/table.mview.xml"

                    # ar = action_request(app_label, actor, request, request.GET, True)
                    # add to context

        elif name.startswith("detail") or name.startswith("view/detail"):  # Detail view
            # "detail/tickets/AllTickets.view.xml"
            app_label, actor = re.match(r"(?:view\/)?detail\/(.+)\/(.+).view.xml$", name).groups()
            actor = rt.models.resolve(app_label + "." + actor)
            # detail_action = actor.actions['detail']
            detail_action = actor.detail_action
            window_layout = detail_action.get_window_layout()
            layout_handle = window_layout.get_layout_handle(settings.SITE.plugins.openui5)
            layout_handle.main.elements  # elems # Refactor into actor get method?
            ba_actions = actor.get_toolbar_actions(actor.detail_action.action)
            context.update({
                "actor": actor,
                # "columns": actor.get_handle().get_columns(),
                "actions": actor.get_actions(),
                'ba_actions': ba_actions,
                "title": actor.label,  #
                # "main_elems": layout_handle.main.elements,
                "main": layout_handle.main,
                "layout_handle": layout_handle

            })
            tplname = "openui5/view/detail.view.xml"  # Change to "grid" to match action?
            # ar = action_request(app_label, actor, request, request.GET, True)
            # add to context

        elif name.startswith("view/") or \
                name.startswith("controller/") or \
                name.startswith("core/") or name.startswith("fragment/"):
            tplname = "openui5/" + name

            if "manifest.json" in name:
                ## List all master tables for routing
                actors_list = [
                    rpt for rpt in kernel.master_tables
                                   + kernel.slave_tables
                                   + list(kernel.generic_slaves.values())
                                   + kernel.virtual_tables
                                   + kernel.frames_list
                ]
                detail_list = set()

                def add(res, collector, fl, formpanel_name):
                    if fl is None or fl._datasource is None:
                        return  # 20130804
                    if fl._datasource != res:
                        fl._other_datasources.add(res)
                    if fl not in collector:
                        collector.add(res)

                for res in actors_list:
                    add(res, detail_list, res.detail_layout, "detail.%s" % res)

                    # self.actors_list.extend(
                #     [a for a in list(kernel.CHOICELISTS.values())
                #      if settings.SITE.is_installed(a.app_label)])

                # don't include for abstract actors
                actors_list = [a for a in actors_list
                               if not a.is_abstract()]

                context.update(actors_list=actors_list,
                               detail_list=detail_list,
                               )



        else:
            raise Exception("Can't find a view for path: {}".format(name))

        return XML_response(ar, tplname, context)
Example #31
0
 def get(self, request, pk=None):
     ar = BaseRequest(request=request, renderer=settings.SITE.kernel.default_renderer, permalink_uris=True)
     obj = self.publisher_model.objects.get(id=pk) if pk is not None else None
     return self.publisher_model.get_publisher_response(ar, obj)
Example #32
0
    def __init__(self, *args, **kwargs):
        super(JinjaRenderer, self).__init__(*args, **kwargs)

        loaders = []
        prefix_loaders = {}

        paths = list(settings.SITE.get_settings_subdirs(SUBDIR_NAME))
        if True:  # settings.SITE.is_local_project_dir:
            p = join(settings.SITE.cache_dir, SUBDIR_NAME)
            if isdir(p):
                paths.append(p)
        #~ logger.info("20130717 web.py paths %s",paths)
        if len(paths) > 0:
            loaders.append(jinja2.FileSystemLoader(paths))

        def func(name, m):
            #~ logger.info("20130717 jinja loader %s %s",name,SUBDIR_NAME)
            if isdir(join(dirname(m.__file__), SUBDIR_NAME)):
                loader = jinja2.PackageLoader(name, SUBDIR_NAME)
                loaders.append(loader)
                prefix_loaders[name] = loader

        settings.SITE.for_each_app(func)

        loaders.insert(0, jinja2.PrefixLoader(prefix_loaders, delimiter=":"))

        #~ loaders = reversed(loaders)
        #~ print 20130109, loaders
        self.jinja_env = jinja2.Environment(
            #~ extensions=['jinja2.ext.i18n'],
            loader=jinja2.ChoiceLoader(loaders))

        #~ jinja_env = jinja2.Environment(trim_blocks=False)

        #~ from django.utils import translation

        #~ jinja_env.install_gettext_translations(translation)

        def as_table(action_spec):
            a = settings.SITE.models.resolve(action_spec)
            ar = a.request(user=settings.SITE.user_model.get_anonymous_user())
            return self.as_table(ar)

        def as_table2(ar):
            # 20150810
            # ar.renderer = settings.SITE.plugins.bootstrap3.renderer
            ar.renderer = self

            t = xghtml.Table()
            ar.dump2html(t, ar.sliced_data_iterator, header_links=False)

            #~ print ar.get_total_count()
            return tostring(t.as_element())
            #~ return tostring(E.ul(*[E.li(ar.summary_row(obj)) for obj in ar]),method="html")

        def as_ul(action_spec):
            a = settings.SITE.models.resolve(action_spec)
            ar = a.request(user=settings.SITE.user_model.get_anonymous_user())
            # 20150810
            ar.renderer = self
            # ar.renderer = settings.SITE.plugins.bootstrap3.renderer
            return tostring(E.ul(*[obj.as_list_item(ar) for obj in ar]))

        self.jinja_env.globals.update(
            settings=settings,
            site=settings.SITE,
            dtos=format_date.fds,  # obsolete
            dtosl=format_date.fdl,  # obsolete
            as_ul=as_ul,
            as_table=as_table2,
            iif=iif,
            str=str,
            len=len,
            E=E,
            tostring=tostring,
            ar=BaseRequest(renderer=settings.SITE.kernel.default_renderer),
            # _=_,
            now=datetime.datetime.now(),
            mtos=settings.SITE.decfmt,  # obsolete
            decfmt=settings.SITE.decfmt,
            fds=format_date.fds,
            fdm=format_date.fdm,
            fdl=format_date.fdl,
            fdf=format_date.fdf,
            fdmy=format_date.fdmy,
            babelattr=settings.SITE.babelattr,
            babelitem=settings.SITE.babelitem,  # obsolete
            tr=settings.SITE.babelitem,
            # dd=dd,
            rt=rt,
            escape=escape,
            Counter=Counter,
            SumCollector=SumCollector,
            # lino=self.modules,  # experimental
            # site_config=self.site_config,
        )

        def translate(s):
            return ugettext(str(s))

        self.jinja_env.globals.update(_=translate)

        def ptranslate(ctx, s):
            return pgettext(ctx.decode('utf8'), s.decode('utf8'))

        self.jinja_env.globals.update(pgettext=pgettext)
Example #33
0
def render_from_request(request, template_name, **context):
    template = dd.plugins.jinja.renderer.jinja_env.get_template(template_name)
    ar = BaseRequest(renderer=dd.plugins.public.renderer, request=request)
    context = ar.get_printable_context(**context)
    return template.render(**context)