Coverage for lino/utils/diag.py : 39%

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
# -*- coding: utf-8 -*- # Copyright 2012-2015 Luc Saffre # License: BSD (see file COPYING for details)
# from textwrap import fill
"The class of the :data:`lino.utils.diag.analyzer` object."
return raise Exception("20150323 : {0}".format(ba)) # Was used to find Exception: 20150323 : # <BoundAction(plausibility.Checkers, # <ShowDetailAction detail (u'Detail')>)>
# lh = wl.get_layout_handle(ui) # for e in lh.main.walk(): # e.loosen_requirements(a) else: # if ba.action.custom_handler:
self.analyze() items = [] for ba in analyzer.window_actions: items.append( "{0} : {1}".format( ba.full_name(), layout_fields(ba)))
return rstgen.ul(items)
self.analyze() items = [] for ba in analyzer.window_actions: items.append( "{0} : visible for {1}".format( ba.full_name(), visible_for(ba)))
return rstgen.ul(items)
self.analyze() items = [] for ba in analyzer.custom_actions + analyzer.window_actions: if isinstance(ba.action, classes): items.append( "{0} : visible for {1}".format( ba.full_name(), visible_for(ba)))
return rstgen.ul(items)
"""Show a bullet list of all models and their fields.""" self.analyze() items = [] for model in get_models(): names = [] # for f, m in model._meta.get_fields_with_model(): for f in model._meta.concrete_fields: names.append(f.name) items.append( "{0} : {1}".format(fmn(model), ', '.join(names)))
items = sorted(items) return rstgen.ul(items)
model = dd.resolve_model(model) if field_names is not None: field_names = dd.fields_list(model, field_names) items = [] for f in model._meta.fields: if field_names is None or f.name in field_names: name = f.name ref = model.__module__ + '.' + model.__name__ + '.' + name verbose_name = force_text(f.verbose_name).strip() help_text = force_text(f.help_text).replace('\n', ' ') txt = "**{verbose_name}** (:attr:`{name} <{ref}>`) : " \ "{help_text}".format(**locals()) items.append(txt) return rstgen.ul(items)
"""Return a reStructredText-formatted "database overview" report. Used by test cases in tested documents.
""" from lino.core.utils import (full_model_name, sorted_models_list)
models_list = sorted_models_list() apps = [p.app_label for p in settings.SITE.installed_plugins] s = "%d apps: %s." % (len(apps), ", ".join(apps)) s += "\n%d models:\n" % len(models_list) i = 0 headers = [ #~ "No.", "Name", "Default table", #~ "M", "#fields", "#rows", #~ ,"first","last" ] rows = [] for model in models_list: if True: # model._meta.managed: i += 1 cells = [] #~ cells.append(str(i)) cells.append(full_model_name(model)) cells.append(model.get_default_table()) #~ cells.append(str(model)) #~ if model._meta.managed: #~ cells.append('X') #~ else: #~ cells.append('') cells.append(str(len(model._meta.concrete_fields))) qs = model.objects.all() n = qs.count() cells.append(str(n)) #~ if n: #~ cells.append(obj2str(qs[0])) #~ cells.append(obj2str(qs[n-1])) #~ else: #~ cells.append('') #~ cells.append('')
rows.append(cells) s += rstgen.table(headers, rows) return s
"""Return a list that shows how database objects are being referred to by some other database object. This information is important (1) before deleting objects and (2) when merging them.
For every model we see a list of "delete handlers" and a list of fields from other models that point to this model using that delete handler.
Delete handlers are:
- PROTECT : refuse to delete when other objects refer to this object - CASCADE : delete objects refering to this object - set_on_delete : make other objects point to something else (or set their pointer to None)
"""
"{0} : {1}".format( dh.__name__, ', '.join([fk2str(mfk) for mfk in pl]))) fmn(target), rstgen.ul(items2)))
"""This is a docstring """
"""Shows a list of user profiles for which this action is visible.""" if ba is None: return "N/A" visible = [] hidden = [] for p in UserProfiles.objects(): name = p.name or p.value if ba.get_view_permission(p): visible.append(name) else: hidden.append(name) if len(hidden) == 0: return "all" if len(visible) == 0: return "nobody" # if len(hidden) < len(visible): # return "all except %s" % ', '.join(hidden) return ' '.join(visible)
wl = ba.get_window_layout() or ba.action.params_layout if wl is None: return '' lh = wl.get_layout_handle(settings.SITE.kernel.default_ui) elems = [str(f.name) for f in lh._store_fields] return ', '.join(elems) # return fill(' '.join(elems), 50)
"""Render any Python object as reStructuredText.
Where "any" actually means a layout or a layout element. :class:`lino.core.layouts.BaseLayout` :mod:`lino.modlib.extjs.elems`
If the optional argument `doctestfmt` is specified as `True`, then output contains less blank lines which might be invalid reStructuredText but is more doctest-friendly.
""" if isinstance(self, BaseLayout): lh = self.get_layout_handle(settings.SITE.kernel.default_ui) return py2rst(lh.main, doctestfmt)
if isinstance(self, Wrapper): self = self.wrapped
if isinstance(self, FieldElement): s = "**%s** (%s)" % (str(self.field.verbose_name), self.field.name) elif self.label is None: s = "(%s)" % self.name else: s = "**%s** (%s)" % (str(self.label), self.name) if visible_for(self) != visible_for(self.parent): s += " [visible for %s]" % visible_for(self) if isinstance(self, Container): use_ul = False for e in self.elements: if isinstance(e, Container): use_ul = True children = [py2rst(e, doctestfmt) for e in self.elements] if len(children): if use_ul: s += ':\n' if not doctestfmt: s += '\n' s += rstgen.ul(children) else: s += ": " + ', '.join(children)
return s
|