20130607 (Friday, 07 June 2013)¶
“api/ui/Home/-99998 was not found on this server”¶
Trying to reproduce a problem report by Flavio:
Following the recommendations according to Lino web site, I set up a deployment environment with Apache and HTTP authentication, first for demo application Lino Cosí. The application loads the JavaScript files, accesses the database and returns back the full name of the logged-in user, but got the following error after the authentication:
“Not FoundThe requested URL / api/ui/Home/-99998 was not found on this server.”Which happens in any attempt to access the information in the database such as in /api/contacts/Persons.
At first sight I could not reproduce this problem with the latest development version on a development server. Which version is he using? Going to set up a test environment for Apache HTTP authentication since the problem might occur only then.
The problem must be somewhere in his Apache configuration because the error message is issued by Apache. Apache doesn’t even forward that request to the WSGI process.
Fixed a bug which is probably unrelated:
ExtRenderer
generated a line which requested a file
“/media/extensible/extensible-all-debug.js”
which always lead to a 404 error, but that did no harm since
it was useless.
Checkin.
Oops, the above bug was even more subtile:
the link wasn’t useless at all
(when
use_extensible
is set, which just happenes to not be the case in Lino Così),
and the bug was that Lino
didn’t take
into account here
extensible_base_url
setting.
Lino-Faggio¶
Continued with lino_faggio
.
We are facing a new challenge for Lino:
how to integrate the modlib sales invoicing
to a meeting manager application.
And the first steps were very promising.
But let me get it up and running before talking
more about it…
One challenge was: when selecting an enrolment in an invoice item, we want to (1) show only the enrolements of the invoice receiver (this was easily done using a chooser) (2) format the choices to be displayed in the combo box to not repeat the participant’s name. That was more difficult because it is the first use case of such a situation.
Solution:
Added a new customization hook
for displaying a choice’s text:
get_choices_text
on the actor.
Unlike a
get_choices_text
method on a model,
this time we want to customize only forthe calling actor.
Note that I prefer this paradigm over another magic method FOO_choice_display on the model because:
magic model methods aren’t a good practice
The
get_choices_text
trick works even when there is no chooser at all.
Cool!
One detail remains to be done though (because it is not new and i consider it secondary): when the invoice receiver changes, then the combobox should reload its store.
Overriding modlib models¶
I reached a next level of understanding how Lino should provide
a possibility to override modlib models:
Lino-Faggio overrides a whole modlib module by defining
lino_faggio.contacts
.
Why is this necessary?
Summary: The lino.modlib.school
requires the concrete class of contacts.Person, and because
lino_faggio.models
(who defines this class)
cannot then also use the schools module.
So I had to split lino_faggio.models
: one who implements the
concrete Person model and another who uses the school module.
And because I didn’t want to create a new app_name,
I tried to override the lino.modlib.contacts
module.