Skip to content

Commit acd6aa1

Browse files
authored
Migrations fix (#1360)
* Fixed migrations install during project setup * Added default migration install action * Added test for migration install action
1 parent da34ce9 commit acd6aa1

5 files changed

Lines changed: 73 additions & 2 deletions

File tree

activity_browser/actions/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,4 @@
5858
from .biosphere_update import BiosphereUpdate
5959
from .plugin_wizard_open import PluginWizardOpen
6060
from .settings_wizard_open import SettingsWizardOpen
61+
from .migrations_install import MigrationsInstall
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from PySide2 import QtWidgets
2+
3+
from activity_browser import application
4+
from activity_browser.actions.base import ABAction, exception_dialogs
5+
from activity_browser.ui import icons, threading
6+
from activity_browser.mod.bw2io.migrations import ab_create_core_migrations
7+
8+
9+
class MigrationsInstall(ABAction):
10+
"""
11+
ABAction to install the default migrations from bw2io
12+
"""
13+
14+
icon = icons.qicons.import_db
15+
text = "Install default migrations"
16+
17+
@staticmethod
18+
@exception_dialogs
19+
def run():
20+
def update_dialog_slot(progress: int, label: str):
21+
dialog.setValue(progress)
22+
dialog.setLabelText(label)
23+
24+
25+
dialog = QtWidgets.QProgressDialog(application.main_window)
26+
dialog.setWindowTitle("Installing migrations")
27+
dialog.setMaximum(100)
28+
dialog.setCancelButton(None)
29+
30+
thread = MigrationsInstallThread(application)
31+
32+
thread.status.connect(update_dialog_slot)
33+
34+
thread.start()
35+
dialog.exec_()
36+
37+
38+
class MigrationsInstallThread(threading.ABThread):
39+
def run_safely(self):
40+
ab_create_core_migrations()

activity_browser/mod/bw2io/ecoinvent.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ def ab_import_ecoinvent_release(version, system_model):
1515
from bw2io import migrations
1616
from .migrations import ab_create_core_migrations
1717

18-
# if not len(migrations):
19-
# ab_create_core_migrations()
18+
if not len(migrations):
19+
ab_create_core_migrations()
2020

2121
# downloading a release through a AB version of ecoinvent_interface that implements a progress_slot
2222
release = ABEcoinventRelease(ei.Settings())

activity_browser/ui/menu_bar.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ def setup_file_menu(self) -> None:
5757
self.file_menu.addAction(self.export_db_action)
5858
self.file_menu.addAction(self.update_biosphere_action)
5959
self.file_menu.addSeparator()
60+
self.file_menu.addMenu(MigrationsMenu(self))
61+
self.file_menu.addSeparator()
6062
self.file_menu.addAction(self.manage_settings_action)
6163

6264
def setup_view_menu(self) -> None:
@@ -121,3 +123,16 @@ def biosphere_exists(self) -> None:
121123
exists = True if bd.config.biosphere in bd.databases else False
122124
self.update_biosphere_action.setEnabled(exists)
123125
self.import_db_action.setEnabled(exists)
126+
127+
128+
class MigrationsMenu(QtWidgets.QMenu):
129+
def __init__(self, parent=None) -> None:
130+
super().__init__(parent)
131+
132+
self.setTitle("Migrations")
133+
self.install_migrations_action = actions.MigrationsInstall.get_QAction()
134+
135+
self.addAction(self.install_migrations_action)
136+
137+
138+

tests/actions/test_various_actions.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import os
22

33
import bw2data as bd
4+
import bw2io as bi
45
import pytest
56
from PySide2 import QtWidgets
67

@@ -66,3 +67,17 @@ def test_settings_wizard_open(ab_app):
6667
assert application.main_window.findChild(SettingsWizard).isVisible()
6768

6869
application.main_window.findChild(SettingsWizard).destroy()
70+
71+
72+
def test_migrations_install(ab_app, qtbot):
73+
from activity_browser.actions.migrations_install import MigrationsInstallThread
74+
75+
project_name = "migrations_project"
76+
bd.projects.set_current(project_name)
77+
78+
assert not len(bi.migrations)
79+
80+
actions.MigrationsInstall.run()
81+
82+
assert len(bi.migrations)
83+

0 commit comments

Comments
 (0)