mirror of
https://github.com/checktheroads/hyperglass
synced 2024-05-11 05:55:08 +00:00
fix app directory validation
This commit is contained in:
@@ -37,15 +37,13 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# Standard Library
|
# Standard Library
|
||||||
import os
|
|
||||||
import sys
|
import sys
|
||||||
import getpass
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
# Third Party
|
# Third Party
|
||||||
import uvloop
|
import uvloop
|
||||||
|
|
||||||
# Project
|
# Project
|
||||||
|
from hyperglass.util import set_app_path
|
||||||
from hyperglass.constants import METADATA
|
from hyperglass.constants import METADATA
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -59,39 +57,7 @@ else:
|
|||||||
_style = "plaintext"
|
_style = "plaintext"
|
||||||
stackprinter.set_excepthook(style=_style)
|
stackprinter.set_excepthook(style=_style)
|
||||||
|
|
||||||
config_path = None
|
set_app_path()
|
||||||
|
|
||||||
_CONFIG_PATHS = (Path.home() / "hyperglass", Path("/etc/hyperglass/"))
|
|
||||||
|
|
||||||
for path in _CONFIG_PATHS:
|
|
||||||
try:
|
|
||||||
if not isinstance(path, Path):
|
|
||||||
path = Path(path)
|
|
||||||
|
|
||||||
if path.exists():
|
|
||||||
tmp = path / "test.tmp"
|
|
||||||
tmp.touch()
|
|
||||||
if tmp.exists():
|
|
||||||
config_path = path
|
|
||||||
tmp.unlink()
|
|
||||||
break
|
|
||||||
except Exception:
|
|
||||||
config_path = None
|
|
||||||
|
|
||||||
if config_path is None:
|
|
||||||
raise RuntimeError(
|
|
||||||
"""
|
|
||||||
No configuration directories were determined to both exist and be readable
|
|
||||||
by hyperglass. hyperglass is running as user '{un}' (UID '{uid}'), and tried to access
|
|
||||||
the following directories:
|
|
||||||
{dir}""".format(
|
|
||||||
un=getpass.getuser(),
|
|
||||||
uid=os.getuid(),
|
|
||||||
dir="\n".join([" - " + str(p) for p in _CONFIG_PATHS]),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
os.environ["hyperglass_directory"] = str(config_path)
|
|
||||||
|
|
||||||
uvloop.install()
|
uvloop.install()
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ from aiofile import AIOFile
|
|||||||
from pydantic import ValidationError
|
from pydantic import ValidationError
|
||||||
|
|
||||||
# Project
|
# Project
|
||||||
from hyperglass.util import log, check_path
|
from hyperglass.util import log, check_path, set_app_path
|
||||||
from hyperglass.constants import (
|
from hyperglass.constants import (
|
||||||
CREDIT,
|
CREDIT,
|
||||||
LOG_LEVELS,
|
LOG_LEVELS,
|
||||||
@@ -31,6 +31,8 @@ from hyperglass.configuration.models import routers as _routers
|
|||||||
from hyperglass.configuration.models import commands as _commands
|
from hyperglass.configuration.models import commands as _commands
|
||||||
from hyperglass.configuration.markdown import get_markdown
|
from hyperglass.configuration.markdown import get_markdown
|
||||||
|
|
||||||
|
set_app_path()
|
||||||
|
|
||||||
CONFIG_PATH = Path(os.environ["hyperglass_directory"])
|
CONFIG_PATH = Path(os.environ["hyperglass_directory"])
|
||||||
log.info("Configuration directory: {d}", d=str(CONFIG_PATH))
|
log.info("Configuration directory: {d}", d=str(CONFIG_PATH))
|
||||||
|
|
||||||
|
|||||||
@@ -365,7 +365,7 @@ async def build_frontend( # noqa: C901
|
|||||||
Compare repository's static assets with build directory's
|
Compare repository's static assets with build directory's
|
||||||
assets. If the contents don't match, re-copy the files.
|
assets. If the contents don't match, re-copy the files.
|
||||||
"""
|
"""
|
||||||
asset_dir = Path(__file__).parent.parent / "assets"
|
asset_dir = Path(__file__).parent.parent / "images"
|
||||||
target_dir = app_path / "static" / "images"
|
target_dir = app_path / "static" / "images"
|
||||||
comparison = dircmp(asset_dir, target_dir, ignore=[".DS_Store"])
|
comparison = dircmp(asset_dir, target_dir, ignore=[".DS_Store"])
|
||||||
|
|
||||||
@@ -381,3 +381,43 @@ async def build_frontend( # noqa: C901
|
|||||||
raise RuntimeError(str(e))
|
raise RuntimeError(str(e))
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def set_app_path(required=False):
|
||||||
|
"""Find app directory and set value to environment variable."""
|
||||||
|
import os
|
||||||
|
from pathlib import Path
|
||||||
|
from getpass import getuser
|
||||||
|
|
||||||
|
matched_path = None
|
||||||
|
|
||||||
|
config_paths = (Path.home() / "hyperglass", Path("/etc/hyperglass/"))
|
||||||
|
|
||||||
|
for path in config_paths:
|
||||||
|
try:
|
||||||
|
if path.exists():
|
||||||
|
tmp = path / "test.tmp"
|
||||||
|
tmp.touch()
|
||||||
|
if tmp.exists():
|
||||||
|
matched_path = path
|
||||||
|
tmp.unlink()
|
||||||
|
break
|
||||||
|
except Exception:
|
||||||
|
matched_path = None
|
||||||
|
|
||||||
|
if required and matched_path is None:
|
||||||
|
# Only raise an error if required is True
|
||||||
|
raise RuntimeError(
|
||||||
|
"""
|
||||||
|
No configuration directories were determined to both exist and be readable
|
||||||
|
by hyperglass. hyperglass is running as user '{un}' (UID '{uid}'), and tried
|
||||||
|
to access the following directories:
|
||||||
|
{dir}""".format(
|
||||||
|
un=getuser(),
|
||||||
|
uid=os.getuid(),
|
||||||
|
dir="\n".join([" - " + str(p) for p in config_paths]),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
os.environ["hyperglass_directory"] = str(matched_path)
|
||||||
|
return True
|
||||||
|
|||||||
Reference in New Issue
Block a user