Skip to content

Commit 5273660

Browse files
authored
Update module informations (#40)
* Fix loading of dev branches and simplify logic
1 parent d83cb27 commit 5273660

File tree

4 files changed

+173
-179
lines changed

4 files changed

+173
-179
lines changed

oqtopus/core/module.py

Lines changed: 88 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,76 @@
1-
import requests
1+
import json
2+
3+
from qgis.PyQt.QtCore import QByteArray, QObject, QUrl, pyqtSignal
4+
from qgis.PyQt.QtNetwork import QNetworkAccessManager, QNetworkReply, QNetworkRequest
25

36
from ..utils.plugin_utils import PluginUtils
47
from .module_package import ModulePackage
58

69

7-
class Module:
8-
def __init__(self, name: str, organisation: str, repository: str):
10+
class Module(QObject):
11+
signal_versionsLoaded = pyqtSignal(str)
12+
signal_developmentVersionsLoaded = pyqtSignal(str)
13+
14+
def __init__(self, name: str, organisation: str, repository: str, parent=None):
15+
super().__init__(parent)
916
self.name = name
1017
self.organisation = organisation
1118
self.repository = repository
1219
self.versions = []
1320
self.development_versions = []
1421
self.latest_version = None
22+
self.network_manager = QNetworkAccessManager(self)
1523

1624
def __repr__(self):
1725
return f"Module(name={self.name}, organisation={self.organisation}, repository={self.repository})"
1826

19-
def load_versions(self):
20-
r = requests.get(
21-
f"https://api.github.com/repos/{self.organisation}/{self.repository}/releases",
22-
headers=PluginUtils.get_github_headers(),
23-
)
24-
25-
# Raise an exception in case of http errors
26-
r.raise_for_status()
27-
28-
json_versions = r.json()
29-
self.versions = []
30-
self.latest_version = None
31-
for json_version in json_versions:
32-
module_package = ModulePackage(
33-
module=self,
34-
organisation=self.organisation,
35-
repository=self.repository,
36-
json_payload=json_version,
37-
type=ModulePackage.Type.RELEASE,
38-
)
39-
self.versions.append(module_package)
40-
41-
# Latest version -> most recent commit date for non prerelease
42-
if module_package.prerelease is True:
43-
continue
44-
45-
if self.latest_version is None:
46-
self.latest_version = module_package
47-
continue
48-
49-
if module_package.created_at > self.latest_version.created_at:
50-
self.latest_version = module_package
51-
52-
def load_development_versions(self):
53-
27+
def start_load_versions(self):
28+
url = QUrl(f"https://api.github.com/repos/{self.organisation}/{self.repository}/releases")
29+
request = QNetworkRequest(url)
30+
headers = PluginUtils.get_github_headers()
31+
for key, value in headers.items():
32+
request.setRawHeader(QByteArray(key.encode()), QByteArray(value.encode()))
33+
reply = self.network_manager.get(request)
34+
reply.finished.connect(lambda: self._on_versions_reply(reply))
35+
36+
def _on_versions_reply(self, reply):
37+
if reply.error() is not QNetworkReply.NetworkError.NoError:
38+
print(f"request sent: {reply.request().url()}")
39+
print(f"reply error: {reply.error()}")
40+
self.signal_versionsLoaded.emit(reply.errorString())
41+
reply.deleteLater()
42+
return
43+
try:
44+
data = reply.readAll().data()
45+
json_versions = json.loads(data.decode())
46+
self.versions = []
47+
self.latest_version = None
48+
for json_version in json_versions:
49+
module_package = ModulePackage(
50+
module=self,
51+
organisation=self.organisation,
52+
repository=self.repository,
53+
json_payload=json_version,
54+
type=ModulePackage.Type.RELEASE,
55+
)
56+
self.versions.append(module_package)
57+
58+
# Latest version -> most recent commit date for non prerelease
59+
if module_package.prerelease is True:
60+
continue
61+
62+
if self.latest_version is None:
63+
self.latest_version = module_package
64+
continue
65+
66+
if module_package.created_at > self.latest_version.created_at:
67+
self.latest_version = module_package
68+
self.signal_versionsLoaded.emit("")
69+
except Exception as e:
70+
self.signal_versionsLoaded.emit(str(e))
71+
reply.deleteLater()
72+
73+
def start_load_development_versions(self):
5474
self.development_versions = []
5575

5676
# Create version for the main branch
@@ -65,22 +85,33 @@ def load_development_versions(self):
6585
)
6686
self.development_versions.append(mainVersion)
6787

68-
# Load versions from pull requests
69-
r = requests.get(
70-
f"https://api.github.com/repos/{self.organisation}/{self.repository}/pulls",
71-
headers=PluginUtils.get_github_headers(),
72-
)
73-
74-
# Raise an exception in case of http errors
75-
r.raise_for_status()
76-
77-
json_versions = r.json()
78-
for json_version in json_versions:
79-
module_package = ModulePackage(
80-
module=self,
81-
organisation=self.organisation,
82-
repository=self.repository,
83-
json_payload=json_version,
84-
type=ModulePackage.Type.PULL_REQUEST,
85-
)
86-
self.development_versions.append(module_package)
88+
url = QUrl(f"https://api.github.com/repos/{self.organisation}/{self.repository}/pulls")
89+
request = QNetworkRequest(url)
90+
headers = PluginUtils.get_github_headers()
91+
for key, value in headers.items():
92+
request.setRawHeader(QByteArray(key.encode()), QByteArray(value.encode()))
93+
reply = self.network_manager.get(request)
94+
reply.finished.connect(lambda: self._on_development_versions_reply(reply))
95+
96+
def _on_development_versions_reply(self, reply):
97+
if reply.error() is not QNetworkReply.NetworkError.NoError:
98+
self.signal_developmentVersionsLoaded.emit(reply.errorString())
99+
reply.deleteLater()
100+
return
101+
102+
try:
103+
data = reply.readAll().data()
104+
json_versions = json.loads(data.decode())
105+
for json_version in json_versions:
106+
module_package = ModulePackage(
107+
module=self,
108+
organisation=self.organisation,
109+
repository=self.repository,
110+
json_payload=json_version,
111+
type=ModulePackage.Type.PULL_REQUEST,
112+
)
113+
self.development_versions.append(module_package)
114+
self.signal_developmentVersionsLoaded.emit("")
115+
except Exception as e:
116+
self.signal_developmentVersionsLoaded.emit(str(e))
117+
reply.deleteLater()

oqtopus/core/module_version_loader.py

Lines changed: 0 additions & 42 deletions
This file was deleted.

0 commit comments

Comments
 (0)