Skip to content
Draft
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
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
strategy:
matrix:
python-version: ['3.9', '3.12']
aiida-core-version: ['2.8']
aiida-core-version: [2.9.0rc0]
fail-fast: false

runs-on: ubuntu-latest
Expand Down
18 changes: 3 additions & 15 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
###############################################################################
# 1) Global ARGs
###############################################################################
ARG FULL_STACK_VER=2026.1031
ARG FULL_STACK_VER=pr-580
ARG QE_VER=7.4
ARG QE_DIR=/opt/conda/envs/quantum-espresso-${QE_VER}
ARG HQ_VER=0.19.0
Expand Down Expand Up @@ -91,14 +91,9 @@ RUN set -ex; \
fi && \
tar xf hq.tar.gz -C /opt/conda/

# Install common dependencies such as pymatgen and pandas via conda,
# to avoid building them when installing via pip
# TODO: Remove this once it is part of the full-stack image.
RUN mamba install aiida-core.atomic_tools -y && \
mamba clean --all -f -y

# Install the app and its plugins into the user's local Python environment
RUN python -m pip install --user --no-cache-dir . ${MUON_PKG} aiidalab-qe-vibroscopy aiida-bader
RUN python -m pip install --user --no-cache-dir --no-build-isolation euphonic==1.3.2 && \
python -m pip install --user --no-cache-dir . ${MUON_PKG} aiidalab-qe-vibroscopy aiida-bader

ENV PSEUDO_FOLDER=/tmp/pseudo

Expand Down Expand Up @@ -167,13 +162,6 @@ RUN apt-get -q update && \
rm -rf /var/lib/apt/lists/*

USER ${NB_USER}
WORKDIR /tmp

# Install common dependencies such as pymatgen and pandas via conda,
# to avoid building them when installing via pip
# TODO: Remove this once it is part of the full-stack image.
RUN mamba install aiida-core.atomic_tools -y && \
mamba clean --all -f -y

RUN python -m pip install --no-user --no-cache-dir ${AIIDA_HQ_PKG}

Expand Down
6 changes: 3 additions & 3 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,15 @@ install_requires =
aiida-core~=2.5,<3
Jinja2~=3.0
aiida-quantumespresso~=4.12.1
aiidalab-widgets-base[optimade]~=2.5.0
aiidalab-widgets-base[optimade]~=3.0.0a3
aiida-pseudo~=1.4
filelock~=3.8
importlib-resources~=5.2
aiida-wannier90-workflows>=2.7.1,<3
anywidget==0.9.13
table_widget~=0.0.2
shakenbreak~=3.3.1 # uses hiphive, which we pin...
hiphive==1.3.1 # ...to avoid an spglib inconsistency
shakenbreak~=3.3.1
hiphive==1.3.1
plotly~=5.24
kaleido~=0.2.1
upf_tools~=0.1.9
Expand Down
20 changes: 13 additions & 7 deletions src/aiidalab_qe/app/static/styles/custom.css
Original file line number Diff line number Diff line change
Expand Up @@ -85,33 +85,39 @@ footer {
text-align: right;
}

.p-Accordion-child:has(.qe-app-step-ready) > .p-Collapse-header {
.jupyter-widget-Accordion-child:has(.qe-app-step-ready)
> .jupyter-widget-Collapse-header {
background-color: var(--color-ready);
}

.p-Accordion-child:has(.qe-app-step-configured) > .p-Collapse-header {
.jupyter-widget-Accordion-child:has(.qe-app-step-configured)
> .jupyter-widget-Collapse-header {
background-color: var(--color-ready);
filter: brightness(0.95);
-webkit-filter: brightness(0.95);
}

.p-Accordion-child:has(.qe-app-step-active) > .p-Collapse-header {
.jupyter-widget-Accordion-child:has(.qe-app-step-active)
> .jupyter-widget-Collapse-header {
background-color: var(--color-active);
}

.p-Accordion-child:has(.qe-app-step-success) > .p-Collapse-header {
.jupyter-widget-Accordion-child:has(.qe-app-step-success)
> .jupyter-widget-Collapse-header {
background-color: var(--color-success);
}

.p-Accordion-child:has(.qe-app-step-fail) > .p-Collapse-header {
.jupyter-widget-Accordion-child:has(.qe-app-step-fail)
> .jupyter-widget-Collapse-header {
background-color: var(--color-failed);
}

.p-Accordion-child:has(.qe-app-step-blocked) > .p-Collapse-header {
.jupyter-widget-Accordion-child:has(.qe-app-step-blocked)
> .jupyter-widget-Collapse-header {
background-color: var(--color-blocked);
}

.p-TabBar-tab {
.jupyter-widget-TabBar-tab {
min-width: fit-content !important;
}

Expand Down
2 changes: 1 addition & 1 deletion src/aiidalab_qe/app/utils/plugin_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -461,8 +461,8 @@ def _build_ui(self) -> None:

# Define the title with checkmark if installed
title_with_icon = f"{plugin_data.get('title')} {'✅' if installed else ''}"
self.accordion.set_title(i, title_with_icon)
self.accordion.children = [*self.accordion.children, box]
self.accordion.set_title(i, title_with_icon)

def display_ui(self) -> None:
"""
Expand Down
2 changes: 1 addition & 1 deletion tests/test_result.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ def test_workchainview(generate_qeapp_workchain):
model.process_uuid = workchain.node.uuid
viewer.render()
assert len(viewer.tabs.children) == 2
assert viewer.tabs._titles["0"] == "Structure" # type: ignore
assert viewer.tabs.titles[0] == "Structure"


def test_summary_report(data_regression, generate_qeapp_workchain):
Expand Down
6 changes: 6 additions & 0 deletions tests_integration/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@ def docker_compose_file(pytestconfig):
return str(Path(pytestconfig.rootdir) / "tests_integration" / "docker-compose.yml")


@pytest.fixture(scope="session")
def docker_setup():
"""Start compose without Docker's --wait; notebook_service handles readiness."""
return ["up --build -d"]


@pytest.fixture(scope="session")
def docker_compose(docker_services):
return docker_services._docker_compose
Expand Down
3 changes: 2 additions & 1 deletion tests_integration/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@ services:
image: ${REGISTRY:-}${QE_IMAGE:-aiidalab/qe}${TAG:-}
environment:
TZ: Europe/Zurich
DOCKER_STACKS_JUPYTER_CMD: notebook
SETUP_DEFAULT_AIIDA_PROFILE: 'true'
AIIDALAB_DEFAULT_APPS: ''
JUPYTER_TOKEN: ${JUPYTER_TOKEN}
ports:
- 0.0.0.0:${AIIDALAB_PORT:-8998}:8888
healthcheck:
disable: true
4 changes: 3 additions & 1 deletion tests_integration/test_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ def test_qe_app_select_silicon_and_confirm(

# Open structure selection step
element = WebDriverWait(driver, 60).until(
EC.presence_of_element_located((By.CLASS_NAME, "p-Accordion-child"))
EC.element_to_be_clickable(
(By.XPATH, "//span[contains(.,'Step 1: Select structure')]")
)
)
element.click()
# check that element has CSS class
Expand Down
Loading