20111028

Connecting to the BCSS

I wrote a new module lino.utils.xmlgen which I prefer over generateDS or appy.Object for generating the XML of BCSS requests.

This is finally how I actually enjoy writing BCSS requests!

But of course it’s possible that my fascination is due to my naiveness, since I have no serious experience with XML. So I asked Gaëtan for his opinion:

voici donc deux modules qui font en principe la même chose mais de manière différente.

test5.py est ce que nous avions commencé ensemble. Cela ne marche pas encore tout-à-fait à cause du petit problème avec ANY.

Mais indépendamment de cela, je n’aimais pas la quantité de code que je dois écrire et maintenir pour générer ma requête. Hier je me suis donc lancé dans mon idée dont tu vois le résultat dans la test6.py

Note que les deux tests appellent des services différents:

  • test5.py HeatingAllocation
  • test6.py PerformInvestigation

c’est dommage car il faut maintenant comparer des pommes à des oranges, cela vient du fait qu’entre temps Gerd et moi avons compris que PerformInvestigation est plus urgente que HeatingAllocation…

Malgré cela je trouve que l’avantage de mon xmlgen au point de vue clarté du code est bien visible.

Question pour toi: qu’en penses-tu? As-tu des exemples de XML que j’aurais difficile à générer avec mon système?

A little bug

Read-only checkboxes are only grey but not read-only. Seems that this is due to a bug in ExtJS. For example on the Detail of a JobProvider, if you activate the checkbox is_courseprovider and click on Save, you get:

ERROR A JobProvider cannot be parent for a CourseProvider
Traceback (most recent call last):
  File "t:\hgwork\lino\lino\ui\extjs3\ext_store.py", line 651, in form2obj
    f.form2obj(request,instance,form_values,is_new)
  File "t:\hgwork\lino\lino\ui\extjs3\ext_store.py", line 124, in form2obj
    self.set_value_in_object(request,instance,v)
  File "t:\hgwork\lino\lino\utils\mti.py", line 187, in set_value_in_object
    insert_child(obj,self.child_model)
  File "t:\hgwork\lino\lino\utils\mti.py", line 123, in insert_child
    obj.__class__.__name__,child_model.__name__))
Exception: A JobProvider cannot be parent for a CourseProvider

Changed this (in lino.utils.mti.insert_child()) to raise a ValidationError instead of an Exception.

Also removed the assertion assert child_model != obj.__class__ (which occurred today) because in that case we would simply not find any parent_link_field, which would lead to the validation error “A CourseProvider cannot be parent for a CourseProvider”

This bug