[x] Specific version 1, 2, or 3 digits: version not in supported, version in supported for all of those: upgrade, middle, upgrade, stay, downgrade
[x] Test migraterevision:
[x] True
[x] latest
[x] specific revision: upgrade, stay same, downgrade
[x] no projectversion in parset = reject it
[x] debug info
[x] Notes
[ ] Changelist
[ ] hiv_utils updates ready to go
Notes:
loadspreadsheet.py
loadspreadsheet new optional argument projectversion.
Raises an error if the databook version is before the first versions_different_databook that is incompatible with the current code
Raises an error if the projectversion and databookversion are incompatible, gives a warning if projectversion not given.
In the future use load_version if we need version-specific loading.
Only currently called from P.loadspreadsheet which now passes projectversion=self.version
loadtools.py:
New functions migraterevisionfunc, setrevisionmigrations, which are essentially copies ofmigrateandsetmigrations`
New function: versiontomigrateto which has options for migrateversion and outputs either a version, False (don't migrate) or None which means couldn't find a version to migrate to
First revision migration now added - see further down in notes
optimaversion updated to print op.supported_versions instead of op.version (this function might not be used anymore but leave for backwards compatibility?)
migrate defaults to migrateversion='supported' which doesn't throw an error if it cannot find a version to migrate to, but the other options do throw an error because the user did want to update
new function migraterevisionfunc adds project.revision = 0 if it was missing a .revision, which then it can migrate from
Can go to 'latest' or specific revision or not migrate
loadproj has arguments migrateversion='supported', migraterevision='latest' instead of domigrate=True
Calls both migrate and migraterevisionfunc and always checks that the version and revision at the end are compatible
[ ] moved if not fromdb and updatefilename: P.filename = filename # Update filename if not being loaded from a database - this used to be in the if migrateversion block, not sure why?
loadportfolio now also calls migraterevisionfunc, as well as migrate with their default args which updates them to a supported version and latest revision
makespreadsheet.py
new function compatibledatabookversion which inputs a projectversion or list of projectversions and outputs the first version that used the same databook type, or None if it is before the first entry in versions_different_databook
makespreadsheet and OptimaSpreadsheet have a version argument, which defaults to the latest version with a warning if it is not given.
makespreadsheet is (mostly) only called via P.makespreadsheet which now passes version=self.version
Some of the other functions and classes might need .versions but they can likely be added without problem if/when we need to change these functions
To check:
FE:
Code:
versiontomigrateto
:supported
: upgrade, middle upgrade, stay, downgrademinor
: upgrade, middle upgrade, stay, downgrademajor
is finemigraterevision
:Notes:
loadspreadsheet.py
loadspreadsheet
new optional argumentprojectversion
.versions_different_databook
that is incompatible with the current codeprojectversion
anddatabookversion
are incompatible, gives a warning ifprojectversion
not given.load_version
if we need version-specific loading.P.loadspreadsheet
which now passesprojectversion=self.version
loadtools.py
:migraterevisionfunc
,setrevisionmigrations
,which are essentially copies of
migrateand
setmigrations`versiontomigrateto
which has options formigrateversion
and outputs either aversion
,False
(don't migrate) orNone
which means couldn't find a version to migrate tooptimaversion
updated to printop.supported_versions
instead ofop.version
(this function might not be used anymore but leave for backwards compatibility?)migrate
defaults tomigrateversion='supported'
which doesn't throw an error if it cannot find a version to migrate to, but the other options do throw an error because the user did want to updatemigraterevisionfunc
addsproject.revision = 0
if it was missing a.revision
, which then it can migrate fromloadproj
has argumentsmigrateversion='supported', migraterevision='latest'
instead ofdomigrate=True
migrate
andmigraterevisionfunc
and always checks that the version and revision at the end are compatibleif not fromdb and updatefilename: P.filename = filename # Update filename if not being loaded from a database
- this used to be in theif migrateversion
block, not sure why?loadportfolio
now also callsmigraterevisionfunc
, as well asmigrate
with their default args which updates them to a supported version and latest revisionmakespreadsheet.py
compatibledatabookversion
which inputs aprojectversion
or list ofprojectversions
and outputs the first version that used the same databook type, or None if it is before the first entry inversions_different_databook
makespreadsheet
andOptimaSpreadsheet
have aversion
argument, which defaults to the latest version with a warning if it is not given.makespreadsheet
is (mostly) only called viaP.makespreadsheet
which now passesversion=self.version
.version
s but they can likely be added without problem if/when we need to change these functionsFirst revision migration: