oqtopus 0.1.18__py3-none-any.whl → 0.1.20__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
oqtopus/core/module.py CHANGED
@@ -3,7 +3,7 @@ import json
3
3
  from qgis.PyQt.QtCore import QByteArray, QObject, QUrl, pyqtSignal
4
4
  from qgis.PyQt.QtNetwork import QNetworkAccessManager, QNetworkReply, QNetworkRequest
5
5
 
6
- from ..utils.plugin_utils import PluginUtils
6
+ from ..utils.plugin_utils import PluginUtils, logger
7
7
  from .module_package import ModulePackage
8
8
 
9
9
 
@@ -25,8 +25,9 @@ class Module(QObject):
25
25
  return f"Module(name={self.name}, organisation={self.organisation}, repository={self.repository})"
26
26
 
27
27
  def start_load_versions(self):
28
- url = QUrl(f"https://api.github.com/repos/{self.organisation}/{self.repository}/releases")
29
- request = QNetworkRequest(url)
28
+ url = f"https://api.github.com/repos/{self.organisation}/{self.repository}/releases"
29
+ logger.info(f"Loading versions from '{url}'...")
30
+ request = QNetworkRequest(QUrl(url))
30
31
  headers = PluginUtils.get_github_headers()
31
32
  for key, value in headers.items():
32
33
  request.setRawHeader(QByteArray(key.encode()), QByteArray(value.encode()))
@@ -83,8 +84,10 @@ class Module(QObject):
83
84
  )
84
85
  self.development_versions.append(mainVersion)
85
86
 
86
- url = QUrl(f"https://api.github.com/repos/{self.organisation}/{self.repository}/pulls")
87
- request = QNetworkRequest(url)
87
+ url = f"https://api.github.com/repos/{self.organisation}/{self.repository}/pulls"
88
+ logger.info(f"Loading development versions from '{url}'...")
89
+
90
+ request = QNetworkRequest(QUrl(url))
88
91
  headers = PluginUtils.get_github_headers()
89
92
  for key, value in headers.items():
90
93
  request.setRawHeader(QByteArray(key.encode()), QByteArray(value.encode()))
@@ -116,3 +116,8 @@ class ModulePackage:
116
116
  self.created_at = QDateTime.fromString(json_payload["created_at"], Qt.DateFormat.ISODate)
117
117
  self.prerelease = False
118
118
  self.html_url = json_payload["html_url"]
119
+
120
+ is_on_a_fork = json_payload["head"]["repo"]["fork"]
121
+ if is_on_a_fork:
122
+ self.organisation = json_payload["head"]["repo"]["owner"]["login"]
123
+ self.repository = json_payload["head"]["repo"]["name"]
@@ -152,9 +152,18 @@ class DatabaseConnectionWidget(QWidget, DIALOG_UI):
152
152
  databaseDuplicateDialog = DatabaseDuplicateDialog(
153
153
  selected_service=self.db_services_comboBox.currentText(), parent=self
154
154
  )
155
+
156
+ # Close the current connection otherwise it will block the database duplication
157
+ if self.__database_connection is not None:
158
+ self.__database_connection.close()
159
+ self.__database_connection = None
160
+
155
161
  if databaseDuplicateDialog.exec() == QDialog.DialogCode.Rejected:
162
+ self.__serviceChanged()
156
163
  return
157
164
 
165
+ self.__loadDatabaseInformations()
166
+
158
167
  def __set_connection(self, connection):
159
168
  """
160
169
  Set the current database connection and emit the signal_connectionChanged signal.
@@ -73,8 +73,6 @@ class DatabaseCreateDialog(QDialog, DIALOG_UI):
73
73
  self.parameters_port_lineEdit.setPlaceholderText(DEFAULT_PG_PORT)
74
74
  self.parameters_database_lineEdit.setPlaceholderText(DEFAULT_PG_DB)
75
75
 
76
- self.database_lineEdit.textChanged.connect(self._databaseTextChanged)
77
-
78
76
  self.buttonBox.accepted.connect(self._accept)
79
77
 
80
78
  if self.existingService_comboBox.count() > 0:
@@ -106,9 +104,6 @@ class DatabaseCreateDialog(QDialog, DIALOG_UI):
106
104
  def _enterManuallyToggled(self, checked):
107
105
  self.parameters_frame.setEnabled(checked)
108
106
 
109
- def _databaseTextChanged(self, text):
110
- self.database_label.setText(text)
111
-
112
107
  def _accept(self):
113
108
  service_name = self.created_service_name()
114
109
 
@@ -193,9 +188,10 @@ class DatabaseCreateDialog(QDialog, DIALOG_UI):
193
188
  service_name = self.existingService_comboBox.currentText()
194
189
  existing_settings = pgserviceparser_service_config(service_name)
195
190
  settings.update(existing_settings)
196
- # Overwrite dbname with the new database name
197
- if self.database_lineEdit.text():
198
- settings["dbname"] = self.database_lineEdit.text()
191
+
192
+ # Overwrite dbname with the new database name
193
+ if self.database_lineEdit.text():
194
+ settings["dbname"] = self.database_lineEdit.text()
199
195
 
200
196
  return settings
201
197
 
@@ -23,11 +23,13 @@
23
23
  # ---------------------------------------------------------------------
24
24
 
25
25
  import psycopg
26
+ from pgserviceparser import full_config as pgserviceparser_full_config
26
27
  from pgserviceparser import service_config as pgserviceparser_service_config
28
+ from pgserviceparser import write_service as pgserviceparser_write_service
27
29
  from qgis.PyQt.QtCore import Qt
28
30
  from qgis.PyQt.QtWidgets import QDialog, QMessageBox
29
31
 
30
- from ..utils.plugin_utils import PluginUtils
32
+ from ..utils.plugin_utils import PluginUtils, logger
31
33
  from ..utils.qt_utils import OverrideCursor
32
34
 
33
35
  DIALOG_UI = PluginUtils.get_ui_class("database_duplicate_dialog.ui")
@@ -61,6 +63,23 @@ class DatabaseDuplicateDialog(QDialog, DIALOG_UI):
61
63
 
62
64
  except Exception as exception:
63
65
  errorText = self.tr(f"Can't connect to service '{service_name}':\n{exception}.")
66
+ logger.error(errorText)
67
+ QMessageBox.critical(self, "Error", errorText)
68
+ return
69
+
70
+ # Create new service configuration
71
+ new_service_name = self.newService_lineEdit.text()
72
+
73
+ # Check if the new service name is already in use
74
+ try:
75
+ if new_service_name in pgserviceparser_full_config():
76
+ errorText = self.tr(f"Service name '{new_service_name}' is already in use.")
77
+ logger.error(errorText)
78
+ QMessageBox.critical(self, "Error", errorText)
79
+ return
80
+ except Exception as e:
81
+ errorText = self.tr(f"Error checking existing service names:\n{e}.")
82
+ logger.error(errorText)
64
83
  QMessageBox.critical(self, "Error", errorText)
65
84
  return
66
85
 
@@ -75,25 +94,27 @@ class DatabaseDuplicateDialog(QDialog, DIALOG_UI):
75
94
  )
76
95
  except psycopg.Error as e:
77
96
  errorText = self.tr(f"Error duplicating database:\n{e}.")
97
+ logger.error(errorText)
78
98
  QMessageBox.critical(self, "Error", errorText)
79
99
  return
80
100
  finally:
81
101
  database_connection.close()
82
102
 
83
- # Create new service configuration
84
- new_service_name = self.newService_lineEdit.text()
85
- new_service_config = pgserviceparser_service_config(
86
- new_service_name,
87
- dbname=new_database_name,
88
- host=self.__existing_service_config.get("host", ""),
89
- port=self.__existing_service_config.get("port", ""),
90
- user=self.__existing_service_config.get("user", ""),
91
- password=self.__existing_service_config.get("password", ""),
92
- )
103
+ # Write the new service configuration
93
104
  try:
94
- pgserviceparser_service_config.write_service_config(new_service_config)
105
+ new_service_config = {
106
+ "dbname": new_database_name,
107
+ "host": self.__existing_service_config.get("host", ""),
108
+ "port": self.__existing_service_config.get("port", ""),
109
+ "user": self.__existing_service_config.get("user", ""),
110
+ "password": self.__existing_service_config.get("password", ""),
111
+ }
112
+ pgserviceparser_write_service(
113
+ new_service_name, new_service_config, create_if_not_found=True
114
+ )
95
115
  except Exception as e:
96
116
  errorText = self.tr(f"Error writing new service configuration:\n{e}.")
117
+ logger.error(errorText)
97
118
  QMessageBox.critical(self, "Error", errorText)
98
119
  return
99
120
 
@@ -62,6 +62,11 @@ class LogModel(QAbstractItemModel):
62
62
  | Qt.ItemFlag.ItemNeverHasChildren
63
63
  )
64
64
 
65
+ def clear(self):
66
+ self.beginResetModel()
67
+ self.logs = []
68
+ self.endResetModel()
69
+
65
70
 
66
71
  class LogFilterProxyModel(QSortFilterProxyModel):
67
72
  LEVELS = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
@@ -8,6 +8,7 @@ from qgis.PyQt.QtCore import Qt
8
8
  from qgis.PyQt.QtWidgets import QMessageBox, QWidget
9
9
 
10
10
  from ..core.module import Module
11
+ from ..core.module_package import ModulePackage
11
12
  from ..utils.plugin_utils import PluginUtils, logger
12
13
  from ..utils.qt_utils import CriticalMessageBox, OverrideCursor, QtUtils
13
14
 
@@ -81,7 +82,16 @@ class ModuleWidget(QWidget, DIALOG_UI):
81
82
 
82
83
  logger.info(f"PUM config loaded from '{pumConfigFilename}'")
83
84
 
84
- self.parameters_groupbox.setParameters(self.__pum_config.parameters())
85
+ try:
86
+ self.parameters_groupbox.setParameters(self.__pum_config.parameters())
87
+ except Exception as exception:
88
+ CriticalMessageBox(
89
+ self.tr("Error"),
90
+ self.tr(f"Can't load parameters from PUM config '{pumConfigFilename}':"),
91
+ exception,
92
+ self,
93
+ ).exec()
94
+ return
85
95
 
86
96
  self.db_demoData_comboBox.clear()
87
97
  for demo_data_name, demo_data_file in self.__pum_config.demo_data().items():
@@ -107,9 +117,19 @@ class ModuleWidget(QWidget, DIALOG_UI):
107
117
  ).exec()
108
118
  return
109
119
 
110
- parameters = self.parameters_groupbox.parameters_values()
111
-
112
120
  try:
121
+ parameters = self.parameters_groupbox.parameters_values()
122
+
123
+ beta_testing = False
124
+ if (
125
+ self.__current_module_package.type == ModulePackage.Type.PULL_REQUEST
126
+ or self.__current_module_package.type == ModulePackage.Type.BRANCH
127
+ ):
128
+ logger.warning(
129
+ "Installing module from branch or pull request: set parameter beta_testing to True"
130
+ )
131
+ beta_testing = True
132
+
113
133
  upgrader = Upgrader(
114
134
  config=self.__pum_config,
115
135
  )
@@ -119,6 +139,7 @@ class ModuleWidget(QWidget, DIALOG_UI):
119
139
  connection=self.__database_connection,
120
140
  roles=self.db_parameters_CreateAndGrantRoles_checkBox.isChecked(),
121
141
  grant=self.db_parameters_CreateAndGrantRoles_checkBox.isChecked(),
142
+ beta_testing=beta_testing,
122
143
  )
123
144
 
124
145
  if self.db_demoData_checkBox.isChecked():
@@ -20,21 +20,21 @@ class ParameterWidget(QWidget):
20
20
  self.layout.setContentsMargins(0, 0, 0, 0)
21
21
  self.setLayout(self.layout)
22
22
  self.value = None
23
- self.__valueChanged = False
24
23
 
25
24
  if parameter_definition.type != ParameterType.BOOLEAN:
26
25
  self.layout.addWidget(QLabel(parameter_definition.name, self))
27
26
 
28
27
  if parameter_definition.type == ParameterType.BOOLEAN:
29
28
  self.widget = QCheckBox(parameter_definition.name, self)
30
- self.widget.setChecked(parameter_definition.default)
31
- self.widget.checked.connect(self.__valueChanged)
29
+ if parameter_definition.default is not None:
30
+ self.widget.setChecked(parameter_definition.default)
32
31
  self.layout.addWidget(self.widget)
33
32
  self.value = lambda: self.widget.isChecked()
34
33
  elif parameter_definition.type in (
35
34
  ParameterType.DECIMAL,
36
35
  ParameterType.INTEGER,
37
36
  ParameterType.TEXT,
37
+ ParameterType.PATH,
38
38
  ):
39
39
  self.widget = QLineEdit(self)
40
40
  if parameter_definition.default is not None:
@@ -46,6 +46,8 @@ class ParameterWidget(QWidget):
46
46
  self.value = lambda: float(self.widget.text() or self.widget.placeholderText())
47
47
  else:
48
48
  self.value = lambda: self.widget.text() or self.widget.placeholderText()
49
+ else:
50
+ raise ValueError(f"Unknown parameter type '{parameter_definition.type}'")
49
51
 
50
52
 
51
53
  class ParametersGroupBox(QGroupBox):
@@ -73,7 +73,9 @@ class PluginWidget(QWidget, DIALOG_UI):
73
73
  QMessageBox.warning(
74
74
  self,
75
75
  self.tr("Not implemented"),
76
- self.tr("Installation is not implemented yet."),
76
+ self.tr(
77
+ 'Installation is not implemented yet.\nAt the moment, you can only copy the plugin zip file to a directory and use "Install from ZIP" in QGIS.'
78
+ ),
77
79
  )
78
80
  return
79
81
 
@@ -7,17 +7,20 @@
7
7
  <x>0</x>
8
8
  <y>0</y>
9
9
  <width>513</width>
10
- <height>540</height>
10
+ <height>542</height>
11
11
  </rect>
12
12
  </property>
13
13
  <property name="windowTitle">
14
- <string>Create Service</string>
14
+ <string>Create Database</string>
15
15
  </property>
16
16
  <layout class="QVBoxLayout" name="verticalLayout">
17
17
  <item>
18
18
  <widget class="QGroupBox" name="groupBox_2">
19
+ <property name="toolTip">
20
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;To issue a &lt;span style=&quot; font-style:italic;&quot;&gt;CREATE DATABASE&lt;/span&gt; command, you must first be connected to the PostgreSQL server. Select an existing administrative connection (often named postgres) from a service or manually.&lt;br/&gt;This connection is used to perform the creation action, and as a template for the new service to be created.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
21
+ </property>
19
22
  <property name="title">
20
- <string>Create database</string>
23
+ <string>Connection to use</string>
21
24
  </property>
22
25
  <layout class="QGridLayout" name="gridLayout_2">
23
26
  <item row="0" column="1">
@@ -64,6 +67,9 @@
64
67
  <layout class="QGridLayout" name="gridLayout_5">
65
68
  <item row="5" column="1">
66
69
  <widget class="QLineEdit" name="parameters_password_lineEdit">
70
+ <property name="echoMode">
71
+ <enum>QLineEdit::PasswordEchoOnEdit</enum>
72
+ </property>
67
73
  <property name="clearButtonEnabled">
68
74
  <bool>true</bool>
69
75
  </property>
@@ -161,25 +167,6 @@
161
167
  </attribute>
162
168
  </widget>
163
169
  </item>
164
- <item row="6" column="1">
165
- <widget class="QLineEdit" name="database_lineEdit">
166
- <property name="font">
167
- <font>
168
- <italic>false</italic>
169
- </font>
170
- </property>
171
- <property name="text">
172
- <string/>
173
- </property>
174
- </widget>
175
- </item>
176
- <item row="6" column="0">
177
- <widget class="QLabel" name="label_4">
178
- <property name="text">
179
- <string>Database</string>
180
- </property>
181
- </widget>
182
- </item>
183
170
  <item row="0" column="0">
184
171
  <widget class="QRadioButton" name="useService_radioButton">
185
172
  <property name="text">
@@ -199,35 +186,48 @@
199
186
  <item>
200
187
  <widget class="QGroupBox" name="groupBox">
201
188
  <property name="title">
202
- <string>Create service</string>
189
+ <string>New database</string>
203
190
  </property>
204
191
  <layout class="QGridLayout" name="gridLayout_3">
205
- <item row="0" column="0">
192
+ <item row="1" column="0">
206
193
  <widget class="QLabel" name="label">
194
+ <property name="toolTip">
195
+ <string>Enter a convenient alias that will be created in your pg_service.conf file.</string>
196
+ </property>
207
197
  <property name="text">
208
- <string>Service</string>
198
+ <string>Service name</string>
209
199
  </property>
210
200
  </widget>
211
201
  </item>
212
- <item row="0" column="1">
213
- <widget class="QLineEdit" name="service_lineEdit"/>
214
- </item>
215
202
  <item row="1" column="1">
216
- <widget class="QLabel" name="database_label">
217
- <property name="font">
218
- <font>
219
- <italic>true</italic>
220
- </font>
203
+ <widget class="QLineEdit" name="service_lineEdit">
204
+ <property name="toolTip">
205
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Enter a convenient alias that will be created in your &lt;span style=&quot; font-style:italic;&quot;&gt;pg_service.conf&lt;/span&gt; file.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
206
+ </property>
207
+ </widget>
208
+ </item>
209
+ <item row="0" column="0">
210
+ <widget class="QLabel" name="label_4">
211
+ <property name="toolTip">
212
+ <string>Enter the actual name for the new database as it will exist inside your PostgreSQL installation.</string>
221
213
  </property>
222
214
  <property name="text">
223
- <string>-</string>
215
+ <string>Database name</string>
224
216
  </property>
225
217
  </widget>
226
218
  </item>
227
- <item row="1" column="0">
228
- <widget class="QLabel" name="label_2">
219
+ <item row="0" column="1">
220
+ <widget class="QLineEdit" name="database_lineEdit">
221
+ <property name="font">
222
+ <font>
223
+ <italic>false</italic>
224
+ </font>
225
+ </property>
226
+ <property name="toolTip">
227
+ <string>Enter the actual name for the new database as it will exist inside your PostgreSQL installation.</string>
228
+ </property>
229
229
  <property name="text">
230
- <string>Database</string>
230
+ <string/>
231
231
  </property>
232
232
  </widget>
233
233
  </item>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oqtopus
3
- Version: 0.1.18
3
+ Version: 0.1.20
4
4
  Summary: A QGIS module manager
5
5
  Author-email: Damiano Lombardi <damiano@opengis.ch>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -1,28 +1,28 @@
1
1
  oqtopus/__init__.py,sha256=PUl5ObSgoyF6tcNphBip9Rff8lul0t9VobiwsLKwgFA,104
2
2
  oqtopus/oqtopus.py,sha256=BF_JSF2oOCzc8Qr7Z0B7FJdYrdAR3FR9L7oXh3QatL4,1860
3
3
  oqtopus/oqtopus_plugin.py,sha256=Mpyk6xIgZ1wehBzv70xc6OfddiHQYfXnU6-2E6dDihs,5815
4
- oqtopus/core/module.py,sha256=XOGI7R_2LyoscXAA-hCTKu7KjJ6ppAPgVFwrtSBiWTA,4631
4
+ oqtopus/core/module.py,sha256=47iDvEOXFNWY77cbi7LhQs5qTUwRNuauieqNTPf9UKY,4766
5
5
  oqtopus/core/module_asset.py,sha256=qr_wwriJ_rZd86EuBo_Rx-MDCDJNYA6odhk6F-Z6YFA,467
6
- oqtopus/core/module_package.py,sha256=ilMWlArVmvULhoKHEXg7hNwiE6pLUsAMkLwtOes4j5A,3726
6
+ oqtopus/core/module_package.py,sha256=sYCnKMOMW4R9ULP3oresDNMAaFEb8y_pLa4Lvjdl7RI,3958
7
7
  oqtopus/core/modules_config.py,sha256=iEN_JYuFuGpF4dyfnmcJPfp_bIzrn_PNbq9G1DElyCg,186
8
8
  oqtopus/core/package_prepare_task.py,sha256=YqIjUbCqDyCd5t0Un71ECgY0LW_uFFxuXyO701nXZ_M,5483
9
9
  oqtopus/gui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  oqtopus/gui/about_dialog.py,sha256=dDNwHxKf_M82Z-TKmXW1fXmnI_WSV_7MShqz05trzRw,2345
11
- oqtopus/gui/database_connection_widget.py,sha256=7wFO1ysGwoNoXFFakNz6TktwOm28z3dRmbVxavIXX0E,6375
12
- oqtopus/gui/database_create_dialog.py,sha256=afltzI1s9B0QGnZl6mgsX-0EvwOUArMu1Vxar4RsYvs,9055
13
- oqtopus/gui/database_duplicate_dialog.py,sha256=Oz8pob6HxZHbV5Thcrhy4dPvGEI4_brSxw9KIcTc2ZE,4017
14
- oqtopus/gui/logs_widget.py,sha256=B9Kbwt6cD40CV5mfcyaHZ5foJIPvWRednbxIRdeRgpU,6593
11
+ oqtopus/gui/database_connection_widget.py,sha256=_SM9K-2dUmXMgjJzqdWrfutRnU4I0WDWZ2FM1dkIa6A,6688
12
+ oqtopus/gui/database_create_dialog.py,sha256=Z7XK47EVs3S1GKWEGOZDE5a4cEWUgW4NcPzAD0JqyEg,8880
13
+ oqtopus/gui/database_duplicate_dialog.py,sha256=Scc1eo8hmniAIyDDK_Qks1RgZn6MsDbtIokg9woEldA,4944
14
+ oqtopus/gui/logs_widget.py,sha256=lxP0rZYUF4ahR7RtM3SJCbk5nk70SVC9Ien6TvBsflY,6698
15
15
  oqtopus/gui/main_dialog.py,sha256=7nxn4vL5fIege0qBPP1mrOp5jP0YWXFJ_k_ywGeKD8M,6362
16
16
  oqtopus/gui/module_selection_widget.py,sha256=57M9sM_VhD5lAfxqOxEPWUHiB2Ty6EQQkRnvAZ0VSv8,16116
17
- oqtopus/gui/module_widget.py,sha256=ev8LoYVREg45mLLU9qu5bPhS4uDiayFAAy8e2zoLk-c,7618
18
- oqtopus/gui/parameters_groupbox.py,sha256=Lgwv76epIvZOZA0y9sxNcbuZ0Tun-ObUzvOa6eM3EzM,2842
19
- oqtopus/gui/plugin_widget.py,sha256=BDtheJ35yrk55Th0vHulHe99jsJUMY11lKBgrHHmkiE,5622
17
+ oqtopus/gui/module_widget.py,sha256=WEE0paMIbRDfJ2KvIByZtHK4H1TULXLBFb1c4ydQttg,8443
18
+ oqtopus/gui/parameters_groupbox.py,sha256=ZXoIbTDrpoe_SfxyYr7mNbQOi0vHAJSW8cPIXzGKdmE,2938
19
+ oqtopus/gui/plugin_widget.py,sha256=8av8KI3p8gnXOlSssB5-dFVvq4vaLfqGjY9NVSNiBb0,5757
20
20
  oqtopus/gui/project_widget.py,sha256=T34MyHzHgKw1Dl6V67MKPneSd9DDgrWhuhj7mrcvjSg,6696
21
21
  oqtopus/gui/settings_dialog.py,sha256=wgwVCuAIBh9iLrs9y5HfE99LrTV0rEYbL3frMBlW0cQ,1547
22
22
  oqtopus/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
23
  oqtopus/ui/about_dialog.ui,sha256=2oa5u3LIvN3prHyELUG-bwDuEHlBn9-uuA4CwYsEARo,6236
24
24
  oqtopus/ui/database_connection_widget.ui,sha256=0hLBaOx0KcLTH6RlkziVj-tsczjHDUGC-3EXQYgcTuE,3729
25
- oqtopus/ui/database_create_dialog.ui,sha256=wM_x54bfgdSaShdx6MwBgDx_R-O_ckeoynEhFjs-Sws,8261
25
+ oqtopus/ui/database_create_dialog.ui,sha256=c-fZJRH4tmAeOr6O6M2sPIhzzYQMrSc1DI6a7at-UjI,9230
26
26
  oqtopus/ui/database_duplicate_dialog.ui,sha256=EzMRYhlxsiP_sr9ixBJn4lnefM5R_p1oXx4RCyMAj9U,3826
27
27
  oqtopus/ui/logs_widget.ui,sha256=oAgEtRUBXB-DzLC0vmBP-PEA-Uu3d3ppFm0ahs1jHQI,2785
28
28
  oqtopus/ui/main_dialog.ui,sha256=mB_VeJ-4wXJm3UTS5leGg_ZgFwgBJaS1QruBqnYMh6U,2650
@@ -36,10 +36,10 @@ oqtopus/utils/plugin_utils.py,sha256=v-Oxu2zs8tQWzEdHnwEl1mseapyvpPS-lHimJNK2zHY
36
36
  oqtopus/utils/qt_utils.py,sha256=HPe9tOQQH9R9xZp4rGphVhSJO7220q368xmreDu5-6g,3243
37
37
  oqtopus/utils/tmmtlogging.py,sha256=BSAPrhQGCuH2boMG4bP8QFyLfoss1uR4pO_pXjTA1eQ,1733
38
38
  oqtopus/utils/translation.py,sha256=p1d5N6CYIf94fGYdPQnJamdum9MVBlPkJ24c557rqdg,2647
39
- oqtopus-0.1.18.dist-info/licenses/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
39
+ oqtopus-0.1.20.dist-info/licenses/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
40
40
  tests/__init__.py,sha256=z5CxS92efenLcDm64Sifx26EjZBCWPO4oVvaEEHJJ6w,444
41
41
  tests/test_plugin_load.py,sha256=HuVLdrsn2PSjKIrvcLj0EH7vNE8-0jBMmHZHihsqB3Q,517
42
- oqtopus-0.1.18.dist-info/METADATA,sha256=qk2WDV_BKgW05EmceSuaW1IwRFs-ChcbsxX5Eof4QbY,21475
43
- oqtopus-0.1.18.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
44
- oqtopus-0.1.18.dist-info/top_level.txt,sha256=i4DHi21kcGIzrF8DlgsKj-UCENHg_NebTRac7cwt32A,14
45
- oqtopus-0.1.18.dist-info/RECORD,,
42
+ oqtopus-0.1.20.dist-info/METADATA,sha256=L0mPS1xldApE8aF-eS68a2ArcpzYiJfFDQP5NCL_1W4,21475
43
+ oqtopus-0.1.20.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
44
+ oqtopus-0.1.20.dist-info/top_level.txt,sha256=i4DHi21kcGIzrF8DlgsKj-UCENHg_NebTRac7cwt32A,14
45
+ oqtopus-0.1.20.dist-info/RECORD,,