Coverage for lino/modlib/about/models.py : 40%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
# Copyright 2012-2015 Luc Saffre # License: BSD (see file COPYING for details)
Database models for `lino.modlib.about`.
"""
#~ column_defaults = dict(width=8) #~ column_names = "app name verbose_name docstring rows" app name docstring rows about.FieldsByModel """
def get_data_rows(self, ar): #~ profile = ar.get_user().profile for model in models.get_models(): if True: #~ print model yield model
def summary_row(cls, ar, obj, **kw): return [str(obj._meta.verbose_name_plural)]
def app(self, obj, ar): return obj._meta.app_label
def name(self, obj, ar): return obj.__name__
#~ @dd.displayfield(_("Detail Action")) def detail_action(self, obj, ar): if obj.get_default_table().detail_action is None: return '' return obj.get_default_table().detail_action.full_name()
#~ @dd.displayfield(_("verbose name")) #~ def vebose_name(self,obj,ar): #~ return unicode(obj._meta.vebose_name)
def docstring(self, obj, ar): return obj.__doc__ #~ return restify(unicode(obj.__doc__))
def rows(self, obj, ar): return obj.get_default_table().request( ar.ui, user=ar.get_user(), renderer=ar.renderer)
#~ master_key = "model" #~ master = Models
def get_data_rows(self, ar): model = ar.master_instance if model: for (fld, remote) in model._meta.get_fields_with_model(): yield fld
def name(self, fld, ar): return fld.name
def verbose_name(self, fld, ar): return str(fld.vebose_name)
def help_text_column(self, obj, ar): #~ return obj.__doc__ return restify(str(obj.help_text))
self.parent = parent self.prefix = prefix self.name = name self.value = value
""" Shows a simplistic "inspector" which once helped me for debugging. Needs more work to become seriously useful...
""" inspected=models.CharField( _("Inspected object"), max_length=100, blank=True), show_callables=models.BooleanField(_("show callables"), default=False) ) #~ editable = False #~ slave_grid_format = 'html'
def get_inspected(self, name): #~ ctx = dict(settings=settings,lino=lino) if not name: return settings try: o = eval('settings.' + name) except Exception as e: o = e return o
#~ o = settings #~ try: #~ for ch in name.split('.'): #~ o = getattr(o,ch) #~ except Exception,e: #~ o = e #~ return o
def get_data_rows(self, ar): #~ logger.info("20120210 %s, %s",ar.quick_search,ar.param_values.inspected)
if ar.param_values.show_callables: def flt(v): return True else: def flt(v): if isinstance(v, ( types.FunctionType, types.GeneratorType, types.UnboundMethodType, types.UnboundMethodType, types.BuiltinMethodType, types.BuiltinFunctionType )): return False return True
o = self.get_inspected(ar.param_values.inspected) if isinstance(o, (list, tuple)): for i, v in enumerate(o): k = "[" + str(i) + "]" yield Inspected(o, '', k, v) elif isinstance(o, AttrDict): for k, v in list(o.items()): yield Inspected(o, '.', k, v) elif isinstance(o, dict): for k, v in list(o.items()): k = "[" + repr(k) + "]" yield Inspected(o, '', k, v) else: for k in dir(o): if not k.startswith('__'): if not ar.quick_search or (ar.quick_search.lower() in k.lower()): v = getattr(o, k) if flt(v): #~ if not inspect.isbuiltin(v) and not inspect.ismethod(v): #~ if ar.param_values.show_callables or not inspect.isfunction(v): #~ if isinstance(v,types.FunctionType ar.param_values.show_callables or not callable(v): yield Inspected(o, '.', k, v) #~ for k,v in o.__dict__.items(): #~ yield Inspected(o,k,v)
def i_name(self, obj, ar): pv = dict() if ar.param_values.inspected: pv.update(inspected=ar.param_values.inspected + obj.prefix + obj.name) else: pv.update(inspected=obj.name) #~ newreq = ar.spawn(ar.ui,user=ar.user,renderer=ar.renderer,param_values=pv) newreq = ar.spawn(param_values=pv) return ar.href_to_request(newreq, obj.name) #~ return obj.name
def i_value(self, obj, ar): return cgi.escape(str(obj.value))
def i_type(self, obj, ar): return cgi.escape(str(type(obj.value)))
"""Display information about this web site. This defines the window which opens via the menu command :menuselection:`Site --> About`.
""" about_html server_status """, window_size=(60, 20))
def about_html(cls):
body = []
body.append(settings.SITE.welcome_html())
if settings.SITE.languages: body.append(E.p(str(_("Languages")) + ": " + ', '.join([ lng.django_code for lng in settings.SITE.languages])))
#~ print "20121112 startup_time", settings.SITE.startup_time.date() def dtfmt(dt): if isinstance(dt, float): dt = datetime.datetime.fromtimestamp(dt) #~ raise ValueError("Expected float, go %r" % dt) return str(_("%(date)s at %(time)s")) % dict( date=dd.fdf(dt.date()), time=dt.time())
items = [] times = [] value = settings.SITE.startup_time label = _("Server uptime") body.append(E.p(str(label), ' : ', E.b(dtfmt(value)))) if settings.SITE.is_demo_site: s = str(_("This is a Lino demo site.")) body.append(E.p(s)) if settings.SITE.the_demo_date: s = _("We are running with simulated date set to {0}.").format( dd.fdf(settings.SITE.the_demo_date)) body.append(E.p(s)) body.append(E.p(str(_("Source timestamps:")))) for src in ("lino", "lino_welfare", 'django', 'atelier'): label = src value = codetime('%s.*' % src) if value is not None: times.append((label, value))
def mycmp(a, b): return cmp(b[1], a[1]) times.sort(mycmp) for label, value in times: items.append(E.li(str(label), ' : ', E.b(dtfmt(value)))) body.append(E.ul(*items)) return E.div(*body, class_='htmlText')
def server_status(cls, obj, ar): body = [] body.append(E.p(_("%s pending threads") % len(settings.SITE.kernel.pending_threads))) return E.div(*body, class_='htmlText')
def get_data_rows(self, ar): for name, filename in codefiles('lino*'): yield SourceFile(name, filename)
def code_lines(self, obj, ar): return obj.count_code
def doc_lines(self, obj, ar): return obj.count_doc
def module_name(self, obj, ar): return obj.modulename
|