Skip to content
Open
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
5 changes: 5 additions & 0 deletions client/lomas_client/scripts/run_notebook.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from lomas_server.administration.scripts.lomas_demo_setup import (
lomas_demo_setup,
)
from lomas_server.models.config import Config as ServerConfig
except ImportError:
pass

Expand Down Expand Up @@ -46,6 +47,10 @@ def run_notebook(
if importlib.util.find_spec("lomas_server") is None:
raise ImportError("lomas_server library not found, cannot run lomas_demo_setup.")

config = ServerConfig()
config.database.wipe()
config.database.set_bootstrap(config.bootstrap)

lomas_demo_setup()

nb = nbformat.read(notebook_file, as_version=4)
Expand Down
9 changes: 8 additions & 1 deletion client/lomas_client/tests/test_integrations.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,22 @@
del_all_dex_users,
)
from lomas_server.administration.scripts.lomas_demo_setup import lomas_demo_setup
from lomas_server.models.config import AdminConfig
from lomas_server.models.config import AdminConfig, Config

enable_features("contrib")


@pytest.fixture
def demo_setup():
config = Config()
config.database.set_bootstrap(config.bootstrap)

lomas_demo_setup()

yield

config.database.wipe()


@dataclass(frozen=True)
class Aria:
Expand Down
5 changes: 2 additions & 3 deletions devenv.nix
Original file line number Diff line number Diff line change
Expand Up @@ -186,13 +186,13 @@ in
coverage.module = {
processes.worker = {
cwd = lib.mkForce "${config.git.root}";
exec = lib.mkForce "exec coverage run --data-file=.coverage.worker -m lomas_server.worker";
exec = lib.mkForce "mkdir -p ./logs/ && exec coverage run --data-file=.coverage.worker -m lomas_server.worker &> ./logs/worker.log";
};

# override the UT script to generate coverage
scripts.ut = wrapScript {
exec = ''
exec pytest --cov-append --cov-report term-missing --cov --no-cov-on-fail --cov-config=${config.env.COVERAGE_RCFILE}
mkdir -p ./logs/ && exec pytest --cov-append --cov-report term-missing --cov --no-cov-on-fail --cov-config=${config.env.COVERAGE_RCFILE} &> ./logs/pytest.log
'';
};

Expand Down Expand Up @@ -257,7 +257,6 @@ in
# Lomas demo setup
LOMAS_ADMIN_server_url = "http://localhost:${toString config.lomas.port}"; # public lomas service url from dashboard
LOMAS_ADMIN_server_service = "http://localhost:${toString config.lomas.port}";
LOMAS_ADMIN_database_url = "/tmp/admin.db";
LOMAS_ADMIN_USER_YAML = user_yaml_path;
LOMAS_ADMIN_DATASET_YAML = dataset_yaml_path;
LOMAS_ADMIN_DEX_CONFIG__URL = "grpc://${config.lomas.dex.adminAddress}:${toString config.lomas.dex.adminPort}";
Expand Down
4 changes: 3 additions & 1 deletion devenv/lomas.nix
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,9 @@ in

{
processes.lomas-server = {
exec = "exec python uvicorn_serve.py";
exec = ''
rm -f ${config.env.LOMAS_SERVICE_admin_database_url} && exec python uvicorn_serve.py
'';
cwd = "${config.git.root}/server/lomas_server";
ready = {
http.get = {
Expand Down
19 changes: 10 additions & 9 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ bcrypt==5.0.0 # via lomas-server
beautifulsoup4==4.14.3 # via nbconvert
bleach==6.3.0 # via nbconvert
blinker==1.9.0 # via streamlit
boto3==1.43.11 # via lomas-server
botocore==1.43.11 # via boto3, s3transfer
boto3==1.43.12 # via lomas-server
botocore==1.43.12 # via boto3, s3transfer
cachetools==7.1.3 # via streamlit
certifi==2026.4.22 # via httpcore, httpx, requests
certifi==2026.5.20 # via httpcore, httpx, requests
cffi==2.0.0 # via argon2-cffi-bindings, cryptography
charset-normalizer==3.4.7 # via requests
chex==0.1.91 # via mbi
Expand All @@ -48,13 +48,14 @@ executing==2.2.1 # via stack-data
fastapi==0.136.1 # via lomas-core
fastapi-cli==0.0.24 # via fastapi
fastjsonschema==2.21.2 # via nbformat
filelock==3.29.0 # via lomas-server
fonttools==4.63.0 # via matplotlib
fqdn==1.5.1 # via jsonschema
gitdb==4.0.12 # via gitpython
gitpython==3.1.50 # via streamlit
googleapis-common-protos==1.75.0 # via opentelemetry-exporter-otlp-proto-grpc, opentelemetry-exporter-otlp-proto-http
graphviz==0.21 # via smartnoise-sql
greenlet==3.5.0 # via sqlalchemy
greenlet==3.5.1 # via sqlalchemy
grpcio==1.80.0 # via opentelemetry-exporter-otlp-proto-grpc
h11==0.16.0 # via httpcore, uvicorn
html5rdf==1.2.1 # via rdflib
Expand All @@ -70,8 +71,8 @@ ipython-pygments-lexers==1.1.1 # via ipython
ipywidgets==8.1.8 # via jupyter
isoduration==20.11.0 # via jsonschema
itsdangerous==2.2.0 # via streamlit
jax==0.10.0 # via chex, mbi, optax
jaxlib==0.10.0 # via chex, jax, mbi, optax
jax==0.10.1 # via chex, mbi, optax
jaxlib==0.10.1 # via chex, jax, mbi, optax
jedi==0.20.0 # via ipython
jinja2==3.1.6 # via altair, fastapi, jupyter-server, jupyterlab, jupyterlab-server, myst-parser, nbconvert, nbsphinx, pydeck, sphinx
jmespath==1.1.0 # via boto3, botocore
Expand Down Expand Up @@ -192,10 +193,10 @@ rfc3339-validator==0.1.4 # via jsonschema, jupyter-events
rfc3986-validator==0.1.1 # via jsonschema, jupyter-events
rfc3987-syntax==1.1.0 # via jsonschema
rich==15.0.0 # via rich-toolkit, typer
rich-toolkit==0.19.9 # via fastapi-cli
rich-toolkit==0.19.10 # via fastapi-cli
roman-numerals==4.1.0 # via sphinx
rpds-py==0.30.0 # via jsonschema, referencing
ruff==0.15.13 # via lomas (pyproject.toml)
ruff==0.15.14 # via lomas (pyproject.toml)
s3transfer==0.17.0 # via boto3
scikit-learn==1.8.0 # via diffprivlib-logger, opendp
scipy==1.17.1 # via diffprivlib-logger, jax, jaxlib, mbi, scikit-learn
Expand Down Expand Up @@ -247,5 +248,5 @@ webencodings==0.5.1 # via bleach, tinycss2
websocket-client==1.9.0 # via jupyter-server
websockets==16.0 # via streamlit, uvicorn
widgetsnbextension==4.0.15 # via ipywidgets
wrapt==2.1.2 # via deprecated, opentelemetry-instrumentation, opentelemetry-instrumentation-aio-pika
wrapt==2.2.0 # via deprecated, opentelemetry-instrumentation, opentelemetry-instrumentation-aio-pika
yarl==1.24.2 # via aio-pika, aiormq
30 changes: 30 additions & 0 deletions server/lomas_server/admin_database/admin_database.py
Original file line number Diff line number Diff line change
Expand Up @@ -433,3 +433,33 @@ def save_query(self, user_name: str, query: LomasRequestModel, response: QueryRe
@abstractmethod
def wipe(self) -> None:
"""Wipe the entire Database."""

@abstractmethod
def set_bootstrap(self, bootstrap: str) -> None:
"""Sets the bootstrap value.

Also sets the bootstrap disabled value to False.

Args:
bootstrap (str): Bootstrap creds to set.
"""

@abstractmethod
def get_bootstrap(self) -> str | None:
"""Returns the bootstrap credential value or None if it has not been set.

Returns:
str | None: The bootstrap credential value or None if it has not been set.
"""

@abstractmethod
def set_bootstrap_disabled(self, bootstrap_disabled: bool = True) -> None:
"""Sets the bootstrap disabled value."""

@abstractmethod
def get_bootstrap_disabled(self) -> bool:
"""Get the bootstrap disabled value.

Returns:
bool: The bootstrap disabled value. False by default if not set in the DB.
"""
8 changes: 8 additions & 0 deletions server/lomas_server/admin_database/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,14 @@ class TopDBKey(StrEnum):
USERS = "users"
DATASETS = "datasets"
METADATA = "metadata"
MISC_KEYS = "misc"


class MiscDBKeys(StrEnum):
"""Key for selecting sub elements in misc collection."""

BOOTSTRAP_DISABLED = "bootstrap_disabled"
BOOTSTRAP = "bootstrap"


class BudgetDBKey(StrEnum):
Expand Down
Loading
Loading