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)
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)
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)
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)
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)
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)
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
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()
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)
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)
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)
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, )
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)
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()
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)
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)
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)
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"')
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)
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)
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"')
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)
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)
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)
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])
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)
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)
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)
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)
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)