20110725¶
(a) Layout-Problem Verträge gelöst¶
Zwei Stunden Fehlerjagd für folgendes Problem:
Ein Layout-Bug im Detail der Verträge: die Reiter “Art.60-7” und “VSE” werden seit Version 1.2.0 nicht gleich beim ersten Mal korrekt aufgebaut. Workaround bis auf weiteres: man muss mehrmals die drei Reiter “durchklicken”, bis die Felder korrekt angezeigt werden. Das Problem ist nicht durch die aktiven Felder gekommen. Ist sehr ähnlich wie docs/tickets/1.
Es hatte überhaupt nichts mit Ticket #1 zu tun, sondern in meiner
Lino.RichTextPanel war noch ein Bug: refresh() erzeugte einen TypeError
wenn sie auf einer noch nicht gerenderten Komponente aufgerufen wurde.
Jetzt macht sie deshalb if (this.editor.ed)
. Das war alles!
Wenn ich als erstes in die Console geschaut hätte statt ins Ticket #1,
hätte ich eine bis 3 Stunden Zeit gespart…
Checkin 20110725a
(b) self.company
in Dokumentvorlagen für Verträge¶
Der Drittpartner eines Vertrags (lino.modlib.jobs.models.Contract
ist ja jetzt nicht mehr company, sondern provider.
In den Dokumentvorlagen steht aber überall self.company
.
Erste schnelle Lösung:
def get_company(self):
return self.provider
company = property(get_company)
Wenn ich einen Trick fände, in Django den Datentyp eines aus einer Basisklasse geerbten Feldes zu verändern, dann könnte ich Contract wieder zu einem PartnerDocument machen. Ungefähr so:
class PartnerDocument(models.Model):
company = models.ForeignKey('contacts.Company',...)
person = models.ForeignKey('contacts.Person',...)
...
class Contract(PartnerDocument,...):
@classmethod
def setup_model(cls):
cls.company = models.ForeignKey('jobs.JobProvider',...)
Aber so eine Methode setup_model (die irgendwo in django.db.models.base.ModelBase aufgerufen werden müsste) gibt es nicht, und die wäre auch nicht einfach zu implementieren.
Checkin 20110725b und Installation beim Kunden, also das kommt noch mit in die https://www.lino-framework.org/releases/2011/0723.html.
(c) Bug im Detail “Status” einer Person¶
Checkin 20110725c und Installation beim Kunden, also auch das kommt noch mit in die https://www.lino-framework.org/releases/2011/0723.html.
(d) UnicodeEncodeError at /api/uploads/UploadsByOwner¶
Wenn man versucht, eine Datei mit Sonderzeichen im Namen hochzuladen, dann passiert auf dem Debian-Server des Kunden ein UnicodeEncodeError:
ERROR base : Internal Server Error: /api/uploads/UploadsByOwner
Traceback (most recent call last):
File "/var/snapshots/django/django/core/handlers/base.py", line 111, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "/var/snapshots/lino/lino/ui/extjs3/ext_ui.py", line 980, in api_list_view
rh.report.handle_uploaded_files(request,instance)
File "/var/snapshots/lino/lino/reports.py", line 714, in f
return m(obj,request)
File "/var/snapshots/lino/lino/mixins/uploadable.py", line 81, in handle_uploaded_files
ff.save(uf.name,uf,save=False)
File "/var/snapshots/django/django/db/models/fields/files.py", line 90, in save
self.name = self.storage.save(name, content)
File "/var/snapshots/django/django/core/files/storage.py", line 48, in save
name = self.get_available_name(name)
File "/var/snapshots/django/django/core/files/storage.py", line 74, in get_available_name
while self.exists(name):
File "/var/snapshots/django/django/core/files/storage.py", line 233, in exists
return os.path.exists(self.path(name))
File "/usr/lib/python2.6/genericpath.py", line 18, in exists
st = os.stat(path)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 51: ordinal not in range(128)
Ich versuche den Fall im Laboratorium zu reproduzieren:
import os
from django.utils._os import safe_join
fn = u"Liste F\xfchrerschein.pdf"
fn = safe_join('foo',fn)
fn = os.path.normpath(fn)
print repr(fn)
print os.path.exists(fn)
Aber das funktioniert tadellos:
lsaffre@lino:~$ python 20110725.py
u'/home/lsaffre/foo/Liste F\xfchrerschein.pdf'
True
Hm…