diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 61efb887..bdee1d84 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,6 +19,8 @@ jobs: - name: Install Ubuntu Translation Libraries run: sudo apt install gettext - name: Test IATI + env: + BROWSER: FirefoxHeadless run: py.test -n 2 cove_iati --cov-append --cov - name: Migrate Database run: python manage.py migrate diff --git a/Dockerfile b/Dockerfile index 086fa62f..8af39a04 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,7 @@ RUN git config --global --add safe.directory /app # Build our own copy of lxml using Ubuntu's libxml2/libxslt # (don't use the prebuilt wheel) # https://opendataservices.plan.io/issues/36790 -RUN apt install libxml2-dev libxslt-dev +RUN apt-get --assume-yes install libxml2-dev libxslt-dev RUN pip install --no-binary lxml -r requirements.txt RUN python manage.py collectstatic --noinput diff --git a/cove_iati/templates/cove_iati/explore.html b/cove_iati/templates/cove_iati/explore.html index d387d1dc..60f49020 100644 --- a/cove_iati/templates/cove_iati/explore.html +++ b/cove_iati/templates/cove_iati/explore.html @@ -398,7 +398,7 @@
Generate a private d-preview site with the IATI xml. For preview purposes only. Data will not be uploaded to the main live d-portal website.
- + {% comment %}Translators: Paragraph that describes the application{% endcomment %}{% blocktrans %}After 7 days all uploaded data is deleted from our servers, and the results will no longer be available. Anyone using the link to this page after that will be shown a message that tells them the file has been removed.{% endblocktrans %}
@@ -423,7 +423,7 @@This function will merge together any indicators in the result block, that share the same title. No other data will be altered or changed. This function is designed for instances where multiple periods exist within the same result/indicator, but are not uniquely referenced in the IATI standard or CoVE spreadsheet.
{% if merge_indicator_output %}Output (xml) {{ merge_indicator_output_file_size|filesizeformat }}
- + {% else %} {% endif %} diff --git a/cove_iati/tests_functional.py b/cove_iati/tests_functional.py index 49751fc7..f5e41959 100644 --- a/cove_iati/tests_functional.py +++ b/cove_iati/tests_functional.py @@ -6,6 +6,7 @@ from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options +from selenium.webdriver.firefox.options import Options as FirefoxOptions BROWSER = os.environ.get('BROWSER', 'ChromeHeadless') CHROME_SNAP = bool(os.environ.get('CHROME_SNAP', False)) @@ -19,6 +20,10 @@ def browser(request): if CHROME_SNAP: options.add_argument("--remote-debugging-port=9222") browser = webdriver.Chrome(options=options) + elif BROWSER == 'FirefoxHeadless': + options = FirefoxOptions() + options.add_argument("-headless") + browser = webdriver.Firefox(options=options) else: browser = getattr(webdriver, BROWSER)() browser.implicitly_wait(3) diff --git a/requirements.txt b/requirements.txt index db930ac3..ca16e218 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,35 +8,35 @@ # via -r requirements.in -e git+https://github.com/OpenDataServices/iati-utils.git@704fa589ad2d3743d3928dcbeeeb06a5e73f8437#egg=iatiutils # via -r requirements.in -asgiref==3.8.1 +asgiref==3.11.0 # via django -attrs==24.2.0 +attrs==25.4.0 # via # cattrs # jsonschema # referencing # requests-cache -backports-datetime-fromisoformat==2.0.1 +backports-datetime-fromisoformat==2.0.3 # via flattentool behave==1.2.5 # via bdd-tester -bleach==6.1.0 +bleach==6.3.0 # via -r requirements.in -btrees==6.0 +btrees==6.3 # via zodb -cached-property==1.5.2 +cached-property==2.0.1 # via -r requirements.in -cattrs==23.2.3 +cattrs==25.3.0 # via requests-cache -certifi==2024.7.4 +certifi==2026.1.4 # via # requests # sentry-sdk -cffi==1.17.0 +cffi==2.0.0 # via persistent -charset-normalizer==3.3.2 +charset-normalizer==3.4.4 # via requests -click==8.1.7 +click==8.3.1 # via iatiutils commonmark==0.9.1 # via -r requirements.in @@ -44,50 +44,52 @@ dealer==2.1.0 # via -r requirements.in defusedxml==0.7.1 # via odfpy -django==4.2.15 +django==4.2.27 # via # -r requirements.in # django-bootstrap3 # django-debug-toolbar # libcoveweb -django-bootstrap3==24.2 +django-bootstrap3==26.1 # via # -r requirements.in # libcoveweb -django-debug-toolbar==4.4.6 +django-debug-toolbar==6.2.0 # via -r requirements.in -django-environ==0.11.2 +django-environ==0.12.0 # via -r requirements.in -et-xmlfile==1.1.0 +et-xmlfile==2.0.0 # via openpyxl -flattentool==0.26.0 +flattentool==0.27.0 # via # -r requirements.in # libcove # libcoveweb -gunicorn==23.0.0 +gunicorn==24.1.1 # via -r requirements.in -idna==3.7 - # via requests -ijson==3.3.0 +idna==3.11 + # via + # requests + # url-normalize +ijson==3.4.0.post0 # via flattentool -json-merge-patch==0.2 +json-merge-patch==0.3.0 # via -r requirements.in jsonref==1.1.0 # via # flattentool # libcove -jsonschema==4.23.0 +jsonschema==4.26.0 # via # -r requirements.in # libcove -jsonschema-specifications==2023.12.1 +jsonschema-specifications==2025.9.1 # via jsonschema libcove==0.32.1 # via # -r requirements.in # libcoveweb -libcoveweb==0.30.4 +libcoveweb==0.31.1 # via -r requirements.in lxml==4.9.4 # via @@ -95,7 +97,7 @@ lxml==4.9.4 # bdd-tester # flattentool # iatiutils -markupsafe==2.1.5 +markupsafe==3.0.3 # via werkzeug odfpy==1.4.1 # via flattentool @@ -103,34 +105,34 @@ openpyxl==3.1.2 # via # -r requirements.in # flattentool -packaging==24.1 +packaging==26.0 # via gunicorn parse==1.20.2 # via # behave # parse-type -parse-type==0.6.2 +parse-type==0.6.6 # via behave -persistent==6.0 +persistent==6.5 # via # btrees # zodb -platformdirs==4.2.2 +platformdirs==4.5.1 # via requests-cache -pycparser==2.22 +pycparser==3.0 # via cffi python-dateutil==2.9.0.post0 # via -r requirements.in -pytz==2024.1 +pytz==2025.2 # via flattentool rangedict==0.1.7 # via -r requirements.in -referencing==0.35.1 +referencing==0.37.0 # via # jsonschema # jsonschema-specifications # libcove -requests==2.32.3 +requests==2.32.5 # via # -r requirements.in # bdd-tester @@ -146,63 +148,65 @@ rfc3987==1.3.8 # via # -r requirements.in # libcove -rpds-py==0.20.0 +rpds-py==0.30.0 # via # jsonschema # referencing -schema==0.7.7 +schema==0.7.8 # via flattentool -sentry-sdk==2.13.0 +sentry-sdk==2.50.0 # via -r requirements.in -six==1.16.0 +six==1.17.0 # via # bdd-tester # behave - # bleach # parse-type # python-dateutil # rfc3339-validator - # url-normalize -sqlparse==0.5.1 +sqlparse==0.5.5 # via # django # django-debug-toolbar strict-rfc3339==0.7 # via -r requirements.in -transaction==4.0 +transaction==5.0 # via zodb -url-normalize==1.4.3 +typing-extensions==4.15.0 + # via + # cattrs + # referencing +url-normalize==2.2.1 # via requests-cache -urllib3==2.2.2 +urllib3==2.6.3 # via # requests # requests-cache # sentry-sdk webencodings==0.5.1 # via bleach -werkzeug==3.0.4 +werkzeug==3.1.5 # via libcoveweb -xmltodict==0.13.0 +xmltodict==1.0.2 # via # -r requirements.in # flattentool -zc-lockfile==3.0.post1 +zc-lockfile==4.0 # via zodb zc-zlibstorage==1.2.0 # via flattentool -zconfig==4.1 +zconfig==4.3 # via zodb -zipp==3.20.0 +zipp==3.23.0 # via -r requirements.in -zodb==6.0 +zodb==6.2 # via # flattentool # zc-zlibstorage -zodbpickle==4.0 +zodbpickle==4.3 # via zodb -zope-deferredimport==5.0 +zope-deferredimport==6.0 # via persistent -zope-interface==7.0.1 +zope-interface==8.2 # via # btrees # persistent @@ -210,7 +214,7 @@ zope-interface==7.0.1 # zc-zlibstorage # zodb # zope-proxy -zope-proxy==5.3 +zope-proxy==7.1 # via zope-deferredimport # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements_dev.txt b/requirements_dev.txt index bb427b63..e4f34eea 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -8,61 +8,64 @@ # via -r requirements.txt -e git+https://github.com/OpenDataServices/iati-utils.git@704fa589ad2d3743d3928dcbeeeb06a5e73f8437#egg=iatiutils # via -r requirements.txt -alabaster==0.7.16 +accessible-pygments==0.0.5 + # via furo +alabaster==1.0.0 # via sphinx -asgiref==3.8.1 +asgiref==3.11.0 # via # -r requirements.txt # django -attrs==24.2.0 +async-generator==1.10 + # via trio-typing +attrs==25.4.0 # via # -r requirements.txt # cattrs - # hypothesis # jsonschema # outcome # referencing # requests-cache # trio -babel==2.16.0 +babel==2.17.0 # via sphinx -backports-datetime-fromisoformat==2.0.1 +backports-datetime-fromisoformat==2.0.3 # via # -r requirements.txt # flattentool -beautifulsoup4==4.12.3 +beautifulsoup4==4.14.3 # via furo behave==1.2.5 # via # -r requirements.txt # bdd-tester -bleach==6.1.0 +bleach==6.3.0 # via -r requirements.txt -btrees==6.0 +btrees==6.3 # via # -r requirements.txt # zodb -cached-property==1.5.2 +cached-property==2.0.1 # via -r requirements.txt -cattrs==23.2.3 +cattrs==25.3.0 # via # -r requirements.txt # requests-cache -certifi==2024.7.4 +certifi==2026.1.4 # via # -r requirements.txt # requests # selenium # sentry-sdk -cffi==1.17.0 +cffi==2.0.0 # via # -r requirements.txt # persistent -charset-normalizer==3.3.2 +charset-normalizer==3.4.4 # via # -r requirements.txt # requests -click==8.1.7 +click==8.3.1 # via # -r requirements.txt # iatiutils @@ -70,11 +73,11 @@ commonmark==0.9.1 # via # -r requirements.txt # recommonmark -coverage[toml]==7.6.1 +coverage[toml]==7.13.2 # via # coveralls # pytest-cov -coveralls==4.0.1 +coveralls==4.0.2 # via -r requirements_dev.in dealer==2.1.0 # via -r requirements.txt @@ -82,74 +85,77 @@ defusedxml==0.7.1 # via # -r requirements.txt # odfpy -django==4.2.15 +django==4.2.27 # via # -r requirements.txt # django-bootstrap3 # django-debug-toolbar # libcoveweb -django-bootstrap3==24.2 +django-bootstrap3==26.1 # via # -r requirements.txt # libcoveweb -django-debug-toolbar==4.4.6 +django-debug-toolbar==6.2.0 # via -r requirements.txt -django-environ==0.11.2 +django-environ==0.12.0 # via -r requirements.txt docopt==0.6.2 # via coveralls -docutils==0.20.1 +docutils==0.22.4 # via # recommonmark # sphinx -et-xmlfile==1.1.0 +et-xmlfile==2.0.0 # via # -r requirements.txt # openpyxl -execnet==2.1.1 +execnet==2.1.2 # via pytest-xdist -flake8==7.1.1 +flake8==7.3.0 # via -r requirements_dev.in -flattentool==0.26.0 +flattentool==0.27.0 # via # -r requirements.txt # libcove # libcoveweb -furo==2024.8.6 +furo==2025.12.19 # via odsc-default-sphinx-theme -gunicorn==23.0.0 +gunicorn==24.1.1 # via -r requirements.txt -h11==0.14.0 +h11==0.16.0 # via wsproto -hypothesis==6.111.1 +hypothesis==6.151.2 # via -r requirements_dev.in -idna==3.7 +idna==3.11 # via # -r requirements.txt # requests # trio -ijson==3.3.0 + # url-normalize +ijson==3.4.0.post0 # via # -r requirements.txt # flattentool imagesize==1.4.1 # via sphinx -iniconfig==2.0.0 +importlib-metadata==8.7.1 + # via trio-typing +iniconfig==2.3.0 # via pytest -jinja2==3.1.4 +jinja2==3.1.6 # via sphinx -json-merge-patch==0.2 +json-merge-patch==0.3.0 # via -r requirements.txt jsonref==1.1.0 # via # -r requirements.txt # flattentool # libcove -jsonschema==4.23.0 +jsonschema==4.26.0 # via # -r requirements.txt # libcove -jsonschema-specifications==2023.12.1 +jsonschema-specifications==2025.9.1 # via # -r requirements.txt # jsonschema @@ -157,7 +163,7 @@ libcove==0.32.1 # via # -r requirements.txt # libcoveweb -libcoveweb==0.30.4 +libcoveweb==0.31.1 # via -r requirements.txt libsass==0.23.0 # via -r requirements_dev.in @@ -167,82 +173,91 @@ lxml==4.9.4 # bdd-tester # flattentool # iatiutils -markupsafe==2.1.5 +markupsafe==3.0.3 # via # -r requirements.txt # jinja2 # werkzeug mccabe==0.7.0 # via flake8 +mypy-extensions==1.1.0 + # via trio-typing odfpy==1.4.1 # via # -r requirements.txt # flattentool -odsc-default-sphinx-theme==0.0.1 +odsc-default-sphinx-theme==0.1.1 # via -r requirements_dev.in openpyxl==3.1.2 # via # -r requirements.txt # flattentool outcome==1.3.0.post0 - # via trio -packaging==24.1 + # via + # trio + # trio-websocket +packaging==26.0 # via # -r requirements.txt # gunicorn # pytest # sphinx + # trio-typing parse==1.20.2 # via # -r requirements.txt # behave # parse-type -parse-type==0.6.2 +parse-type==0.6.6 # via # -r requirements.txt # behave -persistent==6.0 +persistent==6.5 # via # -r requirements.txt # btrees # zodb -platformdirs==4.2.2 +platformdirs==4.5.1 # via # -r requirements.txt # requests-cache -pluggy==1.5.0 - # via pytest -pycodestyle==2.12.1 +pluggy==1.6.0 + # via + # pytest + # pytest-cov +pycodestyle==2.14.0 # via flake8 -pycparser==2.22 +pycparser==3.0 # via # -r requirements.txt # cffi -pyflakes==3.2.0 +pyflakes==3.4.0 # via flake8 -pygments==2.18.0 +pygments==2.19.2 # via + # accessible-pygments # furo + # pytest # sphinx pysocks==1.7.1 # via urllib3 -pytest==8.3.2 +pytest==9.0.2 # via # -r requirements_dev.in # pytest-cov # pytest-django # pytest-xdist -pytest-cov==5.0.0 +pytest-cov==7.0.0 # via -r requirements_dev.in -pytest-django==4.8.0 +pytest-django==4.11.1 # via -r requirements_dev.in -pytest-localserver==0.9.0 +pytest-localserver==0.10.0 # via -r requirements_dev.in -pytest-xdist==3.6.1 +pytest-xdist==3.8.0 # via -r requirements_dev.in python-dateutil==2.9.0.post0 # via -r requirements.txt -pytz==2024.1 +pytz==2025.2 # via # -r requirements.txt # flattentool @@ -250,13 +265,13 @@ rangedict==0.1.7 # via -r requirements.txt recommonmark==0.7.1 # via -r requirements_dev.in -referencing==0.35.1 +referencing==0.37.0 # via # -r requirements.txt # jsonschema # jsonschema-specifications # libcove -requests==2.32.3 +requests==2.32.5 # via # -r requirements.txt # bdd-tester @@ -276,41 +291,41 @@ rfc3987==1.3.8 # via # -r requirements.txt # libcove -rpds-py==0.20.0 +roman-numerals==4.1.0 + # via sphinx +rpds-py==0.30.0 # via # -r requirements.txt # jsonschema # referencing -schema==0.7.7 +schema==0.7.8 # via # -r requirements.txt # flattentool -selenium==4.23.1 +selenium==4.40.0 # via -r requirements_dev.in -sentry-sdk==2.13.0 +sentry-sdk==2.50.0 # via -r requirements.txt -six==1.16.0 +six==1.17.0 # via # -r requirements.txt # bdd-tester # behave - # bleach # parse-type # python-dateutil # rfc3339-validator # transifex-client - # url-normalize sniffio==1.3.1 # via trio -snowballstemmer==2.2.0 +snowballstemmer==3.0.1 # via sphinx sortedcontainers==2.4.0 # via # hypothesis # trio -soupsieve==2.6 +soupsieve==2.8.3 # via beautifulsoup4 -sphinx==7.4.7 +sphinx==9.0.4 # via # -r requirements_dev.in # furo @@ -330,32 +345,45 @@ sphinxcontrib-qthelp==2.0.0 # via sphinx sphinxcontrib-serializinghtml==2.0.0 # via sphinx -sqlparse==0.5.1 +sqlparse==0.5.5 # via # -r requirements.txt # django # django-debug-toolbar strict-rfc3339==0.7 # via -r requirements.txt -transaction==4.0 +transaction==5.0 # via # -r requirements.txt # zodb transifex-client==0.12.5 # via -r requirements_dev.in -trio==0.26.2 +trio==0.32.0 # via # selenium + # trio-typing # trio-websocket -trio-websocket==0.11.1 +trio-typing==0.10.0 + # via selenium +trio-websocket==0.12.2 # via selenium -typing-extensions==4.12.2 +types-certifi==2021.10.8.3 # via selenium -url-normalize==1.4.3 +types-urllib3==1.26.25.14 + # via selenium +typing-extensions==4.15.0 + # via + # -r requirements.txt + # beautifulsoup4 + # cattrs + # referencing + # selenium + # trio-typing +url-normalize==2.2.1 # via # -r requirements.txt # requests-cache -urllib3[socks]==2.2.2 +urllib3[socks]==2.6.3 # via # -r requirements.txt # requests @@ -367,20 +395,20 @@ webencodings==0.5.1 # via # -r requirements.txt # bleach -websocket-client==1.8.0 +websocket-client==1.9.0 # via selenium -werkzeug==3.0.4 +werkzeug==3.1.5 # via # -r requirements.txt # libcoveweb # pytest-localserver -wsproto==1.2.0 +wsproto==1.3.2 # via trio-websocket -xmltodict==0.13.0 +xmltodict==1.0.2 # via # -r requirements.txt # flattentool -zc-lockfile==3.0.post1 +zc-lockfile==4.0 # via # -r requirements.txt # zodb @@ -388,26 +416,28 @@ zc-zlibstorage==1.2.0 # via # -r requirements.txt # flattentool -zconfig==4.1 +zconfig==4.3 # via # -r requirements.txt # zodb -zipp==3.20.0 - # via -r requirements.txt -zodb==6.0 +zipp==3.23.0 + # via + # -r requirements.txt + # importlib-metadata +zodb==6.2 # via # -r requirements.txt # flattentool # zc-zlibstorage -zodbpickle==4.0 +zodbpickle==4.3 # via # -r requirements.txt # zodb -zope-deferredimport==5.0 +zope-deferredimport==6.0 # via # -r requirements.txt # persistent -zope-interface==7.0.1 +zope-interface==8.2 # via # -r requirements.txt # btrees @@ -416,7 +446,7 @@ zope-interface==7.0.1 # zc-zlibstorage # zodb # zope-proxy -zope-proxy==5.3 +zope-proxy==7.1 # via # -r requirements.txt # zope-deferredimport