mirror of
https://github.com/cryptoadvance/specter-desktop.git
synced 2026-08-13 12:33:29 +02:00
Bugfix: Release procedure fix (#1988)
* fix data-loading code for pyinstaller binary * more info at buildtime * more info * bugfix: str used wrong * black Co-authored-by: k9ert <kim@swanbitcoin.com> Co-authored-by: Manolis Mandrapilias <70536101+moneymanolis@users.noreply.github.com>
This commit is contained in:
parent
65c45281c7
commit
bf4413587a
3 changed files with 58 additions and 16 deletions
|
|
@ -10,7 +10,7 @@ from typing import Dict, List
|
|||
|
||||
from cryptoadvance.specter.config import ProductionConfig
|
||||
from cryptoadvance.specter.device import Device
|
||||
from cryptoadvance.specter.specter_error import SpecterError
|
||||
from cryptoadvance.specter.specter_error import SpecterError, SpecterInternalException
|
||||
from cryptoadvance.specter.user import User
|
||||
from cryptoadvance.specter.util.reflection import get_template_static_folder
|
||||
from flask import current_app as app
|
||||
|
|
@ -393,18 +393,25 @@ class ServiceManager:
|
|||
Path(Path(_get_module_from_class(clazz).__file__).parent, x)
|
||||
for clazz in get_subclasses_for_clazz(Service)
|
||||
]
|
||||
logger.debug(f"Initial arr:")
|
||||
logger.info(f"Initial arr:")
|
||||
for element in arr:
|
||||
logger.debug(element)
|
||||
logger.info(element)
|
||||
# /home/kim/src/specter-desktop/.buildenv/lib/python3.8/site-packages/cryptoadvance/specter/services/bitcoinreserve/templates
|
||||
# /home/kim/src/specter-desktop/.buildenv/lib/python3.8/site-packages/cryptoadvance/specter/services/swan/templates
|
||||
|
||||
# filter only directories
|
||||
arr = [path for path in arr if path.is_dir()]
|
||||
# Those pathes are absolute. Let's make them relative:
|
||||
arr = [Path(*path.parts[-6:]) for path in arr]
|
||||
arr = [cls._make_path_relative(path) for path in arr]
|
||||
|
||||
# result:
|
||||
# site-package/cryptoadvance/specterext/devhelp/templates
|
||||
logger.info(f"After making the pathes relative, example: {arr[0]}")
|
||||
|
||||
virtuelenv_path = os.path.relpath(os.environ["VIRTUAL_ENV"], ".")
|
||||
|
||||
logger.info(f"virtuelenv_path: {virtuelenv_path}")
|
||||
|
||||
if os.name == "nt":
|
||||
virtualenv_search_path = Path(virtuelenv_path, "Lib")
|
||||
else:
|
||||
|
|
@ -421,10 +428,13 @@ class ServiceManager:
|
|||
src_org_specterext_exts = search_dirs_in_path(
|
||||
virtualenv_search_path, return_without_extid=False
|
||||
)
|
||||
logger.info(f"src_org_specterext_exts[0]: {src_org_specterext_exts[0]}")
|
||||
|
||||
src_org_specterext_exts = [Path(path, x) for path in src_org_specterext_exts]
|
||||
|
||||
arr.extend(src_org_specterext_exts)
|
||||
|
||||
logger.debug(f"Returning example: {arr[0]}")
|
||||
return arr
|
||||
|
||||
@classmethod
|
||||
|
|
@ -489,3 +499,22 @@ class ServiceManager:
|
|||
except ModuleNotFoundError as e:
|
||||
pass
|
||||
return arr
|
||||
|
||||
@classmethod
|
||||
def _make_path_relative(cls, path: Path) -> Path:
|
||||
"""make out of something like '# /home/kim/src/specter-desktop/.buildenv/lib/python3.8/site-packages/cryptoadvance/specter/services/swan/templates
|
||||
somethink like: cryptoadvance/specter/services/swan/templates
|
||||
The first part might be completely random. The marker is something like .*env
|
||||
"""
|
||||
index = 0
|
||||
sep_index = 0
|
||||
for part in path.parts:
|
||||
if part.endswith("site-packages"):
|
||||
sep_index = index
|
||||
index += 1
|
||||
if sep_index == 0:
|
||||
raise SpecterInternalException(
|
||||
f"Path {path} does not contain an environment directory!"
|
||||
)
|
||||
|
||||
return Path(*path.parts[sep_index:index])
|
||||
|
|
|
|||
|
|
@ -175,7 +175,7 @@ def get_subclasses_for_clazz(clazz, package_dirs: List[str] = None):
|
|||
# skip known redherrings
|
||||
if module_name in ["callbacks"]:
|
||||
continue
|
||||
logger.debug(
|
||||
logger.info(
|
||||
f"Iterating on importer={importer} , module_name={module_name} is_pkg={is_pkg}"
|
||||
)
|
||||
if clazz.__name__ == "Service":
|
||||
|
|
@ -186,16 +186,16 @@ def get_subclasses_for_clazz(clazz, package_dirs: List[str] = None):
|
|||
continue
|
||||
try:
|
||||
module = import_module(f"{module_name}.service")
|
||||
logger.debug(f" Imported {module_name}.service")
|
||||
logger.info(f" Imported {module_name}.service")
|
||||
except ModuleNotFoundError as e:
|
||||
try:
|
||||
# Another style is orgname.specterext.extensionid, for that we have to guess the orgname:
|
||||
orgname = str(importer).split(os.path.sep)[-2]
|
||||
logger.debug(f"guessing orgname: {orgname}")
|
||||
orgname = importer.path.split(os.path.sep)[-2]
|
||||
logger.info(f"guessing orgname: {orgname}")
|
||||
module = import_module(
|
||||
f"{orgname}.specterext.{module_name}.service"
|
||||
)
|
||||
logger.debug(
|
||||
logger.info(
|
||||
f" Imported {orgname}.specterext.{module_name}.service"
|
||||
)
|
||||
except ModuleNotFoundError as e:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import logging
|
||||
import sys
|
||||
import pytest
|
||||
from pathlib import PosixPath, Path
|
||||
import os
|
||||
from unittest.mock import MagicMock
|
||||
from flask import Flask
|
||||
|
|
@ -36,22 +37,19 @@ def test_ServiceManager_get_service_x_dirs(caplog):
|
|||
)
|
||||
# however, in the real build, you get something like:
|
||||
# ../.buildenv/lib/python3.8/site-packages/cryptoadvance/specter/services/swan/templates
|
||||
assert f"{expected_folder}/cryptoadvance/specter/services/swan/templates" in [
|
||||
assert f"{expected_folder}/cryptoadvance/specterext/swan/templates" in [
|
||||
str(dir) for dir in dirs
|
||||
]
|
||||
for path in dirs:
|
||||
assert str(path).endswith("templates")
|
||||
|
||||
dirs = ServiceManager.get_service_x_dirs("static")
|
||||
assert f"{expected_folder}/cryptoadvance/specter/services/swan/static" in [
|
||||
assert f"{expected_folder}/cryptoadvance/specterext/swan/static" in [
|
||||
str(dir) for dir in dirs
|
||||
]
|
||||
assert (
|
||||
f"{expected_folder}/cryptoadvance/specter/services/bitcoinreserve/static"
|
||||
in [str(dir) for dir in dirs]
|
||||
)
|
||||
print(dirs)
|
||||
assert len(dirs) >= 2
|
||||
assert len(dirs) >= 2000
|
||||
assert False
|
||||
finally:
|
||||
os.chdir("../")
|
||||
|
||||
|
|
@ -64,6 +62,21 @@ def test_ServiceManager_get_service_packages(caplog):
|
|||
assert "cryptoadvance.specterext.electrum.devices.electrum" in packages
|
||||
|
||||
|
||||
def test_ServiceManager_make_path_relative(caplog):
|
||||
caplog.set_level(logging.DEBUG)
|
||||
arr = [
|
||||
Path(
|
||||
"/home/kim/src/specter-desktop/.buildenv/lib/python3.8/site-packages/cryptoadvance/specter/services/swan/templates"
|
||||
),
|
||||
Path("wurstbrot/something/.env/site-packages/the_rest"),
|
||||
]
|
||||
arr = [ServiceManager._make_path_relative(path) for path in arr]
|
||||
assert arr[0] == PosixPath(
|
||||
"site-packages/cryptoadvance/specter/services/swan/templates"
|
||||
)
|
||||
assert arr[1] == PosixPath("site-packages/the_rest")
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_specter():
|
||||
specter_mock = MagicMock()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue