Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 3 additions & 10 deletions src/common/core/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,13 @@
import os
import sys
import typing
from tempfile import gettempdir
from tempfile import mkdtemp

from django.core.management import (
execute_from_command_line as django_execute_from_command_line,
)

from common.core.cli import healthcheck
from common.core.constants import DEFAULT_PROMETHEUS_MULTIPROC_DIR_NAME
from common.core.utils import clear_directory, make_writable_directory

logger = logging.getLogger(__name__)

Expand All @@ -37,13 +35,8 @@ def ensure_cli_env() -> typing.Generator[None, None, None]:
# TODO @khvn26 Move logging setup to here

# Prometheus multiproc support
prom_dir = os.environ.setdefault(
"PROMETHEUS_MULTIPROC_DIR",
os.path.join(gettempdir(), DEFAULT_PROMETHEUS_MULTIPROC_DIR_NAME),
)
if os.path.exists(prom_dir):
clear_directory(prom_dir)
make_writable_directory(prom_dir)
if not os.environ.get("PROMETHEUS_MULTIPROC_DIR"):
os.environ["PROMETHEUS_MULTIPROC_DIR"] = mkdtemp(prefix="flagsmith-prometheus-")

# Currently we don't install Flagsmith modules as a package, so we need to add
# $CWD to the Python path to be able to import them
Expand Down
29 changes: 0 additions & 29 deletions src/common/core/utils.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import json
import logging
import os
import pathlib
import random
import shutil
from functools import lru_cache
from itertools import cycle
from typing import (
Expand Down Expand Up @@ -200,30 +198,3 @@ def using_database_replica(
return manager

return manager.db_manager(chosen_replica)


def clear_directory(directory_path: str) -> None:
"""
Safely clear a directory including all subdirectories and files.
"""
for p in pathlib.Path(directory_path).rglob("*"):
try:
# Ensure that the cleanup doesn't silently fail on
# files and subdirs created by other users.
p.chmod(0o777)
except (PermissionError, FileNotFoundError): # pragma: no cover
pass

shutil.rmtree(directory_path, ignore_errors=True)


def make_writable_directory(directory_path: str) -> None:
os.makedirs(directory_path, exist_ok=True)

try:
# While `mkdir` sets mode=0o777 by default, this can be affected by umask
# resulting in lesser permissions for other users. This step ensures the
# directory is writable for all users.
os.chmod(directory_path, 0o777)
except PermissionError: # pragma: no cover
pass
20 changes: 0 additions & 20 deletions tests/integration/core/test_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import django
import pytest
from django.core.management import ManagementUtility
from pyfakefs.fake_filesystem import FakeFilesystem
from pytest_httpserver import HTTPServer

from common.core.main import main
Expand Down Expand Up @@ -109,25 +108,6 @@ def test_main__healthcheck_http__server_invalid_response__runs_expected(
main(argv)


def test_main__prometheus_multiproc_remove_dir_on_start_default__expected(
monkeypatch: pytest.MonkeyPatch,
fs: FakeFilesystem,
) -> None:
# Given
monkeypatch.delenv("PROMETHEUS_MULTIPROC_DIR_KEEP", raising=False)

fs.create_file(
"/tmp/flagsmith-prometheus/some_metric_file.db",
create_missing_dirs=True,
)

# When
main(["flagsmith"])

# Then
assert not fs.exists("/tmp/flagsmith-prometheus/some_metric_file.db")


def test_main__no_django_configured__expected_0(
monkeypatch: pytest.MonkeyPatch,
) -> None:
Expand Down