add option to run w/o installation

This commit is contained in:
Ondrej Samohel 2021-03-05 20:41:35 +01:00
parent c7ffc7ee4d
commit 3d1ec0278a
No known key found for this signature in database
GPG key ID: 02376E18990A97C6
7 changed files with 76 additions and 34 deletions

View file

@ -7,6 +7,7 @@ from Qt.QtCore import Signal # noqa
from .install_dialog import InstallDialog
from .bootstrap_repos import BootstrapRepos
from .version import __version__ as version
RESULT = 0
@ -18,18 +19,19 @@ def get_result(res: int):
RESULT = res
def run():
def open_dialog():
"""Show Igniter dialog."""
app = QtWidgets.QApplication(sys.argv)
d = InstallDialog()
d.finished.connect(get_result)
d.show()
app.exec_()
d.open()
app.exec()
return RESULT
__all__ = [
"InstallDialog",
"BootstrapRepos",
"run"
"open_dialog",
"version"
]

View file

@ -21,7 +21,6 @@ app = QtWidgets.QApplication(sys.argv)
d = InstallDialog()
d.finished.connect(get_result)
d.show()
app.exec_()
print(RESULT)
d.open()
app.exec()
sys.exit(RESULT)

View file

@ -337,6 +337,10 @@ class BootstrapRepos:
else:
version = self.get_version(repo_dir)
if not version:
self._print("Pype not found.", LOG_ERROR)
return
# create destination directory
if not self.data_dir.exists():
self.data_dir.mkdir(parents=True)

View file

@ -7,7 +7,7 @@ from Qt import QtCore, QtGui, QtWidgets # noqa
from Qt.QtGui import QValidator # noqa
from Qt.QtCore import QTimer # noqa
from .install_thread import InstallThread
from .install_thread import InstallThread, InstallResult
from .tools import (
validate_path_string,
validate_mongo_connection,
@ -107,11 +107,15 @@ class InstallDialog(QtWidgets.QDialog):
self.pype_path_label = QtWidgets.QLabel(
"""This is <b>Path to studio location</b> where Pype versions
are stored. It will be pre-filled if your mongoDB connection is
are stored. It will be pre-filled if your MongoDB connection is
already set and your studio defined this location.
<p>
Leave it empty if you want to use Pype version that come with this
installation.
Leave it empty if you want to install Pype version that comes with
this installation.
</p>
<p>
If you want to just try Pype without installing, hit the middle
button that states "run without installation".
</p>
"""
)
@ -465,6 +469,17 @@ class InstallDialog(QtWidgets.QDialog):
else:
self._mongo.set_valid()
if self._pype_run_ready:
self.done(3)
return
if self.path != "":
valid, reason = validate_path_string(self.path)
if not valid:
self.update_console(f"!!! {reason}", True)
return
self._disable_buttons()
self._install_thread = InstallThread(
self.install_result_callback_handler, self)
@ -475,9 +490,9 @@ class InstallDialog(QtWidgets.QDialog):
self._install_thread.set_mongo(self._mongo.get_mongo_url())
self._install_thread.start()
def install_result_callback_handler(self, status):
def install_result_callback_handler(self, result: InstallResult):
"""Change button behaviour based on installation outcome."""
self.update_console(f"--- {status}")
status = result.status
if status >= 0:
self.install_button.setText("Run installed Pype")
self._pype_run_ready = True
@ -607,7 +622,7 @@ class MongoValidator(QValidator):
QValidator.State.Invalid, "need mongodb schema", mongo)
return self._return_state(
QValidator.State.Intermediate, "", mongo)
QValidator.State.Intermediate, "", mongo)
class PathValidator(MongoValidator):

View file

@ -176,7 +176,7 @@ def validate_path_string(path: str) -> (bool, str):
if not path:
return False, "empty string"
if Path(path).exists():
if not Path(path).exists():
return False, "path doesn't exists"
if not Path(path).is_dir():
@ -251,6 +251,6 @@ def get_pype_path_from_db(url: str) -> Union[str, None]:
col = db.settings
global_settings = col.find_one(
{"type": "global_settings"}, {"data": 1}).get("data")
{"type": "global_settings"}, {"data": 1}).get("data", {})
return global_settings.get("pype_path", {}).get(platform.system().lower())

View file

@ -176,6 +176,7 @@ def run(arguments: list, env: dict = None) -> int:
interpreter.extend(arguments)
print("|".join(interpreter))
p = subprocess.Popen(interpreter, env=env)
p.wait()
print(f">>> done [{p.returncode}]")
@ -276,8 +277,12 @@ def _process_arguments() -> tuple:
# this is helper to run igniter before anything else
if "igniter" in sys.argv:
import igniter
igniter.run()
return_code = igniter.open_dialog()
# this is when we want to run Pype without installing anything.
# or we are ready to run.
if return_code not in [2, 3]:
sys.exit(return_code)
return use_version, use_staging
@ -372,29 +377,41 @@ def _find_frozen_pype(use_version: str = None,
pype_version = None
pype_versions = bootstrap.find_pype(include_zips=True,
staging=use_staging)
try:
# use latest one found (last in the list is latest)
pype_version = pype_versions[-1]
except IndexError:
# no pype version found, run Igniter and ask for them.
print('*** No Pype versions found.')
print("--- launching setup UI ...")
return_code = run(["igniter"])
if return_code != 0:
raise RuntimeError("igniter crashed.")
print('>>> Finding Pype again ...')
pype_versions = bootstrap.find_pype(staging=use_staging)
if not os.getenv("PYPE_TRYOUT"):
try:
# use latest one found (last in the list is latest)
pype_version = pype_versions[-1]
except IndexError:
print("!!! Something is wrong and we didn't found it again.")
pype_versions = None
# no pype version found, run Igniter and ask for them.
print('*** No Pype versions found.')
print("--- launching setup UI ...")
import igniter
return_code = igniter.open_dialog()
if return_code == 2:
os.environ["PYPE_TRYOUT"] = "1"
if return_code == 3:
# run Pype after installation
print('>>> Finding Pype again ...')
pype_versions = bootstrap.find_pype(staging=use_staging)
try:
pype_version = pype_versions[-1]
except IndexError:
print(("!!! Something is wrong and we didn't "
"found it again."))
pype_versions = None
sys.exit(1)
elif return_code != 2:
print(f" . finished ({return_code})")
sys.exit(return_code)
if not pype_versions:
# no Pype versions found anyway, lets use then the one
# shipped with frozen Pype
print("*** Still no luck finding Pype.")
print("*** We'll try to use the one coming with Pype installation.")
if not os.getenv("PYPE_TRYOUT"):
print("*** Still no luck finding Pype.")
print(("*** We'll try to use the one coming "
"with Pype installation."))
version_path = _bootstrap_from_code(use_version)
pype_version = PypeVersion(
version=BootstrapRepos.get_version(version_path),

View file

@ -95,11 +95,16 @@ libs_dir = build_dir / "lib"
to_delete = []
_print("Finding duplicates ...")
deps_items = list(deps_dir.iterdir())
for d in libs_dir.iterdir():
if (deps_dir / d.name) in deps_dir.iterdir():
if (deps_dir / d.name) in deps_items:
to_delete.append(d)
_print(f"found {d}", 3)
# add pype and igniter in libs too
to_delete.append(libs_dir / "pype")
to_delete.append(libs_dir / "igniter")
# delete duplicates
_print(f"Deleting {len(to_delete)} duplicates ...")
for d in to_delete: