Thursday, August 13, 2015

A quick release to The Lino framework for #414 (milestones, sites & projects) because maybe Otto and I will look at this today.

There is a change in the database schema: in the tickets.Milestone model the project field has been removed and has a new field site has been added. Here is an example of how to handle this using a manual local migration.

First we make a snapshot:

$ ./make_snapshot

Then we upgrade our local copy of the source repositories:

$ ./pull.sh

Then we try to restore our snapshot. Since there is a schema change, we will get an error message:

$ python manage.py run snapshot/restore.py
...
Traceback (most recent call last):
  ...
  File "snapshot/restore.py", line 682, in <module>
  File "snapshot/restore.py", line 672, in main
  File "tickets_milestone.py", line 4, in <module>
    loader.save(create_tickets_milestone(1,100,u'gx-2014-12',None,None))
  File "snapshot/restore.py", line 538, in create_tickets_milestone
  File "/usr/local/pythonenv/demo/local/lib/python2.7/site-packages/django/db/models/base.py", line 417, in __init__
    raise TypeError("'%s' is an invalid keyword argument for this function" % list(kwargs)[0])
TypeError: 'project_id' is an invalid keyword argument for this function
INFO Done manage.py run snapshot/restore.py (PID 18940)

So we edit the file snapshot/restore.py. In line 538 we see:

def create_tickets_milestone(id, project_id, label, expected, reached):
    kw = dict()
    kw.update(id=id)
    kw.update(project_id=project_id)
    kw.update(label=label)
    kw.update(expected=expected)
    kw.update(reached=reached)
    return tickets_Milestone(**kw)

In current case we just uncomment the following line of above code:

# kw.update(project_id=project_id)

And we restore our snapshot again, this time there should be no errors:

$ python manage.py run snapshot/restore.py

And finally of course:

$ restart_apache