Compare commits

..

2 Commits

Author SHA1 Message Date
Gergő Jedlicska fbf19420fa Merge pull request #278 from specklesystems/gergo/structural_shape_type
fix(structural-properties): add missing ShapeType member
2023-05-30 18:11:42 +02:00
Gergő Jedlicska 44336addaf fix(structural-properties): add missing ShapeType member 2023-05-30 18:02:25 +02:00
2 changed files with 44 additions and 36 deletions
@@ -65,6 +65,7 @@ class ShapeType(int, Enum):
Box = 7
Catalogue = 8
Explicit = 9
Undefined = 10
class PropertyTypeSpring(int, Enum):
@@ -90,7 +91,9 @@ class Property(Base, speckle_type=STRUCTURAL_PROPERTY):
name: Optional[str] = None
class SectionProfile(Base, speckle_type=STRUCTURAL_PROPERTY + ".Profiles.SectionProfile"):
class SectionProfile(
Base, speckle_type=STRUCTURAL_PROPERTY + ".Profiles.SectionProfile"
):
name: Optional[str] = None
shapeType: Optional[ShapeType] = None
area: float = 0.0
+40 -35
View File
@@ -3,11 +3,9 @@ Provides uniform and consistent path helpers for `specklepy`
"""
import os
import sys
from importlib import import_module, invalidate_caches
from pathlib import Path
from typing import Optional
import pkg_resources
from importlib import import_module, invalidate_caches
_user_data_env_var = "SPECKLE_USERDATA_PATH"
@@ -57,7 +55,9 @@ def user_application_data_path() -> Path:
if sys.platform.startswith("win"):
app_data_path = os.getenv("APPDATA")
if not app_data_path:
raise Exception("Cannot get appdata path from environment.")
raise Exception(
"Cannot get appdata path from environment."
)
return Path(app_data_path)
else:
# try getting the standard XDG_DATA_HOME value
@@ -68,7 +68,9 @@ def user_application_data_path() -> Path:
else:
return _ensure_folder_exists(Path.home(), ".config")
except Exception as ex:
raise Exception("Failed to initialize user application data path.", ex)
raise Exception(
"Failed to initialize user application data path.", ex
)
def user_speckle_folder_path() -> Path:
@@ -88,16 +90,19 @@ def user_speckle_connector_installation_path(host_application: str) -> Path:
)
print("Starting module dependency installation")
print(sys.executable)
PYTHON_PATH = sys.executable
def connector_installation_path(host_application: str) -> Path:
connector_installation_path = user_speckle_connector_installation_path(
host_application
)
connector_installation_path = user_speckle_connector_installation_path(host_application)
connector_installation_path.mkdir(exist_ok=True, parents=True)
# set user modules path at beginning of paths for earlier hit
@@ -108,6 +113,7 @@ def connector_installation_path(host_application: str) -> Path:
return connector_installation_path
def is_pip_available() -> bool:
try:
import_module("pip") # noqa F401
@@ -126,15 +132,13 @@ def ensure_pip() -> None:
if completed_process.returncode == 0:
print("Successfully installed pip")
else:
raise Exception(
f"Failed to install pip, got {completed_process.returncode} return code"
)
raise Exception(f"Failed to install pip, got {completed_process.returncode} return code")
def get_requirements_path() -> Path:
# we assume that a requirements.txt exists next to the __init__.py file
path = Path(__file__).parent.with_name("requirements.txt")
assert path.exists(), f"Can't find requirements file at {path}"
path = Path(Path(__file__).parent, "requirements.txt")
assert path.exists()
return path
@@ -163,10 +167,7 @@ def install_requirements(host_application: str) -> None:
)
if completed_process.returncode != 0:
m = (
"Failed to install dependenices through pip, ",
f"got {completed_process.returncode} return code",
)
m = f"Failed to install dependenices through pip, got {completed_process.returncode} return code"
print(m)
raise Exception(m)
@@ -178,25 +179,29 @@ def install_dependencies(host_application: str) -> None:
install_requirements(host_application)
def _dependencies_installed() -> bool:
try:
pkg_resources.require(get_requirements_path().read_text())
return True
except (pkg_resources.DistributionNotFound, pkg_resources.VersionConflict):
return False
def _import_dependencies() -> None:
import_module("specklepy")
# the code above doesn't work for now, it fails on importing graphql-core
# despite that, the connector seams to be working as expected
# But it would be nice to make this solution work
# it would ensure that all dependencies are fully loaded
# requirements = get_requirements_path().read_text()
# reqs = [
# req.split(" ; ")[0].split("==")[0].split("[")[0].replace("-", "_")
# for req in requirements.split("\n")
# if req and not req.startswith(" ")
# ]
# for req in reqs:
# print(req)
# import_module("specklepy")
def ensure_dependencies(host_application: str) -> None:
if _dependencies_installed():
return
install_dependencies(host_application)
invalidate_caches()
if _dependencies_installed():
try:
install_dependencies(host_application)
invalidate_caches()
_import_dependencies()
print("Successfully found dependencies")
return
except ImportError:
raise Exception(f"Cannot automatically ensure Speckle dependencies. Please try restarting the host application {host_application}!")
raise Exception(
"Cannot automatically ensure Speckle dependencies. ",
f"Please try restarting the host application {host_application}!",
)