Friday, August 7, 2020

I updated the Lino Presto site for Margarete.

Added “python -m pip install -U pip” to the pull.sh getlino template. Because on production sites this is usually the first thing you want to check, and pip is AFAICS a reliable package that we can safely upgrade without worrying very much.

Upgraded their Django, which was still 2.2.5.

Oho:

Traceback (most recent call last):
  File "manage.py", line 6, in <module>
    from lino_local import manage ; manage(__file__,py3=True)
  ...
  File "/home/admin/mypy/prod_sites/soshilfe/env/lib/python3.6/site-packages/lino/core/utils.py", line 15, in <module>
    from django.db.models.fields import FieldDoesNotExist
ImportError: cannot import name 'FieldDoesNotExist'

Seems that Lino doesn’t yet collaborate with Django 3.1. Need to fix that locally. On the production site I work around it by saying:

$ pip install -U "Django<3.1"

After upgrading django I also had to upgrade django-localflavor and django-click.

Now:

$ python manage.py run snapshot/restore.py

TypeError: PriceRule() got an unexpected keyword argument 'event_type_id'

Yes, remember Tuesday, May 19, 2020.

Before:

def create_products_pricerule(id, seqno, event_type_id, fee_id, pf_income):
#    if pf_income: pf_income = settings.SITE.models.presto.IncomeCategories.get_by_value(pf_income)
    kw = dict()
    kw.update(id=id)
    kw.update(seqno=seqno)
    kw.update(event_type_id=event_type_id)
    kw.update(fee_id=fee_id)
    kw.update(pf_income=pf_income)
    return products_PriceRule(**kw)

After:

def create_products_pricerule(id, seqno, event_type_id, fee_id, pf_income):
#    if pf_income: pf_income = settings.SITE.models.presto.IncomeCategories.get_by_value(pf_income)
    kw = dict()
    kw.update(id=id)
    kw.update(seqno=seqno)
    kw.update(selector_id=event_type_id)  # renamed event_type to selector
    kw.update(product_id=fee_id)          # renamed fee to product
    kw.update(pf_income=pf_income)
    return products_PriceRule(**kw)