Sunday, December 10, 2017¶
I had a review of the Dive into Lino, trying to feel like a student of the Tallinn IT college <http://www.itcollege.ee/>. The first thing that made me stumble was the fact that I need to work in Python 2.
Our work on #36 is almost done, but it went to sleep because we depend on appy.
The appypod project, aartial redistribution of appy¶
Don’t take it personally Gaetan, but now I will try a partial redistribute of appy.
The idea is that I redistribute Gaetan’s work on appy.pod in a
project with a git repository and a setup.py
.
The sole purpose is making Gaetan’s work on appy.pod available under Python 3. I don’t plan any enhancements.
Note that appy.pod is only a part of the Appy framework. We reduce the redistribution to a minimum because we don’t want to be a replacement.
Porting Lino to Django 2¶
The first stumblestone for Lino under Django 2 is that they somehow decided to make on_delete a required argument:
TypeError: __init__() missing 1 required positional argument: 'on_delete'
I fix this by changing all models.ForeignKey
calls to
lino.core.fields.ForeignKey()
.
Next problem:
AttributeError: 'Options' object has no attribute 'virtual_fields'
That’s because virtual_fields has been replaced by private_fields in 1.9. Already in 1.10 we had:
The private attribute virtual_fields of Model._meta is deprecated in favor of private_fields.
The private keyword arguments virtual_only in Field.contribute_to_class() and virtual in Model._meta.add_field() are deprecated in favor of private_only and private, respectively.
Next problem:
Exception: Invalid remote field account__ref for <class 'lino_xl.lib.finan.models.JournalEntryItem'>
That’s because Field.rel and Field.remote_field.to are removed. Already in 1.9, “Field.rel and its methods and attributes have changed to match the related fields API. The Field.rel attribute is renamed to remote_field and many of its methods and attributes are either changed or renamed.”
Until no I could test:
if fk.remote_field is not None: ...
But in Django 2, fk.remote_field is False when it was None.
django-admin commands now have more severe argument checking.
Voilà. A nice start. It’s not finished, the next problem is somewhere in mti, that’s enough Django 2 for me for today. I said:
install_requires.append('django<2')
because after all I first want it to pass under Python 3 at all.