20121106¶
Spielereien mit Sphinx¶
Heute Morgen habe ich mir ein paar kleine Spielereien mit Sphinx gegönnt.
Zunächst eine Aufwärm-Übung, Listen mit besonderem Bullet: inspiriert durch die von Boris Kheyfets gestartete Diskussion Custom char for bullet list? <https://groups.google.com/d/topic/sphinx-users/fNWyyRzoa8I/discussion> auf sphinx-users.
Hallo, Welt. Ein “Dialog” ist eine normale Aufzählungsliste, aber mit einem kleinen Dreieck (►) als custom list item bullet.
Siehe auch die
setup
, die ich in meiner Sphinx-Konfiguration verwende und die Datei linodocs.css.Leider habe ich es bisher nicht hingekriegt, dass bei längeren Einträgen die zweite Zeile korrekt eingerückt ist. Sieht aus als ob er list-style-position:outside ignoriert, wenn list-style-type:none ist. Und das negative text-indent bringt nur ein fast perfektes Resultat, weil das Dreieck mit dem Leerzeichen dahinter nun mal nicht exakt 1em breit sind.
Und die folgende Tabelle wird mit einem horizontalen Scrollbar dargestellt, wenn sie breiter als der verfügbare Platz ist.
Auch das kommt von einer Diskussion auf sphinx-users, und zwar framed wide tables.
col 1 |
col 2 |
col 3 |
col 4 |
col 5 |
col 6 |
col 7 |
col 8 |
---|---|---|---|---|---|---|---|
entry 1 |
entry 1 |
entry 1 |
entry 1 |
entry 1 |
entry 1 |
entry 1 |
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvery long entry 2 |
entry 3 |
entry 3 |
entry 3 |
entry 3 |
entry 3 |
entry 3 |
entry 3 |
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvery long entry 4 |
entry 5 |
entry 5 |
entry 5 |
entry 5 |
entry 5 |
entry 5 |
entry 5 |
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvery long entry 6 |
Ohne dieses neue Feature sähe sie so aus:
col 1 |
col 2 |
col 3 |
col 4 |
col 5 |
col 6 |
col 7 |
col 8 |
---|---|---|---|---|---|---|---|
entry 1 |
entry 1 |
entry 1 |
entry 1 |
entry 1 |
entry 1 |
entry 1 |
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvery long entry 2 |
entry 3 |
entry 3 |
entry 3 |
entry 3 |
entry 3 |
entry 3 |
entry 3 |
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvery long entry 4 |
entry 5 |
entry 5 |
entry 5 |
entry 5 |
entry 5 |
entry 5 |
entry 5 |
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvery long entry 6 |
Und drittens hier ein Beispiel von Python-Code, der dynamisch (beim build der docs) eine Tabelle im rst-Format produziert:
.. runblock:: py2rst
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'lino_welfare.demo.settings'
from django.conf import settings
settings.LINO.startup()
from lino.api import dd
pcsw = dd.resolve_app('pcsw')
User = dd.resolve_model('users.User')
root = User.objects.get(username='root')
print
print pcsw.UsersWithClients.request(user=root).to_rst()
print
Diese neue Möglichkeit haben wir Vadim Gubergrits’ Sphinx-Erweiterung autorun zu verdanken. Ich hatte allerdings ein paar Stunden Arbeit, um eine Erweiterung der Erweiterung zu schreiben.
Linos Lausbubenstreiche¶
Hier als Anekdote die Art von Pannen, die einem momentan mit Lino passieren können.
Ich hatte gestern oder vorgestern den Eupener Produktionsserver fixiert, also von lino-dev auf die lino-1.5.0 umgestiegen.
Heute erfahre ich, dass die Buttons nicht mehr angezeigt wurden.
Da fehlten alle *.png
. Lag der /MANIFEST.in.
Also die releaste Version 1.5.0 ist relativ unbrauchbar.
Dass ich das erfuhr, lag aber gar nicht daran,
sondern es gab noch ein anderes Problem:
das Detail eines Klienten wurde nicht mehr angezeigt.
Und das kam, weil jemand auf den Button “Tabellenkonfiguration speichern”
geklickt hatte. Der ist momentan eine Mausefalle:
generiert eine fehlerhafte Konfigurationsdatei,
die dann beim nächsten Neugenerieren der lino*.js
“aktiv” wird.
Noch Spielereien¶
Oder hier die Listen der Notizarten und der Benutzerprofile in der Demo-Datenbank von Lino-Welfare:
.. runblock:: py2rst
from lino_welfare.demo.startup import site
from lino.utils import rstgen
print rstgen.header(4,"Notizarten")
print ".. cssclass:: scrollwide\n"
print site.modules.notes.NoteTypes.request().to_rst("name template id remark")
print rstgen.header(4,"Benutzerprofile")
print rstgen.table(("value","text"),[(i.value, i.text) for i in site.modules.lino.UserProfiles.items()])